111 from RessourceEditor import * |
111 from RessourceEditor import * |
112 from DataTypeEditor import * |
112 from DataTypeEditor import * |
113 from PLCControler import * |
113 from PLCControler import * |
114 from SearchResultPanel import SearchResultPanel |
114 from SearchResultPanel import SearchResultPanel |
115 from controls import CustomTree, LibraryPanel, PouInstanceVariablesPanel, DebugVariablePanel |
115 from controls import CustomTree, LibraryPanel, PouInstanceVariablesPanel, DebugVariablePanel |
116 from dialogs import ProjectDialog, PouTransitionDialog, PouActionDialog |
116 from dialogs import ProjectDialog, PouTransitionDialog, PouActionDialog, FindInPouDialog |
117 |
117 |
118 # Define PLCOpenEditor controls id |
118 # Define PLCOpenEditor controls id |
119 [ID_PLCOPENEDITOR, ID_PLCOPENEDITORLEFTNOTEBOOK, |
119 [ID_PLCOPENEDITOR, ID_PLCOPENEDITORLEFTNOTEBOOK, |
120 ID_PLCOPENEDITORBOTTOMNOTEBOOK, ID_PLCOPENEDITORRIGHTNOTEBOOK, |
120 ID_PLCOPENEDITORBOTTOMNOTEBOOK, ID_PLCOPENEDITORRIGHTNOTEBOOK, |
121 ID_PLCOPENEDITORPROJECTTREE, ID_PLCOPENEDITORMAINSPLITTER, |
121 ID_PLCOPENEDITORPROJECTTREE, ID_PLCOPENEDITORMAINSPLITTER, |
133 |
133 |
134 # Define PLCOpenEditor EditMenu extra items id |
134 # Define PLCOpenEditor EditMenu extra items id |
135 [ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, ID_PLCOPENEDITOREDITMENUADDDATATYPE, |
135 [ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, ID_PLCOPENEDITOREDITMENUADDDATATYPE, |
136 ID_PLCOPENEDITOREDITMENUADDFUNCTION, ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK, |
136 ID_PLCOPENEDITOREDITMENUADDFUNCTION, ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK, |
137 ID_PLCOPENEDITOREDITMENUADDPROGRAM, ID_PLCOPENEDITOREDITMENUADDCONFIGURATION, |
137 ID_PLCOPENEDITOREDITMENUADDPROGRAM, ID_PLCOPENEDITOREDITMENUADDCONFIGURATION, |
|
138 ID_PLCOPENEDITOREDITMENUFINDNEXT, ID_PLCOPENEDITOREDITMENUFINDPREVIOUS, |
138 ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, |
139 ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, |
139 ] = [wx.NewId() for _init_coll_EditMenu_Items in range(7)] |
140 ] = [wx.NewId() for _init_coll_EditMenu_Items in range(9)] |
140 |
141 |
141 # Define PLCOpenEditor DisplayMenu extra items id |
142 # Define PLCOpenEditor DisplayMenu extra items id |
142 [ID_PLCOPENEDITORDISPLAYMENURESETPERSPECTIVE, |
143 [ID_PLCOPENEDITORDISPLAYMENURESETPERSPECTIVE, |
143 ] = [wx.NewId() for _init_coll_DisplayMenu_Items in range(1)] |
144 ] = [wx.NewId() for _init_coll_DisplayMenu_Items in range(1)] |
144 |
145 |
444 AppendMenu(parent, help='', id=wx.ID_COPY, |
445 AppendMenu(parent, help='', id=wx.ID_COPY, |
445 kind=wx.ITEM_NORMAL, text=_(u'Copy\tCTRL+C')) |
446 kind=wx.ITEM_NORMAL, text=_(u'Copy\tCTRL+C')) |
446 AppendMenu(parent, help='', id=wx.ID_PASTE, |
447 AppendMenu(parent, help='', id=wx.ID_PASTE, |
447 kind=wx.ITEM_NORMAL, text=_(u'Paste\tCTRL+V')) |
448 kind=wx.ITEM_NORMAL, text=_(u'Paste\tCTRL+V')) |
448 parent.AppendSeparator() |
449 parent.AppendSeparator() |
|
450 AppendMenu(parent, help='', id=wx.ID_FIND, |
|
451 kind=wx.ITEM_NORMAL, text=_(u'Find\tCTRL+F')) |
|
452 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUFINDNEXT, |
|
453 kind=wx.ITEM_NORMAL, text=_(u'Find Next\tCTRL+K')) |
|
454 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUFINDPREVIOUS, |
|
455 kind=wx.ITEM_NORMAL, text=_(u'Find Previous\tCTRL+SHIFT+K')) |
|
456 parent.AppendSeparator() |
449 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, |
457 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, |
450 kind=wx.ITEM_NORMAL, text=_(u'Search in Project\tCTRL+F')) |
458 kind=wx.ITEM_NORMAL, text=_(u'Search in Project\tCTRL+SHIFT+F')) |
451 parent.AppendSeparator() |
459 parent.AppendSeparator() |
452 add_menu = wx.Menu(title='') |
460 add_menu = wx.Menu(title='') |
453 self._init_coll_AddMenu_Items(add_menu) |
461 self._init_coll_AddMenu_Items(add_menu) |
454 parent.AppendMenu(wx.ID_ADD, _(u"&Add Element"), add_menu) |
462 parent.AppendMenu(wx.ID_ADD, _(u"&Add Element"), add_menu) |
455 AppendMenu(parent, help='', id=wx.ID_SELECTALL, |
463 AppendMenu(parent, help='', id=wx.ID_SELECTALL, |
460 self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO) |
468 self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO) |
461 #self.Bind(wx.EVT_MENU, self.OnEnableUndoRedoMenu, id=ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO) |
469 #self.Bind(wx.EVT_MENU, self.OnEnableUndoRedoMenu, id=ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO) |
462 self.Bind(wx.EVT_MENU, self.OnCutMenu, id=wx.ID_CUT) |
470 self.Bind(wx.EVT_MENU, self.OnCutMenu, id=wx.ID_CUT) |
463 self.Bind(wx.EVT_MENU, self.OnCopyMenu, id=wx.ID_COPY) |
471 self.Bind(wx.EVT_MENU, self.OnCopyMenu, id=wx.ID_COPY) |
464 self.Bind(wx.EVT_MENU, self.OnPasteMenu, id=wx.ID_PASTE) |
472 self.Bind(wx.EVT_MENU, self.OnPasteMenu, id=wx.ID_PASTE) |
|
473 self.Bind(wx.EVT_MENU, self.OnFindMenu, id=wx.ID_FIND) |
|
474 self.Bind(wx.EVT_MENU, self.OnFindNextMenu, |
|
475 id=ID_PLCOPENEDITOREDITMENUFINDNEXT) |
|
476 self.Bind(wx.EVT_MENU, self.OnFindPreviousMenu, |
|
477 id=ID_PLCOPENEDITOREDITMENUFINDPREVIOUS) |
|
478 self.Bind(wx.EVT_MENU, self.OnSearchInProjectMenu, |
|
479 id=ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT) |
465 self.Bind(wx.EVT_MENU, self.OnSearchInProjectMenu, |
480 self.Bind(wx.EVT_MENU, self.OnSearchInProjectMenu, |
466 id=ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT) |
481 id=ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT) |
467 self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu, |
482 self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu, |
468 id=ID_PLCOPENEDITOREDITMENUADDDATATYPE) |
483 id=ID_PLCOPENEDITOREDITMENUADDDATATYPE) |
469 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("function"), |
484 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("function"), |
690 self.DebugVariablePanel = DebugVariablePanel(self.RightNoteBook, self.Controler) |
705 self.DebugVariablePanel = DebugVariablePanel(self.RightNoteBook, self.Controler) |
691 self.MainTabs["DebugVariablePanel"] = (self.DebugVariablePanel, _("Debugger")) |
706 self.MainTabs["DebugVariablePanel"] = (self.DebugVariablePanel, _("Debugger")) |
692 self.RightNoteBook.AddPage(*self.MainTabs["DebugVariablePanel"]) |
707 self.RightNoteBook.AddPage(*self.MainTabs["DebugVariablePanel"]) |
693 |
708 |
694 self.AUIManager.Update() |
709 self.AUIManager.Update() |
|
710 |
|
711 self.FindDialog = FindInPouDialog(self) |
|
712 self.FindDialog.Hide() |
695 |
713 |
696 ## Constructor of the PLCOpenEditor class. |
714 ## Constructor of the PLCOpenEditor class. |
697 # @param parent The parent window. |
715 # @param parent The parent window. |
698 # @param controler The controler been used by PLCOpenEditor (default: None). |
716 # @param controler The controler been used by PLCOpenEditor (default: None). |
699 # @param fileOpen The filepath to open if no controler defined (default: None). |
717 # @param fileOpen The filepath to open if no controler defined (default: None). |
748 self.PouInstanceVariablesPanel.SetTreeImageList(self.TreeImageList) |
766 self.PouInstanceVariablesPanel.SetTreeImageList(self.TreeImageList) |
749 |
767 |
750 self.CurrentEditorToolBar = [] |
768 self.CurrentEditorToolBar = [] |
751 self.CurrentMenu = None |
769 self.CurrentMenu = None |
752 self.SelectedItem = None |
770 self.SelectedItem = None |
|
771 self.SearchParams = None |
753 self.Highlights = {} |
772 self.Highlights = {} |
754 self.DrawingMode = FREEDRAWING_MODE |
773 self.DrawingMode = FREEDRAWING_MODE |
755 #self.DrawingMode = DRIVENDRAWING_MODE |
774 #self.DrawingMode = DRIVENDRAWING_MODE |
756 self.AuiTabCtrl = [] |
775 self.AuiTabCtrl = [] |
757 self.DefaultPerspective = None |
776 self.DefaultPerspective = None |
763 self.PageSetupData = wx.PageSetupDialogData(self.PrintData) |
782 self.PageSetupData = wx.PageSetupDialogData(self.PrintData) |
764 self.PageSetupData.SetMarginTopLeft(wx.Point(10, 15)) |
783 self.PageSetupData.SetMarginTopLeft(wx.Point(10, 15)) |
765 self.PageSetupData.SetMarginBottomRight(wx.Point(10, 20)) |
784 self.PageSetupData.SetMarginBottomRight(wx.Point(10, 20)) |
766 |
785 |
767 self.SetRefreshFunctions() |
786 self.SetRefreshFunctions() |
|
787 |
|
788 def __del__(self): |
|
789 self.FindDialog.Destroy() |
768 |
790 |
769 def ResetStarting(self): |
791 def ResetStarting(self): |
770 self.Starting = False |
792 self.Starting = False |
771 |
793 |
772 def Show(self): |
794 def Show(self): |
1064 self.SavePageState(window) |
1086 self.SavePageState(window) |
1065 |
1087 |
1066 # Refresh all window elements that have changed |
1088 # Refresh all window elements that have changed |
1067 wx.CallAfter(self._Refresh, TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU) |
1089 wx.CallAfter(self._Refresh, TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU) |
1068 wx.CallAfter(self.RefreshTabCtrlEvent) |
1090 wx.CallAfter(self.RefreshTabCtrlEvent) |
|
1091 wx.CallAfter(self.CloseFindInPouDialog) |
1069 event.Skip() |
1092 event.Skip() |
1070 else: |
1093 else: |
1071 event.Veto() |
1094 event.Veto() |
|
1095 |
1072 |
1096 |
1073 def GetCopyBuffer(self): |
1097 def GetCopyBuffer(self): |
1074 data = None |
1098 data = None |
1075 if wx.TheClipboard.IsOpened() or wx.TheClipboard.Open(): |
1099 if wx.TheClipboard.IsOpened() or wx.TheClipboard.Open(): |
1076 dataobj = wx.TextDataObject() |
1100 dataobj = wx.TextDataObject() |
1276 self.EditMenu.Enable(wx.ID_REDO, redo) |
1300 self.EditMenu.Enable(wx.ID_REDO, redo) |
1277 MenuToolBar.EnableTool(wx.ID_REDO, redo) |
1301 MenuToolBar.EnableTool(wx.ID_REDO, redo) |
1278 #self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, True) |
1302 #self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, True) |
1279 #self.EditMenu.Check(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, |
1303 #self.EditMenu.Check(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, |
1280 # self.Controler.IsProjectBufferEnabled()) |
1304 # self.Controler.IsProjectBufferEnabled()) |
|
1305 self.EditMenu.Enable(wx.ID_FIND, selected > -1) |
|
1306 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUFINDNEXT, |
|
1307 selected > -1 and self.SearchParams is not None) |
|
1308 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUFINDPREVIOUS, |
|
1309 selected > -1 and self.SearchParams is not None) |
1281 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, True) |
1310 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, True) |
1282 MenuToolBar.EnableTool(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, True) |
1311 MenuToolBar.EnableTool(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, True) |
1283 self.EditMenu.Enable(wx.ID_ADD, True) |
1312 self.EditMenu.Enable(wx.ID_ADD, True) |
1284 self.EditMenu.Enable(wx.ID_DELETE, True) |
1313 self.EditMenu.Enable(wx.ID_DELETE, True) |
1285 if self.TabsOpened.GetPageCount() > 0: |
1314 if self.TabsOpened.GetPageCount() > 0: |
1313 self.EditMenu.Enable(wx.ID_COPY, False) |
1342 self.EditMenu.Enable(wx.ID_COPY, False) |
1314 MenuToolBar.EnableTool(wx.ID_COPY, False) |
1343 MenuToolBar.EnableTool(wx.ID_COPY, False) |
1315 self.EditMenu.Enable(wx.ID_PASTE, False) |
1344 self.EditMenu.Enable(wx.ID_PASTE, False) |
1316 MenuToolBar.EnableTool(wx.ID_PASTE, False) |
1345 MenuToolBar.EnableTool(wx.ID_PASTE, False) |
1317 self.EditMenu.Enable(wx.ID_SELECTALL, False) |
1346 self.EditMenu.Enable(wx.ID_SELECTALL, False) |
|
1347 self.EditMenu.Enable(wx.ID_FIND, False) |
|
1348 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUFINDNEXT, False) |
|
1349 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUFINDPREVIOUS, False) |
1318 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, False) |
1350 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, False) |
1319 MenuToolBar.EnableTool(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, False) |
1351 MenuToolBar.EnableTool(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, False) |
1320 self.EditMenu.Enable(wx.ID_ADD, False) |
1352 self.EditMenu.Enable(wx.ID_ADD, False) |
1321 self.EditMenu.Enable(wx.ID_DELETE, False) |
1353 self.EditMenu.Enable(wx.ID_DELETE, False) |
1322 |
1354 |
1392 elif isinstance(window, (Viewer, TextViewer)): |
1424 elif isinstance(window, (Viewer, TextViewer)): |
1393 event = wx.KeyEvent(wx.EVT_CHAR._getEvtType()) |
1425 event = wx.KeyEvent(wx.EVT_CHAR._getEvtType()) |
1394 event.m_keyCode = wx.WXK_DELETE |
1426 event.m_keyCode = wx.WXK_DELETE |
1395 window.ProcessEvent(event) |
1427 window.ProcessEvent(event) |
1396 |
1428 |
|
1429 def OnFindMenu(self, event): |
|
1430 if not self.FindDialog.IsShown(): |
|
1431 self.FindDialog.Show() |
|
1432 |
|
1433 def CloseFindInPouDialog(self): |
|
1434 selected = self.TabsOpened.GetSelection() |
|
1435 if selected == -1 and self.FindDialog.IsShown(): |
|
1436 self.FindDialog.Hide() |
|
1437 |
|
1438 def OnFindNextMenu(self, event): |
|
1439 self.FindInPou(1) |
|
1440 |
|
1441 def OnFindPreviousMenu(self, event): |
|
1442 self.FindInPou(-1) |
|
1443 |
|
1444 def FindInPou(self, direction, search_params=None): |
|
1445 if search_params is not None: |
|
1446 self.SearchParams = search_params |
|
1447 selected = self.TabsOpened.GetSelection() |
|
1448 if selected != -1: |
|
1449 window = self.TabsOpened.GetPage(selected) |
|
1450 window.Find(direction, self.SearchParams) |
|
1451 |
1397 def OnSearchInProjectMenu(self, event): |
1452 def OnSearchInProjectMenu(self, event): |
1398 dialog = SearchInProjectDialog(self) |
1453 dialog = SearchInProjectDialog(self) |
1399 if dialog.ShowModal() == wx.ID_OK: |
1454 if dialog.ShowModal() == wx.ID_OK: |
1400 criteria = dialog.GetCriteria() |
1455 criteria = dialog.GetCriteria() |
1401 result = self.Controler.SearchInProject(criteria) |
1456 result = self.Controler.SearchInProject(criteria) |