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 |