PLCOpenEditor.py
changeset 738 1ccd08cfae0c
parent 734 eeac14463bcf
child 741 330f578e228d
equal deleted inserted replaced
737:85a4bc7dc31e 738:1ccd08cfae0c
   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)