summaryrefslogtreecommitdiff
path: root/dalos.lua
diff options
context:
space:
mode:
Diffstat (limited to 'dalos.lua')
-rw-r--r--dalos.lua82
1 files changed, 57 insertions, 25 deletions
diff --git a/dalos.lua b/dalos.lua
index 1b64704..e226faf 100644
--- a/dalos.lua
+++ b/dalos.lua
@@ -7,8 +7,8 @@ load "iupe-tview.lua"
if not dalosp then dalosp = {} end
if not dalos then dalos = {} end
-dalos.objects = {}
-dalos.objects_by_name = {}
+dalos.objectstypes = {}
+dalos.objectstypes_by_name = {}
dalosp.NORTH = 1
dalosp.SOUTH = 2
@@ -17,11 +17,11 @@ dalosp.EAST = 4
dalosp.cross = { }
function dalos:register_obj(name, constructor)
- if self.objects_by_name[name] then
+ if self.objectstypes_by_name[name] then
error("An object of that name already exists: " .. name)
end
- table.insert(self.objects, { name = name, constructor = constructor, counter = 1 })
- self.objects_by_name[name] = #self.objects
+ table.insert(self.objectstypes, { name = name, constructor = constructor, counter = 1 })
+ self.objectstypes_by_name[name] = #self.objectstypes
if self.activemenu then
self.activemenu:update_objects()
end
@@ -427,6 +427,39 @@ dalosp.menu = {
end,
action_save = function(self)
+ local s_obj = { }
+ if not dalos.active_canvas then return end
+ local d = dalos.active_canvas
+ for i, v in ipairs(d.objects) do
+ s_obj[i] = { x = v.x, y = v.y, name = v.obj.name, ntype = v.obj.ntype, settings = v.obj:get_settings(), lookup = v }
+ end
+ local s_links = { }
+ for iobj, obj in ipairs(d.objects) do
+ for iout, out in pairs(obj.obj.outputs) do
+ for ilookup, lobj in ipairs(s_obj) do
+ if lobj.lookup == out.obj then
+ table.insert(s_links, { src = iobj, dst = ilookup, isrc = iout, idst = out.ind })
+ end
+ end
+ end
+ end
+ for i, v in ipairs(s_obj) do
+ v.lookup = nil
+ end
+ local save = { objects = s_obj, links = s_links }
+ local dlg = iup.filedlg {
+ dialogtype = "Save",
+ }
+ iup.Popup(dlg)
+ if dlg.status ~= -1 then
+ print(dlg.value)
+ local s, v = pcall(Output, dlg.value)
+ if s then
+ v:write "local "
+ dumpvars(v, save, "save")
+ v:write "return save"
+ end
+ end
end,
action_exit = function (self)
@@ -484,25 +517,23 @@ dalosp.menu = {
local east_menu = { radio = "1" }
local west_menu = { radio = "1" }
local south_menu = { radio = "1" }
- if type(dalos.objects) == "table" then
- local item
- for k, v in ipairs(dalos.objects) do
- item = iup.item { title = v.name }
- item.action = function (self) dalosp.menu.add_object(canvas, v) end
- table.insert(add_menu, item)
- item = iup.item { title = v.name }
- item.action = function (self) dalosp.menu.set_cross(canvas, v, dalosp.NORTH) end
- table.insert(north_menu, item)
- item = iup.item { title = v.name }
- item.action = function (self) dalosp.menu.set_cross(canvas, v, dalosp.EAST) end
- table.insert(east_menu, item)
- item = iup.item { title = v.name }
- item.action = function (self) dalosp.menu.set_cross(canvas, v, dalosp.WEST) end
- table.insert(west_menu, item)
- item = iup.item { title = v.name }
- item.action = function (self) dalosp.menu.set_cross(canvas, v, dalosp.SOUTH) end
- table.insert(south_menu, item)
- end
+ local item
+ for k, v in ipairs(dalos.objectstypes) do
+ item = iup.item { title = v.name }
+ item.action = function (self) dalosp.menu.add_object(canvas, v) end
+ table.insert(add_menu, item)
+ item = iup.item { title = v.name }
+ item.action = function (self) dalosp.menu.set_cross(canvas, v, dalosp.NORTH) end
+ table.insert(north_menu, item)
+ item = iup.item { title = v.name }
+ item.action = function (self) dalosp.menu.set_cross(canvas, v, dalosp.EAST) end
+ table.insert(east_menu, item)
+ item = iup.item { title = v.name }
+ item.action = function (self) dalosp.menu.set_cross(canvas, v, dalosp.WEST) end
+ table.insert(west_menu, item)
+ item = iup.item { title = v.name }
+ item.action = function (self) dalosp.menu.set_cross(canvas, v, dalosp.SOUTH) end
+ table.insert(south_menu, item)
end
local menu_file = iup.submenu { iup.menu { item_load, item_save, iup.separator {}, item_exit }, title = "File" }
local menu_add = iup.submenu { iup.menu(add_menu), title = "Add" }
@@ -623,6 +654,7 @@ dalosp.object = {
outputs = {},
curinput = 1,
curoutput = 1,
+ ntype = tab.ntype,
quicksetting = tab.quicksetting,
otype = tab.otype or dalos.objtype.DUMMY,
activate = tab.activate or dalosp.object.default_activate,
@@ -635,7 +667,7 @@ dalosp.object = {
input_change = tab.input_change or dalosp.object.default_inputchange,
output_change = tab.output_change or dalosp.object.default_outputchange,
set_houtput = dalosp.object.set_houtput,
- get_settings = tab.get_setings or dalosp.object.default_get_settings,
+ get_settings = tab.get_settings or dalosp.object.default_get_settings,
houtputs = {},
get_linked_input = dalosp.object.get_linked_input,
dcanvas = dcanvas,