annotate src/luan/modules/swing/Frame.luan @ 1937:d44659709959

swing
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 15 May 2025 19:12:05 -0600
parents 3fc4b465e9b0
children 60e1df60503c
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()
1937
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
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: 1865
diff changeset
8 local delete = Utils.delete or error()
Franklin Schmidt <fschmidt@gmail.com>
parents: 1865
diff changeset
9 local check_empty = Utils.check_empty or error()
1937
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
10 local to_dimension = Utils.to_dimension or error()
1914
Franklin Schmidt <fschmidt@gmail.com>
parents: 1893
diff changeset
11 local Awt_container = require "luan:swing/Awt_container.luan"
Franklin Schmidt <fschmidt@gmail.com>
parents: 1893
diff changeset
12 local super__index = Awt_container.__index or error()
Franklin Schmidt <fschmidt@gmail.com>
parents: 1893
diff changeset
13 local super__new_index = Awt_container.__new_index or error()
Franklin Schmidt <fschmidt@gmail.com>
parents: 1893
diff changeset
14 local super_construct = Awt_container.construct or error()
1616
915cb538e2a3 start swing
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
15 require "java"
915cb538e2a3 start swing
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
16 local JFrame = require "java:javax.swing.JFrame"
1862
d59d4ef5ca46 swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1616
diff changeset
17 local SwingLuan = require "java:luan.modules.swing.SwingLuan"
d59d4ef5ca46 swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1616
diff changeset
18 local newCloseListener = SwingLuan.newCloseListener
1937
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
19 local newWindowFocusListener = SwingLuan.newWindowFocusListener
1863
928e73bfe7ea swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1862
diff changeset
20 local Logging = require "luan:logging/Logging.luan"
928e73bfe7ea swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1862
diff changeset
21 local logger = Logging.logger "swing/Frame"
928e73bfe7ea swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1862
diff changeset
22
1616
915cb538e2a3 start swing
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
23
915cb538e2a3 start swing
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
24
915cb538e2a3 start swing
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
25 local Frame = {}
915cb538e2a3 start swing
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
26
1863
928e73bfe7ea swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1862
diff changeset
27 function Frame.__index(frame,key)
1914
Franklin Schmidt <fschmidt@gmail.com>
parents: 1893
diff changeset
28 local rtn = super__index(frame,key)
Franklin Schmidt <fschmidt@gmail.com>
parents: 1893
diff changeset
29 if rtn ~= fail then return rtn end
1937
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
30 local jframe = frame.java
1862
d59d4ef5ca46 swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1616
diff changeset
31 if key == "title" then
1937
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
32 return jframe.getTitle()
1862
d59d4ef5ca46 swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1616
diff changeset
33 end
1863
928e73bfe7ea swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1862
diff changeset
34 return fail
1616
915cb538e2a3 start swing
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
35 end
915cb538e2a3 start swing
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
36
1863
928e73bfe7ea swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1862
diff changeset
37 function Frame.__new_index(frame,key,value)
1914
Franklin Schmidt <fschmidt@gmail.com>
parents: 1893
diff changeset
38 local rtn = super__new_index(frame,key,value)
Franklin Schmidt <fschmidt@gmail.com>
parents: 1893
diff changeset
39 if rtn ~= fail then return end
1937
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
40 local jframe = frame.java
1616
915cb538e2a3 start swing
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
41 if key == "visible" then
1937
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
42 jframe.setVisible(value)
1616
915cb538e2a3 start swing
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
43 return
915cb538e2a3 start swing
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
44 end
1862
d59d4ef5ca46 swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1616
diff changeset
45 if key == "title" then
1937
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
46 jframe.setTitle(value)
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
47 return
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
48 end
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
49 if key == "size" then
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
50 jframe.setSize(to_dimension(value))
1862
d59d4ef5ca46 swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1616
diff changeset
51 return
d59d4ef5ca46 swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1616
diff changeset
52 end
1863
928e73bfe7ea swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1862
diff changeset
53 return fail
928e73bfe7ea swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1862
diff changeset
54 end
928e73bfe7ea swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1862
diff changeset
55
928e73bfe7ea swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1862
diff changeset
56 local mt = make_metatable(Frame)
928e73bfe7ea swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1862
diff changeset
57
1937
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
58 local function new2(frame,props)
1914
Franklin Schmidt <fschmidt@gmail.com>
parents: 1893
diff changeset
59 super_construct(frame,props)
1937
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
60 local jframe = frame.java
1887
Franklin Schmidt <fschmidt@gmail.com>
parents: 1865
diff changeset
61 local content_pane = delete(props,"content_pane")
Franklin Schmidt <fschmidt@gmail.com>
parents: 1865
diff changeset
62 if content_pane~=nil then jframe.setContentPane(content_pane.java) end
Franklin Schmidt <fschmidt@gmail.com>
parents: 1865
diff changeset
63 check_empty(props)
1862
d59d4ef5ca46 swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1616
diff changeset
64 function frame.add_close_listener(close_listener)
d59d4ef5ca46 swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1616
diff changeset
65 jframe.addWindowListener(newCloseListener(close_listener))
1616
915cb538e2a3 start swing
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
66 end
1937
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
67 function frame.add_window_focus_listener(window_focus_listener)
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
68 jframe.addWindowFocusListener(newWindowFocusListener(window_focus_listener))
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
69 end
1862
d59d4ef5ca46 swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1616
diff changeset
70 function frame.set_menu_bar(menu_bar)
d59d4ef5ca46 swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1616
diff changeset
71 jframe.setJMenuBar(menu_bar.java)
d59d4ef5ca46 swing work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1616
diff changeset
72 end
1616
915cb538e2a3 start swing
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
73 frame.pack = jframe.pack
915cb538e2a3 start swing
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
74 set_metatable(frame,mt)
915cb538e2a3 start swing
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
75 return frame
915cb538e2a3 start swing
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
76 end
915cb538e2a3 start swing
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
77
1937
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
78 function Frame.new(props)
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
79 local jframe = JFrame.new()
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
80 jframe.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
81 return new2( {java=jframe}, props )
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
82 end
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
83
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
84 function Frame.get_all_frames()
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
85 local all = {}
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
86 local no_props = {}
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
87 for _, jframe in ipairs{JFrame.getFrames()} do
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
88 all[#all+1] = new2( {java=jframe}, no_props )
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
89 end
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
90 return all
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
91 end
Franklin Schmidt <fschmidt@gmail.com>
parents: 1916
diff changeset
92
1616
915cb538e2a3 start swing
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
93 return Frame