| 1 | # 11/17/2003 - Jeff Grimmett (grimmtooth@softhome.net) |
| 2 | # |
| 3 | # o Updated for wx namespace |
| 4 | # |
| 5 | # 11/28/2003 - Jeff Grimmett (grimmtooth@softhome.net) |
| 6 | # |
| 7 | # o Changed the event binding slightly. |
| 8 | |
| 9 | |
| 10 | import wx |
| 11 | |
| 12 | #--------------------------------------------------------------------------- |
| 13 | |
| 14 | class TestPanel(wx.Panel): |
| 15 | def __init__(self, parent, log): |
| 16 | wx.Panel.__init__(self, parent, -1) |
| 17 | self.log = log |
| 18 | |
| 19 | self.fbtn = wx.Button(self, -1, "Show Find Dialog", (25, 50)) |
| 20 | self.Bind(wx.EVT_BUTTON, self.OnShowFind, self.fbtn) |
| 21 | |
| 22 | self.frbtn = wx.Button(self, -1, "Show Find && Replace Dialog", (25, 90)) |
| 23 | self.Bind(wx.EVT_BUTTON, self.OnShowFindReplace, self.frbtn) |
| 24 | |
| 25 | self.Bind(wx.EVT_FIND, self.OnFind) |
| 26 | self.Bind(wx.EVT_FIND_NEXT, self.OnFind) |
| 27 | self.Bind(wx.EVT_FIND_REPLACE, self.OnFind) |
| 28 | self.Bind(wx.EVT_FIND_REPLACE_ALL, self.OnFind) |
| 29 | self.Bind(wx.EVT_FIND_CLOSE, self.OnFindClose) |
| 30 | |
| 31 | def EnableButtons(self): |
| 32 | self.fbtn.Enable() |
| 33 | self.frbtn.Enable() |
| 34 | |
| 35 | def DisableButtons(self): |
| 36 | self.fbtn.Disable() |
| 37 | self.frbtn.Disable() |
| 38 | |
| 39 | def OnShowFind(self, evt): |
| 40 | self.DisableButtons() |
| 41 | data = wx.FindReplaceData() |
| 42 | dlg = wx.FindReplaceDialog(self, data, "Find") |
| 43 | dlg.data = data # save a reference to it... |
| 44 | dlg.Show(True) |
| 45 | |
| 46 | |
| 47 | def OnShowFindReplace(self, evt): |
| 48 | self.DisableButtons() |
| 49 | data = wx.FindReplaceData() |
| 50 | dlg = wx.FindReplaceDialog(self, data, "Find & Replace", wx.FR_REPLACEDIALOG) |
| 51 | dlg.data = data # save a reference to it... |
| 52 | dlg.Show(True) |
| 53 | |
| 54 | |
| 55 | def OnFind(self, evt): |
| 56 | map = { |
| 57 | wx.wxEVT_COMMAND_FIND : "FIND", |
| 58 | wx.wxEVT_COMMAND_FIND_NEXT : "FIND_NEXT", |
| 59 | wx.wxEVT_COMMAND_FIND_REPLACE : "REPLACE", |
| 60 | wx.wxEVT_COMMAND_FIND_REPLACE_ALL : "REPLACE_ALL", |
| 61 | } |
| 62 | |
| 63 | et = evt.GetEventType() |
| 64 | |
| 65 | if et in map: |
| 66 | evtType = map[et] |
| 67 | else: |
| 68 | evtType = "**Unknown Event Type**" |
| 69 | |
| 70 | if et in [wx.wxEVT_COMMAND_FIND_REPLACE, wx.wxEVT_COMMAND_FIND_REPLACE_ALL]: |
| 71 | replaceTxt = "Replace text: %s" % evt.GetReplaceString() |
| 72 | else: |
| 73 | replaceTxt = "" |
| 74 | |
| 75 | self.log.write("%s -- Find text: %s Replace text: %s Flags: %d \n" % |
| 76 | (evtType, evt.GetFindString(), replaceTxt, evt.GetFlags())) |
| 77 | |
| 78 | |
| 79 | def OnFindClose(self, evt): |
| 80 | self.log.write("FindReplaceDialog closing...\n") |
| 81 | evt.GetDialog().Destroy() |
| 82 | self.EnableButtons() |
| 83 | |
| 84 | |
| 85 | #--------------------------------------------------------------------------- |
| 86 | |
| 87 | def runTest(frame, nb, log): |
| 88 | win = TestPanel(nb, log) |
| 89 | return win |
| 90 | |
| 91 | #--------------------------------------------------------------------------- |
| 92 | |
| 93 | |
| 94 | |
| 95 | |
| 96 | overview = """\ |
| 97 | FindReplaceDialog is a standard modeless dialog which is used to allow the user |
| 98 | to search for some text (and possibly replace it with something else). The actual |
| 99 | searching is supposed to be done in the owner window which is the parent of this |
| 100 | dialog. Note that it means that unlike for the other standard dialogs this one |
| 101 | <u>must have a parent window</u>. Also note that there is no way to use this |
| 102 | dialog in a modal way; <b>it is always, by design and implementation, modeless</b>. |
| 103 | |
| 104 | FileReplaceDialog requires the use of <b>FindReplaceData</b>. This holds the |
| 105 | data for the dialog. It is used to initialize the dialog with the default values |
| 106 | and will keep the last values from the dialog when it is closed. It is also |
| 107 | updated each time a FindDialogEvent is generated so instead of using the |
| 108 | FindDialogEvent methods you can also directly query this object. <b>Care must be |
| 109 | taken not to use this object after the dialog is destroyed.</b> The data within |
| 110 | will be invalid after the parent dialog is destroyed. |
| 111 | """ |
| 112 | |
| 113 | |
| 114 | |
| 115 | |
| 116 | if __name__ == '__main__': |
| 117 | import sys,os |
| 118 | import run |
| 119 | run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:]) |
| 120 | |