plugger.py
changeset 417 a895ae50b737
parent 415 339fa2542481
child 420 c093ec48f2fd
--- a/plugger.py	Fri Oct 09 17:52:00 2009 +0200
+++ b/plugger.py	Thu Oct 15 10:11:07 2009 +0200
@@ -485,7 +485,7 @@
         # Ask to his parent to remove it
         self.PlugParent._doRemoveChild(self)
 
-    def PlugAddChild(self, PlugName, PlugType):
+    def PlugAddChild(self, PlugName, PlugType, IEC_Channel=0):
         """
         Create the plugins that may be added as child to this node self
         @param PlugType: string desining the plugin class name (get name from PlugChildsTypes)
@@ -554,7 +554,7 @@
                     # If plugin do not have corresponding file/dirs - they will be created on Save
                     _self.PlugMakeDir()
                     # Find an IEC number
-                    _self.FindNewIEC_Channel(0)
+                    _self.FindNewIEC_Channel(IEC_Channel)
                     # Call the plugin real __init__
                     if getattr(PlugClass, "__init__", None):
                         PlugClass.__init__(_self)
@@ -742,8 +742,7 @@
         PLCControler.__init__(self)
 
         self.MandatoryParams = None
-        self.AppFrame = frame
-        self.logger = logger
+        self.SetAppFrame(frame, logger)
         self._builder = None
         self._connector = None
         self.Deleting = False
@@ -755,11 +754,6 @@
         self.DebugTimer=None
         self.ResetIECProgramsAndVariables()
         
-        # Timer to pull PLC status
-        ID_STATUSTIMER = wx.NewId()
-        self.StatusTimer = wx.Timer(self.AppFrame, ID_STATUSTIMER)
-        self.AppFrame.Bind(wx.EVT_TIMER, self.PullPLCStatusProc, self.StatusTimer)
-        
         #This method are not called here... but in NewProject and OpenProject
         #self._AddParamsMembers()
         #self.PluggedChilds = {}
@@ -785,6 +779,25 @@
     def __del__(self):
         self.Deleting = True
 
+    def SetAppFrame(self, frame, logger):
+        self.AppFrame = frame
+        self.logger = logger
+        self.StatusTimer = None
+        
+        if frame is not None:
+            # Timer to pull PLC status
+            ID_STATUSTIMER = wx.NewId()
+            self.StatusTimer = wx.Timer(self.AppFrame, ID_STATUSTIMER)
+            self.AppFrame.Bind(wx.EVT_TIMER, self.PullPLCStatusProc, self.StatusTimer)
+
+    def ResetAppFrame(self, logger):
+        if self.AppFrame is not None:
+            self.AppFrame.Unbind(wx.EVT_TIMER, self.StatusTimer)
+            self.StatusTimer = None
+            self.AppFrame = None
+        
+        self.logger = logger
+
     def PluginLibraryFilePath(self):
         return os.path.join(os.path.split(__file__)[0], "pous.xml")
 
@@ -910,8 +923,8 @@
     
     def CloseProject(self):
         self.ClearPluggedChilds()
-        self.AppFrame.Unbind(wx.EVT_TIMER, self.StatusTimer)
-    
+        self.ResetAppFrame(None)
+        
     def SaveProject(self):
         if not self.SaveXMLFile():
             self.SaveXMLFile(os.path.join(self.ProjectPath, 'plc.xml'))