Mercurial Hosting > luan
changeset 1863:928e73bfe7ea default tip
swing work
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 31 Mar 2025 13:46:47 -0600 |
parents | d59d4ef5ca46 |
children | |
files | src/luan/modules/IoLuan.java src/luan/modules/swing/Abstract_button.luan src/luan/modules/swing/Frame.luan src/luan/modules/swing/Menu.luan src/luan/modules/swing/Menu_bar.luan src/luan/modules/swing/Menu_item.luan src/luan/modules/swing/SwingLuan.java src/luan/modules/swing/Text_area.luan src/luan/modules/swing/Text_component.luan src/luan/modules/swing/Utils.luan |
diffstat | 10 files changed, 228 insertions(+), 43 deletions(-) [+] |
line wrap: on
line diff
--- a/src/luan/modules/IoLuan.java Sun Mar 30 13:17:27 2025 -0600 +++ b/src/luan/modules/IoLuan.java Mon Mar 31 13:46:47 2025 -0600 @@ -393,7 +393,7 @@ this(luan,new File(path)); } - private LuanFile(Luan luan,File file) throws LuanException { + public LuanFile(Luan luan,File file) throws LuanException { this(file); check(luan,"file:"+file.toString()); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/luan/modules/swing/Abstract_button.luan Mon Mar 31 13:46:47 2025 -0600 @@ -0,0 +1,25 @@ +local Luan = require "luan:Luan.luan" +local error = Luan.error +local Utils = require "luan:swing/Utils.luan" +local fail = Utils.fail or error() +require "java" + + +local Abstract_button = {} + +function Abstract_button.__index(abstract_button,key) + if key == "text" then + return abstract_button.java.getText() + end + return fail +end + +function Abstract_button.__new_index(abstract_button,key,value) + if key == "text" then + abstract_button.java.setText(value) + return + end + return fail +end + +return Abstract_button
--- a/src/luan/modules/swing/Frame.luan Sun Mar 30 13:17:27 2025 -0600 +++ b/src/luan/modules/swing/Frame.luan Mon Mar 31 13:46:47 2025 -0600 @@ -1,27 +1,34 @@ local Luan = require "luan:Luan.luan" local error = Luan.error local set_metatable = Luan.set_metatable or error() +local Io = require "luan:Io.luan" +local new_file = Io.schemes.file or error() +local Utils = require "luan:swing/Utils.luan" +local fail = Utils.fail or error() +local make_metatable = Utils.make_metatable or error() require "java" local JFrame = require "java:javax.swing.JFrame" +local FileDialog = require "java:java.awt.FileDialog" local SwingLuan = require "java:luan.modules.swing.SwingLuan" local newCloseListener = SwingLuan.newCloseListener +local Logging = require "luan:logging/Logging.luan" +local logger = Logging.logger "swing/Frame" + local Frame = {} -local mt = {} - -function mt.__index(frame,key) +function Frame.__index(frame,key) if key == "visible" then return frame.java.isVisible() end if key == "title" then return frame.java.getTitle() end - error("'"..key.."' not defined") + return fail end -function mt.__new_index(frame,key,value) +function Frame.__new_index(frame,key,value) if key == "visible" then frame.java.setVisible(value) return @@ -30,7 +37,56 @@ frame.java.setTitle(value) return end - error("'"..key.."' not defined") + return fail +end + +local mt = make_metatable(Frame) + +local File_chooser = {} + +function File_chooser.__index(file_chooser,key) + if key == "file" then + local file_dialog = file_chooser.java + local file = file_dialog.getFile() + if file == nil then + return nil + end + local dir = file_dialog.getDirectory() + return file and new_file(dir..file) + end + if key == "directory" then + local dir = file_chooser.java.getDirectory() + return new_file(dir) + end + if key == "visible" then + return file_chooser.java.isVisible() + end + return fail +end + +function File_chooser.__new_index(file_chooser,key,value) + if key == "file" then + file_chooser.java.setFile(value.to_string()) + return + end + if key == "directory" then + file_chooser.java.setDirectory(value.to_string()) + return + end + if key == "visible" then + file_chooser.java.setVisible(value) + return + end + return fail +end + +local mt_fc = make_metatable(File_chooser) + +local function new_file_chooser(jframe) + local file_dialog = FileDialog.new(jframe) + local file_chooser = { java = file_dialog } + set_metatable(file_chooser,mt_fc) + return file_chooser end function Frame.new() @@ -46,6 +102,15 @@ function frame.set_menu_bar(menu_bar) jframe.setJMenuBar(menu_bar.java) end + local file_chooser + local function get_file_chooser(mode) + file_chooser = file_chooser or new_file_chooser(jframe) + file_chooser.java.setMode(mode) + return file_chooser + end + function frame.file_chooser_load() + return get_file_chooser(FileDialog.LOAD) + end frame.pack = jframe.pack set_metatable(frame,mt) return frame
--- a/src/luan/modules/swing/Menu.luan Sun Mar 30 13:17:27 2025 -0600 +++ b/src/luan/modules/swing/Menu.luan Mon Mar 31 13:46:47 2025 -0600 @@ -1,17 +1,26 @@ local Luan = require "luan:Luan.luan" local error = Luan.error +local set_metatable = Luan.set_metatable or error() +local Utils = require "luan:swing/Utils.luan" +local make_metatable = Utils.make_metatable or error() +local Abstract_button = require "luan:swing/Abstract_button.luan" require "java" local JMenu = require "java:javax.swing.JMenu" local Menu = {} -function Menu.new(text) - local jmenu = JMenu.new(text) +Menu.__index = Abstract_button.__index or error() +Menu.__new_index = Abstract_button.__new_index or error() +local mt = make_metatable(Menu) + +function Menu.new() + local jmenu = JMenu.new() local menu = { java = jmenu } function menu.add(menu_item) jmenu.add(menu_item.java) end + set_metatable(menu,mt) return menu end
--- a/src/luan/modules/swing/Menu_bar.luan Sun Mar 30 13:17:27 2025 -0600 +++ b/src/luan/modules/swing/Menu_bar.luan Mon Mar 31 13:46:47 2025 -0600 @@ -1,6 +1,5 @@ local Luan = require "luan:Luan.luan" local error = Luan.error -local set_metatable = Luan.set_metatable or error() require "java" local JMenuBar = require "java:javax.swing.JMenuBar"
--- a/src/luan/modules/swing/Menu_item.luan Sun Mar 30 13:17:27 2025 -0600 +++ b/src/luan/modules/swing/Menu_item.luan Mon Mar 31 13:46:47 2025 -0600 @@ -1,30 +1,44 @@ local Luan = require "luan:Luan.luan" local error = Luan.error local set_metatable = Luan.set_metatable or error() +local Utils = require "luan:swing/Utils.luan" +local fail = Utils.fail or error() +local make_metatable = Utils.make_metatable or error() +local Abstract_button = require "luan:swing/Abstract_button.luan" +local super__index = Abstract_button.__index or error() +local super__new_index = Abstract_button.__new_index or error() require "java" local JMenuItem = require "java:javax.swing.JMenuItem" +local KeyStroke = require "java:javax.swing.KeyStroke" +local KeyEvent = require "java:java.awt.event.KeyEvent" +local InputEvent = require "java:java.awt.event.InputEvent" local SwingLuan = require "java:luan.modules.swing.SwingLuan" local newActionListener = SwingLuan.newActionListener local Menu_item = {} -local mt = {} - -function mt.__index(frame,key) - if key == "text" then - return frame.java.getText() +function Menu_item.__index(menu_item,key) + local rtn = super__index(menu_item,key) + if rtn ~= fail then return rtn end + if key == "accelerator" then + return menu_item.java.getAccelerator().toString() end - error("'"..key.."' not defined") + return fail end -function mt.__new_index(frame,key,value) - if key == "text" then - frame.java.setText(value) +function Menu_item.__new_index(menu_item,key,value) + local rtn = super__new_index(menu_item,key,value) + if rtn ~= fail then return end + if key == "accelerator" then + menu_item.java.setAccelerator(KeyStroke.getKeyStroke(value)) + --menu_item.java.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.META_DOWN_MASK)) return end - error("'"..key.."' not defined") + return fail end +local mt = make_metatable(Menu_item) + function Menu_item.new() local jmenu_item = JMenuItem.new() local menu_item = { java = jmenu_item }
--- a/src/luan/modules/swing/SwingLuan.java Sun Mar 30 13:17:27 2025 -0600 +++ b/src/luan/modules/swing/SwingLuan.java Mon Mar 31 13:46:47 2025 -0600 @@ -16,6 +16,25 @@ public final class SwingLuan { + static { + //System.setProperty("apple.awt.application.name", "MyApplication"); + System.setProperty("apple.laf.useScreenMenuBar", "true"); + //System.out.println(UIManager.getLookAndFeel()); +/* + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch(ClassNotFoundException e) { + throw new RuntimeException(e); + } catch(InstantiationException e) { + throw new RuntimeException(e); + } catch(IllegalAccessException e) { + throw new RuntimeException(e); + } catch(UnsupportedLookAndFeelException e) { + throw new RuntimeException(e); + } +*/ + } + private static Runnable runnable(final Luan luan,final LuanFunction fn) { return new Runnable() { public void run() { @@ -31,21 +50,6 @@ public static void run(Luan luan,LuanFunction fn) /*throws LuanException*/ { //luan = new Luan(luan); //LuanMutable.makeImmutable(fn); - //System.setProperty("apple.awt.application.name", "MyApplication"); - System.setProperty("apple.laf.useScreenMenuBar", "true"); -/* - try { - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - } catch(ClassNotFoundException e) { - throw new RuntimeException(e); - } catch(InstantiationException e) { - throw new RuntimeException(e); - } catch(IllegalAccessException e) { - throw new RuntimeException(e); - } catch(UnsupportedLookAndFeelException e) { - throw new RuntimeException(e); - } -*/ SwingUtilities.invokeLater(runnable(luan,fn)); }
--- a/src/luan/modules/swing/Text_area.luan Sun Mar 30 13:17:27 2025 -0600 +++ b/src/luan/modules/swing/Text_area.luan Mon Mar 31 13:46:47 2025 -0600 @@ -2,17 +2,23 @@ local error = Luan.error local set_metatable = Luan.set_metatable or error() local type = Luan.type or error() +local Utils = require "luan:swing/Utils.luan" +local fail = Utils.fail or error() +local make_metatable = Utils.make_metatable or error() local get_font = require("luan:swing/Font.luan").get or error() -local new_component = require("luan:swing/Component.luan").new or error() +local Text_component = require("luan:swing/Text_component.luan") +local super__index = Text_component.__index or error() +local super__new_index = Text_component.__new_index or error() +local new_text_component = Text_component.new or error() require "java" local JTextArea = require "java:javax.swing.JTextArea" local Text_area = {} -local mt = {} - -function mt.__index(text_area,key) +function Text_area.__index(text_area,key) + local rtn = super__index(text_area,key) + if rtn ~= fail then return rtn end if key == "line_wrap" then return text_area.java.getLineWrap() end @@ -31,10 +37,12 @@ if key == "line_count" then return text_area.java.getLineCount() end - error("'"..key.."' not defined") + return fail end -function mt.__new_index(text_area,key,value) +function Text_area.__new_index(text_area,key,value) + local rtn = super__new_index(text_area,key,value) + if rtn ~= fail then return end if key == "line_wrap" then text_area.java.setLineWrap(value) return @@ -55,12 +63,15 @@ text_area.java.setColumns(value) return end - error("'"..key.."' not defined") + return fail end +local mt = make_metatable(Text_area) + function Text_area.new() local jtext_area = JTextArea.new() - local text_area = new_component(jtext_area) + local text_area = new_text_component(jtext_area) + text_area.select = jtext_area.select or error() function text_area.set_font(font) if type(font) == "table" then font = get_font(font)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/luan/modules/swing/Text_component.luan Mon Mar 31 13:46:47 2025 -0600 @@ -0,0 +1,28 @@ +local Luan = require "luan:Luan.luan" +local error = Luan.error +local Utils = require "luan:swing/Utils.luan" +local fail = Utils.fail or error() +local new_component = require("luan:swing/Component.luan").new or error() +require "java" + + +local Text_component = {} + +function Text_component.__index(text_component,key) + if key == "text" then + return text_component.java.getText() + end + return fail +end + +function Text_component.__new_index(text_component,key,value) + if key == "text" then + text_component.java.setText(value) + return + end + return fail +end + +Text_component.new = new_component + +return Text_component
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/luan/modules/swing/Utils.luan Mon Mar 31 13:46:47 2025 -0600 @@ -0,0 +1,30 @@ +local Luan = require "luan:Luan.luan" +local error = Luan.error + + +local Utils = {} + +local fail = {} +Utils.fail = fail + +function Utils.make_metatable(class) + local __index = class.__index or error() + local __new_index = class.__new_index or error() + + local mt = {} + + function mt.__index(t,key) + local rtn = __index(t,key) + rtn ~= fail or error("'"..key.."' not defined") + return rtn + end + + function mt.__new_index(t,key,value) + local rtn = __new_index(t,key,value) + rtn ~= fail or error("'"..key.."' not defined") + end + + return mt +end + +return Utils