# HG changeset patch # User laurent # Date 1260444649 -3600 # Node ID af7c28de4cc776751c05e02bb450128d9c84175f # Parent 15a63eba885f1c8bb3c5fcb78348a75f5e3829ff Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz diff -r 15a63eba885f -r af7c28de4cc7 LPCBeremiz.py --- a/LPCBeremiz.py Thu Dec 10 12:29:27 2009 +0100 +++ b/LPCBeremiz.py Thu Dec 10 12:30:49 2009 +0100 @@ -66,7 +66,7 @@ from plcopen.structures import LOCATIONDATATYPES from PLCControler import LOCATION_PLUGIN, LOCATION_MODULE, LOCATION_GROUP,\ LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY -from PLCOpenEditor import IDEFrame +from PLCOpenEditor import IDEFrame, ProjectDialog #------------------------------------------------------------------------------- # LPCModule Class @@ -489,19 +489,29 @@ """ if os.path.basename(ProjectPath) == "": ProjectPath = os.path.dirname(ProjectPath) + # Verify that project contains a PLCOpen program plc_file = os.path.join(ProjectPath, "plc.xml") - if not os.path.isfile(plc_file): - return _("Chosen folder doesn't contain a program. It's not a valid project!") - # Load PLCOpen file - result = self.OpenXMLFile(plc_file) - if result: - return result + if os.path.isfile(plc_file): + # Load PLCOpen file + result = self.OpenXMLFile(plc_file) + if result: + return result + else: + self.CreateNewProject({"companyName": "", + "productName": "", + "productVersion": "", + "projectName": "", + "pageSize": (0, 0), + "scaling": {}}) + # Change XSD into class members self._AddParamsMembers() self.PluggedChilds = {} + # Keep track of the root plugin (i.e. project path) self.ProjectPath = ProjectPath + self.BuildPath = self._getBuildPath() if BuildPath is not None: mycopytree(BuildPath, self.BuildPath) @@ -514,6 +524,10 @@ return result #Load and init all the childs self.LoadChilds() + + if self.PlugTestModified(): + self.SaveProject() + self.RefreshPluginsBlockLists() return None @@ -771,6 +785,19 @@ event.Skip() + def ShowProperties(self): + old_values = self.Controler.GetProjectProperties() + dialog = ProjectDialog(self ,False) + dialog.SetValues(old_values) + if dialog.ShowModal() == wx.ID_OK: + new_values = dialog.GetValues() + new_values["creationDateTime"] = old_values["creationDateTime"] + if new_values != old_values: + self.Controler.SetProjectProperties(None, new_values) + self._Refresh(TITLE, TOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, + TYPESTREE, INSTANCESTREE, SCALING) + dialog.Destroy() + def RefreshFileMenu(self): if self.PluginRoot is not None: selected = self.TabsOpened.GetSelection() @@ -791,7 +818,7 @@ self.FileMenu.Enable(wx.ID_PREVIEW, False) self.FileMenu.Enable(wx.ID_PRINT, False) self.FileMenu.Enable(wx.ID_PAGE_SETUP, True) - self.FileMenu.Enable(wx.ID_SAVE, True) + self.FileMenu.Enable(wx.ID_SAVE, self.PluginRoot.PlugTestModified()) self.FileMenu.Enable(wx.ID_PROPERTIES, True) else: self.FileMenu.Enable(wx.ID_CLOSE, False) @@ -1057,8 +1084,13 @@ else: wx.CallAfter(self.PluginRoot._build) - def SetProjectName(self, name): - self.PluginRoot.SetProjectName(name) + def SetProjectProperties(self, projectname, productname, productversion, companyname): + properties = self.PluginRoot.GetProjectProperties() + properties["projectName"] = projectname + properties["productName"] = productname + properties["productVersion"] = productversion + properties["companyName"] = companyname + self.PluginRoot.SetProjectProperties(properties=properties) self.RestartTimer() def SetOnlineMode(self, mode, path=None): @@ -1286,7 +1318,7 @@ "Refresh": ([], 0), "Close": ([], 0), "Compile": ([], 0), - "SetProjectName": ([str], 0), + "SetProjectProperties": ([str, str, str, str], 0), "SetOnlineMode": ([int, str], 1), "AddBus": ([int, str, str], 1), "RenameBus": ([int, str], 0),