canfestival/canfestival.py
changeset 774 78b5fa92dd1c
parent 762 aaacc83aa86b
child 776 c81397b665b6
equal deleted inserted replaced
773:3f3f1b8fcb07 774:78b5fa92dd1c
   110 
   110 
   111     def _OpenView(self):
   111     def _OpenView(self):
   112         ConfigTreeNode._OpenView(self)
   112         ConfigTreeNode._OpenView(self)
   113         if self._View is not None:
   113         if self._View is not None:
   114             self._View.SetBusId(self.GetCurrentLocation())
   114             self._View.SetBusId(self.GetCurrentLocation())
       
   115         return self._View
   115 
   116 
   116     ConfNodeMethods = [
   117     ConfNodeMethods = [
   117         {"bitmap" : "NetworkEdit",
   118         {"bitmap" : "NetworkEdit",
   118          "name" : "Edit slave", 
   119          "name" : "Edit slave", 
   119          "tooltip" : "Edit CanOpen slave with ObjdictEdit",
   120          "tooltip" : "Edit CanOpen slave with ObjdictEdit",
   120          "method" : "_OpenView"},
   121          "method" : "_OpenView"},
   121     ]
   122     ]
   122 
       
   123     def OnCTNClose(self):
       
   124         if self._View:
       
   125             self._View.Close()
       
   126 
   123 
   127     def CTNTestModified(self):
   124     def CTNTestModified(self):
   128         return self.ChangesToSave or self.OneFileHasChanged()
   125         return self.ChangesToSave or self.OneFileHasChanged()
   129         
   126         
   130     def OnCTNSave(self):
   127     def OnCTNSave(self):
   199         return self.Fullname
   196         return self.Fullname
   200     
   197     
   201     def GetBufferState(self):
   198     def GetBufferState(self):
   202         return self.GetCurrentBufferState()
   199         return self.GetCurrentBufferState()
   203 
   200 
       
   201     ConfNodeMethods = []
       
   202 
   204 class _NodeListCTN(NodeList):
   203 class _NodeListCTN(NodeList):
   205     XSD = """<?xml version="1.0" encoding="ISO-8859-1" ?>
   204     XSD = """<?xml version="1.0" encoding="ISO-8859-1" ?>
   206     <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   205     <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   207       <xsd:element name="CanFestivalNode">
   206       <xsd:element name="CanFestivalNode">
   208         <xsd:complexType>
   207         <xsd:complexType>
   236         elif path == "BaseParams.Name":
   235         elif path == "BaseParams.Name":
   237             self.SetNetworkName(value)
   236             self.SetNetworkName(value)
   238         
   237         
   239         return result
   238         return result
   240     
   239     
   241     def _OpenView(self):
   240     _GeneratedMasterView = None
   242         ConfigTreeNode._OpenView(self)
   241     def _ShowGeneratedMaster(self):
   243         if self._View is not None:
   242         self._OpenView("Generated master")
   244             self._View.SetBusId(self.GetCurrentLocation())
   243         
   245     
   244     def _OpenView(self, name=None):
   246     _GeneratedView = None
   245         if name == "Generated master":
   247     def _ShowMasterGenerated(self):
   246             if self._GeneratedMasterView is None:
   248         if self._GeneratedView is None:
   247                 buildpath = self._getBuildPath()
   249             buildpath = self._getBuildPath()
   248                 # Eventually create build dir
   250             # Eventually create build dir
   249                 if not os.path.exists(buildpath):
   251             if not os.path.exists(buildpath):
   250                     self.GetCTRoot().logger.write_error(_("Error: No PLC built\n"))
   252                 self.GetCTRoot().logger.write_error(_("Error: No PLC built\n"))
   251                     return
   253                 return
   252                 
       
   253                 masterpath = os.path.join(buildpath, "MasterGenerated.od")
       
   254                 if not os.path.exists(masterpath):
       
   255                     self.GetCTRoot().logger.write_error(_("Error: No Master generated\n"))
       
   256                     return
       
   257                 
       
   258                 app_frame = self.GetCTRoot().AppFrame
       
   259                 
       
   260                 manager = MiniNodeManager(self, masterpath, self.CTNFullName() + ".generated_master")
       
   261                 self._GeneratedMasterView = SlaveEditor(app_frame.TabsOpened, manager, app_frame, False)
       
   262                 
       
   263                 app_frame.EditProjectElement(self._GeneratedMasterView, name)
   254             
   264             
   255             masterpath = os.path.join(buildpath, "MasterGenerated.od")
   265             return self._GeneratedMasterView
   256             if not os.path.exists(masterpath):
   266         else:
   257                 self.GetCTRoot().logger.write_error(_("Error: No Master generated\n"))
   267             ConfigTreeNode._OpenView(self)
   258                 return
   268             if self._View is not None:
   259             
   269                 self._View.SetBusId(self.GetCurrentLocation())
   260             app_frame = self.GetCTRoot().AppFrame
   270             return self._View
   261             
       
   262             manager = MiniNodeManager(self, masterpath, self.CTNFullName() + ".generated_master")
       
   263             self._GeneratedView = SlaveEditor(app_frame.TabsOpened, manager, app_frame, False)
       
   264             
       
   265             app_frame.EditProjectElement(self._GeneratedView, "MasterGenerated")
       
   266     
       
   267     def _CloseGenerateView(self):
       
   268         if self._GeneratedView is not None:
       
   269             app_frame = self.GetCTRoot().AppFrame
       
   270             if app_frame is not None:
       
   271                 app_frame.DeletePage(self._GeneratedView)
       
   272     
   271     
   273     ConfNodeMethods = [
   272     ConfNodeMethods = [
   274         {"bitmap" : "NetworkEdit",
   273         {"bitmap" : "NetworkEdit",
   275          "name" : _("Edit network"), 
   274          "name" : _("Edit network"), 
   276          "tooltip" : _("Edit CanOpen Network with NetworkEdit"),
   275          "tooltip" : _("Edit CanOpen Network with NetworkEdit"),
   277          "method" : "_OpenView"},
   276          "method" : "_OpenView"},
   278         {"bitmap" : "ShowMaster",
   277         {"bitmap" : "ShowMaster",
   279          "name" : _("Show Master"), 
   278          "name" : _("Show Master"), 
   280          "tooltip" : _("Show Master generated by config_utils"),
   279          "tooltip" : _("Show Master generated by config_utils"),
   281          "method" : "_ShowMasterGenerated"}
   280          "method" : "_ShowGeneratedMaster"}
   282     ]
   281     ]
   283     
   282     
   284     def OnCloseEditor(self, view):
   283     def OnCloseEditor(self, view):
   285         ConfigTreeNode.OnCloseEditor(self, view)
   284         ConfigTreeNode.OnCloseEditor(self, view)
   286         if self._GeneratedView == view:
   285         if self._GeneratedMasterView == view:
   287             self._GeneratedView = None
   286             self._GeneratedMasterView = None
   288 
   287     
   289     def OnCTNClose(self):
   288     def OnCTNClose(self):
   290         ConfigTreeNode.OnCTNClose(self)
   289         ConfigTreeNode.OnCTNClose(self)
   291         self._CloseGenerateView()
   290         self._CloseView(self._GeneratedMasterView)
   292         return True
   291         return True
   293 
   292 
   294     def CTNTestModified(self):
   293     def CTNTestModified(self):
   295         return self.ChangesToSave or self.HasChanged()
   294         return self.ChangesToSave or self.HasChanged()
   296         
   295         
   309             "SIZE" : size "X", "B", "W", "D", "L"
   308             "SIZE" : size "X", "B", "W", "D", "L"
   310             "LOC" : tuple of interger for IEC location (0,1,2,...)
   309             "LOC" : tuple of interger for IEC location (0,1,2,...)
   311             }, ...]
   310             }, ...]
   312         @return: [(C_file_name, CFLAGS),...] , LDFLAGS_TO_APPEND
   311         @return: [(C_file_name, CFLAGS),...] , LDFLAGS_TO_APPEND
   313         """
   312         """
   314         self._CloseGenerateView()
   313         self._CloseView(self._GeneratedMasterView)
   315         current_location = self.GetCurrentLocation()
   314         current_location = self.GetCurrentLocation()
   316         # define a unique name for the generated C file
   315         # define a unique name for the generated C file
   317         prefix = "_".join(map(str, current_location))
   316         prefix = "_".join(map(str, current_location))
   318         Gen_OD_path = os.path.join(buildpath, "OD_%s.c"%prefix )
   317         Gen_OD_path = os.path.join(buildpath, "OD_%s.c"%prefix )
   319         # Create a new copy of the model with DCF loaded with PDO mappings for desired location
   318         # Create a new copy of the model with DCF loaded with PDO mappings for desired location