view src/luan/modules/swing/List.luan @ 1884:55ad3e7cd01a

swing
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 08 Apr 2025 19:43:00 -0600
parents c7c7d62f8c62
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 Utils = require "luan:swing/Utils.luan"
local fail = Utils.fail or error()
local make_metatable = Utils.make_metatable or error()
local Component = require "luan:swing/Component.luan"
local super__index = Component.__index or error()
local super__new_index = Component.__new_index or error()
local super = Component.construct or error()
require "java"
local JList = require "java:javax.swing.JList"
local DefaultListModel = require "java:javax.swing.DefaultListModel"
local Logging = require "luan:logging/Logging.luan"
local logger = Logging.logger "swing/List"


local List = {}

function List.__index(list,key)
	local rtn = super__index(list,key)
	if rtn ~= fail then return rtn end
	if key == "size" then
		return list.model.getSize()
	end
	return fail
end

function List.__new_index(list,key,value)
	local rtn = super__new_index(list,key,value)
	if rtn ~= fail then return end
	local model = list.model
	if model.instanceof(DefaultListModel) then
		if key == "size" then
			list.model.setSize(value)
			return
		end
	end
	return fail
end

local mt = make_metatable(List)

local function new(model)
	local jlist = JList.new(model)
	local list = { java = jlist, model = model }
	super(list)
	if model.instanceof(DefaultListModel) then
		list.add_element = model.addElement
	end
	set_metatable(list,mt)
	return list
end

function List.new_default_list()
	return new(DefaultListModel.new())
end

return List