Mercurial Hosting > luan
changeset 1888:a28e22991c58 default tip
add MigLayout
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 10 Apr 2025 11:41:02 -0600 |
parents | bea843af3422 |
children | |
files | lib/miglayout-core-4.3-20121116.151612-3.jar lib/miglayout-swing-4.3-20121116.151626-3.jar src/luan/modules/swing/Abstract_button.luan src/luan/modules/swing/Border.luan src/luan/modules/swing/Button.luan src/luan/modules/swing/Component.luan src/luan/modules/swing/Layout.luan src/luan/modules/swing/Swing.luan src/luan/modules/swing/SwingLuan.java src/luan/modules/swing/Text_field.luan |
diffstat | 10 files changed, 74 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/luan/modules/swing/Abstract_button.luan Wed Apr 09 11:43:08 2025 -0600 +++ b/src/luan/modules/swing/Abstract_button.luan Thu Apr 10 11:41:02 2025 -0600 @@ -9,6 +9,8 @@ local super__new_index = Component.__new_index or error() local super_construct = Component.construct or error() require "java" +local Logging = require "luan:logging/Logging.luan" +local logger = Logging.logger "swing/Abstract_button" local Abstract_button = {} @@ -41,6 +43,8 @@ if text~=nil then jbutton.setText(text) end local enabled = delete(props,"enabled") if enabled~=nil then jbutton.setEnabled(enabled) end + local margin = delete(props,"margin") + if margin~=nil then jbutton.setMargin(margin) end button.set_enabled = jbutton.setEnabled return button end
--- a/src/luan/modules/swing/Border.luan Wed Apr 09 11:43:08 2025 -0600 +++ b/src/luan/modules/swing/Border.luan Thu Apr 10 11:41:02 2025 -0600 @@ -8,6 +8,8 @@ local Border = {} +Border.no_border = BorderFactory.createEmptyBorder() + function Border.create_empty_border(top,left,bottom,right) return BorderFactory.createEmptyBorder(top,left,bottom,right) end
--- a/src/luan/modules/swing/Button.luan Wed Apr 09 11:43:08 2025 -0600 +++ b/src/luan/modules/swing/Button.luan Thu Apr 10 11:41:02 2025 -0600 @@ -8,12 +8,19 @@ local super_mt = Abstract_button.mt or error() require "java" local JButton = require "java:javax.swing.JButton" +local Insets = require "java:java.awt.Insets" +local Logging = require "luan:logging/Logging.luan" +local logger = Logging.logger "swing/Button" local Button = {} +local no_insets = Insets.new(0,0,0,0) + function Button.new(props) - local button = { java = JButton.new() } + local jbutton = JButton.new() + jbutton.setMargin(no_insets) + local button = { java = jbutton } super_construct(button,props) set_metatable(button,super_mt) return button
--- a/src/luan/modules/swing/Component.luan Wed Apr 09 11:43:08 2025 -0600 +++ b/src/luan/modules/swing/Component.luan Thu Apr 10 11:41:02 2025 -0600 @@ -11,6 +11,7 @@ local check_not_nil = Utils.check_not_nil or error() local get_font = require("luan:swing/Font.luan").get or error() require "java" +local JComponent = require "java:javax.swing.JComponent" local JPanel = require "java:javax.swing.JPanel" local Logging = require "luan:logging/Logging.luan" local logger = Logging.logger "swing/Component" @@ -18,6 +19,10 @@ local Component = {} +local alignments = { + left = JComponent.LEFT_ALIGNMENT +} + function Component.__index(component,key) if key == "foreground_color" then return component.java.getForeground() @@ -25,6 +30,9 @@ if key == "border" then return component.java.getBorder() end + if key == "constraints" then + return nil + end return fail end @@ -65,10 +73,16 @@ if border~=nil then jcomponent.setBorder(border) end local foreground_color = delete(props,"foreground_color") if foreground_color~=nil then jcomponent.setForeground(foreground_color) end + local alignment_x = delete(props,"alignment_x") + if alignment_x~=nil then + alignment_x = alignments[alignment_x] or error "invalid alignment_x" + jcomponent.setAlignmentX(alignment_x) + end + component.constraints = delete(props,"constraints") local children = delete(props,"children") if children~=nil then for _, child in ipairs(children) do - jcomponent.add(child.java) + jcomponent.add(child.java,child.constraints) end end component.request_focus_in_window = jcomponent.requestFocusInWindow
--- a/src/luan/modules/swing/Layout.luan Wed Apr 09 11:43:08 2025 -0600 +++ b/src/luan/modules/swing/Layout.luan Thu Apr 10 11:41:02 2025 -0600 @@ -1,10 +1,9 @@ local Luan = require "luan:Luan.luan" local error = Luan.error -local Number = require "luan:Number.luan" -local integer = Number.integer or error() require "java" local FlowLayout = require "java:java.awt.FlowLayout" local BoxLayout = require "java:javax.swing.BoxLayout" +local MigLayout = require "java:net.miginfocom.swing.MigLayout" local Layout = {} @@ -35,4 +34,8 @@ return BoxLayout.new(target.java,axis) end +function Layout.new_mig_layout(layout_constraints,column_constraints,row_constraints) + return MigLayout.new(layout_constraints,column_constraints,row_constraints) +end + return Layout
--- a/src/luan/modules/swing/Swing.luan Wed Apr 09 11:43:08 2025 -0600 +++ b/src/luan/modules/swing/Swing.luan Thu Apr 10 11:41:02 2025 -0600 @@ -1,6 +1,7 @@ local Luan = require "luan:Luan.luan" local error = Luan.error require "java" +local Insets = require "java:java.awt.Insets" local SwingLuan = require "java:luan.modules.swing.SwingLuan" @@ -8,4 +9,6 @@ Swing.run = SwingLuan.run +Swing.new_insets = Insets.new -- top, left, bottom, right + return Swing
--- a/src/luan/modules/swing/SwingLuan.java Wed Apr 09 11:43:08 2025 -0600 +++ b/src/luan/modules/swing/SwingLuan.java Thu Apr 10 11:41:02 2025 -0600 @@ -33,8 +33,15 @@ System.setProperty("apple.laf.useScreenMenuBar", "true"); //System.out.println(UIManager.getLookAndFeel()); /* + for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { + logger.info(info.toString()); + } try { - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + //UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); + //UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel"); + //UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); + UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); } catch(ClassNotFoundException e) { throw new RuntimeException(e); } catch(InstantiationException e) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/luan/modules/swing/Text_field.luan Thu Apr 10 11:41:02 2025 -0600 @@ -0,0 +1,29 @@ +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 delete = Utils.delete or error() +local check_empty = Utils.check_empty or error() +local Text_component = require("luan:swing/Text_component.luan") +local super_construct = Text_component.construct or error() +require "java" +local JTextField = require "java:javax.swing.JTextField" + + +local Text_field = {} + +local mt = make_metatable(Text_component) + +function Text_field.new(props) + local jtext_field = JTextField.new() + local text_field = { java = jtext_field } + super_construct(text_field,props) + local columns = delete(props,"columns") + if columns~=nil then jtext_field.setColumns(columns) end + check_empty(props) + set_metatable(text_field,mt) + return text_field +end + +return Text_field