Mercurial Hosting > luan
changeset 1887:bea843af3422 default tip
swing
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 09 Apr 2025 11:43:08 -0600 |
parents | 03a8924fe9bc |
children | |
files | src/luan/modules/swing/Component.luan src/luan/modules/swing/Frame.luan src/luan/modules/swing/Label.luan src/luan/modules/swing/Scroll_pane.luan src/luan/modules/swing/Text_area.luan src/luan/modules/swing/examples/hello_world.luan |
diffstat | 6 files changed, 62 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/src/luan/modules/swing/Component.luan Wed Apr 09 08:56:54 2025 -0600 +++ b/src/luan/modules/swing/Component.luan Wed Apr 09 11:43:08 2025 -0600 @@ -45,7 +45,7 @@ local function construct(component,props) check_not_nil(props) local jcomponent = component.java - jcomponent.putClientProperty("luan",component) -- don't gc + jcomponent.putClientProperty("luan",component) local layout = delete(props,"layout") if layout~=nil then if type(layout) == "function" then @@ -53,8 +53,18 @@ end jcomponent.setLayout(layout) end + local function set_font(font) + if type(font) == "table" then + font = get_font(font) + end + jcomponent.setFont(font) + end + local font = delete(props,"font") + if font~=nil then set_font(font) end local border = delete(props,"border") 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 children = delete(props,"children") if children~=nil then for _, child in ipairs(children) do @@ -62,12 +72,7 @@ end end component.request_focus_in_window = jcomponent.requestFocusInWindow - function component.set_font(font) - if type(font) == "table" then - font = get_font(font) - end - jcomponent.setFont(font) - end + component.set_font = set_font component._dont_gc = {} function component.dont_gc(obj) component._dont_gc[obj] = true
--- a/src/luan/modules/swing/Frame.luan Wed Apr 09 08:56:54 2025 -0600 +++ b/src/luan/modules/swing/Frame.luan Wed Apr 09 11:43:08 2025 -0600 @@ -6,6 +6,9 @@ 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 check_not_nil = Utils.check_not_nil or error() require "java" local JFrame = require "java:javax.swing.JFrame" local FileDialog = require "java:java.awt.FileDialog" @@ -89,10 +92,14 @@ return file_chooser end -function Frame.new() +function Frame.new(props) + check_not_nil(props) local jframe = JFrame.new() + jframe.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); local frame = { java = jframe } - jframe.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + 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
--- a/src/luan/modules/swing/Label.luan Wed Apr 09 08:56:54 2025 -0600 +++ b/src/luan/modules/swing/Label.luan Wed Apr 09 11:43:08 2025 -0600 @@ -3,8 +3,10 @@ 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 Component = require "luan:swing/Component.luan" -local super = Component.construct or error() +local super_construct = Component.construct or error() require "java" local JLabel = require "java:javax.swing.JLabel" @@ -13,10 +15,13 @@ local mt = make_metatable(Component) -function Label.new(text) - local jlabel = JLabel.new(text) +function Label.new(props) + local jlabel = JLabel.new() local label = { java = jlabel } - super(label) + super_construct(label,props) + local text = delete(props,"text") + if text~=nil then jlabel.setText(text) end + check_empty(props) set_metatable(label,mt) return label end
--- a/src/luan/modules/swing/Scroll_pane.luan Wed Apr 09 08:56:54 2025 -0600 +++ b/src/luan/modules/swing/Scroll_pane.luan Wed Apr 09 11:43:08 2025 -0600 @@ -20,6 +20,8 @@ local jscroll_pane = JScrollPane.new(view.java) local scroll_pane = { java = jscroll_pane } super_construct(scroll_pane,props) + local row_header_view = delete(props,"row_header_view") + if row_header_view~=nil then jscroll_pane.setRowHeaderView(row_header_view.java) end check_empty(props) function scroll_pane.set_row_header_view(view) jscroll_pane.setRowHeaderView(view.java)
--- a/src/luan/modules/swing/Text_area.luan Wed Apr 09 08:56:54 2025 -0600 +++ b/src/luan/modules/swing/Text_area.luan Wed Apr 09 11:43:08 2025 -0600 @@ -4,6 +4,7 @@ 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 Text_component = require("luan:swing/Text_component.luan") local super__index = Text_component.__index or error() @@ -71,6 +72,16 @@ local jtext_area = TextAreaLuan.new() local text_area = { java = jtext_area } super_construct(text_area,props) + local rows = delete(props,"rows") + if rows~=nil then jtext_area.setRows(rows) end + local columns = delete(props,"columns") + if columns~=nil then jtext_area.setColumns(columns) end + local wrap_style_word = delete(props,"wrap_style_word") + if wrap_style_word~=nil then jtext_area.setWrapStyleWord(wrap_style_word) end + local line_wrap = delete(props,"line_wrap") + if line_wrap~=nil then jtext_area.setLineWrap(line_wrap) end + local tab_size = delete(props,"tab_size") + if tab_size~=nil then jtext_area.setTabSize(tab_size) end check_empty(props) text_area.show_whitespace = jtext_area.showWhitespace function text_area.get_line_from_position(pos)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/luan/modules/swing/examples/hello_world.luan Wed Apr 09 11:43:08 2025 -0600 @@ -0,0 +1,19 @@ +local Luan = require "luan:Luan.luan" +local error = Luan.error +local Swing = require "luan:swing/Swing.luan" +local new_frame = require("luan:swing/Frame.luan").new or error() +local new_label = require("luan:swing/Label.luan").new or error() +local Border = require "luan:swing/Border.luan" +local create_empty_border = Border.create_empty_border or error() + + +Swing.run(function() + local frame = new_frame{ + content_pane = new_label{ + text = "Hello World" + border = create_empty_border(8,8,8,8) + } + } + frame.pack() + frame.visible = true +end)