view src/luan/modules/swing/Menu.luan @ 1944:bb12d502b72e default tip

minor
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 20 May 2025 11:18:26 -0600
parents d1708f8d4923
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 make_metatable = Utils.make_metatable or error()
local check_empty = Utils.check_empty or error()
local remove = Utils.remove or error()
local Menu_item = require "luan:swing/Menu_item.luan"
local super__index = Menu_item.__index or error()
local super__new_index = Menu_item.__new_index or error()
local super_construct = Menu_item.construct or error()
require "java"
local JMenu = require "java:javax.swing.JMenu"


local Menu = {}

Menu.__index = super__index
Menu.__new_index = super__new_index
local mt = make_metatable(Menu)

local separator = {}
Menu.separator = separator

function Menu.new(props)
	local jmenu = JMenu.new()
	local menu = { java = jmenu }
	super_construct(menu,props)
	local menu_items = remove(props,"menu_items")
	if menu_items~=nil then
		for _, menu_item in ipairs(menu_items) do
			if menu_item == separator then
				jmenu.addSeparator()
			else
				jmenu.add(menu_item.java)
			end
		end
	end
	check_empty(props)
	menu.add_separator = jmenu.addSeparator
	function menu.add(menu_item)
		jmenu.add(menu_item.java)
	end
	set_metatable(menu,mt)
	return menu
end

return Menu