IDEFrame.py
changeset 1782 5b6ad7a7fd9d
parent 1781 b112bfdde5cc
child 1783 3311eea28d56
equal deleted inserted replaced
1781:b112bfdde5cc 1782:5b6ad7a7fd9d
    70 [
    70 [
    71     ID_PLCOPENEDITORDISPLAYMENURESETPERSPECTIVE,
    71     ID_PLCOPENEDITORDISPLAYMENURESETPERSPECTIVE,
    72     ID_PLCOPENEDITORDISPLAYMENUSWITCHPERSPECTIVE,
    72     ID_PLCOPENEDITORDISPLAYMENUSWITCHPERSPECTIVE,
    73 ] = [wx.NewId() for _init_coll_DisplayMenu_Items in range(2)]
    73 ] = [wx.NewId() for _init_coll_DisplayMenu_Items in range(2)]
    74 
    74 
    75 #-------------------------------------------------------------------------------
    75 # -------------------------------------------------------------------------------
    76 #                            EditorToolBar definitions
    76 #                            EditorToolBar definitions
    77 #-------------------------------------------------------------------------------
    77 # -------------------------------------------------------------------------------
    78 
    78 
    79 # Define PLCOpenEditor Toolbar items id
    79 # Define PLCOpenEditor Toolbar items id
    80 [
    80 [
    81     ID_PLCOPENEDITOREDITORTOOLBARSELECTION, ID_PLCOPENEDITOREDITORTOOLBARCOMMENT,
    81     ID_PLCOPENEDITOREDITORTOOLBARSELECTION, ID_PLCOPENEDITOREDITORTOOLBARCOMMENT,
    82     ID_PLCOPENEDITOREDITORTOOLBARVARIABLE, ID_PLCOPENEDITOREDITORTOOLBARBLOCK,
    82     ID_PLCOPENEDITOREDITORTOOLBARVARIABLE, ID_PLCOPENEDITOREDITORTOOLBARBLOCK,
   188     "debug": [(True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
   188     "debug": [(True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
   189                ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool",
   189                ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool",
   190                "move", _("Move the view"))],
   190                "move", _("Move the view"))],
   191 }
   191 }
   192 
   192 
   193 #-------------------------------------------------------------------------------
   193 # -------------------------------------------------------------------------------
   194 #                               Helper Functions
   194 #                               Helper Functions
   195 #-------------------------------------------------------------------------------
   195 # -------------------------------------------------------------------------------
   196 
   196 
   197 import base64
   197 import base64
   198 
   198 
   199 
   199 
   200 def EncodeFileSystemPath(path, use_base64=True):
   200 def EncodeFileSystemPath(path, use_base64=True):
   330     else:
   330     else:
   331         if SimplifyTabLayout(tabs, rect):
   331         if SimplifyTabLayout(tabs, rect):
   332             return ComputeTabsLayout(tabs, rect)
   332             return ComputeTabsLayout(tabs, rect)
   333     return tabs
   333     return tabs
   334 
   334 
   335 #-------------------------------------------------------------------------------
       
   336 #                              IDEFrame Base Class
       
   337 #-------------------------------------------------------------------------------
       
   338 
       
   339 
   335 
   340 UNEDITABLE_NAMES_DICT = dict([(_(name), name) for name in UNEDITABLE_NAMES])
   336 UNEDITABLE_NAMES_DICT = dict([(_(name), name) for name in UNEDITABLE_NAMES])
   341 
   337 
   342 
   338 
   343 class IDEFrame(wx.Frame):
   339 class IDEFrame(wx.Frame):
   344 
   340     """IDEFrame Base Class"""
   345     # Compatibility function for wx versions < 2.6
   341     # Compatibility function for wx versions < 2.6
   346     if wx.VERSION < (2, 6, 0):
   342     if wx.VERSION < (2, 6, 0):
   347         def Bind(self, event, function, id=None):
   343         def Bind(self, event, function, id=None):
   348             if id is not None:
   344             if id is not None:
   349                 event(self, id, function)
   345                 event(self, id, function)
   377     def _init_coll_EditMenu_Items(self, parent):
   373     def _init_coll_EditMenu_Items(self, parent):
   378         AppendMenu(parent, help='', id=wx.ID_UNDO,
   374         AppendMenu(parent, help='', id=wx.ID_UNDO,
   379                    kind=wx.ITEM_NORMAL, text=_(u'Undo') + '\tCTRL+Z')
   375                    kind=wx.ITEM_NORMAL, text=_(u'Undo') + '\tCTRL+Z')
   380         AppendMenu(parent, help='', id=wx.ID_REDO,
   376         AppendMenu(parent, help='', id=wx.ID_REDO,
   381                    kind=wx.ITEM_NORMAL, text=_(u'Redo') + '\tCTRL+Y')
   377                    kind=wx.ITEM_NORMAL, text=_(u'Redo') + '\tCTRL+Y')
   382         #AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO,
   378         # AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO,
   383         #      kind=wx.ITEM_CHECK, text=_(u'Enable Undo/Redo'))
   379         #      kind=wx.ITEM_CHECK, text=_(u'Enable Undo/Redo'))
   384         enable_undo_redo = _(u'Enable Undo/Redo')  # Keeping text in translations for possible menu reactivation
   380         enable_undo_redo = _(u'Enable Undo/Redo')  # Keeping text in translations for possible menu reactivation
   385         parent.AppendSeparator()
   381         parent.AppendSeparator()
   386         AppendMenu(parent, help='', id=wx.ID_CUT,
   382         AppendMenu(parent, help='', id=wx.ID_CUT,
   387                    kind=wx.ITEM_NORMAL, text=_(u'Cut') + '\tCTRL+X')
   383                    kind=wx.ITEM_NORMAL, text=_(u'Cut') + '\tCTRL+X')
   407                    kind=wx.ITEM_NORMAL, text=_(u'Select All') + '\tCTRL+A')
   403                    kind=wx.ITEM_NORMAL, text=_(u'Select All') + '\tCTRL+A')
   408         AppendMenu(parent, help='', id=wx.ID_DELETE,
   404         AppendMenu(parent, help='', id=wx.ID_DELETE,
   409                    kind=wx.ITEM_NORMAL, text=_(u'&Delete'))
   405                    kind=wx.ITEM_NORMAL, text=_(u'&Delete'))
   410         self.Bind(wx.EVT_MENU, self.OnUndoMenu, id=wx.ID_UNDO)
   406         self.Bind(wx.EVT_MENU, self.OnUndoMenu, id=wx.ID_UNDO)
   411         self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO)
   407         self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO)
   412         #self.Bind(wx.EVT_MENU, self.OnEnableUndoRedoMenu, id=ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO)
   408         # self.Bind(wx.EVT_MENU, self.OnEnableUndoRedoMenu, id=ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO)
   413         self.Bind(wx.EVT_MENU, self.OnCutMenu, id=wx.ID_CUT)
   409         self.Bind(wx.EVT_MENU, self.OnCutMenu, id=wx.ID_CUT)
   414         self.Bind(wx.EVT_MENU, self.OnCopyMenu, id=wx.ID_COPY)
   410         self.Bind(wx.EVT_MENU, self.OnCopyMenu, id=wx.ID_COPY)
   415         self.Bind(wx.EVT_MENU, self.OnPasteMenu, id=wx.ID_PASTE)
   411         self.Bind(wx.EVT_MENU, self.OnPasteMenu, id=wx.ID_PASTE)
   416         self.Bind(wx.EVT_MENU, self.OnFindMenu, id=wx.ID_FIND)
   412         self.Bind(wx.EVT_MENU, self.OnFindMenu, id=wx.ID_FIND)
   417         self.Bind(wx.EVT_MENU, self.OnFindNextMenu,
   413         self.Bind(wx.EVT_MENU, self.OnFindNextMenu,
   506         self.Bind(wx.EVT_ACTIVATE, self.OnActivated)
   502         self.Bind(wx.EVT_ACTIVATE, self.OnActivated)
   507 
   503 
   508         self.TabsImageList = wx.ImageList(31, 16)
   504         self.TabsImageList = wx.ImageList(31, 16)
   509         self.TabsImageListIndexes = {}
   505         self.TabsImageListIndexes = {}
   510 
   506 
   511         #-----------------------------------------------------------------------
   507         # -----------------------------------------------------------------------
   512         #                          Creating main structure
   508         #                          Creating main structure
   513         #-----------------------------------------------------------------------
   509         # -----------------------------------------------------------------------
   514 
   510 
   515         self.AUIManager = wx.aui.AuiManager(self)
   511         self.AUIManager = wx.aui.AuiManager(self)
   516         self.AUIManager.SetDockSizeConstraint(0.5, 0.5)
   512         self.AUIManager.SetDockSizeConstraint(0.5, 0.5)
   517         self.Panes = {}
   513         self.Panes = {}
   518 
   514 
   571         self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_END_DRAG,
   567         self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_END_DRAG,
   572                              self.OnPageDragged)
   568                              self.OnPageDragged)
   573         self.AUIManager.AddPane(self.TabsOpened,
   569         self.AUIManager.AddPane(self.TabsOpened,
   574                                 wx.aui.AuiPaneInfo().CentrePane().Name("TabsPane"))
   570                                 wx.aui.AuiPaneInfo().CentrePane().Name("TabsPane"))
   575 
   571 
   576         #-----------------------------------------------------------------------
   572         # -----------------------------------------------------------------------
   577         #                    Creating PLCopen Project Types Tree
   573         #                    Creating PLCopen Project Types Tree
   578         #-----------------------------------------------------------------------
   574         # -----------------------------------------------------------------------
   579 
   575 
   580         self.MainTabs = {}
   576         self.MainTabs = {}
   581 
   577 
   582         self.ProjectPanel = wx.SplitterWindow(
   578         self.ProjectPanel = wx.SplitterWindow(
   583             id=ID_PLCOPENEDITORPROJECTPANEL,
   579             id=ID_PLCOPENEDITORPROJECTPANEL,
   610                   id=ID_PLCOPENEDITORPROJECTTREE)
   606                   id=ID_PLCOPENEDITORPROJECTTREE)
   611         self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnProjectTreeItemActivated,
   607         self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnProjectTreeItemActivated,
   612                   id=ID_PLCOPENEDITORPROJECTTREE)
   608                   id=ID_PLCOPENEDITORPROJECTTREE)
   613         self.ProjectTree.Bind(wx.EVT_MOTION, self.OnProjectTreeMotion)
   609         self.ProjectTree.Bind(wx.EVT_MOTION, self.OnProjectTreeMotion)
   614 
   610 
   615         #-----------------------------------------------------------------------
   611         # -----------------------------------------------------------------------
   616         #        Creating PLCopen Project POU Instance Variables Panel
   612         #        Creating PLCopen Project POU Instance Variables Panel
   617         #-----------------------------------------------------------------------
   613         # -----------------------------------------------------------------------
   618 
   614 
   619         self.PouInstanceVariablesPanel = PouInstanceVariablesPanel(self.ProjectPanel, self, self.Controler, self.EnableDebug)
   615         self.PouInstanceVariablesPanel = PouInstanceVariablesPanel(self.ProjectPanel, self, self.Controler, self.EnableDebug)
   620 
   616 
   621         self.MainTabs["ProjectPanel"] = (self.ProjectPanel, _("Project"))
   617         self.MainTabs["ProjectPanel"] = (self.ProjectPanel, _("Project"))
   622         self.LeftNoteBook.AddPage(*self.MainTabs["ProjectPanel"])
   618         self.LeftNoteBook.AddPage(*self.MainTabs["ProjectPanel"])
   623 
   619 
   624         self.ProjectPanel.SplitHorizontally(self.ProjectTree, self.PouInstanceVariablesPanel, 300)
   620         self.ProjectPanel.SplitHorizontally(self.ProjectTree, self.PouInstanceVariablesPanel, 300)
   625 
   621 
   626         #-----------------------------------------------------------------------
   622         # -----------------------------------------------------------------------
   627         #                            Creating Tool Bar
   623         #                            Creating Tool Bar
   628         #-----------------------------------------------------------------------
   624         # -----------------------------------------------------------------------
   629 
   625 
   630         MenuToolBar = wx.ToolBar(self, ID_PLCOPENEDITOREDITORMENUTOOLBAR,
   626         MenuToolBar = wx.ToolBar(self, ID_PLCOPENEDITOREDITORMENUTOOLBAR,
   631                                  wx.DefaultPosition, wx.DefaultSize,
   627                                  wx.DefaultPosition, wx.DefaultSize,
   632                                  wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER)
   628                                  wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER)
   633         MenuToolBar.SetToolBitmapSize(wx.Size(25, 25))
   629         MenuToolBar.SetToolBitmapSize(wx.Size(25, 25))
   654                                 LeftDockable(False).RightDockable(False))
   650                                 LeftDockable(False).RightDockable(False))
   655 
   651 
   656         self.Bind(wx.EVT_MENU, self.OnSelectionTool,
   652         self.Bind(wx.EVT_MENU, self.OnSelectionTool,
   657                   id=ID_PLCOPENEDITOREDITORTOOLBARSELECTION)
   653                   id=ID_PLCOPENEDITOREDITORTOOLBARSELECTION)
   658 
   654 
   659         #-----------------------------------------------------------------------
   655         # -----------------------------------------------------------------------
   660         #                            Creating Search Panel
   656         #                            Creating Search Panel
   661         #-----------------------------------------------------------------------
   657         # -----------------------------------------------------------------------
   662 
   658 
   663         self.SearchResultPanel = SearchResultPanel(self.BottomNoteBook, self)
   659         self.SearchResultPanel = SearchResultPanel(self.BottomNoteBook, self)
   664         self.MainTabs["SearchResultPanel"] = (self.SearchResultPanel, _("Search"))
   660         self.MainTabs["SearchResultPanel"] = (self.SearchResultPanel, _("Search"))
   665         self.BottomNoteBook.AddPage(*self.MainTabs["SearchResultPanel"])
   661         self.BottomNoteBook.AddPage(*self.MainTabs["SearchResultPanel"])
   666 
   662 
   667         #-----------------------------------------------------------------------
   663         # -----------------------------------------------------------------------
   668         #                            Creating Library Panel
   664         #                            Creating Library Panel
   669         #-----------------------------------------------------------------------
   665         # -----------------------------------------------------------------------
   670 
   666 
   671         self.LibraryPanel = LibraryPanel(self, True)
   667         self.LibraryPanel = LibraryPanel(self, True)
   672         self.MainTabs["LibraryPanel"] = (self.LibraryPanel, _("Library"))
   668         self.MainTabs["LibraryPanel"] = (self.LibraryPanel, _("Library"))
   673         self.RightNoteBook.AddPage(*self.MainTabs["LibraryPanel"])
   669         self.RightNoteBook.AddPage(*self.MainTabs["LibraryPanel"])
   674 
   670 
   699 
   695 
   700         # Icons for other items
   696         # Icons for other items
   701         for imgname, itemtype in [
   697         for imgname, itemtype in [
   702                 # editables
   698                 # editables
   703                 ("PROJECT",        ITEM_PROJECT),
   699                 ("PROJECT",        ITEM_PROJECT),
   704                 #("POU",            ITEM_POU),
   700                 # ("POU",          ITEM_POU),
   705                 #("VARIABLE",       ITEM_VARIABLE),
   701                 # ("VARIABLE",     ITEM_VARIABLE),
   706                 ("TRANSITION",     ITEM_TRANSITION),
   702                 ("TRANSITION",     ITEM_TRANSITION),
   707                 ("ACTION",         ITEM_ACTION),
   703                 ("ACTION",         ITEM_ACTION),
   708                 ("CONFIGURATION",  ITEM_CONFIGURATION),
   704                 ("CONFIGURATION",  ITEM_CONFIGURATION),
   709                 ("RESOURCE",       ITEM_RESOURCE),
   705                 ("RESOURCE",       ITEM_RESOURCE),
   710                 ("DATATYPE",       ITEM_DATATYPE),
   706                 ("DATATYPE",       ITEM_DATATYPE),
   736         self.SelectedItem = None
   732         self.SelectedItem = None
   737         self.LastToolTipItem = None
   733         self.LastToolTipItem = None
   738         self.SearchParams = None
   734         self.SearchParams = None
   739         self.Highlights = {}
   735         self.Highlights = {}
   740         self.DrawingMode = FREEDRAWING_MODE
   736         self.DrawingMode = FREEDRAWING_MODE
   741         #self.DrawingMode = DRIVENDRAWING_MODE
   737         # self.DrawingMode = DRIVENDRAWING_MODE
   742         self.AuiTabCtrl = []
   738         self.AuiTabCtrl = []
   743 
   739 
   744         # Save default perspective
   740         # Save default perspective
   745         notebooks = {}
   741         notebooks = {}
   746         for notebook, entry_name in [(self.LeftNoteBook, "leftnotebook"),
   742         for notebook, entry_name in [(self.LeftNoteBook, "leftnotebook"),
   786             idx = notebook.GetPageIndex(tab)
   782             idx = notebook.GetPageIndex(tab)
   787             if idx != wx.NOT_FOUND and idx != notebook.GetSelection():
   783             if idx != wx.NOT_FOUND and idx != notebook.GetSelection():
   788                 notebook.SetSelection(idx)
   784                 notebook.SetSelection(idx)
   789                 return
   785                 return
   790 
   786 
   791 #-------------------------------------------------------------------------------
   787     # -------------------------------------------------------------------------------
   792 #                Saving and restoring frame organization functions
   788     #                Saving and restoring frame organization functions
   793 #-------------------------------------------------------------------------------
   789     # -------------------------------------------------------------------------------
   794 
   790 
   795     def GetTabInfos(self, tab):
   791     def GetTabInfos(self, tab):
   796         for page_name, (page_ref, page_title) in self.MainTabs.iteritems():
   792         for page_name, (page_ref, page_title) in self.MainTabs.iteritems():
   797             if page_ref == tab:
   793             if page_ref == tab:
   798                 return ("main", page_name)
   794                 return ("main", page_name)
   899         elif self.Config.HasEntry("framesize"):
   895         elif self.Config.HasEntry("framesize"):
   900             self.Config.DeleteEntry("framesize")
   896             self.Config.DeleteEntry("framesize")
   901 
   897 
   902         self.Config.Flush()
   898         self.Config.Flush()
   903 
   899 
   904 #-------------------------------------------------------------------------------
   900     # -------------------------------------------------------------------------------
   905 #                               General Functions
   901     #                               General Functions
   906 #-------------------------------------------------------------------------------
   902     # -------------------------------------------------------------------------------
   907 
   903 
   908     def SetRefreshFunctions(self):
   904     def SetRefreshFunctions(self):
   909         self.RefreshFunctions = {
   905         self.RefreshFunctions = {
   910             TITLE: self.RefreshTitle,
   906             TITLE: self.RefreshTitle,
   911             EDITORTOOLBAR: self.RefreshEditorToolBar,
   907             EDITORTOOLBAR: self.RefreshEditorToolBar,
   994                 self.Controler.SetProjectProperties(None, new_values)
   990                 self.Controler.SetProjectProperties(None, new_values)
   995                 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU,
   991                 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU,
   996                               PROJECTTREE, POUINSTANCEVARIABLESPANEL, SCALING)
   992                               PROJECTTREE, POUINSTANCEVARIABLESPANEL, SCALING)
   997         dialog.Destroy()
   993         dialog.Destroy()
   998 
   994 
   999 #-------------------------------------------------------------------------------
   995     # -------------------------------------------------------------------------------
  1000 #                            Notebook Unified Functions
   996     #                            Notebook Unified Functions
  1001 #-------------------------------------------------------------------------------
   997     # -------------------------------------------------------------------------------
  1002 
   998 
  1003     def AddPage(self, window, text):
   999     def AddPage(self, window, text):
  1004         """Function that add a tab in Notebook, calling refresh for tab DClick event
  1000         """Function that add a tab in Notebook, calling refresh for tab DClick event
  1005         for wx.aui.AUINotebook.
  1001         for wx.aui.AUINotebook.
  1006 
  1002 
  1033         :param bitmap: wx.Bitmap to define on tab.
  1029         :param bitmap: wx.Bitmap to define on tab.
  1034         :returns: True if operation succeeded
  1030         :returns: True if operation succeeded
  1035         """
  1031         """
  1036         return self.TabsOpened.SetPageBitmap(idx, bitmap)
  1032         return self.TabsOpened.SetPageBitmap(idx, bitmap)
  1037 
  1033 
  1038 #-------------------------------------------------------------------------------
  1034     # -------------------------------------------------------------------------------
  1039 #                         Dialog Message Functions
  1035     #                         Dialog Message Functions
  1040 #-------------------------------------------------------------------------------
  1036     # -------------------------------------------------------------------------------
  1041 
  1037 
  1042     def ShowErrorMessage(self, message):
  1038     def ShowErrorMessage(self, message):
  1043         """Function displaying an Error dialog in editor.
  1039         """Function displaying an Error dialog in editor.
  1044 
  1040 
  1045         :param message: The message to display.
  1041         :param message: The message to display.
  1067             if not window.CheckSaveBeforeClosing():
  1063             if not window.CheckSaveBeforeClosing():
  1068                 return False
  1064                 return False
  1069 
  1065 
  1070         return True
  1066         return True
  1071 
  1067 
  1072 #-------------------------------------------------------------------------------
  1068     # -------------------------------------------------------------------------------
  1073 #                            File Menu Functions
  1069     #                            File Menu Functions
  1074 #-------------------------------------------------------------------------------
  1070     # -------------------------------------------------------------------------------
  1075 
  1071 
  1076     def RefreshFileMenu(self):
  1072     def RefreshFileMenu(self):
  1077         pass
  1073         pass
  1078 
  1074 
  1079     def ResetView(self):
  1075     def ResetView(self):
  1148         self.EditProjectSettings()
  1144         self.EditProjectSettings()
  1149 
  1145 
  1150     def OnQuitMenu(self, event):
  1146     def OnQuitMenu(self, event):
  1151         self.Close()
  1147         self.Close()
  1152 
  1148 
  1153 #-------------------------------------------------------------------------------
  1149     # -------------------------------------------------------------------------------
  1154 #                            Edit Menu Functions
  1150     #                            Edit Menu Functions
  1155 #-------------------------------------------------------------------------------
  1151     # -------------------------------------------------------------------------------
  1156 
  1152 
  1157     def RefreshEditMenu(self):
  1153     def RefreshEditMenu(self):
  1158         MenuToolBar = self.Panes["MenuToolBar"]
  1154         MenuToolBar = self.Panes["MenuToolBar"]
  1159         if self.Controler is not None:
  1155         if self.Controler is not None:
  1160             selected = self.TabsOpened.GetSelection()
  1156             selected = self.TabsOpened.GetSelection()
  1165                 undo, redo = self.Controler.GetBufferState()
  1161                 undo, redo = self.Controler.GetBufferState()
  1166             self.EditMenu.Enable(wx.ID_UNDO, undo)
  1162             self.EditMenu.Enable(wx.ID_UNDO, undo)
  1167             MenuToolBar.EnableTool(wx.ID_UNDO, undo)
  1163             MenuToolBar.EnableTool(wx.ID_UNDO, undo)
  1168             self.EditMenu.Enable(wx.ID_REDO, redo)
  1164             self.EditMenu.Enable(wx.ID_REDO, redo)
  1169             MenuToolBar.EnableTool(wx.ID_REDO, redo)
  1165             MenuToolBar.EnableTool(wx.ID_REDO, redo)
  1170             #self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, True)
  1166             # self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, True)
  1171             #self.EditMenu.Check(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO,
  1167             # self.EditMenu.Check(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO,
  1172             #                self.Controler.IsProjectBufferEnabled())
  1168             #                self.Controler.IsProjectBufferEnabled())
  1173             self.EditMenu.Enable(wx.ID_FIND, selected > -1)
  1169             self.EditMenu.Enable(wx.ID_FIND, selected > -1)
  1174             self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUFINDNEXT,
  1170             self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUFINDNEXT,
  1175                                  selected > -1 and self.SearchParams is not None)
  1171                                  selected > -1 and self.SearchParams is not None)
  1176             self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUFINDPREVIOUS,
  1172             self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUFINDPREVIOUS,
  1202         else:
  1198         else:
  1203             self.EditMenu.Enable(wx.ID_UNDO, False)
  1199             self.EditMenu.Enable(wx.ID_UNDO, False)
  1204             MenuToolBar.EnableTool(wx.ID_UNDO, False)
  1200             MenuToolBar.EnableTool(wx.ID_UNDO, False)
  1205             self.EditMenu.Enable(wx.ID_REDO, False)
  1201             self.EditMenu.Enable(wx.ID_REDO, False)
  1206             MenuToolBar.EnableTool(wx.ID_REDO, False)
  1202             MenuToolBar.EnableTool(wx.ID_REDO, False)
  1207             #self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, False)
  1203             # self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, False)
  1208             self.EditMenu.Enable(wx.ID_CUT, False)
  1204             self.EditMenu.Enable(wx.ID_CUT, False)
  1209             MenuToolBar.EnableTool(wx.ID_CUT, False)
  1205             MenuToolBar.EnableTool(wx.ID_CUT, False)
  1210             self.EditMenu.Enable(wx.ID_COPY, False)
  1206             self.EditMenu.Enable(wx.ID_COPY, False)
  1211             MenuToolBar.EnableTool(wx.ID_COPY, False)
  1207             MenuToolBar.EnableTool(wx.ID_COPY, False)
  1212             self.EditMenu.Enable(wx.ID_PASTE, False)
  1208             self.EditMenu.Enable(wx.ID_PASTE, False)
  1335                 result = self.Controler.SearchInProject(criteria)
  1331                 result = self.Controler.SearchInProject(criteria)
  1336                 self.ClearSearchResults()
  1332                 self.ClearSearchResults()
  1337                 self.SearchResultPanel.SetSearchResults(criteria, result)
  1333                 self.SearchResultPanel.SetSearchResults(criteria, result)
  1338                 self.SelectTab(self.SearchResultPanel)
  1334                 self.SelectTab(self.SearchResultPanel)
  1339 
  1335 
  1340 #-------------------------------------------------------------------------------
  1336     # -------------------------------------------------------------------------------
  1341 #                             Display Menu Functions
  1337     #                             Display Menu Functions
  1342 #-------------------------------------------------------------------------------
  1338     # -------------------------------------------------------------------------------
  1343 
  1339 
  1344     def RefreshDisplayMenu(self):
  1340     def RefreshDisplayMenu(self):
  1345         if self.Controler is not None:
  1341         if self.Controler is not None:
  1346             if self.TabsOpened.GetPageCount() > 0:
  1342             if self.TabsOpened.GetPageCount() > 0:
  1347                 self.DisplayMenu.Enable(wx.ID_REFRESH, True)
  1343                 self.DisplayMenu.Enable(wx.ID_REFRESH, True)
  1386         return ZoomFunction
  1382         return ZoomFunction
  1387 
  1383 
  1388     def OnResetPerspective(self, event):
  1384     def OnResetPerspective(self, event):
  1389         self.ResetPerspective()
  1385         self.ResetPerspective()
  1390 
  1386 
  1391 #-------------------------------------------------------------------------------
  1387     # -------------------------------------------------------------------------------
  1392 #                      Project Editor Panels Management Functions
  1388     #                      Project Editor Panels Management Functions
  1393 #-------------------------------------------------------------------------------
  1389     # -------------------------------------------------------------------------------
  1394 
  1390 
  1395     def OnPageDragged(self, event):
  1391     def OnPageDragged(self, event):
  1396         wx.CallAfter(self.RefreshTabCtrlEvent)
  1392         wx.CallAfter(self.RefreshTabCtrlEvent)
  1397         event.Skip()
  1393         event.Skip()
  1398 
  1394 
  1501             self.AUIManager.RestorePane(pane)
  1497             self.AUIManager.RestorePane(pane)
  1502         else:
  1498         else:
  1503             self.AUIManager.MaximizePane(pane)
  1499             self.AUIManager.MaximizePane(pane)
  1504         self.AUIManager.Update()
  1500         self.AUIManager.Update()
  1505 
  1501 
  1506 #-------------------------------------------------------------------------------
  1502     # -------------------------------------------------------------------------------
  1507 #                         Types Tree Management Functions
  1503     #                         Types Tree Management Functions
  1508 #-------------------------------------------------------------------------------
  1504     # -------------------------------------------------------------------------------
  1509 
  1505 
  1510     def RefreshProjectTree(self):
  1506     def RefreshProjectTree(self):
  1511         # Extract current selected item tagname
  1507         # Extract current selected item tagname
  1512         selected = self.ProjectTree.GetSelection()
  1508         selected = self.ProjectTree.GetSelection()
  1513         if selected is not None and selected.IsOk():
  1509         if selected is not None and selected.IsOk():
  2010 
  2006 
  2011         self.ResetSelectedItem()
  2007         self.ResetSelectedItem()
  2012 
  2008 
  2013         event.Skip()
  2009         event.Skip()
  2014 
  2010 
  2015 
  2011     # -------------------------------------------------------------------------------
  2016 #-------------------------------------------------------------------------------
  2012     #                         Instances Tree Management Functions
  2017 #                         Instances Tree Management Functions
  2013     # -------------------------------------------------------------------------------
  2018 #-------------------------------------------------------------------------------
       
  2019 
  2014 
  2020     def GetTreeImage(self, var_class):
  2015     def GetTreeImage(self, var_class):
  2021         return self.TreeImageDict[var_class]
  2016         return self.TreeImageDict[var_class]
  2022 
  2017 
  2023     def RefreshPouInstanceVariablesPanel(self):
  2018     def RefreshPouInstanceVariablesPanel(self):
  2096     def AddDebugVariable(self, iec_path, force=False, graph=False):
  2091     def AddDebugVariable(self, iec_path, force=False, graph=False):
  2097         if self.EnableDebug:
  2092         if self.EnableDebug:
  2098             self.DebugVariablePanel.InsertValue(iec_path, force=force, graph=graph)
  2093             self.DebugVariablePanel.InsertValue(iec_path, force=force, graph=graph)
  2099             self.EnsureTabVisible(self.DebugVariablePanel)
  2094             self.EnsureTabVisible(self.DebugVariablePanel)
  2100 
  2095 
  2101 #-------------------------------------------------------------------------------
  2096     # -------------------------------------------------------------------------------
  2102 #                         Library Panel Management Function
  2097     #                         Library Panel Management Function
  2103 #-------------------------------------------------------------------------------
  2098     # -------------------------------------------------------------------------------
  2104 
  2099 
  2105     def RefreshLibraryPanel(self):
  2100     def RefreshLibraryPanel(self):
  2106         self.LibraryPanel.RefreshTree()
  2101         self.LibraryPanel.RefreshTree()
  2107 
  2102 
  2108 #-------------------------------------------------------------------------------
  2103     # -------------------------------------------------------------------------------
  2109 #                          ToolBars Management Functions
  2104     #                          ToolBars Management Functions
  2110 #-------------------------------------------------------------------------------
  2105     # -------------------------------------------------------------------------------
  2111 
  2106 
  2112     def AddToMenuToolBar(self, items):
  2107     def AddToMenuToolBar(self, items):
  2113         MenuToolBar = self.Panes["MenuToolBar"]
  2108         MenuToolBar = self.Panes["MenuToolBar"]
  2114         if MenuToolBar.GetToolsCount() > 0:
  2109         if MenuToolBar.GetToolsCount() > 0:
  2115             MenuToolBar.AddSeparator()
  2110             MenuToolBar.AddSeparator()
  2173         elif menu is None:
  2168         elif menu is None:
  2174             self.ResetEditorToolBar()
  2169             self.ResetEditorToolBar()
  2175             self.CurrentMenu = menu
  2170             self.CurrentMenu = menu
  2176         self.ResetCurrentMode()
  2171         self.ResetCurrentMode()
  2177 
  2172 
  2178 
  2173     # -------------------------------------------------------------------------------
  2179 #-------------------------------------------------------------------------------
  2174     #                           EditorToolBar Items Functions
  2180 #                           EditorToolBar Items Functions
  2175     # -------------------------------------------------------------------------------
  2181 #-------------------------------------------------------------------------------
       
  2182 
  2176 
  2183     def ResetCurrentMode(self):
  2177     def ResetCurrentMode(self):
  2184         selected = self.TabsOpened.GetSelection()
  2178         selected = self.TabsOpened.GetSelection()
  2185         if selected != -1:
  2179         if selected != -1:
  2186             window = self.TabsOpened.GetPage(selected)
  2180             window = self.TabsOpened.GetPage(selected)
  2312             if self.GetDrawingMode() == FREEDRAWING_MODE:
  2306             if self.GetDrawingMode() == FREEDRAWING_MODE:
  2313                 self.TabsOpened.GetPage(selected).SetMode(MODE_JUMP)
  2307                 self.TabsOpened.GetPage(selected).SetMode(MODE_JUMP)
  2314             else:
  2308             else:
  2315                 self.TabsOpened.GetPage(selected).AddJump()
  2309                 self.TabsOpened.GetPage(selected).AddJump()
  2316 
  2310 
  2317 
  2311     # -------------------------------------------------------------------------------
  2318 #-------------------------------------------------------------------------------
  2312     #                         Add Project Elements Functions
  2319 #                         Add Project Elements Functions
  2313     # -------------------------------------------------------------------------------
  2320 #-------------------------------------------------------------------------------
       
  2321 
  2314 
  2322     def OnAddNewProject(self, event):
  2315     def OnAddNewProject(self, event):
  2323         # Asks user to create main program after creating new project
  2316         # Asks user to create main program after creating new project
  2324         AddProgramDialog = self.GenerateAddPouFunction('program', True)
  2317         AddProgramDialog = self.GenerateAddPouFunction('program', True)
  2325         # Checks that user created main program
  2318         # Checks that user created main program
  2438             self.ShowErrorMessage(result)
  2431             self.ShowErrorMessage(result)
  2439         else:
  2432         else:
  2440             self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, PROJECTTREE, LIBRARYTREE)
  2433             self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, PROJECTTREE, LIBRARYTREE)
  2441             self.EditProjectElement(ITEM_POU, result[0])
  2434             self.EditProjectElement(ITEM_POU, result[0])
  2442 
  2435 
  2443 #-------------------------------------------------------------------------------
  2436     # -------------------------------------------------------------------------------
  2444 #                        Remove Project Elements Functions
  2437     #                        Remove Project Elements Functions
  2445 #-------------------------------------------------------------------------------
  2438     # -------------------------------------------------------------------------------
  2446 
  2439 
  2447     def CheckElementIsUsedBeforeDeletion(self, check_function, title, name):
  2440     def CheckElementIsUsedBeforeDeletion(self, check_function, title, name):
  2448         if not check_function(name):
  2441         if not check_function(name):
  2449             return True
  2442             return True
  2450 
  2443 
  2543             idx = self.IsOpened(tagname)
  2536             idx = self.IsOpened(tagname)
  2544             if idx is not None:
  2537             if idx is not None:
  2545                 self.TabsOpened.DeletePage(idx)
  2538                 self.TabsOpened.DeletePage(idx)
  2546             self._Refresh(TITLE, FILEMENU, EDITMENU, PROJECTTREE, POUINSTANCEVARIABLESPANEL)
  2539             self._Refresh(TITLE, FILEMENU, EDITMENU, PROJECTTREE, POUINSTANCEVARIABLESPANEL)
  2547 
  2540 
  2548 #-------------------------------------------------------------------------------
  2541     # -------------------------------------------------------------------------------
  2549 #                        Highlights showing functions
  2542     #                        Highlights showing functions
  2550 #-------------------------------------------------------------------------------
  2543     # -------------------------------------------------------------------------------
  2551 
  2544 
  2552     def ShowHighlight(self, infos, start, end, highlight_type):
  2545     def ShowHighlight(self, infos, start, end, highlight_type):
  2553         self.SelectProjectTreeItem(infos[0])
  2546         self.SelectProjectTreeItem(infos[0])
  2554         if infos[1] == "name":
  2547         if infos[1] == "name":
  2555             self.Highlights[infos[0]] = highlight_type
  2548             self.Highlights[infos[0]] = highlight_type
  2582         self.ClearHighlights(ERROR_HIGHLIGHT)
  2575         self.ClearHighlights(ERROR_HIGHLIGHT)
  2583 
  2576 
  2584     def ClearSearchResults(self):
  2577     def ClearSearchResults(self):
  2585         self.ClearHighlights(SEARCH_RESULT_HIGHLIGHT)
  2578         self.ClearHighlights(SEARCH_RESULT_HIGHLIGHT)
  2586 
  2579 
  2587 #-------------------------------------------------------------------------------
  2580 # -------------------------------------------------------------------------------
  2588 #                               Viewer Printout
  2581 #                               Viewer Printout
  2589 #-------------------------------------------------------------------------------
  2582 # -------------------------------------------------------------------------------
  2590 
  2583 
  2591 
  2584 
  2592 def UPPER_DIV(x, y):
  2585 def UPPER_DIV(x, y):
  2593     return (x / y) + {True: 0, False: 1}[(x % y) == 0]
  2586     return (x / y) + {True: 0, False: 1}[(x % y) == 0]
  2594 
  2587 
  2669         # Set the scale and origin
  2662         # Set the scale and origin
  2670         dc.SetDeviceOrigin(-posX + margin_left, -posY + margin_top)
  2663         dc.SetDeviceOrigin(-posX + margin_left, -posY + margin_top)
  2671         dc.SetClippingRegion(posX, posY, self.PageSize[0] * scale, self.PageSize[1] * scale)
  2664         dc.SetClippingRegion(posX, posY, self.PageSize[0] * scale, self.PageSize[1] * scale)
  2672         dc.SetUserScale(scale, scale)
  2665         dc.SetUserScale(scale, scale)
  2673 
  2666 
  2674         #-------------------------------------------
       
  2675 
       
  2676         self.Viewer.DoDrawing(dc, True)
  2667         self.Viewer.DoDrawing(dc, True)
  2677 
  2668 
  2678         return True
  2669         return True