1616
|
1 local Luan = require "luan:Luan.luan"
|
|
2 local error = Luan.error
|
|
3 local set_metatable = Luan.set_metatable or error()
|
1863
|
4 local Io = require "luan:Io.luan"
|
|
5 local new_file = Io.schemes.file or error()
|
|
6 local Utils = require "luan:swing/Utils.luan"
|
|
7 local fail = Utils.fail or error()
|
|
8 local make_metatable = Utils.make_metatable or error()
|
1887
|
9 local delete = Utils.delete or error()
|
|
10 local check_empty = Utils.check_empty or error()
|
|
11 local check_not_nil = Utils.check_not_nil or error()
|
1893
|
12 local to_dimension = Utils.to_dimension or error()
|
1616
|
13 require "java"
|
|
14 local JFrame = require "java:javax.swing.JFrame"
|
1863
|
15 local FileDialog = require "java:java.awt.FileDialog"
|
1862
|
16 local SwingLuan = require "java:luan.modules.swing.SwingLuan"
|
|
17 local newCloseListener = SwingLuan.newCloseListener
|
1863
|
18 local Logging = require "luan:logging/Logging.luan"
|
|
19 local logger = Logging.logger "swing/Frame"
|
|
20
|
1616
|
21
|
|
22
|
|
23 local Frame = {}
|
|
24
|
1863
|
25 function Frame.__index(frame,key)
|
1616
|
26 if key == "visible" then
|
|
27 return frame.java.isVisible()
|
|
28 end
|
1862
|
29 if key == "title" then
|
|
30 return frame.java.getTitle()
|
|
31 end
|
1863
|
32 return fail
|
1616
|
33 end
|
|
34
|
1863
|
35 function Frame.__new_index(frame,key,value)
|
1616
|
36 if key == "visible" then
|
|
37 frame.java.setVisible(value)
|
|
38 return
|
|
39 end
|
1862
|
40 if key == "title" then
|
|
41 frame.java.setTitle(value)
|
|
42 return
|
|
43 end
|
1863
|
44 return fail
|
|
45 end
|
|
46
|
|
47 local mt = make_metatable(Frame)
|
|
48
|
|
49 local File_chooser = {}
|
|
50
|
|
51 function File_chooser.__index(file_chooser,key)
|
|
52 if key == "file" then
|
|
53 local file_dialog = file_chooser.java
|
|
54 local file = file_dialog.getFile()
|
|
55 if file == nil then
|
|
56 return nil
|
|
57 end
|
|
58 local dir = file_dialog.getDirectory()
|
|
59 return file and new_file(dir..file)
|
|
60 end
|
|
61 if key == "directory" then
|
|
62 local dir = file_chooser.java.getDirectory()
|
|
63 return new_file(dir)
|
|
64 end
|
|
65 if key == "visible" then
|
|
66 return file_chooser.java.isVisible()
|
|
67 end
|
|
68 return fail
|
|
69 end
|
|
70
|
|
71 function File_chooser.__new_index(file_chooser,key,value)
|
|
72 if key == "file" then
|
|
73 file_chooser.java.setFile(value.to_string())
|
|
74 return
|
|
75 end
|
|
76 if key == "directory" then
|
|
77 file_chooser.java.setDirectory(value.to_string())
|
|
78 return
|
|
79 end
|
|
80 if key == "visible" then
|
|
81 file_chooser.java.setVisible(value)
|
|
82 return
|
|
83 end
|
|
84 return fail
|
|
85 end
|
|
86
|
|
87 local mt_fc = make_metatable(File_chooser)
|
|
88
|
|
89 local function new_file_chooser(jframe)
|
|
90 local file_dialog = FileDialog.new(jframe)
|
|
91 local file_chooser = { java = file_dialog }
|
|
92 set_metatable(file_chooser,mt_fc)
|
|
93 return file_chooser
|
1616
|
94 end
|
|
95
|
1887
|
96 function Frame.new(props)
|
|
97 check_not_nil(props)
|
1862
|
98 local jframe = JFrame.new()
|
1887
|
99 jframe.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
1616
|
100 local frame = { java = jframe }
|
1887
|
101 local content_pane = delete(props,"content_pane")
|
|
102 if content_pane~=nil then jframe.setContentPane(content_pane.java) end
|
1893
|
103 local preferred_size = delete(props,"preferred_size")
|
|
104 if preferred_size~=nil then jframe.setPreferredSize(to_dimension(preferred_size)) end
|
1887
|
105 check_empty(props)
|
1862
|
106 function frame.add_close_listener(close_listener)
|
|
107 jframe.addWindowListener(newCloseListener(close_listener))
|
1616
|
108 end
|
|
109 function frame.add(component)
|
|
110 jframe.add(component.java)
|
|
111 end
|
1862
|
112 function frame.set_menu_bar(menu_bar)
|
|
113 jframe.setJMenuBar(menu_bar.java)
|
|
114 end
|
1863
|
115 local file_chooser
|
|
116 local function get_file_chooser(mode)
|
|
117 file_chooser = file_chooser or new_file_chooser(jframe)
|
|
118 file_chooser.java.setMode(mode)
|
|
119 return file_chooser
|
|
120 end
|
|
121 function frame.file_chooser_load()
|
|
122 return get_file_chooser(FileDialog.LOAD)
|
|
123 end
|
1865
|
124 function frame.file_chooser_save()
|
|
125 return get_file_chooser(FileDialog.SAVE)
|
|
126 end
|
1616
|
127 frame.pack = jframe.pack
|
|
128 set_metatable(frame,mt)
|
|
129 return frame
|
|
130 end
|
|
131
|
|
132 return Frame
|