PLCOpenEditor.py
changeset 102 85875dcb7754
parent 98 ec5d7af033d8
child 107 255eada20688
--- a/PLCOpenEditor.py	Tue Oct 02 18:00:13 2007 +0200
+++ b/PLCOpenEditor.py	Tue Oct 02 18:07:59 2007 +0200
@@ -286,23 +286,6 @@
         self._init_coll_SFCMenu_Items(self.SFCMenu)
         self._init_coll_ConfigMenu_Items(self.ConfigMenu)
 
-    def _init_coll_EditorGridSizer_Items(self, parent):
-        parent.AddWindow(self.ToolBar, 0, border=0, flag=wx.GROW)
-        parent.AddWindow(self.TabsOpened, 0, border=0, flag=wx.GROW)
-
-    def _init_coll_EditorGridSizer_Growables(self, parent):
-        parent.AddGrowableCol(0)
-        parent.AddGrowableRow(1)
-
-    def _init_sizers(self):
-        if wx.Platform != '__WXMSW__':
-            self.EditorGridSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
-        
-            self._init_coll_EditorGridSizer_Growables(self.EditorGridSizer)
-            self._init_coll_EditorGridSizer_Items(self.EditorGridSizer)
-        
-            self.EditorPanel.SetSizer(self.EditorGridSizer)
-
     def _init_ctrls(self, prnt):
         wx.Frame.__init__(self, id=ID_PLCOPENEDITOR, name=u'PLCOpenEditor',
               parent=prnt, pos=wx.Point(235, 287), size=wx.Size(1000, 600),
@@ -339,48 +322,23 @@
         self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnProjectTreeItemSelected,
               id=ID_PLCOPENEDITORPROJECTTREE)
         
-        if wx.Platform == '__WXMSW__':
-            self.ToolBar = self.CreateToolBar(wx.TB_HORIZONTAL|wx.TB_FLAT|wx.NO_BORDER, 
-                  ID_PLCOPENEDITORTOOLBAR, 'ToolBar')
-            self.ToolBar.SetToolBitmapSize(wx.Size(25, 25))
-            self.ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION, 
-                  wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, "Select an object")
-            self.ToolBar.Realize()
-            self.Bind(wx.EVT_TOOL, self.OnSelectionTool, 
-                  id=ID_PLCOPENEDITORTOOLBARSELECTION)
-        
-            self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED,
-                  name='TabsOpened', parent=self.MainSplitter, pos=wx.Point(0,
-                  0), size=wx.Size(0, 0), style=0)
-            self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED,
-                  self.OnPouSelectedChanged, id=ID_PLCOPENEDITORTABSOPENED)
-        
-            self.MainSplitter.SplitVertically(self.ProjectTree, self.TabsOpened, 200)
-        
-        else:
-            self.EditorPanel = wx.Panel(id=ID_PLCOPENEDITOREDITORPANEL, 
-                  name='TabPanel', parent=self.MainSplitter, pos=wx.Point(0, 0),
-                  size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
-        
-            self.ToolBar = wx.ToolBar(id=ID_PLCOPENEDITORTOOLBAR, name='ToolBar',
-                  parent=self.EditorPanel, pos=wx.Point(0, 0), size=wx.Size(0, 40),
-                  style=wx.TB_HORIZONTAL|wx.NO_BORDER)
-            self.ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION, 
-                  wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, "Select an object")
-            self.ToolBar.Realize()
-            self.Bind(wx.EVT_TOOL, self.OnSelectionTool, 
-                  id=ID_PLCOPENEDITORTOOLBARSELECTION)
-        
-            self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED,
-                  name='TabsOpened', parent=self.EditorPanel, pos=wx.Point(0,
-                  0), size=wx.Size(0, 0), style=0)
-            self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED,
-                  self.OnPouSelectedChanged, id=ID_PLCOPENEDITORTABSOPENED)
-        
-            self.MainSplitter.SplitVertically(self.ProjectTree, self.EditorPanel, 200)
-        
-        self._init_sizers()
-
+        self.ToolBar = self.CreateToolBar(wx.TB_HORIZONTAL|wx.TB_FLAT|wx.NO_BORDER, 
+              ID_PLCOPENEDITORTOOLBAR, 'ToolBar')
+        self.ToolBar.SetToolBitmapSize(wx.Size(25, 25))
+        self.ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION, 
+              wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, "Select an object")
+        self.ToolBar.Realize()
+        self.Bind(wx.EVT_TOOL, self.OnSelectionTool, 
+              id=ID_PLCOPENEDITORTOOLBARSELECTION)
+    
+        self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED,
+              name='TabsOpened', parent=self.MainSplitter, pos=wx.Point(0,
+              0), size=wx.Size(0, 0), style=0)
+        self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED,
+              self.OnPouSelectedChanged, id=ID_PLCOPENEDITORTABSOPENED)
+    
+        self.MainSplitter.SplitVertically(self.ProjectTree, self.TabsOpened, 200)
+        
     def __init__(self, parent, controler = None, fileOpen = None):
         self.ModeSolo = controler == None
         self._init_ctrls(parent)
@@ -561,9 +519,9 @@
         event.Skip()
     
     def OnCloseProjectMenu(self, event):
-        self.Controler.Reset()
         self.TabsOpened.DeleteAllPages()
         self.ProjectTree.DeleteAllItems()
+        self.Controler.Reset()
         self.RefreshTitle()
         self.RefreshFileMenu()
         self.RefreshEditMenu()
@@ -898,67 +856,103 @@
         data = self.ProjectTree.GetPyData(selected)
         if name == "Properties":
             self.ShowProperties()
-        elif data in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION, ITEM_RESOURCE, ITEM_CONFIGURATION]:
-            idx = None
-            if data == ITEM_CONFIGURATION:
-                idx = self.Controler.OpenConfigurationEditing(name)
+        if data in [ITEM_POU, ITEM_CONFIGURATION]:
+            self.EditProjectElement(data, name)
+        elif data == ITEM_RESOURCE:
+            item = self.ProjectTree.GetItemParent(selected)
+            item_type = self.ProjectTree.GetPyData(item)
+            while item_type != ITEM_CONFIGURATION:
+                item = self.ProjectTree.GetItemParent(item)
+                item_type = self.ProjectTree.GetPyData(item)
+            config_name = self.ProjectTree.GetItemText(item)
+            self.EditProjectElement(data, "%s::%s"%(config_name, name))
+        elif data in [ITEM_TRANSITION, ITEM_ACTION]:
+            item = self.ProjectTree.GetItemParent(selected)
+            item_type = self.ProjectTree.GetPyData(item)
+            while item_type != ITEM_POU:
+                item = self.ProjectTree.GetItemParent(item)
+                item_type = self.ProjectTree.GetPyData(item)
+            pou_name = self.ProjectTree.GetItemText(item)
+            self.EditProjectElement(data, "%s::%s"%(pou_name, name))
+    
+    def OnProjectTreeItemSelected(self, event):
+        selected = event.GetItem()
+        name = self.ProjectTree.GetItemText(selected)
+        data = self.ProjectTree.GetPyData(selected)
+        if data in [ITEM_POU, ITEM_CONFIGURATION]:
+            self.EditProjectElement(data, name, True)
+        elif data == ITEM_RESOURCE:
+            item = self.ProjectTree.GetItemParent(selected)
+            item_type = self.ProjectTree.GetPyData(item)
+            while item_type != ITEM_CONFIGURATION:
+                item = self.ProjectTree.GetItemParent(item)
+                item_type = self.ProjectTree.GetPyData(item)
+            config_name = self.ProjectTree.GetItemText(item)
+            self.EditProjectElement(data, "%s::%s"%(config_name, name), True)
+        elif data in [ITEM_TRANSITION, ITEM_ACTION]:
+            item = self.ProjectTree.GetItemParent(selected)
+            item_type = self.ProjectTree.GetPyData(item)
+            while item_type != ITEM_POU:
+                item = self.ProjectTree.GetItemParent(item)
+                item_type = self.ProjectTree.GetPyData(item)
+            pou_name = self.ProjectTree.GetItemText(item)
+            self.EditProjectElement(data, "%s::%s"%(pou_name, name), True)
+        event.Skip()
+    
+    def EditProjectElement(self, elementtype, elementname, onlyopened = False):
+        idx = None
+        names = elementname.split("::")
+        if elementtype == ITEM_CONFIGURATION and len(names) == 1:
+            if not onlyopened:
+                idx = self.Controler.OpenConfigurationEditing(*names)
+                if idx is not None:
+                    new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "config", config_name = names[0])
+                    self.TabsOpened.AddPage(new_window, "")
+            if idx is None:
+                idx = self.Controler.ChangeConfigurationEditing(*names)
+        elif elementtype == ITEM_RESOURCE and len(names) == 2:
+            if not onlyopened:
+                idx = self.Controler.OpenConfigurationResourceEditing(*names)
+                if idx is not None:
+                    new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "resource", config_name = names[0], resource_name = names[1])
+                    self.TabsOpened.AddPage(new_window, "")
+            if idx is None:
+                idx = self.Controler.ChangeConfigurationResourceEditing(*names)
+        elif elementtype == ITEM_POU and len(names) == 1:
+            if not onlyopened:
+                idx = self.Controler.OpenPouEditing(*names)
                 if idx != None:
-                    new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "config", config_name = name)
+                    new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, self.Controler.GetPouType(names[0]), pou_name = names[0])
                     self.TabsOpened.AddPage(new_window, "")
-                else:
-                    idx = self.Controler.ChangeConfigurationEditing(name)
-            elif data == ITEM_RESOURCE:
-                item = self.ProjectTree.GetItemParent(selected)
-                item_type = self.ProjectTree.GetPyData(item)
-                while item_type != ITEM_CONFIGURATION:
-                    item = self.ProjectTree.GetItemParent(item)
-                    item_type = self.ProjectTree.GetPyData(item)
-                config_name = self.ProjectTree.GetItemText(item)
-                idx = self.Controler.OpenConfigurationResourceEditing(config_name, name)
-                if idx != None:
-                    new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "resource", config_name = config_name, resource_name = name)
+            if idx is None:
+                idx = self.Controler.ChangePouEditing(*names)
+        elif elementtype == ITEM_TRANSITION and len(names) == 2:
+            if not onlyopened:
+                idx = self.Controler.OpenPouTransitionEditing(*names)
+                if idx is not None:
+                    new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "transition", pou_name = names[0], transition_name = names[1])
                     self.TabsOpened.AddPage(new_window, "")
-                else:
-                    idx = self.Controler.ChangeConfigurationResourceEditing(config_name, name)
-            elif data == ITEM_POU:
-                idx = self.Controler.OpenPouEditing(name)
-                if idx != None:
-                    new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, self.Controler.GetPouType(name), pou_name = name)
+            if idx is None:
+                idx = self.Controler.ChangePouTransitionEditing(*names)
+        elif elementtype == ITEM_ACTION and len(names) == 2:
+            if not onlyopened:
+                idx = self.Controler.OpenPouActionEditing(*names)
+                if idx is not None:
+                    new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "action", pou_name = names[0], action_name = names[1])
                     self.TabsOpened.AddPage(new_window, "")
-                else:
-                    idx = self.Controler.ChangePouEditing(name)
-            else:
-                item = self.ProjectTree.GetItemParent(selected)
-                item_type = self.ProjectTree.GetPyData(item)
-                while item_type != ITEM_POU:
-                    item = self.ProjectTree.GetItemParent(item)
-                    item_type = self.ProjectTree.GetPyData(item)
-                pou_name = self.ProjectTree.GetItemText(item)
-                if data == ITEM_TRANSITION:
-                    idx = self.Controler.OpenPouTransitionEditing(pou_name, name)
-                    if idx != None:
-                        new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "transition", pou_name = pou_name, transition_name = name)
-                        self.TabsOpened.AddPage(new_window, "")
-                    else:
-                        idx = self.Controler.ChangePouTransitionEditing(pou_name, name)
-                elif data == ITEM_ACTION:
-                    idx = self.Controler.OpenPouActionEditing(pou_name, name)
-                    if idx != None:
-                        new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "action", pou_name = pou_name, action_name = name)
-                        self.TabsOpened.AddPage(new_window, "")
-                    else:
-                        idx = self.Controler.ChangePouActionEditing(pou_name, name)
-            if idx != None:
-                old_selected = self.TabsOpened.GetSelection()
-                if old_selected >= 0:
-                    self.TabsOpened.GetPage(old_selected).ResetBuffer()
-                self.TabsOpened.SetSelection(idx)
-                window = self.TabsOpened.GetPage(idx)
-                window.RefreshView()
-                self.RefreshTabsOpenedTitles()
-                self.RefreshFileMenu()
-                self.RefreshEditMenu()
-                self.RefreshToolBar()
+            if idx is None:
+                idx = self.Controler.ChangePouActionEditing(*names)
+        if idx != None:
+            old_selected = self.TabsOpened.GetSelection()
+            if old_selected >= 0:
+                self.TabsOpened.GetPage(old_selected).ResetBuffer()
+            self.TabsOpened.SetSelection(idx)
+            window = self.TabsOpened.GetPage(idx)
+            window.RefreshView()
+            self.RefreshTabsOpenedTitles()
+            self.RefreshFileMenu()
+            self.RefreshEditMenu()
+            self.RefreshToolBar()
     
     def OnProjectTreeRightUp(self, event):
         selected = self.ProjectTree.GetSelection()
@@ -969,53 +963,6 @@
         elif self.ProjectTree.GetPyData(selected) == ITEM_CONFIGURATION:
             self.PopupMenu(self.ConfigMenu)
         event.Skip()
-    
-    def OnProjectTreeItemSelected(self, event):
-        selected = event.GetItem()
-        name = self.ProjectTree.GetItemText(selected)
-        data = self.ProjectTree.GetPyData(selected)
-        if data in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION, ITEM_RESOURCE, ITEM_CONFIGURATION]:
-            idx = None
-            if data == ITEM_CONFIGURATION:
-                if self.Controler.IsConfigurationEditing(name):
-                    idx = self.Controler.ChangeConfigurationEditing(name)
-            elif data == ITEM_RESOURCE:
-                item = self.ProjectTree.GetItemParent(selected)
-                item_type = self.ProjectTree.GetPyData(item)
-                while item_type != ITEM_CONFIGURATION:
-                    item = self.ProjectTree.GetItemParent(item)
-                    item_type = self.ProjectTree.GetPyData(item)
-                config_name = self.ProjectTree.GetItemText(item)
-                if self.Controler.IsConfigurationResourceEditing(config_name, name):
-                    idx = self.Controler.ChangeConfigurationResourceEditing(config_name, name)
-            elif data == ITEM_POU:
-                if self.Controler.IsPouEditing(name):
-                    idx = self.Controler.ChangePouEditing(name)
-            else:
-                item = self.ProjectTree.GetItemParent(selected)
-                item_type = self.ProjectTree.GetPyData(item)
-                while item_type != ITEM_POU:
-                    item = self.ProjectTree.GetItemParent(item)
-                    item_type = self.ProjectTree.GetPyData(item)
-                pou_name = self.ProjectTree.GetItemText(item)
-                if data == ITEM_TRANSITION:
-                    if self.Controler.IsPouTransitionEditing(pou_name, name):
-                        idx = self.Controler.ChangePouTransitionEditing(pou_name, name)
-                elif data == ITEM_ACTION:
-                    if self.Controler.IsPouActionEditing(pou_name, name):
-                        idx = self.Controler.ChangePouActionEditing(pou_name, name)
-            if idx != None:
-                old_selected = self.TabsOpened.GetSelection()
-                if old_selected >= 0:
-                    self.TabsOpened.GetPage(old_selected).ResetBuffer()
-                self.TabsOpened.SetSelection(idx)
-                window = self.TabsOpened.GetPage(idx)
-                window.RefreshView()
-                self.RefreshTabsOpenedTitles()
-                self.RefreshFileMenu()
-                self.RefreshEditMenu()
-                self.RefreshToolBar()
-        event.Skip()
 
     def RefreshProjectTree(self):
         infos = self.Controler.GetProjectInfos()
@@ -1035,7 +982,7 @@
         for values in infos["values"]:
             if not item.IsOk():
                 item = self.ProjectTree.AppendItem(root, "")
-                if wx.VERSION < (2, 7, 0):
+                if wx.Platform != '__WXMSW__':
                     item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie)
             self.GenerateTreeBranch(item, values)
             item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie)
@@ -2526,7 +2473,7 @@
             self.ClassList = [self.Filter]
 
     def RefreshButtons(self):
-        if self.Table:
+        if getattr(self, "Table", None):
             table_length = len(self.Table.data)
             row_class = None
             if table_length and self.PouIsUsed: