annotate src/luan/modules/swing/Text_area.luan @ 1912:9fa922236aff

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