PLCOpenEditor.py
changeset 738 1ccd08cfae0c
parent 734 eeac14463bcf
child 741 330f578e228d
--- 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: