view src/luan/modules/swing/Dialog.luan @ 1881:c7c7d62f8c62

swing
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 07 Apr 2025 21:14:53 -0600
parents
children f8ca4a147ac9
line wrap: on
line source

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 new_component = require("luan:swing/Component.luan").new or error()
require "java"
local JDialog = require "java:javax.swing.JDialog"
local Logging = require "luan:logging/Logging.luan"
local logger = Logging.logger "swing/Dialog"


local Dialog = {}

function Dialog.__index(dialog,key)
	local jdialog = dialog.java
	if key == "visible" then
		return jdialog.isVisible()
	end
	if key == "component" then
		local jcomponent = jdialog.getContentPane()
		local component = jcomponent.getClientProperty("luan")
		if component == nil then
			component = new_component{java=jcomponent}
		end
		return component
	end
	return fail
end

function Dialog.__new_index(dialog,key,value)
	local jdialog = dialog.java
	if key == "visible" then
		jdialog.setVisible(value)
		return
	end
	return fail
end

local mt = make_metatable(Dialog)

function Dialog.new(frame)
	local jframe = frame.java
	local jdialog = JDialog.new(jframe)
--logger.info(jdialog.getContentPane())
	local dialog = { java = jdialog }
	dialog.pack = jdialog.pack
	function dialog.move_into_owner()
		jdialog.setLocationRelativeTo(jframe)
	end
	set_metatable(dialog,mt)
	return dialog
end

return Dialog