diff -r 2aff8e8cd456 -r 75ae893d5eed Beremiz.py --- a/Beremiz.py Thu Aug 16 12:03:00 2007 +0200 +++ b/Beremiz.py Mon Aug 20 14:28:08 2007 +0200 @@ -36,14 +36,11 @@ ieclib_path = os.path.join(base_folder, "matiec", "lib") from PLCOpenEditor import PLCOpenEditor, ProjectDialog -from TextViewer import * -from plcopen.structures import IEC_KEYWORDS +from TextViewer import TextViewer +from plcopen.structures import IEC_KEYWORDS, AddPlugin from PLCControler import PLCControler -from networkedit import networkedit -from nodelist import NodeList -from nodemanager import NodeManager -import config_utils, gen_cfile +import plugins __version__ = "$Revision$" @@ -334,6 +331,15 @@ def __init__(self, parent): self._init_ctrls(parent) + for name in plugins.__all__: + module = getattr(plugins, name) + if len(module.BlockList) > 0: + function = module.GetBlockGenerationFunction(self) + blocklist = module.BlockList + for blocktype in blocklist["list"]: + blocktype["generate"] = function + AddPlugin(module.BlockList) + self.CurrentProjectPath = "" self.PLCManager = None @@ -439,18 +445,18 @@ raise Exception for bus_id, bus_type, bus_name in [line.split(" ") for line in lines[1:]]: id = int(bus_id, 16) - if bus_type == "CanFestival": - manager = NodeManager(os.path.join(base_folder, "CanFestival-3", "objdictgen")) - nodelist = NodeList(manager) - result = nodelist.LoadProject(projectpath, bus_name) + controller = getattr(plugins, bus_type).controller + if controller != None: + manager = controller() + result = manager.LoadProject(projectpath, bus_name) if not result: - self.BusManagers[id] = {"Name" : bus_name, "Type" : bus_type, "NodeList" : nodelist, "Editor" : None} + self.BusManagers[id] = {"Name" : bus_name, "Type" : bus_type, "Manager" : manager, "Editor" : None} else: message = wx.MessageDialog(self, result, "Error", wx.OK|wx.ICON_ERROR) message.ShowModal() message.Destroy() else: - self.BusManagers[id] = {"Name" : bus_name, "Type" : bus_type} + self.BusManagers[id] = {"Name" : bus_name, "Type" : bus_type, "Manager" : None, "Editor" : None} file.close() self.PLCManager = PLCControler() plc_file = os.path.join(projectpath, "plc.xml") @@ -471,8 +477,8 @@ self.RefreshBusList() self.RefreshButtons() self.RefreshMainMenu() - except Exception: - message = wx.MessageDialog(self, "\"%s\" folder is not a valid Beremiz project"%projectpath, "Error", wx.OK|wx.ICON_ERROR) + except Exception, message: + message = wx.MessageDialog(self, "\"%s\" folder is not a valid Beremiz project\n%s"%(projectpath,message), "Error", wx.OK|wx.ICON_ERROR) message.ShowModal() message.Destroy() @@ -508,7 +514,7 @@ for id in busidlist: bus_infos = self.BusManagers[id] file.write("0x%2.2X %s %s\n"%(id, bus_infos["Type"], bus_infos["Name"])) - bus_infos["NodeList"].SaveProject(bus_infos["Name"]) + bus_infos["Manager"].SaveProject(bus_infos["Name"]) file.close() event.Skip() @@ -577,12 +583,13 @@ busidlist = self.BusManagers.keys() busidlist.sort() bus_infos = self.BusManagers[busidlist[selected]] - if bus_infos["Type"] == "CanFestival": + view = getattr(plugins, bus_infos["Type"]).view + if view != None: if bus_infos["Editor"] == None: - netedit = networkedit(self, bus_infos["NodeList"]) - netedit.SetBusId(busidlist[selected]) - netedit.Show() - bus_infos["Editor"] = netedit + editor = view(self, bus_infos["Manager"]) + editor.SetBusId(busidlist[selected]) + editor.Show() + bus_infos["Editor"] = editor event.Skip() def CloseEditor(self, bus_id): @@ -598,18 +605,18 @@ else: bus_id = int(values["busID"]) if self.BusManagers.get(bus_id, None) == None: - if values["busType"] == "CanFestival": - manager = NodeManager(os.path.join(base_folder, "CanFestival-3", "objdictgen")) - nodelist = NodeList(manager) - result = nodelist.LoadProject(self.CurrentProjectPath, values["busName"]) + controller = getattr(plugins, values["busType"]).controller + if controller != None: + manager = controller() + result = manager.LoadProject(self.CurrentProjectPath, values["busName"]) if not result: - self.BusManagers[bus_id] = {"Name" : values["busName"], "Type" : values["busType"], "NodeList" : nodelist, "Editor" : None} + self.BusManagers[bus_id] = {"Name" : values["busName"], "Type" : values["busType"], "Manager" : manager, "Editor" : None} else: message = wx.MessageDialog(self, result, "Error", wx.OK|wx.ICON_ERROR) message.ShowModal() message.Destroy() else: - self.BusManagers[bus_id] = {"Name" : values["busName"], "Type" : values["busType"]} + self.BusManagers[bus_id] = {"Name" : values["busName"], "Type" : values["busType"], "Manager" : None, "Editor" : None} else: message = wx.MessageDialog(self, "The bus ID \"0x%2.2X\" is already used!"%bus_id, "Error", wx.OK|wx.ICON_ERROR) message.ShowModal() @@ -708,11 +715,11 @@ locations.append(result.groups()) self.Log.write("Generating Network Configurations...\n") for bus_id, bus_infos in self.BusManagers.items(): - if bus_infos["Type"] == "CanFestival": - master = config_utils.GenerateConciseDCF(locations, bus_id, bus_infos["NodeList"]) - result = gen_cfile.GenerateFile("%s.c"%os.path.join(self.TargetDir, gen_cfile.FormatName(bus_infos["Name"])), master) + if bus_infos["Manager"]: + filepath = "%s.c"%os.path.join(self.TargetDir, gen_cfile.FormatName(bus_infos["Name"])) + result = bus_infos["Manager"].GenerateBus(filepath, bus_id, locations) if result: - raise Exception + raise Exception, "Bus with id \"0x%2.2X\" can't be generated!"%bus_id self.Log.write("Generating Makefiles...\n") self.Log.write("Compiling Project...\n") @@ -804,7 +811,7 @@ def __init__(self, parent): self._init_ctrls(parent) - for option in ["CanFestival","SVGUI"]: + for option in [""] + plugins.__all__: self.BusType.Append(option) def OnOK(self, event):