Mercurial Hosting > luan
changeset 1937:d44659709959
swing
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 15 May 2025 19:12:05 -0600 |
parents | d79482fa202f |
children | bd00b36380d9 |
files | src/luan/modules/swing/Frame.luan src/luan/modules/swing/SwingLuan.java |
diffstat | 2 files changed, 44 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/luan/modules/swing/Frame.luan Thu May 15 16:23:14 2025 -0600 +++ b/src/luan/modules/swing/Frame.luan Thu May 15 19:12:05 2025 -0600 @@ -1,11 +1,13 @@ local Luan = require "luan:Luan.luan" local error = Luan.error local set_metatable = Luan.set_metatable or error() +local ipairs = Luan.ipairs or error() local Utils = require "luan:swing/Utils.luan" local fail = Utils.fail or error() local make_metatable = Utils.make_metatable or error() local delete = Utils.delete or error() local check_empty = Utils.check_empty or error() +local to_dimension = Utils.to_dimension or error() local Awt_container = require "luan:swing/Awt_container.luan" local super__index = Awt_container.__index or error() local super__new_index = Awt_container.__new_index or error() @@ -14,6 +16,7 @@ local JFrame = require "java:javax.swing.JFrame" local SwingLuan = require "java:luan.modules.swing.SwingLuan" local newCloseListener = SwingLuan.newCloseListener +local newWindowFocusListener = SwingLuan.newWindowFocusListener local Logging = require "luan:logging/Logging.luan" local logger = Logging.logger "swing/Frame" @@ -24,8 +27,9 @@ function Frame.__index(frame,key) local rtn = super__index(frame,key) if rtn ~= fail then return rtn end + local jframe = frame.java if key == "title" then - return frame.java.getTitle() + return jframe.getTitle() end return fail end @@ -33,12 +37,17 @@ function Frame.__new_index(frame,key,value) local rtn = super__new_index(frame,key,value) if rtn ~= fail then return end + local jframe = frame.java if key == "visible" then - frame.java.setVisible(value) + jframe.setVisible(value) return end if key == "title" then - frame.java.setTitle(value) + jframe.setTitle(value) + return + end + if key == "size" then + jframe.setSize(to_dimension(value)) return end return fail @@ -46,17 +55,18 @@ local mt = make_metatable(Frame) -function Frame.new(props) - local jframe = JFrame.new() - jframe.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); - local frame = { java = jframe } +local function new2(frame,props) super_construct(frame,props) + local jframe = frame.java local content_pane = delete(props,"content_pane") if content_pane~=nil then jframe.setContentPane(content_pane.java) end check_empty(props) function frame.add_close_listener(close_listener) jframe.addWindowListener(newCloseListener(close_listener)) end + function frame.add_window_focus_listener(window_focus_listener) + jframe.addWindowFocusListener(newWindowFocusListener(window_focus_listener)) + end function frame.set_menu_bar(menu_bar) jframe.setJMenuBar(menu_bar.java) end @@ -65,4 +75,19 @@ return frame end +function Frame.new(props) + local jframe = JFrame.new() + jframe.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + return new2( {java=jframe}, props ) +end + +function Frame.get_all_frames() + local all = {} + local no_props = {} + for _, jframe in ipairs{JFrame.getFrames()} do + all[#all+1] = new2( {java=jframe}, no_props ) + end + return all +end + return Frame
--- a/src/luan/modules/swing/SwingLuan.java Thu May 15 16:23:14 2025 -0600 +++ b/src/luan/modules/swing/SwingLuan.java Thu May 15 19:12:05 2025 -0600 @@ -100,6 +100,18 @@ }; } + public static WindowListener newWindowFocusListener(final Luan luan,LuanFunction fn) { + return new WindowAdapter() { + @Override public void windowGainedFocus(WindowEvent event) { + try { + fn.call(luan); + } catch(LuanException e) { + exception(e); + } + } + }; + } + public static ComponentListener newResizeListener(final Luan luan,LuanFunction fn) { return new ComponentAdapter() { @Override public void componentResized(ComponentEvent event) {