view src/luan/modules/swing/Frame.luan @ 1992:ac02e07f09de default tip

add config
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 01 Jul 2025 15:14:26 -0600
parents bb12d502b72e
children
line wrap: on
line source

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 remove = Utils.remove or error()
local check_empty = Utils.check_empty or error()
local Awt_window = require "luan:swing/Awt_window.luan"
local super__index = Awt_window.__index or error()
local super__new_index = Awt_window.__new_index or error()
local super_construct = Awt_window.construct or error()
require "java"
local JFrame = require "java:javax.swing.JFrame"
local Logging = require "luan:logging/Logging.luan"
local logger = Logging.logger "swing/Frame"



local Frame = {}

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 jframe.getTitle()
	end
	return fail
end

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 == "title" then
		jframe.setTitle(value)
		return
	end
	return fail
end

local mt = make_metatable(Frame)

local function new2(frame,props)
	super_construct(frame,props)
	local jframe = frame.java
	local content_pane = remove(props,"content_pane")
	if content_pane~=nil then jframe.setContentPane(content_pane.java) end
	check_empty(props)
	function frame.set_menu_bar(menu_bar)
		jframe.setJMenuBar(menu_bar.java)
	end
	set_metatable(frame,mt)
	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