1616
|
1 local Luan = require "luan:Luan.luan"
|
|
2 local error = Luan.error
|
|
3 local set_metatable = Luan.set_metatable or error()
|
1912
|
4 local ipairs = Luan.ipairs or error()
|
1863
|
5 local Utils = require "luan:swing/Utils.luan"
|
|
6 local fail = Utils.fail or error()
|
|
7 local make_metatable = Utils.make_metatable or error()
|
1887
|
8 local delete = Utils.delete or error()
|
1885
|
9 local check_empty = Utils.check_empty or error()
|
1863
|
10 local Text_component = require("luan:swing/Text_component.luan")
|
|
11 local super__index = Text_component.__index or error()
|
|
12 local super__new_index = Text_component.__new_index or error()
|
1885
|
13 local super_construct = Text_component.construct or error()
|
1616
|
14 require "java"
|
1874
|
15 local TextAreaLuan = require "java:luan.modules.swing.TextAreaLuan"
|
1893
|
16 local Logging = require "luan:logging/Logging.luan"
|
|
17 local logger = Logging.logger "swing/Text_area"
|
1616
|
18
|
|
19
|
|
20 local Text_area = {}
|
|
21
|
1863
|
22 function Text_area.__index(text_area,key)
|
|
23 local rtn = super__index(text_area,key)
|
|
24 if rtn ~= fail then return rtn end
|
1616
|
25 if key == "line_wrap" then
|
|
26 return text_area.java.getLineWrap()
|
|
27 end
|
|
28 if key == "wrap_style_word" then
|
|
29 return text_area.java.getWrapStyleWord()
|
|
30 end
|
|
31 if key == "tab_size" then
|
|
32 return text_area.java.getTabSize()
|
|
33 end
|
1862
|
34 if key == "rows" then
|
|
35 return text_area.java.getRows()
|
|
36 end
|
|
37 if key == "columns" then
|
|
38 return text_area.java.getColumns()
|
|
39 end
|
|
40 if key == "line_count" then
|
|
41 return text_area.java.getLineCount()
|
|
42 end
|
1863
|
43 return fail
|
1616
|
44 end
|
|
45
|
1863
|
46 function Text_area.__new_index(text_area,key,value)
|
|
47 local rtn = super__new_index(text_area,key,value)
|
|
48 if rtn ~= fail then return end
|
1616
|
49 if key == "line_wrap" then
|
|
50 text_area.java.setLineWrap(value)
|
|
51 return
|
|
52 end
|
|
53 if key == "wrap_style_word" then
|
|
54 text_area.java.setWrapStyleWord(value)
|
|
55 return
|
|
56 end
|
|
57 if key == "tab_size" then
|
|
58 text_area.java.setTabSize(value)
|
|
59 return
|
|
60 end
|
1862
|
61 if key == "rows" then
|
|
62 text_area.java.setRows(value)
|
|
63 return
|
|
64 end
|
|
65 if key == "columns" then
|
|
66 text_area.java.setColumns(value)
|
1616
|
67 return
|
|
68 end
|
1863
|
69 return fail
|
1616
|
70 end
|
|
71
|
1863
|
72 local mt = make_metatable(Text_area)
|
|
73
|
1885
|
74 function Text_area.new(props)
|
|
75 local jtext_area = TextAreaLuan.new()
|
|
76 local text_area = { java = jtext_area }
|
|
77 super_construct(text_area,props)
|
1887
|
78 local rows = delete(props,"rows")
|
|
79 if rows~=nil then jtext_area.setRows(rows) end
|
|
80 local columns = delete(props,"columns")
|
|
81 if columns~=nil then jtext_area.setColumns(columns) end
|
|
82 local wrap_style_word = delete(props,"wrap_style_word")
|
|
83 if wrap_style_word~=nil then jtext_area.setWrapStyleWord(wrap_style_word) end
|
|
84 local line_wrap = delete(props,"line_wrap")
|
|
85 if line_wrap~=nil then jtext_area.setLineWrap(line_wrap) end
|
|
86 local tab_size = delete(props,"tab_size")
|
|
87 if tab_size~=nil then jtext_area.setTabSize(tab_size) end
|
1885
|
88 check_empty(props)
|
1877
|
89 text_area.show_whitespace = jtext_area.showWhitespace
|
1878
|
90 function text_area.get_line_from_position(pos)
|
|
91 return jtext_area.getLineOfOffset(pos-1) + 1
|
|
92 end
|
|
93 function text_area.get_line_start_position(line)
|
|
94 return jtext_area.getLineStartOffset(line-1) + 1
|
|
95 end
|
|
96 function text_area.get_line_end_position(line)
|
|
97 return jtext_area.getLineEndOffset(line-1) + 1
|
|
98 end
|
|
99 function text_area.insert(text,pos)
|
|
100 return jtext_area.insert(text,pos-1)
|
|
101 end
|
|
102 function text_area.replace(start_pos,length,text)
|
1909
|
103 text_area._document.run_in_transaction(function()
|
|
104 return jtext_area.getDocument().replace(start_pos-1,length,text)
|
|
105 end)
|
1878
|
106 end
|
1912
|
107 function text_area.set_hightlights(hightlights)
|
|
108 local list = {}
|
|
109 for _, hightlight in ipairs(hightlights) do
|
|
110 list[#list+1] = TextAreaLuan.Range.new(hightlight.start-1,hightlight.end_-1)
|
|
111 end
|
|
112 jtext_area.setHightlights(list)
|
|
113 end
|
|
114 text_area.clear_hightlights = jtext_area.clearHighlights
|
1616
|
115 set_metatable(text_area,mt)
|
|
116 return text_area
|
|
117 end
|
|
118
|
|
119 return Text_area
|