PLCOpenEditor.py
changeset 332 555124c752ec
parent 331 9106d66bd204
child 335 c2c6db53a04f
--- a/PLCOpenEditor.py	Thu Mar 19 18:10:12 2009 +0100
+++ b/PLCOpenEditor.py	Fri Mar 20 16:05:57 2009 +0100
@@ -188,7 +188,9 @@
     
     def _init_coll_MenuBar_Menus(self, parent):
         parent.Append(menu=self.FileMenu, title=u'File')
-        parent.Append(menu=self.EditMenu, title=u'Edit')
+        if not self.Debug:
+            parent.Append(menu=self.EditMenu, title=u'Edit')
+        parent.Append(menu=self.DisplayMenu, title=u'Display')
         parent.Append(menu=self.HelpMenu, title=u'Help')
 
     def _init_coll_FileMenu_Items(self, parent):
@@ -253,61 +255,69 @@
             self.Bind(wx.EVT_MENU, self.OnQuitMenu, id=wx.ID_STOP)
     
     def _init_coll_EditMenu_Items(self, parent):
+        AppendMenu(parent, help='', id=wx.ID_UNDO,
+              kind=wx.ITEM_NORMAL, text=u'Undo\tCTRL+Z')
+        AppendMenu(parent, help='', id=wx.ID_REDO,
+              kind=wx.ITEM_NORMAL, text=u'Redo\tCTRL+Y')
+        parent.AppendSeparator()
+        AppendMenu(parent, help='', id=wx.ID_CUT,
+              kind=wx.ITEM_NORMAL, text=u'Cut\tCTRL+X')
+        AppendMenu(parent, help='', id=wx.ID_COPY,
+              kind=wx.ITEM_NORMAL, text=u'Copy\tCTRL+C')
+        AppendMenu(parent, help='', id=wx.ID_PASTE,
+              kind=wx.ITEM_NORMAL, text=u'Paste\tCTRL+V')
+        parent.AppendSeparator()
+        addmenu = wx.Menu(title='')
+        parent.AppendMenu(wx.ID_ADD, "Add Element", addmenu)
+        AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDDATATYPE,
+              kind=wx.ITEM_NORMAL, text=u'Data Type')
+        AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTION,
+              kind=wx.ITEM_NORMAL, text=u'Function')
+        AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK,
+              kind=wx.ITEM_NORMAL, text=u'Function Block')
+        AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDPROGRAM,
+              kind=wx.ITEM_NORMAL, text=u'Program')
+        AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION,
+              kind=wx.ITEM_NORMAL, text=u'Configuration')
+        AppendMenu(parent, help='', id=wx.ID_SELECTALL,
+              kind=wx.ITEM_NORMAL, text=u'Select All\tCTRL+A')
+        AppendMenu(parent, help='', id=wx.ID_DELETE,
+              kind=wx.ITEM_NORMAL, text=u'Delete')
+        self.Bind(wx.EVT_MENU, self.OnUndoMenu, id=wx.ID_UNDO)
+        self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO)
+        self.Bind(wx.EVT_MENU, self.OnCutMenu, id=wx.ID_CUT)
+        self.Bind(wx.EVT_MENU, self.OnCopyMenu, id=wx.ID_COPY)
+        self.Bind(wx.EVT_MENU, self.OnPasteMenu, id=wx.ID_PASTE)
+        self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu,
+              id=ID_PLCOPENEDITOREDITMENUADDDATATYPE)
+        self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("function"),
+              id=ID_PLCOPENEDITOREDITMENUADDFUNCTION)
+        self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("functionBlock"),
+              id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK)
+        self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("program"),
+              id=ID_PLCOPENEDITOREDITMENUADDPROGRAM)
+        self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu,
+              id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION)
+        self.Bind(wx.EVT_MENU, self.OnSelectAllMenu, id=wx.ID_SELECTALL)
+        self.Bind(wx.EVT_MENU, self.OnDeleteMenu, id=wx.ID_DELETE)
+
+    def _init_coll_DisplayMenu_Items(self, parent):
         AppendMenu(parent, help='', id=wx.ID_REFRESH,
-              kind=wx.ITEM_NORMAL, text=u'Refresh\tCTRL+R')
-        if not self.Debug:
-            if not self.ModeSolo:
-                AppendMenu(parent, help='', id=wx.ID_CLEAR,
-                      kind=wx.ITEM_NORMAL, text=u'Clear Errors\tCTRL+K')
-            AppendMenu(parent, help='', id=wx.ID_UNDO,
-                  kind=wx.ITEM_NORMAL, text=u'Undo\tCTRL+Z')
-            AppendMenu(parent, help='', id=wx.ID_REDO,
-                  kind=wx.ITEM_NORMAL, text=u'Redo\tCTRL+Y')
-            parent.AppendSeparator()
-            AppendMenu(parent, help='', id=wx.ID_CUT,
-                  kind=wx.ITEM_NORMAL, text=u'Cut\tCTRL+X')
-            AppendMenu(parent, help='', id=wx.ID_COPY,
-                  kind=wx.ITEM_NORMAL, text=u'Copy\tCTRL+C')
-            AppendMenu(parent, help='', id=wx.ID_PASTE,
-                  kind=wx.ITEM_NORMAL, text=u'Paste\tCTRL+V')
-            parent.AppendSeparator()
-            addmenu = wx.Menu(title='')
-            parent.AppendMenu(wx.ID_ADD, "Add Element", addmenu)
-            AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDDATATYPE,
-                  kind=wx.ITEM_NORMAL, text=u'Data Type')
-            AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTION,
-                  kind=wx.ITEM_NORMAL, text=u'Function')
-            AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK,
-                  kind=wx.ITEM_NORMAL, text=u'Function Block')
-            AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDPROGRAM,
-                  kind=wx.ITEM_NORMAL, text=u'Program')
-            AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION,
-                  kind=wx.ITEM_NORMAL, text=u'Configuration')
-            AppendMenu(parent, help='', id=wx.ID_SELECTALL,
-                  kind=wx.ITEM_NORMAL, text=u'Select All\tCTRL+A')
-            AppendMenu(parent, help='', id=wx.ID_DELETE,
-                  kind=wx.ITEM_NORMAL, text=u'Delete')
+              kind=wx.ITEM_NORMAL, text=u'Refresh\tF5')
+        if not self.Debug and not self.ModeSolo:
+            AppendMenu(parent, help='', id=wx.ID_CLEAR,
+                  kind=wx.ITEM_NORMAL, text=u'Clear Errors\tCTRL+K')
+        parent.AppendSeparator()
+        zoommenu = wx.Menu(title='')
+        parent.AppendMenu(wx.ID_ZOOM_FIT, "ZOOM", zoommenu)
+        for idx, value in enumerate(ZOOM_FACTORS):
+            new_id = wx.NewId()
+            AppendMenu(zoommenu, help='', id=new_id,
+                  kind=wx.ITEM_RADIO, text=str(int(round(value * 100))) + "%")
+            self.Bind(wx.EVT_MENU, self.GenerateZoomFunction(idx), id=new_id)
         self.Bind(wx.EVT_MENU, self.OnRefreshMenu, id=wx.ID_REFRESH)
-        if not self.Debug:
-            if not self.ModeSolo:
-                self.Bind(wx.EVT_MENU, self.OnClearErrorsMenu, id=wx.ID_CLEAR)
-            self.Bind(wx.EVT_MENU, self.OnUndoMenu, id=wx.ID_UNDO)
-            self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO)
-            self.Bind(wx.EVT_MENU, self.OnCutMenu, id=wx.ID_CUT)
-            self.Bind(wx.EVT_MENU, self.OnCopyMenu, id=wx.ID_COPY)
-            self.Bind(wx.EVT_MENU, self.OnPasteMenu, id=wx.ID_PASTE)
-            self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu,
-                  id=ID_PLCOPENEDITOREDITMENUADDDATATYPE)
-            self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("function"),
-                  id=ID_PLCOPENEDITOREDITMENUADDFUNCTION)
-            self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("functionBlock"),
-                  id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK)
-            self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("program"),
-                  id=ID_PLCOPENEDITOREDITMENUADDPROGRAM)
-            self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu,
-                  id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION)
-            self.Bind(wx.EVT_MENU, self.OnSelectAllMenu, id=wx.ID_SELECTALL)
-            self.Bind(wx.EVT_MENU, self.OnDeleteMenu, id=wx.ID_DELETE)
+        if not self.Debug and not self.ModeSolo:
+            self.Bind(wx.EVT_MENU, self.OnClearErrorsMenu, id=wx.ID_CLEAR)
 
     def _init_coll_HelpMenu_Items(self, parent):
         AppendMenu(parent, help='', id=wx.ID_HELP, 
@@ -327,12 +337,16 @@
         self.MenuBar = wx.MenuBar()
 
         self.FileMenu = wx.Menu(title='')
-        self.EditMenu = wx.Menu(title='')
+        if not self.Debug:
+            self.EditMenu = wx.Menu(title='')
+        self.DisplayMenu = wx.Menu(title='')
         self.HelpMenu = wx.Menu(title='')
         
         self._init_coll_MenuBar_Menus(self.MenuBar)
         self._init_coll_FileMenu_Items(self.FileMenu)
-        self._init_coll_EditMenu_Items(self.EditMenu)
+        if not self.Debug:
+            self._init_coll_EditMenu_Items(self.EditMenu)
+        self._init_coll_DisplayMenu_Items(self.DisplayMenu)
         self._init_coll_HelpMenu_Items(self.HelpMenu)
 
     def _init_coll_MainLibrarySizer_Items(self, parent):
@@ -622,6 +636,7 @@
         
         self.RefreshFileMenu()
         self.RefreshEditMenu()
+        self.RefreshDisplayMenu()
         self.RefreshTitle()
         self.RefreshToolBar()
 
@@ -643,6 +658,7 @@
             self.RefreshTitle()
             self.RefreshFileMenu()
             self.RefreshEditMenu()
+            self.RefreshDisplayMenu()
             self.RefreshToolBar()
         event.Skip()
 
@@ -682,6 +698,7 @@
                 self.RefreshTitle()
                 self.RefreshFileMenu()
                 self.RefreshEditMenu()
+                self.RefreshDisplayMenu()
                 self.RefreshTypesTree()
                 self.RefreshScaling()
         dialog.Destroy()
@@ -993,16 +1010,12 @@
 
 
 #-------------------------------------------------------------------------------
-#                          Edit Project Menu Functions
+#                            Edit Menu Functions
 #-------------------------------------------------------------------------------
 
     def RefreshEditMenu(self):
-        if self.Controler.HasOpenedProject():
-            if self.TabsOpened.GetPageCount() > 0:
-                self.EditMenu.Enable(wx.ID_REFRESH, True)
-            else:
-                self.EditMenu.Enable(wx.ID_REFRESH, False)
-            if not self.Debug:
+        if not self.Debug:
+            if self.Controler.HasOpenedProject():
                 undo, redo = self.Controler.GetBufferState()
                 self.EditMenu.Enable(wx.ID_UNDO, undo)
                 self.EditMenu.Enable(wx.ID_REDO, redo)
@@ -1021,9 +1034,7 @@
                     self.EditMenu.Enable(wx.ID_COPY, False)
                     self.EditMenu.Enable(wx.ID_PASTE, False)
                     self.EditMenu.Enable(wx.ID_SELECTALL, False)
-        else:
-            self.EditMenu.Enable(wx.ID_REFRESH, False)
-            if not self.Debug:
+            else:
                 self.EditMenu.Enable(wx.ID_UNDO, False)
                 self.EditMenu.Enable(wx.ID_REDO, False)
                 self.EditMenu.Enable(wx.ID_CUT, False)
@@ -1033,19 +1044,6 @@
                 self.EditMenu.Enable(wx.ID_ADD, False)
                 self.EditMenu.Enable(wx.ID_DELETE, False)
     
-    def OnRefreshMenu(self, event):
-        selected = self.TabsOpened.GetSelection()
-        if selected != -1:
-            window = self.TabsOpened.GetPage(selected)
-            window.RefreshView()
-            if not self.Debug:
-                self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName())
-        event.Skip()
-
-    def OnClearErrorsMenu(self, event):
-        self.ClearErrors()
-        event.Skip()
-
     def OnUndoMenu(self, event):
         self.Controler.LoadPrevious()
         idxs = range(self.TabsOpened.GetPageCount())
@@ -1193,6 +1191,58 @@
 
 
 #-------------------------------------------------------------------------------
+#                             Display Menu Functions
+#-------------------------------------------------------------------------------
+
+    def RefreshDisplayMenu(self):
+        if self.Controler.HasOpenedProject():
+            if self.TabsOpened.GetPageCount() > 0:
+                self.DisplayMenu.Enable(wx.ID_REFRESH, True)
+                selected = self.TabsOpened.GetSelection()
+                if selected != -1:
+                    window = self.TabsOpened.GetPage(selected)
+                    if isinstance(window, Viewer):
+                        self.DisplayMenu.Enable(wx.ID_ZOOM_FIT, True)
+                        zoommenu = self.DisplayMenu.FindItemById(wx.ID_ZOOM_FIT).GetSubMenu()
+                        zoomitem = zoommenu.FindItemByPosition(window.GetScale())
+                        zoomitem.Check(True)
+                    else:
+                        self.DisplayMenu.Enable(wx.ID_ZOOM_FIT, False)
+                else:
+                    self.DisplayMenu.Enable(wx.ID_ZOOM_FIT, False)
+            else:
+                self.DisplayMenu.Enable(wx.ID_REFRESH, False)
+                self.DisplayMenu.Enable(wx.ID_ZOOM_FIT, False)
+            self.DisplayMenu.Enable(wx.ID_CLEAR, True)
+        else:
+            self.DisplayMenu.Enable(wx.ID_REFRESH, False)
+            self.DisplayMenu.Enable(wx.ID_CLEAR, False)
+            self.DisplayMenu.Enable(wx.ID_ZOOM_FIT, False)
+        
+    def OnRefreshMenu(self, event):
+        selected = self.TabsOpened.GetSelection()
+        if selected != -1:
+            window = self.TabsOpened.GetPage(selected)
+            window.RefreshView()
+            if not self.Debug:
+                self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName())
+        event.Skip()
+
+    def OnClearErrorsMenu(self, event):
+        self.ClearErrors()
+        event.Skip()
+
+    def GenerateZoomFunction(self, idx):
+        def ZoomFunction(event):
+            selected = self.TabsOpened.GetSelection()
+            if selected != -1:
+                window = self.TabsOpened.GetPage(selected)
+                window.SetScale(idx)
+            event.Skip()
+        return ZoomFunction
+
+
+#-------------------------------------------------------------------------------
 #                      Project Editor Panels Management Functions
 #-------------------------------------------------------------------------------
     
@@ -1215,6 +1265,7 @@
                 self.VariablePanelIndexer.ChangeVariablePanel(window.GetTagName())
             self.RefreshFileMenu()
             self.RefreshEditMenu()
+            self.RefreshDisplayMenu()
             self.RefreshToolBar()
         event.Skip()
 
@@ -4214,9 +4265,14 @@
             new_row["Class"] = self.DefaultTypes[self.Filter]
         else:
             new_row["Class"] = self.Filter
-        self.Values.append(new_row)
+        if self.Filter == "All" and len(self.Values) > 0:
+            row_index = self.VariablesGrid.GetGridCursorRow() + 1
+            self.Values.insert(row_index, new_row)
+        else:
+            row_index = -1
+            self.Values.append(new_row)
         self.SaveValues()
-        self.RefreshValues()
+        self.RefreshValues(row_index)
         self.RefreshButtons()
         event.Skip()
 
@@ -4353,7 +4409,7 @@
             self.RefreshValues()
             self.VariablesGrid.SetGridCursor(new_index, self.VariablesGrid.GetGridCursorCol())
         
-    def RefreshValues(self):
+    def RefreshValues(self, select=0):
         if len(self.Table.data) > 0:
             self.VariablesGrid.SetGridCursor(0, 1)
         data = []
@@ -4362,6 +4418,11 @@
                 variable["Number"] = num + 1
                 data.append(variable)
         self.Table.SetData(data)
+        if len(self.Table.data) > 0:
+            if select == -1:
+                select = len(self.Table.data) - 1
+            self.VariablesGrid.SetGridCursor(select, 1)
+            self.VariablesGrid.MakeCellVisible(select, 1)
         self.Table.ResetView(self.VariablesGrid)
 
     def SaveValues(self, buffer = True):