From 9e3a36537d07700ec49f432940b95cf2ee9689e8 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 14 Dec 2009 08:13:06 -0800 Subject: First insert of the various lua files. --- dalos.lua | 160 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 dalos.lua (limited to 'dalos.lua') diff --git a/dalos.lua b/dalos.lua new file mode 100644 index 0000000..5381411 --- /dev/null +++ b/dalos.lua @@ -0,0 +1,160 @@ +loadmodule "luaiup" +loadmodule "luahandle" +loadmodule "lualibs" + +load "iupe-dbuffer.lua" +load "iupe-hexview.lua" +load "iupe-hexview-toolbox.lua" +load "iupe-tview.lua" + +if not dalosp then dalosp = {} end +if not dalos then dalos = {} end + +dalosp.canvas = { + draw = function (self) + local cvdb = self.cvdb + if not cvdb then return iup.DEFAULT end + cvdb:Clear() + + for k, v in ipairs(self.objects) do + v.obj:draw(cvdb, v.x, v.y, v.w, v.h) + end + + cvdb:Flush() + + return iup.DEFAULT + end, + + addobj = function (self, obj, x, y, w, h) + table.insert(self.objects, { obj = obj, x = x, y = y, w = w, h = h }) + self:draw() + end, + + findobj = function (self, x, y) + local obj, ind + + x = x + 0 + y = y + 0 + + for k, v in ipairs(self.objects) do + if v.x <= x and (v.x + v.w) >= x and v.y <= y and (v.y + v.h) >= y then + obj, ind = v, k + end + end + + return obj, ind + end, + + moveobj = function (self, obj, x, y) + obj.x, obj.y = x, y + self:draw() + end, + + focus_cb = function (self, focus) + end, + + motion_cb = function (self, x, y, status) + if iup.isbutton1(status) then + elseif iup.isbutton3(status) then + elseif iup.isbutton2(status) then + local moving = self.moving + if moving then + local ox, oy = self.ox, self.oy + local dx, dy = x - ox, y - oy + self:moveobj(moving, moving.x + dx, moving.y + dy) + self.ox, self.oy = x, y + end + end + end, + + button_cb = function (self, button, pressed, x, y, status) + if button == iup.BUTTON1 then + if pressed == 1 then + else + end + elseif button == iup.BUTTON3 then + if pressed == 1 then + else + end + elseif button == iup.BUTTON2 then + if pressed == 1 then + self.moving = self:findobj(x, y) + self.ox, self.oy = x, y + else + self.moving = nil + end + end + end, + + create = function (tab) + tab.border = "No" + tab.expand = "Yes" + tab.shrink = "Yes" + tab.minsize = "1x1" + tab.size = "1x1" + local r = iup.canvas(tab) + r.action = iupep.dbuffer.action + r.draw = dalosp.canvas.draw + r.resize_cb = iupep.dbuffer.resize_cb + r.map_cb = iupep.dbuffer.map_cb + r.unmap_cb = iupep.dbuffer.unmap_cb + r.focus_cb = dalosp.canvas.focus_cb + r.motion_cb = dalosp.canvas.motion_cb + r.button_cb = dalosp.canvas.button_cb + r.addobj = dalosp.canvas.addobj + r.findobj = dalosp.canvas.findobj + r.moveobj = dalosp.canvas.moveobj + + r.objects = {} + + return r + end, +} + +dalosp.menu = { + action_exit = function (self) + return iup.CLOSE + end, + + create = function (tab) + local item_exit = iup.item { title = "Exit" } + item_exit.action = dalosp.menu.action_exit + local item_about = iup.item { title = "About" } + local menu_file = iup.submenu { iup.menu { item_exit }, title = "File" } + local menu_help = iup.submenu { iup.menu { item_about }, title = "Help" } + return iup.menu { menu_file, menu_help } + end, +} + +dalosp.object = { + default_draw = function (self, cv, x, y, w, h ) + cv:Foreground(self.color) + local x1, x2, y1, y2 = x, x + w, y, y + h + cv:Box(x1, x2, cv:InvertYAxis(y2), cv:InvertYAxis(y1)) + end, + + create = function (dcanvas, x, y, w, h, c) + local obj = { + draw = dalosp.object.default_draw, + color = c or cd.BLACK + } + + dcanvas:addobj(obj, x or 0, y or 0, w or 50, h or 50) + end, +} + +dalos.canvas = dalosp.canvas.create +dalos.menu = dalosp.menu.create +dalos.object = dalosp.object.create + +---------------- + +d = dalos.canvas {} +m = dalos.menu {} +o = dalos.object(d) + +dlg = iup.dialog { d, title = "Dalos", menu = m } + +dlg:show() +iup.MainLoop() +dlg:hide() -- cgit v1.2.3