PLCOpenEditor.py
changeset 675 0ea836add01f
parent 673 b686f0081e2b
child 676 0f10f5091245
equal deleted inserted replaced
674:bbffe4110141 675:0ea836add01f
   831             self.RestoreLastOrganization()
   831             self.RestoreLastOrganization()
   832             self.Starting = False
   832             self.Starting = False
   833             self.RefreshEditor()
   833             self.RefreshEditor()
   834         event.Skip()
   834         event.Skip()
   835     
   835     
       
   836     def GetProjectConfiguration(self):
       
   837         if self.Config.HasEntry("projects"):
       
   838             projects = cPickle.loads(str(self.Config.Read("projects")))
       
   839         else:
       
   840             projects = {}
       
   841         
       
   842         return projects.setdefault(os.path.realpath(self.Controler.GetFilePath()), {})
       
   843     
       
   844     def SavePageState(self, page):
       
   845         state = page.GetState()
       
   846         if state is not None:
       
   847             if self.Config.HasEntry("projects"):
       
   848                 projects = cPickle.loads(str(self.Config.Read("projects")))
       
   849             else:
       
   850                 projects = {}
       
   851             
       
   852             project_infos = projects.setdefault(os.path.realpath(self.Controler.GetFilePath()), {})
       
   853             editors_state = project_infos.setdefault("editors_state", {})
       
   854             
       
   855             if page.IsDebugging():
       
   856                 editors_state[page.GetInstancePath()] = state
       
   857             else:
       
   858                 editors_state[page.GetTagName()] = state
       
   859             
       
   860             self.Config.Write("projects", cPickle.dumps(projects))
       
   861             self.Config.Flush()
       
   862     
   836     def GetTabInfos(self, tab):
   863     def GetTabInfos(self, tab):
   837         if isinstance(tab, EditorPanel):
   864         if isinstance(tab, EditorPanel):
   838             if tab.IsDebugging():
   865             if tab.IsDebugging():
   839                 return ("debug", tab.GetInstancePath())
   866                 return ("debug", tab.GetInstancePath())
   840             else:
   867             else:
   842         else:
   869         else:
   843             for page_name, (page_ref, page_title) in self.MainTabs.iteritems():
   870             for page_name, (page_ref, page_title) in self.MainTabs.iteritems():
   844                 if page_ref == tab:
   871                 if page_ref == tab:
   845                     return ("main", page_name)
   872                     return ("main", page_name)
   846         return None
   873         return None
   847         
   874     
   848     def SaveTabOrganization(self, notebook):
   875     def SaveTabOrganization(self, notebook):
   849         tabs = []
   876         tabs = []
   850         for child in notebook.GetChildren():
   877         for child in notebook.GetChildren():
   851             if isinstance(child, wx.aui.AuiTabCtrl):
   878             if isinstance(child, wx.aui.AuiTabCtrl):
   852                 pos = child.GetPosition()
   879                 pos = child.GetPosition()
   972             
   999             
   973             self.Config.Write("perspective", self.AUIManager.SavePerspective())
  1000             self.Config.Write("perspective", self.AUIManager.SavePerspective())
   974         
  1001         
   975             self.SaveProjectOrganization()
  1002             self.SaveProjectOrganization()
   976         
  1003         
       
  1004         for i in xrange(self.TabsOpened.GetPageCount()):
       
  1005             self.SavePageState(self.TabsOpened.GetPage(i))
       
  1006         
   977         self.Config.Flush()
  1007         self.Config.Flush()
   978 
  1008 
   979     def SaveProjectOrganization(self):
  1009     def SaveProjectOrganization(self):
   980         if USE_AUI and self.Controler is not None:
  1010         if USE_AUI and self.Controler is not None:
   981             tabs = []
  1011             tabs = []
   983             if self.Config.HasEntry("projects"):
  1013             if self.Config.HasEntry("projects"):
   984                 projects = cPickle.loads(str(self.Config.Read("projects")))
  1014                 projects = cPickle.loads(str(self.Config.Read("projects")))
   985             else:
  1015             else:
   986                 projects = {}
  1016                 projects = {}
   987             
  1017             
   988             project_infos = {
  1018             project_infos = projects.setdefault(os.path.realpath(self.Controler.GetFilePath()), {})
   989                 "tabs": self.SaveTabOrganization(self.TabsOpened)
  1019             project_infos["tabs"] = self.SaveTabOrganization(self.TabsOpened)
   990             }
       
   991             if self.EnableDebug:
  1020             if self.EnableDebug:
   992                 project_infos["debug_vars"] = self.DebugVariablePanel.GetDebugVariables()
  1021                 project_infos["debug_vars"] = self.DebugVariablePanel.GetDebugVariables()
   993                 
  1022                 
   994             projects[os.path.realpath(self.Controler.GetFilePath())] = project_infos    
       
   995             
       
   996             self.Config.Write("projects", cPickle.dumps(projects))
  1023             self.Config.Write("projects", cPickle.dumps(projects))
   997             self.Config.Flush()
  1024             self.Config.Flush()
   998     
  1025     
   999     def LoadProjectOrganization(self):
  1026     def LoadProjectOrganization(self):
  1000         if USE_AUI and self.Controler is not None and self.Config.HasEntry("projects"):
  1027         if USE_AUI and self.Controler is not None and self.Config.HasEntry("projects"):
  1032             self.RefreshFunctions[element]()
  1059             self.RefreshFunctions[element]()
  1033 
  1060 
  1034     ## Callback function when AUINotebook Page closed with CloseButton
  1061     ## Callback function when AUINotebook Page closed with CloseButton
  1035     #  @param event AUINotebook Event.
  1062     #  @param event AUINotebook Event.
  1036     def OnPageClose(self, event):
  1063     def OnPageClose(self, event):
       
  1064         selected = self.TabsOpened.GetSelection()
       
  1065         if selected > -1:
       
  1066             self.SavePageState(self.TabsOpened.GetPage(selected))
       
  1067         
  1037         # Refresh all window elements that have changed
  1068         # Refresh all window elements that have changed
  1038         wx.CallAfter(self._Refresh, TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU)
  1069         wx.CallAfter(self._Refresh, TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU)
  1039         wx.CallAfter(self.RefreshTabCtrlEvent)
  1070         wx.CallAfter(self.RefreshTabCtrlEvent)
  1040         event.Skip()
  1071         event.Skip()
  1041 
  1072 
  1907                 self.AddPage(new_window, "")
  1938                 self.AddPage(new_window, "")
  1908             elif isinstance(element, EditorPanel):
  1939             elif isinstance(element, EditorPanel):
  1909                 new_window = element
  1940                 new_window = element
  1910                 self.AddPage(element, "")
  1941                 self.AddPage(element, "")
  1911             if new_window is not None:
  1942             if new_window is not None:
       
  1943                 project_infos = self.GetProjectConfiguration()
       
  1944                 if project_infos.has_key("editors_state"):
       
  1945                     state = project_infos["editors_state"].get(tagname)
       
  1946                     if state is not None:
       
  1947                         wx.CallAfter(new_window.SetState, state)
       
  1948                 
  1912                 openedidx = self.IsOpened(tagname)
  1949                 openedidx = self.IsOpened(tagname)
  1913                 old_selected = self.TabsOpened.GetSelection()
  1950                 old_selected = self.TabsOpened.GetSelection()
  1914                 if old_selected != openedidx:
  1951                 if old_selected != openedidx:
  1915                     if old_selected >= 0:
  1952                     if old_selected >= 0:
  1916                         self.TabsOpened.GetPage(old_selected).ResetBuffer()
  1953                         self.TabsOpened.GetPage(old_selected).ResetBuffer()
  2161                 if bodytype == "IL":
  2198                 if bodytype == "IL":
  2162                     new_window.SetKeywords(IL_KEYWORDS)
  2199                     new_window.SetKeywords(IL_KEYWORDS)
  2163                 else:
  2200                 else:
  2164                     new_window.SetKeywords(ST_KEYWORDS)
  2201                     new_window.SetKeywords(ST_KEYWORDS)
  2165             if new_window is not None:
  2202             if new_window is not None:
       
  2203                 project_infos = self.GetProjectConfiguration()
       
  2204                 if project_infos.has_key("editors_state"):
       
  2205                     state = project_infos["editors_state"].get(instance_path)
       
  2206                     if state is not None:
       
  2207                         wx.CallAfter(new_window.SetState, state)
       
  2208                 
  2166                 if instance_category in [ITEM_FUNCTIONBLOCK, ITEM_PROGRAM]:
  2209                 if instance_category in [ITEM_FUNCTIONBLOCK, ITEM_PROGRAM]:
  2167                     pou_type = self.Controler.GetEditedElementType(instance_type, True)[1].upper()
  2210                     pou_type = self.Controler.GetEditedElementType(instance_type, True)[1].upper()
  2168                     icon = self.GenerateBitmap(pou_type, bodytype)
  2211                     icon = self.GenerateBitmap(pou_type, bodytype)
  2169                 elif instance_category == ITEM_TRANSITION:
  2212                 elif instance_category == ITEM_TRANSITION:
  2170                     icon = self.GenerateBitmap("TRANSITION", bodytype)
  2213                     icon = self.GenerateBitmap("TRANSITION", bodytype)