1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
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()
|