Lua: work-in-progress library (made in Lua) for object-oriented GUI. Already implements windows, buttons, and dynamic labels.
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@2055 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
e499aa4767
commit
ea72bfe13f
33
share/grafx2/scripts/_tst_dialog2.lua
Normal file
33
share/grafx2/scripts/_tst_dialog2.lua
Normal file
@ -0,0 +1,33 @@
|
||||
--
|
||||
-- test of GUI library
|
||||
--
|
||||
run("libs/gui.lua")
|
||||
|
||||
local counter = gui.label{x=10, y=54, value=0, format="% .3d"}
|
||||
local form = gui.dialog{
|
||||
title="Dialogtest",
|
||||
w=100,
|
||||
h=150,
|
||||
counter,
|
||||
gui.button{ label="+",
|
||||
x=6, y=38, w=14, h=14, repeatable=true, click=function()
|
||||
counter.value=counter.value+1;
|
||||
counter:render();
|
||||
end},
|
||||
gui.button{ label="-",
|
||||
x=26, y=38, w=14, h=14, repeatable=true, click=function()
|
||||
counter.value=counter.value-1;
|
||||
counter:render();
|
||||
end},
|
||||
gui.button{ label="Help",
|
||||
x=6, y=70, w=54, h=14, click=function()
|
||||
messagebox("Help screen");
|
||||
end},
|
||||
gui.button{ label="Close",
|
||||
x=6, y=18, w=54, h=14, key=27, click=function()
|
||||
return true; -- causes closing
|
||||
end},
|
||||
}
|
||||
|
||||
form:run()
|
||||
|
||||
111
share/grafx2/scripts/libs/gui.lua
Normal file
111
share/grafx2/scripts/libs/gui.lua
Normal file
@ -0,0 +1,111 @@
|
||||
--
|
||||
-- Event-driven GUI library
|
||||
--
|
||||
--
|
||||
|
||||
gui = {
|
||||
|
||||
--
|
||||
-- dialog() --
|
||||
--
|
||||
dialog = function(args)
|
||||
local dia = {
|
||||
title = args.title,
|
||||
w = args.w,
|
||||
h = args.h,
|
||||
--
|
||||
widgets = {},
|
||||
-- an indexed array, starting at 1. Used for calling the relevant
|
||||
-- callback when a numbered control is clicked.
|
||||
callbacks = {},
|
||||
|
||||
--
|
||||
-- dialog.run() --
|
||||
--
|
||||
run = function(this)
|
||||
windowopen(this.w,this.h, this.title or "");
|
||||
-- examine all elements
|
||||
for _,widget in ipairs(this.widgets) do
|
||||
widget:render()
|
||||
end
|
||||
|
||||
repeat
|
||||
local button, button2, key = windowdodialog();
|
||||
|
||||
if button > 0 then
|
||||
local c = this.callbacks[button]
|
||||
-- run the callback and stop the form if it returns true
|
||||
if c ~= nil and c(this) then
|
||||
break;
|
||||
end
|
||||
end
|
||||
until key == 27;
|
||||
windowclose();
|
||||
end
|
||||
}
|
||||
local id = 1;
|
||||
-- examine all elements
|
||||
for _,value in ipairs(args) do
|
||||
-- all arguments that are tables are assumed to be widgets
|
||||
if type(value)=="table" then
|
||||
table.insert(dia.widgets, value)
|
||||
-- clickable widgets take up an auto-numbered id
|
||||
if (value.click) then
|
||||
dia.callbacks[id] = value.click
|
||||
id=id+1
|
||||
end
|
||||
end
|
||||
end
|
||||
return dia;
|
||||
end,
|
||||
|
||||
--
|
||||
-- button() --
|
||||
--
|
||||
button = function(args)
|
||||
local but = {
|
||||
x = args.x,
|
||||
y = args.y,
|
||||
w = args.w,
|
||||
h = args.h,
|
||||
key = args.key,
|
||||
label = args.label,
|
||||
click = args.click or donothing,
|
||||
render = args.repeatable and function(this)
|
||||
windowrepeatbutton(this.x, this.y, this.w, this.h, this.label, this.key or -1);
|
||||
end
|
||||
or function(this)
|
||||
windowbutton(this.x, this.y, this.w, this.h, this.label, this.key or -1);
|
||||
end
|
||||
}
|
||||
return but;
|
||||
end,
|
||||
|
||||
--
|
||||
-- label() --
|
||||
--
|
||||
label = function(args)
|
||||
local fld = {
|
||||
x = args.x,
|
||||
y = args.y,
|
||||
value = args.value,
|
||||
format = args.format,
|
||||
fg = args.fg or 0,
|
||||
bg = args.bg or 2,
|
||||
render = function(this)
|
||||
if type(this.format) then
|
||||
windowprint(this.x, this.y, string.format(this.format, this.value), this.fg, this.bg);
|
||||
else
|
||||
windowprint(this.x, this.y, this.value, this.fg, this.bg);
|
||||
end
|
||||
end
|
||||
}
|
||||
return fld;
|
||||
end,
|
||||
|
||||
|
||||
-- "do nothing" function. Used as default callback
|
||||
donothing = function(this)
|
||||
end
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user