diff options
Diffstat (limited to 'dalos.lua')
-rw-r--r-- | dalos.lua | 82 |
1 files changed, 57 insertions, 25 deletions
@@ -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, |