PLCOpenEditor.py
changeset 675 0ea836add01f
parent 673 b686f0081e2b
child 676 0f10f5091245
--- a/PLCOpenEditor.py	Mon Apr 30 16:27:25 2012 +0200
+++ b/PLCOpenEditor.py	Wed May 02 00:32:15 2012 +0200
@@ -833,6 +833,33 @@
             self.RefreshEditor()
         event.Skip()
     
+    def GetProjectConfiguration(self):
+        if self.Config.HasEntry("projects"):
+            projects = cPickle.loads(str(self.Config.Read("projects")))
+        else:
+            projects = {}
+        
+        return projects.setdefault(os.path.realpath(self.Controler.GetFilePath()), {})
+    
+    def SavePageState(self, page):
+        state = page.GetState()
+        if state is not None:
+            if self.Config.HasEntry("projects"):
+                projects = cPickle.loads(str(self.Config.Read("projects")))
+            else:
+                projects = {}
+            
+            project_infos = projects.setdefault(os.path.realpath(self.Controler.GetFilePath()), {})
+            editors_state = project_infos.setdefault("editors_state", {})
+            
+            if page.IsDebugging():
+                editors_state[page.GetInstancePath()] = state
+            else:
+                editors_state[page.GetTagName()] = state
+            
+            self.Config.Write("projects", cPickle.dumps(projects))
+            self.Config.Flush()
+    
     def GetTabInfos(self, tab):
         if isinstance(tab, EditorPanel):
             if tab.IsDebugging():
@@ -844,7 +871,7 @@
                 if page_ref == tab:
                     return ("main", page_name)
         return None
-        
+    
     def SaveTabOrganization(self, notebook):
         tabs = []
         for child in notebook.GetChildren():
@@ -974,6 +1001,9 @@
         
             self.SaveProjectOrganization()
         
+        for i in xrange(self.TabsOpened.GetPageCount()):
+            self.SavePageState(self.TabsOpened.GetPage(i))
+        
         self.Config.Flush()
 
     def SaveProjectOrganization(self):
@@ -985,14 +1015,11 @@
             else:
                 projects = {}
             
-            project_infos = {
-                "tabs": self.SaveTabOrganization(self.TabsOpened)
-            }
+            project_infos = projects.setdefault(os.path.realpath(self.Controler.GetFilePath()), {})
+            project_infos["tabs"] = self.SaveTabOrganization(self.TabsOpened)
             if self.EnableDebug:
                 project_infos["debug_vars"] = self.DebugVariablePanel.GetDebugVariables()
                 
-            projects[os.path.realpath(self.Controler.GetFilePath())] = project_infos    
-            
             self.Config.Write("projects", cPickle.dumps(projects))
             self.Config.Flush()
     
@@ -1034,6 +1061,10 @@
     ## Callback function when AUINotebook Page closed with CloseButton
     #  @param event AUINotebook Event.
     def OnPageClose(self, event):
+        selected = self.TabsOpened.GetSelection()
+        if selected > -1:
+            self.SavePageState(self.TabsOpened.GetPage(selected))
+        
         # Refresh all window elements that have changed
         wx.CallAfter(self._Refresh, TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU)
         wx.CallAfter(self.RefreshTabCtrlEvent)
@@ -1909,6 +1940,12 @@
                 new_window = element
                 self.AddPage(element, "")
             if new_window is not None:
+                project_infos = self.GetProjectConfiguration()
+                if project_infos.has_key("editors_state"):
+                    state = project_infos["editors_state"].get(tagname)
+                    if state is not None:
+                        wx.CallAfter(new_window.SetState, state)
+                
                 openedidx = self.IsOpened(tagname)
                 old_selected = self.TabsOpened.GetSelection()
                 if old_selected != openedidx:
@@ -2163,6 +2200,12 @@
                 else:
                     new_window.SetKeywords(ST_KEYWORDS)
             if new_window is not None:
+                project_infos = self.GetProjectConfiguration()
+                if project_infos.has_key("editors_state"):
+                    state = project_infos["editors_state"].get(instance_path)
+                    if state is not None:
+                        wx.CallAfter(new_window.SetState, state)
+                
                 if instance_category in [ITEM_FUNCTIONBLOCK, ITEM_PROGRAM]:
                     pou_type = self.Controler.GetEditedElementType(instance_type, True)[1].upper()
                     icon = self.GenerateBitmap(pou_type, bodytype)