diff -r 85a4bc7dc31e -r 1ccd08cfae0c PLCOpenEditor.py --- a/PLCOpenEditor.py Wed Aug 01 12:44:51 2012 +0200 +++ b/PLCOpenEditor.py Fri Aug 10 00:32:05 2012 +0200 @@ -113,7 +113,7 @@ from PLCControler import * from SearchResultPanel import SearchResultPanel from controls import CustomTree, LibraryPanel, PouInstanceVariablesPanel, DebugVariablePanel -from dialogs import ProjectDialog, PouTransitionDialog, PouActionDialog +from dialogs import ProjectDialog, PouTransitionDialog, PouActionDialog, FindInPouDialog # Define PLCOpenEditor controls id [ID_PLCOPENEDITOR, ID_PLCOPENEDITORLEFTNOTEBOOK, @@ -135,8 +135,9 @@ [ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, ID_PLCOPENEDITOREDITMENUADDDATATYPE, ID_PLCOPENEDITOREDITMENUADDFUNCTION, ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK, ID_PLCOPENEDITOREDITMENUADDPROGRAM, ID_PLCOPENEDITOREDITMENUADDCONFIGURATION, + ID_PLCOPENEDITOREDITMENUFINDNEXT, ID_PLCOPENEDITOREDITMENUFINDPREVIOUS, ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, -] = [wx.NewId() for _init_coll_EditMenu_Items in range(7)] +] = [wx.NewId() for _init_coll_EditMenu_Items in range(9)] # Define PLCOpenEditor DisplayMenu extra items id [ID_PLCOPENEDITORDISPLAYMENURESETPERSPECTIVE, @@ -446,8 +447,15 @@ AppendMenu(parent, help='', id=wx.ID_PASTE, kind=wx.ITEM_NORMAL, text=_(u'Paste\tCTRL+V')) parent.AppendSeparator() + AppendMenu(parent, help='', id=wx.ID_FIND, + kind=wx.ITEM_NORMAL, text=_(u'Find\tCTRL+F')) + AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUFINDNEXT, + kind=wx.ITEM_NORMAL, text=_(u'Find Next\tCTRL+K')) + AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUFINDPREVIOUS, + kind=wx.ITEM_NORMAL, text=_(u'Find Previous\tCTRL+SHIFT+K')) + parent.AppendSeparator() AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, - kind=wx.ITEM_NORMAL, text=_(u'Search in Project\tCTRL+F')) + kind=wx.ITEM_NORMAL, text=_(u'Search in Project\tCTRL+SHIFT+F')) parent.AppendSeparator() add_menu = wx.Menu(title='') self._init_coll_AddMenu_Items(add_menu) @@ -462,6 +470,13 @@ self.Bind(wx.EVT_MENU, self.OnCutMenu, id=wx.ID_CUT) self.Bind(wx.EVT_MENU, self.OnCopyMenu, id=wx.ID_COPY) self.Bind(wx.EVT_MENU, self.OnPasteMenu, id=wx.ID_PASTE) + self.Bind(wx.EVT_MENU, self.OnFindMenu, id=wx.ID_FIND) + self.Bind(wx.EVT_MENU, self.OnFindNextMenu, + id=ID_PLCOPENEDITOREDITMENUFINDNEXT) + self.Bind(wx.EVT_MENU, self.OnFindPreviousMenu, + id=ID_PLCOPENEDITOREDITMENUFINDPREVIOUS) + self.Bind(wx.EVT_MENU, self.OnSearchInProjectMenu, + id=ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT) self.Bind(wx.EVT_MENU, self.OnSearchInProjectMenu, id=ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT) self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu, @@ -693,6 +708,9 @@ self.AUIManager.Update() + self.FindDialog = FindInPouDialog(self) + self.FindDialog.Hide() + ## Constructor of the PLCOpenEditor class. # @param parent The parent window. # @param controler The controler been used by PLCOpenEditor (default: None). @@ -750,6 +768,7 @@ self.CurrentEditorToolBar = [] self.CurrentMenu = None self.SelectedItem = None + self.SearchParams = None self.Highlights = {} self.DrawingMode = FREEDRAWING_MODE #self.DrawingMode = DRIVENDRAWING_MODE @@ -766,6 +785,9 @@ self.SetRefreshFunctions() + def __del__(self): + self.FindDialog.Destroy() + def ResetStarting(self): self.Starting = False @@ -1066,9 +1088,11 @@ # Refresh all window elements that have changed wx.CallAfter(self._Refresh, TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU) wx.CallAfter(self.RefreshTabCtrlEvent) + wx.CallAfter(self.CloseFindInPouDialog) event.Skip() else: event.Veto() + def GetCopyBuffer(self): data = None @@ -1278,6 +1302,11 @@ #self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, True) #self.EditMenu.Check(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, # self.Controler.IsProjectBufferEnabled()) + self.EditMenu.Enable(wx.ID_FIND, selected > -1) + self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUFINDNEXT, + selected > -1 and self.SearchParams is not None) + self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUFINDPREVIOUS, + selected > -1 and self.SearchParams is not None) self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, True) MenuToolBar.EnableTool(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, True) self.EditMenu.Enable(wx.ID_ADD, True) @@ -1315,6 +1344,9 @@ self.EditMenu.Enable(wx.ID_PASTE, False) MenuToolBar.EnableTool(wx.ID_PASTE, False) self.EditMenu.Enable(wx.ID_SELECTALL, False) + self.EditMenu.Enable(wx.ID_FIND, False) + self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUFINDNEXT, False) + self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUFINDPREVIOUS, False) self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, False) MenuToolBar.EnableTool(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, False) self.EditMenu.Enable(wx.ID_ADD, False) @@ -1394,6 +1426,29 @@ event.m_keyCode = wx.WXK_DELETE window.ProcessEvent(event) + def OnFindMenu(self, event): + if not self.FindDialog.IsShown(): + self.FindDialog.Show() + + def CloseFindInPouDialog(self): + selected = self.TabsOpened.GetSelection() + if selected == -1 and self.FindDialog.IsShown(): + self.FindDialog.Hide() + + def OnFindNextMenu(self, event): + self.FindInPou(1) + + def OnFindPreviousMenu(self, event): + self.FindInPou(-1) + + def FindInPou(self, direction, search_params=None): + if search_params is not None: + self.SearchParams = search_params + selected = self.TabsOpened.GetSelection() + if selected != -1: + window = self.TabsOpened.GetPage(selected) + window.Find(direction, self.SearchParams) + def OnSearchInProjectMenu(self, event): dialog = SearchInProjectDialog(self) if dialog.ShowModal() == wx.ID_OK: