IDEFrame.py
changeset 1768 691083b5682a
parent 1766 c1e5b9f19483
child 1773 38fde37c3766
equal deleted inserted replaced
1767:c74815729afd 1768:691083b5682a
   354     def _init_coll_FileMenu_Items(self, parent):
   354     def _init_coll_FileMenu_Items(self, parent):
   355         pass
   355         pass
   356 
   356 
   357     def _init_coll_AddMenu_Items(self, parent, add_config=True):
   357     def _init_coll_AddMenu_Items(self, parent, add_config=True):
   358         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDDATATYPE,
   358         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDDATATYPE,
   359               kind=wx.ITEM_NORMAL, text=_(u'&Data Type'))
   359                    kind=wx.ITEM_NORMAL, text=_(u'&Data Type'))
   360         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTION,
   360         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTION,
   361               kind=wx.ITEM_NORMAL, text=_(u'&Function'))
   361                    kind=wx.ITEM_NORMAL, text=_(u'&Function'))
   362         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK,
   362         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK,
   363               kind=wx.ITEM_NORMAL, text=_(u'Function &Block'))
   363                    kind=wx.ITEM_NORMAL, text=_(u'Function &Block'))
   364         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDPROGRAM,
   364         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDPROGRAM,
   365               kind=wx.ITEM_NORMAL, text=_(u'&Program'))
   365                    kind=wx.ITEM_NORMAL, text=_(u'&Program'))
   366         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDRESOURCE,
   366         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDRESOURCE,
   367                   kind=wx.ITEM_NORMAL, text=_(u'&Resource'))
   367                    kind=wx.ITEM_NORMAL, text=_(u'&Resource'))
   368         if add_config:
   368         if add_config:
   369             AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION,
   369             AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION,
   370                   kind=wx.ITEM_NORMAL, text=_(u'&Configuration'))
   370                        kind=wx.ITEM_NORMAL, text=_(u'&Configuration'))
   371 
   371 
   372     def _init_coll_EditMenu_Items(self, parent):
   372     def _init_coll_EditMenu_Items(self, parent):
   373         AppendMenu(parent, help='', id=wx.ID_UNDO,
   373         AppendMenu(parent, help='', id=wx.ID_UNDO,
   374               kind=wx.ITEM_NORMAL, text=_(u'Undo') + '\tCTRL+Z')
   374                    kind=wx.ITEM_NORMAL, text=_(u'Undo') + '\tCTRL+Z')
   375         AppendMenu(parent, help='', id=wx.ID_REDO,
   375         AppendMenu(parent, help='', id=wx.ID_REDO,
   376               kind=wx.ITEM_NORMAL, text=_(u'Redo') + '\tCTRL+Y')
   376                    kind=wx.ITEM_NORMAL, text=_(u'Redo') + '\tCTRL+Y')
   377         #AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO,
   377         #AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO,
   378         #      kind=wx.ITEM_CHECK, text=_(u'Enable Undo/Redo'))
   378         #      kind=wx.ITEM_CHECK, text=_(u'Enable Undo/Redo'))
   379         enable_undo_redo = _(u'Enable Undo/Redo')  # Keeping text in translations for possible menu reactivation
   379         enable_undo_redo = _(u'Enable Undo/Redo')  # Keeping text in translations for possible menu reactivation
   380         parent.AppendSeparator()
   380         parent.AppendSeparator()
   381         AppendMenu(parent, help='', id=wx.ID_CUT,
   381         AppendMenu(parent, help='', id=wx.ID_CUT,
   382               kind=wx.ITEM_NORMAL, text=_(u'Cut') + '\tCTRL+X')
   382                    kind=wx.ITEM_NORMAL, text=_(u'Cut') + '\tCTRL+X')
   383         AppendMenu(parent, help='', id=wx.ID_COPY,
   383         AppendMenu(parent, help='', id=wx.ID_COPY,
   384               kind=wx.ITEM_NORMAL, text=_(u'Copy') + '\tCTRL+C')
   384                    kind=wx.ITEM_NORMAL, text=_(u'Copy') + '\tCTRL+C')
   385         AppendMenu(parent, help='', id=wx.ID_PASTE,
   385         AppendMenu(parent, help='', id=wx.ID_PASTE,
   386               kind=wx.ITEM_NORMAL, text=_(u'Paste') + '\tCTRL+V')
   386                    kind=wx.ITEM_NORMAL, text=_(u'Paste') + '\tCTRL+V')
   387         parent.AppendSeparator()
   387         parent.AppendSeparator()
   388         AppendMenu(parent, help='', id=wx.ID_FIND,
   388         AppendMenu(parent, help='', id=wx.ID_FIND,
   389               kind=wx.ITEM_NORMAL, text=_(u'Find') + '\tCTRL+F')
   389                    kind=wx.ITEM_NORMAL, text=_(u'Find') + '\tCTRL+F')
   390         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUFINDNEXT,
   390         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUFINDNEXT,
   391               kind=wx.ITEM_NORMAL, text=_(u'Find Next') + '\tCTRL+K')
   391                    kind=wx.ITEM_NORMAL, text=_(u'Find Next') + '\tCTRL+K')
   392         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUFINDPREVIOUS,
   392         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUFINDPREVIOUS,
   393               kind=wx.ITEM_NORMAL, text=_(u'Find Previous') + '\tCTRL+SHIFT+K')
   393                    kind=wx.ITEM_NORMAL, text=_(u'Find Previous') + '\tCTRL+SHIFT+K')
   394         parent.AppendSeparator()
   394         parent.AppendSeparator()
   395         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT,
   395         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT,
   396               kind=wx.ITEM_NORMAL, text=_(u'Search in Project') + '\tCTRL+SHIFT+F')
   396                    kind=wx.ITEM_NORMAL, text=_(u'Search in Project') + '\tCTRL+SHIFT+F')
   397         parent.AppendSeparator()
   397         parent.AppendSeparator()
   398         add_menu = wx.Menu(title='')
   398         add_menu = wx.Menu(title='')
   399         self._init_coll_AddMenu_Items(add_menu)
   399         self._init_coll_AddMenu_Items(add_menu)
   400         parent.AppendMenu(wx.ID_ADD, _(u"&Add Element"), add_menu)
   400         parent.AppendMenu(wx.ID_ADD, _(u"&Add Element"), add_menu)
   401         AppendMenu(parent, help='', id=wx.ID_SELECTALL,
   401         AppendMenu(parent, help='', id=wx.ID_SELECTALL,
   402               kind=wx.ITEM_NORMAL, text=_(u'Select All') + '\tCTRL+A')
   402                    kind=wx.ITEM_NORMAL, text=_(u'Select All') + '\tCTRL+A')
   403         AppendMenu(parent, help='', id=wx.ID_DELETE,
   403         AppendMenu(parent, help='', id=wx.ID_DELETE,
   404               kind=wx.ITEM_NORMAL, text=_(u'&Delete'))
   404                    kind=wx.ITEM_NORMAL, text=_(u'&Delete'))
   405         self.Bind(wx.EVT_MENU, self.OnUndoMenu, id=wx.ID_UNDO)
   405         self.Bind(wx.EVT_MENU, self.OnUndoMenu, id=wx.ID_UNDO)
   406         self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO)
   406         self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO)
   407         #self.Bind(wx.EVT_MENU, self.OnEnableUndoRedoMenu, id=ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO)
   407         #self.Bind(wx.EVT_MENU, self.OnEnableUndoRedoMenu, id=ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO)
   408         self.Bind(wx.EVT_MENU, self.OnCutMenu, id=wx.ID_CUT)
   408         self.Bind(wx.EVT_MENU, self.OnCutMenu, id=wx.ID_CUT)
   409         self.Bind(wx.EVT_MENU, self.OnCopyMenu, id=wx.ID_COPY)
   409         self.Bind(wx.EVT_MENU, self.OnCopyMenu, id=wx.ID_COPY)
   410         self.Bind(wx.EVT_MENU, self.OnPasteMenu, id=wx.ID_PASTE)
   410         self.Bind(wx.EVT_MENU, self.OnPasteMenu, id=wx.ID_PASTE)
   411         self.Bind(wx.EVT_MENU, self.OnFindMenu, id=wx.ID_FIND)
   411         self.Bind(wx.EVT_MENU, self.OnFindMenu, id=wx.ID_FIND)
   412         self.Bind(wx.EVT_MENU, self.OnFindNextMenu,
   412         self.Bind(wx.EVT_MENU, self.OnFindNextMenu,
   413               id=ID_PLCOPENEDITOREDITMENUFINDNEXT)
   413                   id=ID_PLCOPENEDITOREDITMENUFINDNEXT)
   414         self.Bind(wx.EVT_MENU, self.OnFindPreviousMenu,
   414         self.Bind(wx.EVT_MENU, self.OnFindPreviousMenu,
   415               id=ID_PLCOPENEDITOREDITMENUFINDPREVIOUS)
   415                   id=ID_PLCOPENEDITOREDITMENUFINDPREVIOUS)
   416         self.Bind(wx.EVT_MENU, self.OnSearchInProjectMenu,
   416         self.Bind(wx.EVT_MENU, self.OnSearchInProjectMenu,
   417               id=ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT)
   417                   id=ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT)
   418         self.Bind(wx.EVT_MENU, self.OnSearchInProjectMenu,
   418         self.Bind(wx.EVT_MENU, self.OnSearchInProjectMenu,
   419               id=ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT)
   419                   id=ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT)
   420         self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu,
   420         self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu,
   421               id=ID_PLCOPENEDITOREDITMENUADDDATATYPE)
   421                   id=ID_PLCOPENEDITOREDITMENUADDDATATYPE)
   422         self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("function"),
   422         self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("function"),
   423               id=ID_PLCOPENEDITOREDITMENUADDFUNCTION)
   423                   id=ID_PLCOPENEDITOREDITMENUADDFUNCTION)
   424         self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("functionBlock"),
   424         self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("functionBlock"),
   425               id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK)
   425                   id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK)
   426         self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("program"),
   426         self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("program"),
   427               id=ID_PLCOPENEDITOREDITMENUADDPROGRAM)
   427                   id=ID_PLCOPENEDITOREDITMENUADDPROGRAM)
   428         self.Bind(wx.EVT_MENU, self.AddResourceMenu,
   428         self.Bind(wx.EVT_MENU, self.AddResourceMenu,
   429               id=ID_PLCOPENEDITOREDITMENUADDRESOURCE)
   429                   id=ID_PLCOPENEDITOREDITMENUADDRESOURCE)
   430         self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu,
   430         self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu,
   431               id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION)
   431                   id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION)
   432         self.Bind(wx.EVT_MENU, self.OnSelectAllMenu, id=wx.ID_SELECTALL)
   432         self.Bind(wx.EVT_MENU, self.OnSelectAllMenu, id=wx.ID_SELECTALL)
   433         self.Bind(wx.EVT_MENU, self.OnDeleteMenu, id=wx.ID_DELETE)
   433         self.Bind(wx.EVT_MENU, self.OnDeleteMenu, id=wx.ID_DELETE)
   434 
   434 
   435         self.AddToMenuToolBar([(wx.ID_UNDO, "undo", _(u'Undo'), None),
   435         self.AddToMenuToolBar([(wx.ID_UNDO, "undo", _(u'Undo'), None),
   436                                (wx.ID_REDO, "redo", _(u'Redo'), None),
   436                                (wx.ID_REDO, "redo", _(u'Redo'), None),
   441                                None,
   441                                None,
   442                                (ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, "find", _(u'Search in Project'), None)])
   442                                (ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, "find", _(u'Search in Project'), None)])
   443 
   443 
   444     def _init_coll_DisplayMenu_Items(self, parent):
   444     def _init_coll_DisplayMenu_Items(self, parent):
   445         AppendMenu(parent, help='', id=wx.ID_REFRESH,
   445         AppendMenu(parent, help='', id=wx.ID_REFRESH,
   446               kind=wx.ITEM_NORMAL, text=_(u'Refresh') + '\tCTRL+R')
   446                    kind=wx.ITEM_NORMAL, text=_(u'Refresh') + '\tCTRL+R')
   447         if self.EnableDebug:
   447         if self.EnableDebug:
   448             AppendMenu(parent, help='', id=wx.ID_CLEAR,
   448             AppendMenu(parent, help='', id=wx.ID_CLEAR,
   449                   kind=wx.ITEM_NORMAL, text=_(u'Clear Errors') + '\tCTRL+K')
   449                        kind=wx.ITEM_NORMAL, text=_(u'Clear Errors') + '\tCTRL+K')
   450         parent.AppendSeparator()
   450         parent.AppendSeparator()
   451         zoommenu = wx.Menu(title='')
   451         zoommenu = wx.Menu(title='')
   452         parent.AppendMenu(wx.ID_ZOOM_FIT, _("Zoom"), zoommenu)
   452         parent.AppendMenu(wx.ID_ZOOM_FIT, _("Zoom"), zoommenu)
   453         for idx, value in enumerate(ZOOM_FACTORS):
   453         for idx, value in enumerate(ZOOM_FACTORS):
   454             new_id = wx.NewId()
   454             new_id = wx.NewId()
   455             AppendMenu(zoommenu, help='', id=new_id,
   455             AppendMenu(zoommenu, help='', id=new_id,
   456                   kind=wx.ITEM_RADIO, text=str(int(round(value * 100))) + "%")
   456                        kind=wx.ITEM_RADIO, text=str(int(round(value * 100))) + "%")
   457             self.Bind(wx.EVT_MENU, self.GenerateZoomFunction(idx), id=new_id)
   457             self.Bind(wx.EVT_MENU, self.GenerateZoomFunction(idx), id=new_id)
   458 
   458 
   459         parent.AppendSeparator()
   459         parent.AppendSeparator()
   460         AppendMenu(parent, help='', id=ID_PLCOPENEDITORDISPLAYMENUSWITCHPERSPECTIVE,
   460         AppendMenu(parent, help='', id=ID_PLCOPENEDITORDISPLAYMENUSWITCHPERSPECTIVE,
   461                    kind=wx.ITEM_NORMAL, text=_(u'Switch perspective') + '\tF12')
   461                    kind=wx.ITEM_NORMAL, text=_(u'Switch perspective') + '\tF12')
   462         self.Bind(wx.EVT_MENU, self.SwitchFullScrMode, id=ID_PLCOPENEDITORDISPLAYMENUSWITCHPERSPECTIVE)
   462         self.Bind(wx.EVT_MENU, self.SwitchFullScrMode, id=ID_PLCOPENEDITORDISPLAYMENUSWITCHPERSPECTIVE)
   463 
   463 
   464         AppendMenu(parent, help='', id=ID_PLCOPENEDITORDISPLAYMENURESETPERSPECTIVE,
   464         AppendMenu(parent, help='', id=ID_PLCOPENEDITORDISPLAYMENURESETPERSPECTIVE,
   465               kind=wx.ITEM_NORMAL, text=_(u'Reset Perspective'))
   465                    kind=wx.ITEM_NORMAL, text=_(u'Reset Perspective'))
   466         self.Bind(wx.EVT_MENU, self.OnResetPerspective, id=ID_PLCOPENEDITORDISPLAYMENURESETPERSPECTIVE)
   466         self.Bind(wx.EVT_MENU, self.OnResetPerspective, id=ID_PLCOPENEDITORDISPLAYMENURESETPERSPECTIVE)
   467 
   467 
   468         self.Bind(wx.EVT_MENU, self.OnRefreshMenu, id=wx.ID_REFRESH)
   468         self.Bind(wx.EVT_MENU, self.OnRefreshMenu, id=wx.ID_REFRESH)
   469         if self.EnableDebug:
   469         if self.EnableDebug:
   470             self.Bind(wx.EVT_MENU, self.OnClearErrorsMenu, id=wx.ID_CLEAR)
   470             self.Bind(wx.EVT_MENU, self.OnClearErrorsMenu, id=wx.ID_CLEAR)
   492         elif parent and parent.icon:
   492         elif parent and parent.icon:
   493             self.SetIcon(parent.icon)
   493             self.SetIcon(parent.icon)
   494 
   494 
   495     def _init_ctrls(self, prnt):
   495     def _init_ctrls(self, prnt):
   496         wx.Frame.__init__(self, id=ID_PLCOPENEDITOR, name='IDEFrame',
   496         wx.Frame.__init__(self, id=ID_PLCOPENEDITOR, name='IDEFrame',
   497               parent=prnt, pos=wx.DefaultPosition, size=wx.Size(1000, 600),
   497                           parent=prnt, pos=wx.DefaultPosition, size=wx.Size(1000, 600),
   498               style=wx.DEFAULT_FRAME_STYLE)
   498                           style=wx.DEFAULT_FRAME_STYLE)
   499         self._init_icon(prnt)
   499         self._init_icon(prnt)
   500         self.SetClientSize(wx.Size(1000, 600))
   500         self.SetClientSize(wx.Size(1000, 600))
   501         self.Bind(wx.EVT_ACTIVATE, self.OnActivated)
   501         self.Bind(wx.EVT_ACTIVATE, self.OnActivated)
   502 
   502 
   503         self.TabsImageList = wx.ImageList(31, 16)
   503         self.TabsImageList = wx.ImageList(31, 16)
   509 
   509 
   510         self.AUIManager = wx.aui.AuiManager(self)
   510         self.AUIManager = wx.aui.AuiManager(self)
   511         self.AUIManager.SetDockSizeConstraint(0.5, 0.5)
   511         self.AUIManager.SetDockSizeConstraint(0.5, 0.5)
   512         self.Panes = {}
   512         self.Panes = {}
   513 
   513 
   514         self.LeftNoteBook = wx.aui.AuiNotebook(self, ID_PLCOPENEDITORLEFTNOTEBOOK,
   514         self.LeftNoteBook = wx.aui.AuiNotebook(
   515               style=wx.aui.AUI_NB_TOP | wx.aui.AUI_NB_TAB_SPLIT | wx.aui.AUI_NB_TAB_MOVE |
   515             self, ID_PLCOPENEDITORLEFTNOTEBOOK,
   516                     wx.aui.AUI_NB_SCROLL_BUTTONS | wx.aui.AUI_NB_TAB_EXTERNAL_MOVE)
   516             style=(wx.aui.AUI_NB_TOP |
       
   517                    wx.aui.AUI_NB_TAB_SPLIT |
       
   518                    wx.aui.AUI_NB_TAB_MOVE |
       
   519                    wx.aui.AUI_NB_SCROLL_BUTTONS |
       
   520                    wx.aui.AUI_NB_TAB_EXTERNAL_MOVE))
   517         self.LeftNoteBook.Bind(wx.aui.EVT_AUINOTEBOOK_ALLOW_DND,
   521         self.LeftNoteBook.Bind(wx.aui.EVT_AUINOTEBOOK_ALLOW_DND,
   518                 self.OnAllowNotebookDnD)
   522                                self.OnAllowNotebookDnD)
   519         self.AUIManager.AddPane(self.LeftNoteBook,
   523         self.AUIManager.AddPane(
   520               wx.aui.AuiPaneInfo().Name("ProjectPane").
   524             self.LeftNoteBook,
   521               Left().Layer(1).
   525             wx.aui.AuiPaneInfo().Name("ProjectPane").Left().Layer(1).
   522               BestSize(wx.Size(300, 500)).CloseButton(False))
   526             BestSize(wx.Size(300, 500)).CloseButton(False))
   523 
   527 
   524         self.BottomNoteBook = wx.aui.AuiNotebook(self, ID_PLCOPENEDITORBOTTOMNOTEBOOK,
   528         self.BottomNoteBook = wx.aui.AuiNotebook(
   525               style=wx.aui.AUI_NB_TOP | wx.aui.AUI_NB_TAB_SPLIT | wx.aui.AUI_NB_TAB_MOVE |
   529             self, ID_PLCOPENEDITORBOTTOMNOTEBOOK,
   526                     wx.aui.AUI_NB_SCROLL_BUTTONS | wx.aui.AUI_NB_TAB_EXTERNAL_MOVE)
   530             style=(wx.aui.AUI_NB_TOP |
       
   531                    wx.aui.AUI_NB_TAB_SPLIT |
       
   532                    wx.aui.AUI_NB_TAB_MOVE |
       
   533                    wx.aui.AUI_NB_SCROLL_BUTTONS |
       
   534                    wx.aui.AUI_NB_TAB_EXTERNAL_MOVE))
   527         self.BottomNoteBook.Bind(wx.aui.EVT_AUINOTEBOOK_ALLOW_DND,
   535         self.BottomNoteBook.Bind(wx.aui.EVT_AUINOTEBOOK_ALLOW_DND,
   528                 self.OnAllowNotebookDnD)
   536                                  self.OnAllowNotebookDnD)
   529         self.AUIManager.AddPane(self.BottomNoteBook,
   537         self.AUIManager.AddPane(
   530               wx.aui.AuiPaneInfo().Name("ResultPane").
   538             self.BottomNoteBook,
   531               Bottom().Layer(0).
   539             wx.aui.AuiPaneInfo().Name("ResultPane").Bottom().Layer(0).
   532               BestSize(wx.Size(800, 300)).CloseButton(False))
   540             BestSize(wx.Size(800, 300)).CloseButton(False))
   533 
   541 
   534         self.RightNoteBook = wx.aui.AuiNotebook(self, ID_PLCOPENEDITORRIGHTNOTEBOOK,
   542         self.RightNoteBook = wx.aui.AuiNotebook(
   535               style=wx.aui.AUI_NB_TOP | wx.aui.AUI_NB_TAB_SPLIT | wx.aui.AUI_NB_TAB_MOVE |
   543             self, ID_PLCOPENEDITORRIGHTNOTEBOOK,
   536                     wx.aui.AUI_NB_SCROLL_BUTTONS | wx.aui.AUI_NB_TAB_EXTERNAL_MOVE)
   544             style=(wx.aui.AUI_NB_TOP |
       
   545                    wx.aui.AUI_NB_TAB_SPLIT |
       
   546                    wx.aui.AUI_NB_TAB_MOVE |
       
   547                    wx.aui.AUI_NB_SCROLL_BUTTONS |
       
   548                    wx.aui.AUI_NB_TAB_EXTERNAL_MOVE))
   537         self.RightNoteBook.Bind(wx.aui.EVT_AUINOTEBOOK_ALLOW_DND,
   549         self.RightNoteBook.Bind(wx.aui.EVT_AUINOTEBOOK_ALLOW_DND,
   538                 self.OnAllowNotebookDnD)
   550                                 self.OnAllowNotebookDnD)
   539         self.AUIManager.AddPane(self.RightNoteBook,
   551         self.AUIManager.AddPane(
   540               wx.aui.AuiPaneInfo().Name("LibraryPane").
   552             self.RightNoteBook,
   541               Right().Layer(0).
   553             wx.aui.AuiPaneInfo().Name("LibraryPane").Right().Layer(0).
   542               BestSize(wx.Size(250, 400)).CloseButton(False))
   554             BestSize(wx.Size(250, 400)).CloseButton(False))
   543 
   555 
   544         self.TabsOpened = wx.aui.AuiNotebook(self, ID_PLCOPENEDITORTABSOPENED,
   556         self.TabsOpened = wx.aui.AuiNotebook(
   545               style=wx.aui.AUI_NB_DEFAULT_STYLE | wx.aui.AUI_NB_WINDOWLIST_BUTTON)
   557             self, ID_PLCOPENEDITORTABSOPENED,
       
   558             style=(wx.aui.AUI_NB_DEFAULT_STYLE |
       
   559                    wx.aui.AUI_NB_WINDOWLIST_BUTTON))
   546         self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGING,
   560         self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGING,
   547               self.OnPouSelectedChanging)
   561                              self.OnPouSelectedChanging)
   548         self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED,
   562         self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED,
   549               self.OnPouSelectedChanged)
   563                              self.OnPouSelectedChanged)
   550         self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CLOSE,
   564         self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CLOSE,
   551               self.OnPageClose)
   565                              self.OnPageClose)
   552         self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_END_DRAG,
   566         self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_END_DRAG,
   553               self.OnPageDragged)
   567                              self.OnPageDragged)
   554         self.AUIManager.AddPane(self.TabsOpened,
   568         self.AUIManager.AddPane(self.TabsOpened,
   555               wx.aui.AuiPaneInfo().CentrePane().Name("TabsPane"))
   569                                 wx.aui.AuiPaneInfo().CentrePane().Name("TabsPane"))
   556 
   570 
   557         #-----------------------------------------------------------------------
   571         #-----------------------------------------------------------------------
   558         #                    Creating PLCopen Project Types Tree
   572         #                    Creating PLCopen Project Types Tree
   559         #-----------------------------------------------------------------------
   573         #-----------------------------------------------------------------------
   560 
   574 
   561         self.MainTabs = {}
   575         self.MainTabs = {}
   562 
   576 
   563         self.ProjectPanel = wx.SplitterWindow(id=ID_PLCOPENEDITORPROJECTPANEL,
   577         self.ProjectPanel = wx.SplitterWindow(
   564                   name='ProjectPanel', parent=self.LeftNoteBook, point=wx.Point(0, 0),
   578             id=ID_PLCOPENEDITORPROJECTPANEL,
   565                   size=wx.Size(0, 0), style=wx.SP_3D)
   579             name='ProjectPanel', parent=self.LeftNoteBook, point=wx.Point(0, 0),
       
   580             size=wx.Size(0, 0), style=wx.SP_3D)
   566 
   581 
   567         self.ProjectTree = CustomTree(id=ID_PLCOPENEDITORPROJECTTREE,
   582         self.ProjectTree = CustomTree(id=ID_PLCOPENEDITORPROJECTTREE,
   568                   name='ProjectTree', parent=self.ProjectPanel,
   583                                       name='ProjectTree',
   569                   pos=wx.Point(0, 0), size=wx.Size(0, 0),
   584                                       parent=self.ProjectPanel,
   570                   style=wx.SUNKEN_BORDER,
   585                                       pos=wx.Point(0, 0), size=wx.Size(0, 0),
   571                   agwStyle=wx.TR_HAS_BUTTONS | wx.TR_SINGLE | wx.TR_EDIT_LABELS)
   586                                       style=wx.SUNKEN_BORDER,
       
   587                                       agwStyle=(wx.TR_HAS_BUTTONS |
       
   588                                                 wx.TR_SINGLE |
       
   589                                                 wx.TR_EDIT_LABELS))
   572         self.ProjectTree.SetBackgroundBitmap(GetBitmap("custom_tree_background"),
   590         self.ProjectTree.SetBackgroundBitmap(GetBitmap("custom_tree_background"),
   573                                              wx.ALIGN_RIGHT | wx.ALIGN_BOTTOM)
   591                                              wx.ALIGN_RIGHT | wx.ALIGN_BOTTOM)
   574         add_menu = wx.Menu()
   592         add_menu = wx.Menu()
   575         self._init_coll_AddMenu_Items(add_menu)
   593         self._init_coll_AddMenu_Items(add_menu)
   576         self.ProjectTree.SetAddMenu(add_menu)
   594         self.ProjectTree.SetAddMenu(add_menu)
   577         self.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.OnProjectTreeRightUp,
   595         self.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.OnProjectTreeRightUp,
   578               id=ID_PLCOPENEDITORPROJECTTREE)
   596                   id=ID_PLCOPENEDITORPROJECTTREE)
   579         self.ProjectTree.Bind(wx.EVT_LEFT_UP, self.OnProjectTreeLeftUp)
   597         self.ProjectTree.Bind(wx.EVT_LEFT_UP, self.OnProjectTreeLeftUp)
   580         self.Bind(wx.EVT_TREE_SEL_CHANGING, self.OnProjectTreeItemChanging,
   598         self.Bind(wx.EVT_TREE_SEL_CHANGING, self.OnProjectTreeItemChanging,
   581               id=ID_PLCOPENEDITORPROJECTTREE)
   599                   id=ID_PLCOPENEDITORPROJECTTREE)
   582         self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnProjectTreeBeginDrag,
   600         self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnProjectTreeBeginDrag,
   583               id=ID_PLCOPENEDITORPROJECTTREE)
   601                   id=ID_PLCOPENEDITORPROJECTTREE)
   584         self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.OnProjectTreeItemBeginEdit,
   602         self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.OnProjectTreeItemBeginEdit,
   585               id=ID_PLCOPENEDITORPROJECTTREE)
   603                   id=ID_PLCOPENEDITORPROJECTTREE)
   586         self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnProjectTreeItemEndEdit,
   604         self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnProjectTreeItemEndEdit,
   587               id=ID_PLCOPENEDITORPROJECTTREE)
   605                   id=ID_PLCOPENEDITORPROJECTTREE)
   588         self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnProjectTreeItemActivated,
   606         self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnProjectTreeItemActivated,
   589               id=ID_PLCOPENEDITORPROJECTTREE)
   607                   id=ID_PLCOPENEDITORPROJECTTREE)
   590         self.ProjectTree.Bind(wx.EVT_MOTION, self.OnProjectTreeMotion)
   608         self.ProjectTree.Bind(wx.EVT_MOTION, self.OnProjectTreeMotion)
   591 
   609 
   592         #-----------------------------------------------------------------------
   610         #-----------------------------------------------------------------------
   593         #        Creating PLCopen Project POU Instance Variables Panel
   611         #        Creating PLCopen Project POU Instance Variables Panel
   594         #-----------------------------------------------------------------------
   612         #-----------------------------------------------------------------------
   602 
   620 
   603         #-----------------------------------------------------------------------
   621         #-----------------------------------------------------------------------
   604         #                            Creating Tool Bar
   622         #                            Creating Tool Bar
   605         #-----------------------------------------------------------------------
   623         #-----------------------------------------------------------------------
   606 
   624 
   607         MenuToolBar = wx.ToolBar(self, ID_PLCOPENEDITOREDITORMENUTOOLBAR, wx.DefaultPosition, wx.DefaultSize,
   625         MenuToolBar = wx.ToolBar(self, ID_PLCOPENEDITOREDITORMENUTOOLBAR,
   608                 wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER)
   626                                  wx.DefaultPosition, wx.DefaultSize,
       
   627                                  wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER)
   609         MenuToolBar.SetToolBitmapSize(wx.Size(25, 25))
   628         MenuToolBar.SetToolBitmapSize(wx.Size(25, 25))
   610         MenuToolBar.Realize()
   629         MenuToolBar.Realize()
   611         self.Panes["MenuToolBar"] = MenuToolBar
   630         self.Panes["MenuToolBar"] = MenuToolBar
   612         self.AUIManager.AddPane(MenuToolBar, wx.aui.AuiPaneInfo().
   631         self.AUIManager.AddPane(MenuToolBar, wx.aui.AuiPaneInfo().
   613                   Name("MenuToolBar").Caption(_("Menu ToolBar")).
   632                                 Name("MenuToolBar").Caption(_("Menu ToolBar")).
   614                   ToolbarPane().Top().
   633                                 ToolbarPane().Top().
   615                   LeftDockable(False).RightDockable(False))
   634                                 LeftDockable(False).RightDockable(False))
   616 
   635 
   617         EditorToolBar = wx.ToolBar(self, ID_PLCOPENEDITOREDITORTOOLBAR, wx.DefaultPosition, wx.DefaultSize,
   636         EditorToolBar = wx.ToolBar(self, ID_PLCOPENEDITOREDITORTOOLBAR,
   618                 wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER)
   637                                    wx.DefaultPosition, wx.DefaultSize,
       
   638                                    wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER)
   619         EditorToolBar.SetToolBitmapSize(wx.Size(25, 25))
   639         EditorToolBar.SetToolBitmapSize(wx.Size(25, 25))
   620         EditorToolBar.AddRadioTool(ID_PLCOPENEDITOREDITORTOOLBARSELECTION,
   640         EditorToolBar.AddRadioTool(ID_PLCOPENEDITOREDITORTOOLBARSELECTION,
   621               GetBitmap("select"), wx.NullBitmap, _("Select an object"))
   641                                    GetBitmap("select"),
       
   642                                    wx.NullBitmap,
       
   643                                    _("Select an object"))
   622         EditorToolBar.Realize()
   644         EditorToolBar.Realize()
   623         self.Panes["EditorToolBar"] = EditorToolBar
   645         self.Panes["EditorToolBar"] = EditorToolBar
   624         self.AUIManager.AddPane(EditorToolBar, wx.aui.AuiPaneInfo().
   646         self.AUIManager.AddPane(EditorToolBar, wx.aui.AuiPaneInfo().
   625                   Name("EditorToolBar").Caption(_("Editor ToolBar")).
   647                                 Name("EditorToolBar").Caption(_("Editor ToolBar")).
   626                   ToolbarPane().Top().Position(1).
   648                                 ToolbarPane().Top().Position(1).
   627                   LeftDockable(False).RightDockable(False))
   649                                 LeftDockable(False).RightDockable(False))
   628 
   650 
   629         self.Bind(wx.EVT_MENU, self.OnSelectionTool,
   651         self.Bind(wx.EVT_MENU, self.OnSelectionTool,
   630               id=ID_PLCOPENEDITOREDITORTOOLBARSELECTION)
   652                   id=ID_PLCOPENEDITOREDITORTOOLBARSELECTION)
   631 
   653 
   632         #-----------------------------------------------------------------------
   654         #-----------------------------------------------------------------------
   633         #                            Creating Search Panel
   655         #                            Creating Search Panel
   634         #-----------------------------------------------------------------------
   656         #-----------------------------------------------------------------------
   635 
   657 
  1139             #self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, True)
  1161             #self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, True)
  1140             #self.EditMenu.Check(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO,
  1162             #self.EditMenu.Check(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO,
  1141             #                self.Controler.IsProjectBufferEnabled())
  1163             #                self.Controler.IsProjectBufferEnabled())
  1142             self.EditMenu.Enable(wx.ID_FIND, selected > -1)
  1164             self.EditMenu.Enable(wx.ID_FIND, selected > -1)
  1143             self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUFINDNEXT,
  1165             self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUFINDNEXT,
  1144                   selected > -1 and self.SearchParams is not None)
  1166                                  selected > -1 and self.SearchParams is not None)
  1145             self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUFINDPREVIOUS,
  1167             self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUFINDPREVIOUS,
  1146                   selected > -1 and self.SearchParams is not None)
  1168                                  selected > -1 and self.SearchParams is not None)
  1147             self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, True)
  1169             self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, True)
  1148             MenuToolBar.EnableTool(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, True)
  1170             MenuToolBar.EnableTool(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, True)
  1149             self.EditMenu.Enable(wx.ID_ADD, True)
  1171             self.EditMenu.Enable(wx.ID_ADD, True)
  1150             self.EditMenu.Enable(wx.ID_DELETE, True)
  1172             self.EditMenu.Enable(wx.ID_DELETE, True)
  1151             if self.TabsOpened.GetPageCount() > 0:
  1173             if self.TabsOpened.GetPageCount() > 0:
  1508         self.ProjectTree.SetPyData(root, infos)
  1530         self.ProjectTree.SetPyData(root, infos)
  1509         highlight_colours = self.Highlights.get(infos.get("tagname", None), (wx.Colour(255, 255, 255, 0), wx.BLACK))
  1531         highlight_colours = self.Highlights.get(infos.get("tagname", None), (wx.Colour(255, 255, 255, 0), wx.BLACK))
  1510         self.ProjectTree.SetItemTextColour(root, highlight_colours[1])
  1532         self.ProjectTree.SetItemTextColour(root, highlight_colours[1])
  1511         self.ProjectTree.SetItemExtraImage(root, None)
  1533         self.ProjectTree.SetItemExtraImage(root, None)
  1512         if infos["type"] == ITEM_POU:
  1534         if infos["type"] == ITEM_POU:
  1513             self.ProjectTree.SetItemImage(root,
  1535             self.ProjectTree.SetItemImage(
  1514                 self.TreeImageDict[self.Controler.GetPouBodyType(infos["name"])])
  1536                 root, self.TreeImageDict[self.Controler.GetPouBodyType(infos["name"])])
  1515             if item_alone:
  1537             if item_alone:
  1516                 self.ProjectTree.SetItemExtraImage(root, self.Controler.GetPouType(infos["name"]))
  1538                 self.ProjectTree.SetItemExtraImage(root, self.Controler.GetPouType(infos["name"]))
  1517         elif "icon" in infos and infos["icon"] is not None:
  1539         elif "icon" in infos and infos["icon"] is not None:
  1518             icon_name = infos["icon"]
  1540             icon_name = infos["icon"]
  1519             if not icon_name in self.TreeImageDict:
  1541             if not icon_name in self.TreeImageDict:
  1548         result = False
  1570         result = False
  1549         if self.ProjectTree is not None:
  1571         if self.ProjectTree is not None:
  1550             root = self.ProjectTree.GetRootItem()
  1572             root = self.ProjectTree.GetRootItem()
  1551             if root is not None and root.IsOk():
  1573             if root is not None and root.IsOk():
  1552                 words = tagname.split("::")
  1574                 words = tagname.split("::")
  1553                 result = self.RecursiveProjectTreeItemSelection(root,
  1575                 result = self.RecursiveProjectTreeItemSelection(
  1554                     zip(words[1:], self.TagNamePartsItemTypes.get(words[0], [])))
  1576                     root, zip(words[1:], self.TagNamePartsItemTypes.get(words[0], [])))
  1555         return result
  1577         return result
  1556 
  1578 
  1557     def RecursiveProjectTreeItemSelection(self, root, items):
  1579     def RecursiveProjectTreeItemSelection(self, root, items):
  1558         found = False
  1580         found = False
  1559         item, root_cookie = self.ProjectTree.GetFirstChild(root)
  1581         item, root_cookie = self.ProjectTree.GetFirstChild(root)
  1716         item_infos = self.ProjectTree.GetPyData(selected)
  1738         item_infos = self.ProjectTree.GetPyData(selected)
  1717         if item_infos["type"] == ITEM_PROJECT:
  1739         if item_infos["type"] == ITEM_PROJECT:
  1718             self.EditProjectSettings()
  1740             self.EditProjectSettings()
  1719         else:
  1741         else:
  1720             if item_infos["type"] in [ITEM_DATATYPE, ITEM_POU,
  1742             if item_infos["type"] in [ITEM_DATATYPE, ITEM_POU,
  1721                                     ITEM_CONFIGURATION, ITEM_RESOURCE,
  1743                                       ITEM_CONFIGURATION, ITEM_RESOURCE,
  1722                                     ITEM_TRANSITION, ITEM_ACTION]:
  1744                                       ITEM_TRANSITION, ITEM_ACTION]:
  1723                 self.EditProjectElement(item_infos["type"], item_infos["tagname"])
  1745                 self.EditProjectElement(item_infos["type"], item_infos["tagname"])
  1724             event.Skip()
  1746             event.Skip()
  1725 
  1747 
  1726     def ProjectTreeItemSelect(self, select_item):
  1748     def ProjectTreeItemSelect(self, select_item):
  1727         if select_item is not None and select_item.IsOk():
  1749         if select_item is not None and select_item.IsOk():
  1763                         block_type = "Transition"
  1785                         block_type = "Transition"
  1764                     else:
  1786                     else:
  1765                         block_type = "Action"
  1787                         block_type = "Action"
  1766                     self.LastToolTipItem = item
  1788                     self.LastToolTipItem = item
  1767                     wx.CallAfter(self.ProjectTree.SetToolTipString,
  1789                     wx.CallAfter(self.ProjectTree.SetToolTipString,
  1768                         "%s : %s : %s" % (
  1790                                  "%s : %s : %s" % (
  1769                             block_type, bodytype, item_infos["name"]))
  1791                                      block_type, bodytype, item_infos["name"]))
  1770             elif self.LastToolTipItem is not None:
  1792             elif self.LastToolTipItem is not None:
  1771                 self.ProjectTree.SetToolTip(None)
  1793                 self.ProjectTree.SetToolTip(None)
  1772                 self.LastToolTipItem = None
  1794                 self.LastToolTipItem = None
  1773         event.Skip()
  1795         event.Skip()
  1774 
  1796 
  2415 
  2437 
  2416     def CheckElementIsUsedBeforeDeletion(self, check_function, title, name):
  2438     def CheckElementIsUsedBeforeDeletion(self, check_function, title, name):
  2417         if not check_function(name):
  2439         if not check_function(name):
  2418             return True
  2440             return True
  2419 
  2441 
  2420         dialog = wx.MessageDialog(self,
  2442         dialog = wx.MessageDialog(
       
  2443             self,
  2421             _("\"%s\" is used by one or more POUs. Do you wish to continue?") % name,
  2444             _("\"%s\" is used by one or more POUs. Do you wish to continue?") % name,
  2422             title, wx.YES_NO | wx.ICON_QUESTION)
  2445             title, wx.YES_NO | wx.ICON_QUESTION)
  2423         answer = dialog.ShowModal()
  2446         answer = dialog.ShowModal()
  2424         dialog.Destroy()
  2447         dialog.Destroy()
  2425         return answer == wx.ID_YES
  2448         return answer == wx.ID_YES