31
#copy old finder limodou 2004/04/19
32
def __init__(self, parent, stc, oldfinder=None):
37
#copy old finder limodou 2004/04/19
41
#copy old finder limodou 2004/04/19
42
def Copy(self, finder):
44
self.findtext = finder.findtext
45
self.findflags = finder.findflags
46
self.backwards = finder.backwards
47
#Franz: Bug Report with Fix
52
#copy old finder limodou 2004/04/19
53
self.docEnd = self.stc.GetTextLength()
54
self.SetTargetRange(0, self.docEnd)
58
def DoFind(self, findtext, findflags, backwards=False):
60
self.rectanglefind = 0
61
doclength = self.stc.GetLength()
63
self.findtext = findtext
64
self.findflags = findflags
68
if self.backwards != backwards:
69
self.backwards = backwards
72
endpos = self.targetStart
74
endpos = self.targetEnd
76
self.findpos = self.stc.FindText(self.findpos, endpos, findtext, findflags)
78
if (self.findpos == -1):
79
if self.stc.FindText(self.targetStart, self.targetEnd, findtext, findflags) == -1:
80
drScrolledMessageDialog.ShowMessage(self.parent, ('Search string "' + findtext + '" not found.'), "DrPython Find")
82
if ((self.findpos >= doclength) or (self.findpos < 0)) and (doclength > 0):
83
self.lastposition = -1
85
msg = 'Start of document reached: "' + findtext + '".\nStart again from the end?'
86
self.findpos = self.targetEnd
88
msg = 'End of document reached: "' + findtext + '".\nStart again from the beginning?'
89
self.findpos = self.targetStart
90
if self.parent.prefs.findreplaceautowrap:
93
d = wx.MessageDialog(self.parent, msg, "DrPython Find", wx.OK | wx.CANCEL | wx.ICON_QUESTION)
94
answer = d.ShowModal()
96
if (answer == wx.ID_OK):
97
self.stc.GotoPos(self.findpos)
103
self.stc.GotoPos(prev)
106
if self.parent.prefs.docfolding:
107
self.stc.EnsureVisible(self.stc.LineFromPosition(self.findpos))
109
endpos = self.findpos + len(findtext)
111
self.stc.EnsurePositionIsVisible(endpos)
113
self.stc.GotoPos(self.findpos)
114
self.stc.SetSelectionStart(self.findpos)
115
self.stc.SetSelectionEnd(endpos)
116
self.lastposition = self.findpos + len(findtext)
119
self.findpos = self.findpos - 1
121
self.findpos = self.findpos + 1
123
def DoREFind(self, findtext, matchcase):
125
self.rectanglefind = 0
127
self.findtext = findtext
128
self.findflags = matchcase
137
regularexpression = re.compile(findtext, case | re.MULTILINE)
139
drScrolledMessageDialog.ShowMessage(self.parent, 'Regular Expression Error', "DrPython Find")
142
endpos = self.targetEnd
144
matchedtext = regularexpression.search(self.stc.GetText()[self.findpos:endpos])
146
if matchedtext is None:
147
testforexist = regularexpression.search(self.stc.GetText())
148
if testforexist is None:
149
drScrolledMessageDialog.ShowMessage(self.parent, ('Regular expression "' + findtext + '" not found.'), "DrPython Find")
151
self.lastposition = -1
152
if (prev > self.targetStart):
153
self.findpos = self.targetStart
154
if self.parent.prefs.findreplaceautowrap:
157
d = wx.MessageDialog(self.parent, 'End of document reached: "' + findtext + '".\nStart again from the beginning?', "DrPython Find", wx.OK | wx.CANCEL | wx.ICON_QUESTION)
158
answer = d.ShowModal()
160
if (answer == wx.ID_OK):
161
self.stc.GotoPos(self.findpos)
164
self.stc.GotoPos(prev)
167
oldpos = self.findpos
168
self.findpos = oldpos + matchedtext.start()
169
endpos = oldpos + matchedtext.end()
171
if self.parent.prefs.docfolding:
172
self.stc.EnsureVisible(self.stc.LineFromPosition(self.findpos))
174
self.stc.EnsurePositionIsVisible(endpos)
176
self.stc.GotoPos(self.findpos)
177
self.stc.SetSelectionStart(self.findpos)
178
self.stc.SetSelectionEnd(endpos)
179
self.lastposition = endpos
181
self.findpos = endpos
183
def DoFindNext(self):
184
if len(self.findtext) < 1:
186
if not self.inselection:
187
textlength = self.stc.GetTextLength()
188
if textlength != self.docEnd:
189
self.docEnd = textlength
190
self.SetTargetRange(0, self.docEnd)
191
self.findpos = self.stc.GetCurrentPos()
193
if self.rectanglefind:
194
self.DoRectangleFind(self.findtext, self.findflags)
196
self.DoFind(self.findtext, self.findflags)
198
if self.rectanglefind:
199
self.DoRERectangleFind(self.findtext, self.findflags)
201
self.DoREFind(self.findtext, self.findflags)
203
def DoFindPrevious(self):
204
if len(self.findtext) < 1:
206
if not self.inselection:
207
textlength = self.stc.GetTextLength()
208
if textlength != self.docEnd:
209
self.docEnd = textlength
210
self.SetTargetRange(self.docEnd, 0)
211
self.findpos = self.stc.GetCurrentPos()
213
if (self.findpos == self.lastposition) and not self.rectanglefind:
214
self.findpos = self.findpos - len(self.findtext) - 1
215
self.stc.GotoPos(self.findpos)
216
elif self.rectanglefind and (self.lastposition == -1) and (not self.backwards):
217
self.stc.GotoPos(self.findpos)
219
if self.rectanglefind:
220
self.DoRectangleFind(self.findtext, self.findflags, True)
222
self.DoFind(self.findtext, self.findflags, True)
224
drScrolledMessageDialog.ShowMessage(self.parent, 'Find Previous Not Possible:\nRegular Expressions Are On.', 'DrPython Find')
226
def DoRectangleFind(self, findtext, matchcase, backwards=False):
228
self.rectanglefind = 1
229
doclength = self.stc.GetLength()
230
lenlines = len(self.Lines)
233
self.findtext = findtext
235
self.findtext = findtext.lower()
239
if self.backwards != backwards:
240
self.backwards = backwards
241
self.findpos = self.stc.GetCurrentPos()
243
endpos = self.targetEnd
245
lineArrayPosition = self.getArrayPosition(self.findpos)
246
if lineArrayPosition == -1:
247
self.findpos = self.findpos - 1
248
lineArrayPosition = self.getArrayPosition(self.findpos - 1)
249
if lineArrayPosition == -1:
252
relative_findpos = self.positions[lineArrayPosition].index(self.findpos) + 1
254
relative_findpos = self.positions[lineArrayPosition].index(self.findpos)
256
if self.findpos > -1:
257
self.findpos = self.findInArray(lineArrayPosition, relative_findpos)
259
if (self.findpos == -1):
261
notFound = self.findInArray(0, self.positions[lenlines-1][len(self.positions[lenlines-1])-1]) == -1
263
notFound = self.findInArray(0, 0) == -1
265
drScrolledMessageDialog.ShowMessage(self.parent, ('Search string "' + findtext + '" not found.'), "DrPython Find")
267
if ((self.findpos >= doclength) or (self.findpos < 0)) and (doclength > 0):
268
self.lastposition = -1
270
msg = 'Start of document reached: "' + findtext + '".\nStart again from the end?'
271
self.findpos = self.targetEnd
273
msg = 'End of document reached: "' + findtext + '".\nStart again from the beginning?'
274
self.findpos = self.targetStart
275
if self.parent.prefs.findreplaceautowrap:
278
d = wx.MessageDialog(self.parent, msg, "DrPython Find", wx.OK | wx.CANCEL | wx.ICON_QUESTION)
279
answer = d.ShowModal()
281
if (answer == wx.ID_OK):
282
self.stc.GotoPos(self.findpos)
284
self.DoFindPrevious()
288
self.stc.GotoPos(prev)
291
if self.parent.prefs.docfolding:
292
self.stc.EnsureVisible(self.stc.LineFromPosition(self.findpos))
294
endpos = self.findpos + len(findtext)
296
self.stc.EnsurePositionIsVisible(endpos)
297
self.stc.GotoPos(self.findpos)
298
self.stc.SetSelectionStart(self.findpos)
299
self.stc.SetSelectionEnd(endpos)
300
self.lastposition = self.findpos + len(findtext)
302
def DoRERectangleFind(self, findtext, matchcase):
304
self.rectanglefind = 1
305
doclength = self.stc.GetLength()
307
self.findtext = findtext
308
self.findflags = matchcase
317
regularexpression = re.compile(findtext, case | re.MULTILINE)
319
drScrolledMessageDialog.ShowMessage(self.parent, 'Regular Expression Error', "DrPython Find")
322
endpos = self.targetEnd
323
if (self.findpos >= doclength) or (self.findpos < 0):
326
lineArrayPosition = self.getArrayPosition(self.findpos)
327
if lineArrayPosition == -1:
328
self.findpos = self.findpos - 1
329
lineArrayPosition = self.getArrayPosition(self.findpos - 1)
330
if lineArrayPosition == -1:
333
relative_findpos = self.positions[lineArrayPosition].index(self.findpos) + 1
335
relative_findpos = self.positions[lineArrayPosition].index(self.findpos)
337
if self.findpos > -1:
338
matchedtext, newArrayPosition = self.searchInArray(regularexpression, lineArrayPosition, relative_findpos)
342
if matchedtext is None:
343
testforexist, nap = self.searchInArray(regularexpression, 0, 0)
344
if testforexist is None:
345
drScrolledMessageDialog.ShowMessage(self.parent, ('Regular expression "' + findtext + '" not found.'), "DrPython Find")
347
self.lastposition = -1
348
if (prev > self.targetStart):
349
self.findpos = self.targetStart
350
if self.parent.prefs.findreplaceautowrap:
353
d = wx.MessageDialog(self.parent, 'End of document reached: "' + findtext + '".\nStart again from the beginning?', "DrPython Find", wx.OK | wx.CANCEL | wx.ICON_QUESTION)
354
answer = d.ShowModal()
356
if (answer == wx.ID_OK):
357
self.stc.GotoPos(self.findpos)
360
self.stc.GotoPos(prev)
363
relative_findpos = matchedtext.start()
365
self.findpos = self.positions[newArrayPosition][relative_findpos]
367
endpos = self.findpos + (matchedtext.end() - matchedtext.start())
369
if self.parent.prefs.docfolding:
370
self.stc.EnsureVisible(self.stc.LineFromPosition(self.findpos))
372
self.stc.EnsurePositionIsVisible(endpos)
374
self.stc.GotoPos(self.findpos)
375
self.stc.SetSelectionStart(self.findpos)
376
self.stc.SetSelectionEnd(endpos)
377
self.lastposition = endpos
379
self.findpos = endpos
381
def findInArray(self, arrayposition, position):
383
r = self.Lines[arrayposition][:position].rfind(self.findtext)
386
while arrayposition > -1:
387
r = self.Lines[arrayposition].rfind(self.findtext)
391
return self.positions[arrayposition][r]
393
return self.positions[arrayposition][r]
396
r = self.Lines[arrayposition][position:].find(self.findtext)
399
while arrayposition < l:
400
r = self.Lines[arrayposition].find(self.findtext)
404
return self.positions[arrayposition][r]
406
return self.positions[arrayposition][r]
409
def getArrayPosition(self, position):
411
for posArray in self.positions:
412
if position in posArray:
417
def GetFindPos(self):
420
def GetFindText(self):
423
def RectangleReplaceAll(self, findtext, replacetext, matchcase):
424
targetText = self.stc.GetSelectedText()
427
targetText = targetText.lower()
429
eolchar = self.stc.GetEndOfLineCharacter()
431
lines = targetText.strip().split(eolchar)
433
c = self.stc.GetColumn(self.targetStart)
435
linenumber = self.stc.LineFromPosition(self.targetStart)
437
lenline = len(lines[0])
442
position_of_first_character = c + self.stc.PositionFromLine(linenumber)
443
p = line.find(findtext)
445
line = line.replace(findtext, replacetext)
446
self.stc.SetTargetStart(position_of_first_character)
447
self.stc.SetTargetEnd(position_of_first_character+lenline)
448
self.stc.ReplaceTarget(line)
450
linenumber = linenumber + 1
454
def RectangleREReplaceAll(self, findtext, replacetext, matchcase):
460
regularexpression = re.compile(findtext, case | re.MULTILINE)
462
drScrolledMessageDialog.ShowMessage(self.parent, 'Regular Expression Error', "DrPython Replace")
465
targetText = self.stc.GetSelectedText()
468
targetText = targetText.lower()
470
eolchar = self.stc.GetEndOfLineCharacter()
472
lines = targetText.strip().split(eolchar)
474
c = self.stc.GetColumn(self.targetStart)
476
linenumber = self.stc.LineFromPosition(self.targetStart)
478
lenline = len(lines[0])
483
#You need to update the position(do the replace) during the loop.
484
position_of_first_character = c + self.stc.PositionFromLine(linenumber)
485
line, x = regularexpression.subn(replacetext, line)
487
self.stc.SetTargetStart(position_of_first_character)
488
self.stc.SetTargetEnd(position_of_first_character+lenline)
489
self.stc.ReplaceTarget(line)
490
linenumber = linenumber + 1
494
def ReplaceAll(self, findtext, replacetext, flags, prompt = 0):
495
p = self.stc.FindText(self.targetStart, self.targetEnd, findtext, flags)
496
diff = len(replacetext) - len(findtext)
499
favpos = wx.Point(5, 5)
501
if self.parent.prefs.docfolding:
502
self.stc.EnsureVisible(self.stc.LineFromPosition(p))
504
self.stc.EnsureCaretVisible()
505
self.stc.SetTargetStart(p)
506
self.stc.SetTargetEnd(p + len(findtext))
508
self.stc.SetSelection(p, (p + len(findtext)))
509
d = wx.SingleChoiceDialog(self.parent, ("Found \"" + findtext + "\" at Line: " \
510
+ str(self.stc.LineFromPosition(p)+1) + \
511
" Col: " + str(self.stc.GetColumn(p))
512
+ "\n(Hit Cancel to Stop)"), "Replace", ["Replace", "Skip"], wx.CHOICEDLG_STYLE)
517
answer = d.ShowModal()
518
favpos = d.GetPosition()
520
if (answer == wx.ID_OK):
521
if (d.GetStringSelection() == "Replace"):
522
self.stc.ReplaceTarget(replacetext)
523
self.targetEnd = self.targetEnd + diff
527
p = self.stc.FindText((p + len(replacetext)), self.targetEnd, findtext, flags)
532
self.stc.ReplaceTarget(replacetext)
533
self.targetEnd = self.targetEnd + diff
534
p = self.stc.FindText((p + len(replacetext)), self.targetEnd, findtext, flags)
538
def REReplaceAll(self, findtext, replacetext, matchcase, prompt = 0):
544
regularexpression = re.compile(findtext, case | re.MULTILINE)
546
drScrolledMessageDialog.ShowMessage(self.parent, 'Regular Expression Error', "DrPython Replace")
549
oldtext = self.stc.GetText()
551
newtext, x = regularexpression.subn(replacetext, oldtext[self.targetStart:self.targetEnd])
553
self.stc.SetText(oldtext[0:self.targetStart] + newtext + oldtext[self.targetEnd:])
555
matchedtext = regularexpression.search(self.stc.GetText()[self.findpos:self.targetEnd])
557
diff = len(replacetext) - len(findtext)
562
favpos = wx.Point(5, 5)
563
while matchedtext is not None:
565
oldpos = self.findpos
566
self.findpos = oldpos + matchedtext.start()
567
endpos = oldpos + matchedtext.end()
569
if self.parent.prefs.docfolding:
570
self.stc.EnsureVisible(self.stc.LineFromPosition(self.findpos))
571
self.stc.GotoPos(self.findpos)
572
self.stc.EnsureCaretVisible()
573
self.stc.SetSelectionStart(self.findpos)
574
self.stc.SetSelectionEnd(endpos)
575
self.stc.SetTargetStart(self.findpos)
576
self.stc.SetTargetEnd(endpos)
578
d = wx.SingleChoiceDialog(self.parent, ("Found \"" + findtext + "\" at Line: " \
579
+ str(self.stc.LineFromPosition(self.findpos)+1) + \
580
" Col: " + str(self.stc.GetColumn(self.findpos)) + \
581
"\n(Hit Cancel to Stop)"), "Replace", ["Replace", "Skip"], wx.CHOICEDLG_STYLE)
587
answer = d.ShowModal()
588
favpos = d.GetPosition()
590
if (answer == wx.ID_OK):
591
if (d.GetStringSelection() == "Replace"):
592
self.stc.ReplaceTarget(replacetext)
593
self.findpos = self.findpos + len(replacetext)
594
self.targetEnd = self.targetEnd + diff
596
self.findpos = endpos
600
matchedtext = regularexpression.search(self.stc.GetText()[self.findpos:self.targetEnd])
610
self.lastposition = 0
617
self.rectanglefind = 0
619
def searchInArray(self, regularexpression, arrayposition, position):
621
match = regularexpression.search(self.Lines[arrayposition][position:])
624
while arrayposition < l:
625
match = regularexpression.search(self.Lines[arrayposition])
629
return match, arrayposition
630
return match, arrayposition
632
def SetFindPos(self, findpos):
633
self.findpos = findpos
635
def SetFindText(self, findtext):
636
self.findtext = findtext
638
def SetTargetPositions(self, matchcase):
639
self.targetText = self.stc.GetSelectedText()
641
self.findflags = matchcase
644
self.targetText = self.targetText.lower()
646
eolchar = self.stc.GetEndOfLineCharacter()
648
self.Lines = self.targetText.strip().split(eolchar)
650
self.targetText = self.targetText.replace(eolchar, '')
652
c = self.stc.GetColumn(self.targetStart)
654
linenumber = self.stc.LineFromPosition(self.targetStart)
656
lenline = len(self.Lines[0])
660
for line in self.Lines:
661
position_of_first_character = c + self.stc.PositionFromLine(linenumber)
662
self.positions.append(range(position_of_first_character, position_of_first_character+lenline))
663
linenumber = linenumber + 1
665
def SetTargetRange(self, start, end, backwards = 0):
666
self.docEnd = self.stc.GetTextLength()
667
self.inselection = (start > 0) | (end < self.docEnd)
672
self.targetStart = start
31
#copy old finder limodou 2004/04/19
32
def __init__(self, parent, stc, oldfinder=None):
37
#copy old finder limodou 2004/04/19
41
#copy old finder limodou 2004/04/19
42
def Copy(self, finder):
44
self.findtext = finder.findtext
45
self.findflags = finder.findflags
46
self.backwards = finder.backwards
47
#Franz: Bug Report with Fix
52
#copy old finder limodou 2004/04/19
53
self.docEnd = self.stc.GetTextLength()
54
self.SetTargetRange(0, self.docEnd)
58
def DoFind(self, findtext, findflags, backwards=False):
59
self.parent.SetStatusText(findtext, 2)
61
self.rectanglefind = 0
62
doclength = self.stc.GetLength()
64
self.findtext = findtext
65
self.findflags = findflags
69
if self.backwards != backwards:
70
self.backwards = backwards
73
endpos = self.targetStart
75
endpos = self.targetEnd
77
self.findpos = self.stc.FindText(self.findpos, endpos, findtext, findflags)
79
if self.findpos == -1:
80
if self.stc.FindText(self.targetStart, self.targetEnd, findtext, findflags) == -1:
81
if self.parent.prefs.enablefeedback:
82
drScrolledMessageDialog.ShowMessage(self.parent, ('Search string "' + findtext + '" not found.'), "DrPython Find")
84
self.parent.SetStatusText('NOT FOUND: ' + findtext, 2)
86
if ((self.findpos >= doclength) or (self.findpos < 0)) and (doclength > 0):
87
self.lastposition = -1
89
msg = 'Start of document reached: "' + findtext + '".\nStart again from the end?'
90
self.findpos = self.targetEnd
92
msg = 'End of document reached: "' + findtext + '".\nStart again from the beginning?'
93
self.findpos = self.targetStart
94
if self.parent.prefs.findreplaceautowrap:
97
answer = wx.MessageBox(msg, "DrPython Find", wx.OK | wx.CANCEL | wx.ICON_QUESTION)
99
self.stc.GotoPos(self.findpos)
101
self.DoFindPrevious()
105
self.stc.GotoPos(prev)
108
if self.parent.prefs.docfolding:
109
self.stc.EnsureVisible(self.stc.LineFromPosition(self.findpos))
111
endpos = self.findpos + len(findtext)
113
self.stc.EnsurePositionIsVisible(endpos)
115
self.stc.GotoPos(self.findpos)
116
self.stc.SetSelectionStart(self.findpos)
117
self.stc.SetSelectionEnd(endpos)
118
self.lastposition = self.findpos + len(findtext)
121
self.findpos = self.findpos - 1
123
self.findpos = self.findpos + 1
125
def DoREFind(self, findtext, matchcase):
127
self.rectanglefind = 0
129
self.findtext = findtext
130
self.findflags = matchcase
139
regularexpression = re.compile(findtext, case | re.MULTILINE)
141
drScrolledMessageDialog.ShowMessage(self.parent, 'Regular Expression Error', "DrPython Find")
144
endpos = self.targetEnd
146
matchedtext = regularexpression.search(self.stc.GetText()[self.findpos:endpos])
148
if matchedtext is None:
149
testforexist = regularexpression.search(self.stc.GetText())
150
if testforexist is None:
151
drScrolledMessageDialog.ShowMessage(self.parent, ('Regular expression "' + findtext + '" not found.'), "DrPython Find")
153
self.lastposition = -1
154
if prev > self.targetStart:
155
self.findpos = self.targetStart
156
if self.parent.prefs.findreplaceautowrap:
159
answer = wx.MessageBox('End of document reached: "' + findtext + '".\nStart again from the beginning?', "DrPython Find", wx.OK | wx.CANCEL | wx.ICON_QUESTION)
161
self.stc.GotoPos(self.findpos)
164
self.stc.GotoPos(prev)
167
oldpos = self.findpos
168
self.findpos = oldpos + matchedtext.start()
169
endpos = oldpos + matchedtext.end()
171
if self.parent.prefs.docfolding:
172
self.stc.EnsureVisible(self.stc.LineFromPosition(self.findpos))
174
self.stc.EnsurePositionIsVisible(endpos)
176
self.stc.GotoPos(self.findpos)
177
self.stc.SetSelectionStart(self.findpos)
178
self.stc.SetSelectionEnd(endpos)
179
self.lastposition = endpos
181
self.findpos = endpos
183
def DoFindNext(self):
184
if not self.findtext:
186
if not self.inselection:
187
textlength = self.stc.GetTextLength()
188
if textlength != self.docEnd:
189
self.docEnd = textlength
190
self.SetTargetRange(0, self.docEnd)
191
self.findpos = self.stc.GetCurrentPos()
193
if self.rectanglefind:
194
self.DoRectangleFind(self.findtext, self.findflags)
196
self.DoFind(self.findtext, self.findflags)
198
if self.rectanglefind:
199
self.DoRERectangleFind(self.findtext, self.findflags)
201
self.DoREFind(self.findtext, self.findflags)
202
self.ScrollFewLinesAbove()
204
def ScrollFewLinesAbove(self):
205
top = self.parent.txtDocument.GetCurrentLine() - (self.parent.txtDocument.LinesOnScreen() - 5)
206
lastline = self.parent.txtDocument.GetFirstVisibleLine() + self.parent.txtDocument.LinesOnScreen()
207
if self.parent.txtDocument.GetCurrentLine() > (lastline - 5):
208
self.parent.txtDocument.ScrollToLine(top)
210
def ScrollFewLinesBelow(self):
211
top = self.parent.txtDocument.GetCurrentLine() - 5
212
firstline = self.parent.txtDocument.GetFirstVisibleLine()
213
if self.parent.txtDocument.GetCurrentLine() < (firstline + 5):
214
self.parent.txtDocument.ScrollToLine(top)
217
def DoFindPrevious(self):
218
if not self.findtext:
220
if not self.inselection:
221
textlength = self.stc.GetTextLength()
222
if textlength != self.docEnd:
223
self.docEnd = textlength
224
self.SetTargetRange(0, self.docEnd)
225
self.findpos = self.stc.GetCurrentPos()
227
if (self.findpos == self.lastposition) and not self.rectanglefind:
228
self.findpos = self.findpos - len(self.findtext) - 1
229
self.stc.GotoPos(self.findpos)
230
elif self.rectanglefind and (self.lastposition == -1) and (not self.backwards):
231
self.stc.GotoPos(self.findpos)
232
if self.rectanglefind:
233
self.DoRectangleFind(self.findtext, self.findflags, True)
235
self.DoFind(self.findtext, self.findflags, True)
236
self.ScrollFewLinesBelow()
238
drScrolledMessageDialog.ShowMessage(self.parent, 'Find Previous Not Possible:\nRegular Expressions Are On.', 'DrPython Find')
240
def DoRectangleFind(self, findtext, matchcase, backwards=False):
242
self.rectanglefind = 1
243
doclength = self.stc.GetLength()
244
lenlines = len(self.Lines)
247
self.findtext = findtext
249
self.findtext = findtext.lower()
253
if self.backwards != backwards:
254
self.backwards = backwards
255
self.findpos = self.stc.GetCurrentPos()
257
endpos = self.targetEnd
259
lineArrayPosition = self.getArrayPosition(self.findpos)
260
if lineArrayPosition == -1:
261
self.findpos = self.findpos - 1
262
lineArrayPosition = self.getArrayPosition(self.findpos - 1)
263
if lineArrayPosition == -1:
266
relative_findpos = self.positions[lineArrayPosition].index(self.findpos) + 1
268
relative_findpos = self.positions[lineArrayPosition].index(self.findpos)
270
if self.findpos > -1:
271
self.findpos = self.findInArray(lineArrayPosition, relative_findpos)
273
if self.findpos == -1:
275
notFound = self.findInArray(0, self.positions[lenlines-1][len(self.positions[lenlines-1])-1]) == -1
277
notFound = self.findInArray(0, 0) == -1
279
drScrolledMessageDialog.ShowMessage(self.parent, ('Search string "' + findtext + '" not found.'), "DrPython Find")
281
if ((self.findpos >= doclength) or (self.findpos < 0)) and (doclength > 0):
282
self.lastposition = -1
284
msg = 'Start of document reached: "' + findtext + '".\nStart again from the end?'
285
self.findpos = self.targetEnd
287
msg = 'End of document reached: "' + findtext + '".\nStart again from the beginning?'
288
self.findpos = self.targetStart
289
if self.parent.prefs.findreplaceautowrap:
292
answer = wx.MessageBox(msg, "DrPython Find", wx.OK | wx.CANCEL | wx.ICON_QUESTION)
294
self.stc.GotoPos(self.findpos)
296
self.DoFindPrevious()
300
self.stc.GotoPos(prev)
303
if self.parent.prefs.docfolding:
304
self.stc.EnsureVisible(self.stc.LineFromPosition(self.findpos))
306
endpos = self.findpos + len(findtext)
308
self.stc.EnsurePositionIsVisible(endpos)
309
self.stc.GotoPos(self.findpos)
310
self.stc.SetSelectionStart(self.findpos)
311
self.stc.SetSelectionEnd(endpos)
312
self.lastposition = self.findpos + len(findtext)
314
def DoRERectangleFind(self, findtext, matchcase):
316
self.rectanglefind = 1
317
doclength = self.stc.GetLength()
319
self.findtext = findtext
320
self.findflags = matchcase
329
regularexpression = re.compile(findtext, case | re.MULTILINE)
331
drScrolledMessageDialog.ShowMessage(self.parent, 'Regular Expression Error', "DrPython Find")
334
endpos = self.targetEnd
335
if (self.findpos >= doclength) or (self.findpos < 0):
338
lineArrayPosition = self.getArrayPosition(self.findpos)
339
if lineArrayPosition == -1:
340
self.findpos = self.findpos - 1
341
lineArrayPosition = self.getArrayPosition(self.findpos - 1)
342
if lineArrayPosition == -1:
345
relative_findpos = self.positions[lineArrayPosition].index(self.findpos) + 1
347
relative_findpos = self.positions[lineArrayPosition].index(self.findpos)
349
if self.findpos > -1:
350
matchedtext, newArrayPosition = self.searchInArray(regularexpression, lineArrayPosition, relative_findpos)
354
if matchedtext is None:
355
testforexist, nap = self.searchInArray(regularexpression, 0, 0)
356
if testforexist is None:
357
drScrolledMessageDialog.ShowMessage(self.parent, ('Regular expression "' + findtext + '" not found.'), "DrPython Find")
359
self.lastposition = -1
360
if prev > self.targetStart:
361
self.findpos = self.targetStart
362
if self.parent.prefs.findreplaceautowrap:
365
answer = wx.MessageBox('End of document reached: "' + findtext + '".\nStart again from the beginning?', "DrPython Find", wx.OK | wx.CANCEL | wx.ICON_QUESTION)
367
self.stc.GotoPos(self.findpos)
370
self.stc.GotoPos(prev)
373
relative_findpos = matchedtext.start()
375
self.findpos = self.positions[newArrayPosition][relative_findpos]
377
endpos = self.findpos + (matchedtext.end() - matchedtext.start())
379
if self.parent.prefs.docfolding:
380
self.stc.EnsureVisible(self.stc.LineFromPosition(self.findpos))
382
self.stc.EnsurePositionIsVisible(endpos)
384
self.stc.GotoPos(self.findpos)
385
self.stc.SetSelectionStart(self.findpos)
386
self.stc.SetSelectionEnd(endpos)
387
self.lastposition = endpos
389
self.findpos = endpos
391
def findInArray(self, arrayposition, position):
393
r = self.Lines[arrayposition][:position].rfind(self.findtext)
396
while arrayposition > -1:
397
r = self.Lines[arrayposition].rfind(self.findtext)
401
return self.positions[arrayposition][r]
403
return self.positions[arrayposition][r]
406
r = self.Lines[arrayposition][position:].find(self.findtext)
409
while arrayposition < l:
410
r = self.Lines[arrayposition].find(self.findtext)
414
return self.positions[arrayposition][r]
416
return self.positions[arrayposition][r]
419
def getArrayPosition(self, position):
421
for posArray in self.positions:
422
if position in posArray:
427
def GetFindPos(self):
430
def GetFindText(self):
433
def RectangleReplaceAll(self, findtext, replacetext, matchcase):
434
targetText = self.stc.GetSelectedText()
437
targetText = targetText.lower()
439
eolchar = self.stc.GetEndOfLineCharacter()
441
lines = targetText.strip().split(eolchar)
443
c = self.stc.GetColumn(self.targetStart)
445
linenumber = self.stc.LineFromPosition(self.targetStart)
447
lenline = len(lines[0])
452
position_of_first_character = c + self.stc.PositionFromLine(linenumber)
453
p = line.find(findtext)
455
line = line.replace(findtext, replacetext)
456
self.stc.SetTargetStart(position_of_first_character)
457
self.stc.SetTargetEnd(position_of_first_character+lenline)
458
self.stc.ReplaceTarget(line)
460
linenumber = linenumber + 1
464
def RectangleREReplaceAll(self, findtext, replacetext, matchcase):
470
regularexpression = re.compile(findtext, case | re.MULTILINE)
472
drScrolledMessageDialog.ShowMessage(self.parent, 'Regular Expression Error', "DrPython Replace")
475
targetText = self.stc.GetSelectedText()
478
targetText = targetText.lower()
480
eolchar = self.stc.GetEndOfLineCharacter()
482
lines = targetText.strip().split(eolchar)
484
c = self.stc.GetColumn(self.targetStart)
486
linenumber = self.stc.LineFromPosition(self.targetStart)
488
lenline = len(lines[0])
493
#You need to update the position(do the replace) during the loop.
494
position_of_first_character = c + self.stc.PositionFromLine(linenumber)
495
line, x = regularexpression.subn(replacetext, line)
497
self.stc.SetTargetStart(position_of_first_character)
498
self.stc.SetTargetEnd(position_of_first_character+lenline)
499
self.stc.ReplaceTarget(line)
500
linenumber = linenumber + 1
504
def ReplaceAll(self, findtext, replacetext, flags, prompt = 0):
505
p = self.stc.FindText(self.findpos, self.targetEnd, findtext, flags)
506
diff = len(replacetext) - len(findtext)
509
favpos = wx.Point(5, 5)
511
if self.parent.prefs.docfolding:
512
self.stc.EnsureVisible(self.stc.LineFromPosition(p))
514
self.stc.EnsureCaretVisible()
515
self.stc.SetTargetStart(p)
516
self.stc.SetTargetEnd(p + len(findtext))
518
self.stc.SetSelection(p, (p + len(findtext)))
519
d = wx.SingleChoiceDialog(self.parent, ("Found \"" + findtext + "\" at Line: " \
520
+ str(self.stc.LineFromPosition(p)+1) + \
521
" Col: " + str(self.stc.GetColumn(p))
522
+ "\n(Hit Cancel to Stop)"), "Replace", ["Replace", "Skip"], wx.CHOICEDLG_STYLE)
527
answer = d.ShowModal()
528
favpos = d.GetPosition()
530
if answer == wx.ID_OK:
531
if d.GetStringSelection() == "Replace":
532
self.stc.ReplaceTarget(replacetext)
533
self.targetEnd = self.targetEnd + diff
537
p = self.stc.FindText((p + len(replacetext)), self.targetEnd, findtext, flags)
542
self.stc.ReplaceTarget(replacetext)
543
self.targetEnd = self.targetEnd + diff
544
p = self.stc.FindText((p + len(replacetext)), self.targetEnd, findtext, flags)
548
def REReplaceAll(self, findtext, replacetext, matchcase, prompt = 0):
554
regularexpression = re.compile(findtext, case | re.MULTILINE)
556
drScrolledMessageDialog.ShowMessage(self.parent, 'Regular Expression Error', "DrPython Replace")
559
oldtext = self.stc.GetText()
561
newtext, x = regularexpression.subn(replacetext, oldtext[self.targetStart:self.targetEnd])
563
self.stc.SetText(oldtext[0:self.targetStart] + newtext + oldtext[self.targetEnd:])
565
matchedtext = regularexpression.search(self.stc.GetText()[self.findpos:self.targetEnd])
567
diff = len(replacetext) - len(findtext)
572
favpos = wx.Point(5, 5)
573
while matchedtext is not None:
575
oldpos = self.findpos
576
self.findpos = oldpos + matchedtext.start()
577
endpos = oldpos + matchedtext.end()
579
if self.parent.prefs.docfolding:
580
self.stc.EnsureVisible(self.stc.LineFromPosition(self.findpos))
581
self.stc.GotoPos(self.findpos)
582
self.stc.EnsureCaretVisible()
583
self.stc.SetSelectionStart(self.findpos)
584
self.stc.SetSelectionEnd(endpos)
585
self.stc.SetTargetStart(self.findpos)
586
self.stc.SetTargetEnd(endpos)
588
d = wx.SingleChoiceDialog(self.parent, ("Found \"" + findtext + "\" at Line: " \
589
+ str(self.stc.LineFromPosition(self.findpos)+1) + \
590
" Col: " + str(self.stc.GetColumn(self.findpos)) + \
591
"\n(Hit Cancel to Stop)"), "Replace", ["Replace", "Skip"], wx.CHOICEDLG_STYLE)
597
answer = d.ShowModal()
598
favpos = d.GetPosition()
600
if answer == wx.ID_OK:
601
if d.GetStringSelection() == "Replace":
602
self.stc.ReplaceTarget(replacetext)
603
self.findpos = self.findpos + len(replacetext)
604
self.targetEnd = self.targetEnd + diff
606
self.findpos = endpos
610
matchedtext = regularexpression.search(self.stc.GetText()[self.findpos:self.targetEnd])
620
self.lastposition = 0
627
self.rectanglefind = 0
629
def searchInArray(self, regularexpression, arrayposition, position):
631
match = regularexpression.search(self.Lines[arrayposition][position:])
634
while arrayposition < l:
635
match = regularexpression.search(self.Lines[arrayposition])
639
return match, arrayposition
640
return match, arrayposition
642
def SetFindPos(self, findpos):
643
self.findpos = findpos
645
def SetFindText(self, findtext):
646
self.findtext = findtext
648
def SetTargetPositions(self, matchcase):
649
self.targetText = self.stc.GetSelectedText()
651
self.findflags = matchcase
654
self.targetText = self.targetText.lower()
656
eolchar = self.stc.GetEndOfLineCharacter()
658
self.Lines = self.targetText.strip().split(eolchar)
660
self.targetText = self.targetText.replace(eolchar, '')
662
c = self.stc.GetColumn(self.targetStart)
664
linenumber = self.stc.LineFromPosition(self.targetStart)
666
lenline = len(self.Lines[0])
670
for line in self.Lines:
671
position_of_first_character = c + self.stc.PositionFromLine(linenumber)
672
self.positions.append(range(position_of_first_character, position_of_first_character+lenline))
673
linenumber = linenumber + 1
675
def SetTargetRange(self, start, end, backwards = 0):
676
self.docEnd = self.stc.GetTextLength()
677
self.inselection = (start > 0) | (end < self.docEnd)
682
self.targetStart = start
675
685
class drFindTextCtrl(wx.ComboBox):
676
def __init__(self, parent, id, value, pos, size, returnfunction = None, InFiles = False):
677
wx.ComboBox.__init__(self, parent, id, value, pos, size)
679
#This is a workaround for a bug in how wx.TextCtrl handles
680
#carriage returns on windows.
683
self.ancestor = parent.parent.parent
685
self.ancestor = parent.parent
686
if self.ancestor.prefs.platform_is_windows:
687
self.doReplace = True
690
self.doReplace = False
693
self.ID_CHAR_BASE = 20
695
self.ID_MENU_BASE = 50
697
self.ID_HISTORY_BASE = 420
699
self.returnfunc = returnfunction
700
if self.returnfunc is None:
701
self.returnfunc = self.parent.OnbtnFind
703
self.Bind(wx.EVT_CHAR, self.OnChar)
705
self.Bind(wx.EVT_RIGHT_DOWN, self.OnPopUp)
707
#wxPython Bug Work-Around
708
if self.ancestor.prefs.platform_is_windows:
709
self.insertionpoint = -1
710
self.Bind(wx.EVT_SET_FOCUS, self.OnFocus)
711
#franz07/19: catch kill focus
712
self.Bind(wx.EVT_KILL_FOCUS, self.OnKillFocus)
715
def AppendToHistory(self, targetList):
716
text = self.GetText()
718
i = targetList.index(text)
723
targetList.append(text)
726
text = self.GetValue()
728
return text.replace(chr(5), '\r')
732
def OnChar(self, event):
733
if (event.GetKeyCode() == wx.WXK_ESCAPE):
734
self.parent.OnbtnCancel(event)
735
elif (event.GetKeyCode() == wx.WXK_RETURN):
736
self.returnfunc(event)
740
def OnFocus(self, event):
741
self.insertionpoint = -1
744
#franz07/19: do not steal focus
745
#drpython: removed "pass", replaced with function code below.
746
def OnKillFocus(self, event):
747
self.insertionpoint = self.GetInsertionPoint()
752
def OnPopUp(self, event):
753
self.PopUp(event.GetPosition())
755
def OnPopUpMenu(self, event):
758
pos = self.GetInsertionPoint()
759
#wxPython Bug Work-Around
760
if self.ancestor.prefs.platform_is_windows:
761
if self.insertionpoint > -1:
762
pos = self.insertionpoint
763
text = self.GetValue()
765
if eid == self.ID_CHAR_BASE:
766
self.SetValue(text[:pos] + '\t' + text[pos:])
767
self.SetInsertionPoint(pos+1)
768
elif eid == self.ID_CHAR_BASE+1:
769
self.SetValue(text[:pos] + '\n' + text[pos:])
770
self.SetInsertionPoint(pos+1)
771
elif eid == self.ID_CHAR_BASE+2:
772
self.SetValue(text[:pos] + self.cr + text[pos:])
773
self.SetInsertionPoint(pos+1)
774
elif eid == self.ID_MENU_BASE+1:
776
elif eid == self.ID_MENU_BASE+2:
778
elif eid == self.ID_MENU_BASE+3:
780
elif eid == self.ID_MENU_BASE+4:
781
f, to = self.GetSelection()
783
elif eid == self.ID_MENU_BASE+5:
788
def PopUp(self, pos):
789
self.PopUpMenu = wx.Menu()
791
self.CharMenu = wx.Menu()
793
self.CharMenu.Append(self.ID_CHAR_BASE, "Tab (\\t)")
794
self.CharMenu.Append(self.ID_CHAR_BASE+1, "Newline (\\n)")
795
self.CharMenu.Append(self.ID_CHAR_BASE+2, "Carraige Return (\\r)")
797
self.PopUpMenu.Append(self.ID_MENU_BASE+5, "Clear Text")
799
self.PopUpMenu.AppendSeparator()
801
self.PopUpMenu.AppendMenu(self.ID_MENU_BASE, "Insert Special Character", self.CharMenu)
803
self.PopUpMenu.AppendSeparator()
805
self.PopUpMenu.Append(self.ID_MENU_BASE+1, "Cut")
806
self.PopUpMenu.Append(self.ID_MENU_BASE+2, "Copy")
807
self.PopUpMenu.Append(self.ID_MENU_BASE+3, "Paste")
808
self.PopUpMenu.Append(self.ID_MENU_BASE+4, "Delete")
814
self.Bind(wx.EVT_MENU, self.OnPopUpMenu, id=self.ID_CHAR_BASE+y)
816
self.Bind(wx.EVT_MENU, self.OnPopUpMenu, id=self.ID_MENU_BASE+x)
819
self.PopupMenu(self.PopUpMenu, pos)
821
self.PopUpMenu.Destroy()
823
def SetHistory(self, history):
824
if self.GetCount() > 0:
830
self.Append(history[x])
833
self.SetMark(0, len(history[l-1]))
686
def __init__(self, parent, id, value, pos, size, returnfunction = None, InFiles = False):
687
wx.ComboBox.__init__(self, parent, id, value, pos, size)
689
#This is a workaround for a bug in how wx.TextCtrl handles
690
#carriage returns on windows.
693
self.ancestor = parent.parent.parent
695
self.ancestor = parent.parent
696
if self.ancestor.PLATFORM_IS_WIN:
697
self.doReplace = True
700
self.doReplace = False
703
self.ID_CHAR_BASE = 20
705
self.ID_MENU_BASE = 50
707
self.ID_HISTORY_BASE = 420
709
self.returnfunc = returnfunction
710
if self.returnfunc is None:
711
self.returnfunc = self.parent.OnbtnFind
713
self.Bind(wx.EVT_CHAR, self.OnChar)
715
self.Bind(wx.EVT_RIGHT_DOWN, self.OnPopUp)
717
#wxPython Bug Work-Around
718
if self.ancestor.PLATFORM_IS_WIN:
719
self.insertionpoint = -1
720
self.Bind(wx.EVT_SET_FOCUS, self.OnFocus)
721
#franz07/19: catch kill focus
722
self.Bind(wx.EVT_KILL_FOCUS, self.OnKillFocus)
725
def AppendToHistory(self, targetList):
726
text = self.GetText()
728
i = targetList.index(text)
733
targetList.append(text)
736
text = self.GetValue()
738
return text.replace(chr(5), '\r')
742
def OnChar(self, event):
743
if event.GetKeyCode() == wx.WXK_ESCAPE:
744
self.parent.OnbtnCancel(event)
745
elif event.GetKeyCode() == wx.WXK_RETURN:
746
self.returnfunc(event)
750
def OnFocus(self, event):
751
self.insertionpoint = -1
754
#franz07/19: do not steal focus
755
#drpython: removed "pass", replaced with function code below.
756
def OnKillFocus(self, event):
757
self.insertionpoint = self.GetInsertionPoint()
762
def OnPopUp(self, event):
763
self.PopUp(event.GetPosition())
765
def OnPopUpMenu(self, event):
768
pos = self.GetInsertionPoint()
769
#wxPython Bug Work-Around
770
if self.ancestor.PLATFORM_IS_WIN:
771
if self.insertionpoint > -1:
772
pos = self.insertionpoint
773
text = self.GetValue()
775
if eid == self.ID_CHAR_BASE:
776
self.SetValue(text[:pos] + '\t' + text[pos:])
777
self.SetInsertionPoint(pos+1)
778
elif eid == self.ID_CHAR_BASE+1:
779
self.SetValue(text[:pos] + '\n' + text[pos:])
780
self.SetInsertionPoint(pos+1)
781
elif eid == self.ID_CHAR_BASE+2:
782
self.SetValue(text[:pos] + self.cr + text[pos:])
783
self.SetInsertionPoint(pos+1)
784
elif eid == self.ID_MENU_BASE+1:
786
elif eid == self.ID_MENU_BASE+2:
788
elif eid == self.ID_MENU_BASE+3:
790
elif eid == self.ID_MENU_BASE+4:
791
f, to = self.GetSelection()
793
elif eid == self.ID_MENU_BASE+5:
798
def PopUp(self, pos):
799
self.PopUpMenu = wx.Menu()
801
self.CharMenu = wx.Menu()
803
self.CharMenu.Append(self.ID_CHAR_BASE, "Tab (\\t)")
804
self.CharMenu.Append(self.ID_CHAR_BASE+1, "Newline (\\n)")
805
self.CharMenu.Append(self.ID_CHAR_BASE+2, "Carraige Return (\\r)")
807
self.PopUpMenu.Append(self.ID_MENU_BASE+5, "Clear Text")
809
self.PopUpMenu.AppendSeparator()
811
self.PopUpMenu.AppendMenu(self.ID_MENU_BASE, "Insert Special Character", self.CharMenu)
813
self.PopUpMenu.AppendSeparator()
815
self.PopUpMenu.Append(self.ID_MENU_BASE+1, "Cut")
816
self.PopUpMenu.Append(self.ID_MENU_BASE+2, "Copy")
817
self.PopUpMenu.Append(self.ID_MENU_BASE+3, "Paste")
818
self.PopUpMenu.Append(self.ID_MENU_BASE+4, "Delete")
824
self.Bind(wx.EVT_MENU, self.OnPopUpMenu, id=self.ID_CHAR_BASE+y)
826
self.Bind(wx.EVT_MENU, self.OnPopUpMenu, id=self.ID_MENU_BASE+x)
829
self.PopupMenu(self.PopUpMenu, pos)
831
self.PopUpMenu.Destroy()
833
def SetHistory(self, history):
834
if self.GetCount() > 0:
840
self.Append(history[x])
843
self.SetMark(0, len(history[l-1]))
835
845
class drFindReplaceDialog(wx.Dialog):
836
def __init__(self, parent, id, title, stc, IsReplace = 0):
837
wx.Dialog.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(-1, -1), wx.DEFAULT_DIALOG_STYLE | wx.MAXIMIZE_BOX | wx.THICK_FRAME | wx.RESIZE_BORDER)
840
self.ID_CANCEL = 1002
842
self.ID_CHK_REGEX = 1010
843
self.ID_CREATERE = 1011
845
self.ID_SEARCH_TXT = 1012
854
self.theSizer = wx.FlexGridSizer(8, 3, 5, 10)
856
self.IsReplace = IsReplace
859
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
860
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
861
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
863
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
864
self.theSizer.Add(wx.StaticText(self, -1, "Search For: "), 1, wx.SHAPED)
865
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
867
self.txtSearchFor = drFindTextCtrl(self, self.ID_SEARCH_TXT, "", wx.DefaultPosition, wx.Size(250, -1))
868
self.btnPopUpSearchFor = wx.Button(self, self.ID_BTNSF, " Menu ")
869
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
870
self.theSizer.Add(self.txtSearchFor, 1, wx.SHAPED)
871
self.theSizer.Add(self.btnPopUpSearchFor, 1, wx.SHAPED)
873
self.txtSearchFor.SetHistory(parent.FindHistory)
876
#self.SetSize(wx.Size(400, 345))
877
self.txtReplaceWith = drFindTextCtrl(self, -1, "", wx.DefaultPosition, wx.Size(250, -1))
878
self.btnPopUpReplaceWith = wx.Button(self, self.ID_BTNRW, " Menu ")
879
self.txtReplaceWith.SetHistory(parent.ReplaceHistory)
881
self.chkRegularExpression = wx.CheckBox(self, self.ID_CHK_REGEX, "RegularExpression")
882
self.btnCreateRE = wx.Button(self, self.ID_CREATERE, " &Create ")
883
self.chkMatchCase = wx.CheckBox(self, -1, "Match Case")
884
self.chkFindBackwards = wx.CheckBox(self, -1, "Find Backwards")
885
self.chkWholeWord = wx.CheckBox(self, -1, "Whole Word")
886
self.chkInSelection = wx.CheckBox(self, -1, "In Selection")
887
self.chkFromCursor = wx.CheckBox(self, -1, "From Cursor")
890
self.chkRegularExpression.SetValue(parent.prefs.findreplaceregularexpression)
891
self.btnCreateRE.Enable(parent.prefs.findreplaceregularexpression)
892
self.chkMatchCase.SetValue(parent.prefs.findreplacematchcase)
893
self.chkFindBackwards.SetValue(parent.prefs.findreplacefindbackwards)
894
self.chkWholeWord.SetValue(parent.prefs.findreplacewholeword)
895
self.chkInSelection.SetValue(parent.prefs.findreplaceinselection)
896
self.chkFromCursor.SetValue(parent.prefs.findreplacefromcursor)
898
self.chkInSelection.Enable(len(parent.txtDocument.GetSelectedText()) > 0)
901
self.chkPromptOnReplace = wx.CheckBox(self, -1, "Prompt on Replace")
902
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
903
self.theSizer.Add(wx.StaticText(self, -1, "Replace With: "), 1, wx.SHAPED)
904
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
906
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
907
self.theSizer.Add(self.txtReplaceWith, 1 ,wx.SHAPED)
908
self.theSizer.Add(self.btnPopUpReplaceWith, 1, wx.SHAPED)
910
self.chkFromCursor.Disable()
911
self.chkFindBackwards.Disable()
914
self.chkPromptOnReplace.SetValue(parent.prefs.findreplacepromptonreplace)
916
self.Bind(wx.EVT_BUTTON, self.OnbtnPopUp, id=self.ID_BTNRW)
919
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
920
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
921
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
923
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
924
self.theSizer.Add(self.chkRegularExpression, 1, wx.SHAPED)
925
self.theSizer.Add(self.btnCreateRE, 1, wx.SHAPED)
927
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
928
self.theSizer.Add(self.chkMatchCase, 1, wx.SHAPED)
929
self.theSizer.Add(self.chkFindBackwards, 1, wx.SHAPED)
930
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
931
self.theSizer.Add(self.chkWholeWord, 1, wx.SHAPED)
932
self.theSizer.Add(self.chkInSelection, 1, wx.SHAPED)
933
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
934
self.theSizer.Add(self.chkFromCursor, 1, wx.SHAPED)
936
self.theSizer.Add(self.chkPromptOnReplace, 1, wx.SHAPED)
938
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
939
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
940
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
941
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
943
self.btnCancel = wx.Button(self, self.ID_CANCEL, "&Cancel")
944
self.btnFind = wx.Button(self, self.ID_FIND, "&Ok")
945
self.btnFind.Enable(False)
947
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
948
self.theSizer.Add(self.btnCancel, 1, wx.SHAPED)
949
self.theSizer.Add(self.btnFind, 1, wx.SHAPED)
951
self.SetAutoLayout(True)
952
self.SetSizerAndFit(self.theSizer)
954
self.btnFind.SetDefault()
955
self.txtSearchFor.SetFocus()
957
self.Bind(wx.EVT_BUTTON, self.OnbtnCancel, id=self.ID_CANCEL)
958
self.Bind(wx.EVT_BUTTON, self.OnbtnFind, id=self.ID_FIND)
959
self.Bind(wx.EVT_BUTTON, self.OnbtnCreateRE, id=self.ID_CREATERE)
960
self.Bind(wx.EVT_BUTTON, self.OnbtnPopUp, id=self.ID_BTNSF)
962
self.Bind(wx.EVT_CHECKBOX, self.OnCheckRegularExpression, id=self.ID_CHK_REGEX)
964
self.Bind(wx.EVT_TEXT, self.OnTextChanged, id=self.ID_SEARCH_TXT)
966
self.parent.LoadDialogSizeAndPosition(self, 'findreplacedialog.sizeandposition.dat')
968
def OnCloseW(self, event):
969
self.parent.SaveDialogSizeAndPosition(self, 'findreplacedialog.sizeandposition.dat')
970
if event is not None:
973
def GetOptions(self):
974
rarray = [self.chkRegularExpression.GetValue(), self.chkMatchCase.GetValue(), \
975
self.chkFindBackwards.GetValue(), self.chkWholeWord.GetValue(), \
976
self.chkInSelection.GetValue(), self.chkFromCursor.GetValue()]
979
rarray.append(self.chkPromptOnReplace.GetValue())
983
def OnbtnCancel(self, event):
986
def OnbtnCreateRE(self, event):
987
from drRegularExpressionDialog import drRegularExpressionDialog
988
d = drRegularExpressionDialog(self, -1, "Create Regular Expression")
991
def OnbtnFind(self, event):
992
if not self.btnFind.IsEnabled():
996
findbackwards = self.chkFindBackwards.GetValue()
998
isRegularExpression = self.chkRegularExpression.GetValue()
999
isMatchCase = self.chkMatchCase.GetValue()
1001
self.txtSearchFor.AppendToHistory(self.parent.FindHistory)
1003
self.txtReplaceWith.AppendToHistory(self.parent.ReplaceHistory)
1006
if (self.chkInSelection.GetValue()):
1007
selstart = self.stc.GetSelectionStart()
1008
selend = self.stc.GetSelectionEnd()
1009
if (selend - selstart) < 1:
1011
selend = self.stc.GetTextLength()
1012
self.stc.Finder.SetTargetRange(selstart, selend, findbackwards)
1013
#Do the Search if it's a rectangle:
1014
if self.stc.SelectionIsRectangle():
1016
if isRegularExpression:
1017
x = self.stc.Finder.RectangleREReplaceAll(self.txtSearchFor.GetText(), self.txtReplaceWith.GetText(), isMatchCase)
1018
if self.parent.prefs.enablefeedback:
1019
drScrolledMessageDialog.ShowMessage(self, (str(x) + " occurances of \"" + self.txtSearchFor.GetText() + "\" replaced with \"" + self.txtReplaceWith.GetText() + "\""), "Replace")
1021
x = self.stc.Finder.RectangleReplaceAll(self.txtSearchFor.GetText(), self.txtReplaceWith.GetText(), isMatchCase)
1022
if self.parent.prefs.enablefeedback:
1023
drScrolledMessageDialog.ShowMessage(self, (str(x) + " occurances of \"" + self.txtSearchFor.GetText() + "\" replaced with \"" + self.txtReplaceWith.GetText() + "\""), "Replace")
1025
self.stc.Finder.SetTargetPositions(isMatchCase)
1026
if isRegularExpression:
1027
self.stc.Finder.DoRERectangleFind(self.txtSearchFor.GetText(), isMatchCase)
1029
self.stc.Finder.DoRectangleFind(self.txtSearchFor.GetText(), isMatchCase, findbackwards)
1033
self.stc.Finder.SetTargetRange(0, self.stc.GetTextLength(), findbackwards)
1036
if (self.chkFromCursor.GetValue()) and (not self.IsReplace):
1037
self.stc.Finder.SetFindPos(self.stc.GetCurrentPos())
1040
if (isRegularExpression):
1041
if (self.IsReplace):
1042
x = self.stc.Finder.REReplaceAll(self.txtSearchFor.GetText(), self.txtReplaceWith.GetText(), isMatchCase, self.chkPromptOnReplace.GetValue())
1044
drScrolledMessageDialog.ShowMessage(self, 'Search string: "' + self.txtSearchFor.GetText() + '" not found.', 'DrPython Replace')
1045
elif self.parent.prefs.enablefeedback:
1046
drScrolledMessageDialog.ShowMessage(self, (str(x) + " occurances of \"" + self.txtSearchFor.GetText() + "\" replaced with \"" + self.txtReplaceWith.GetText() + "\""), "Replace")
1048
self.stc.Finder.DoREFind(self.txtSearchFor.GetText(), isMatchCase)
1051
if (self.chkWholeWord.GetValue()):
1052
findflags = findflags | wx.stc.STC_FIND_WHOLEWORD
1054
findflags = findflags | wx.stc.STC_FIND_MATCHCASE
1056
if (self.IsReplace):
1057
x = self.stc.Finder.ReplaceAll(self.txtSearchFor.GetText(), self.txtReplaceWith.GetText(), findflags, self.chkPromptOnReplace.GetValue())
1059
drScrolledMessageDialog.ShowMessage(self, 'Search string: "' + self.txtSearchFor.GetText() + '" not found.', 'DrPython Replace')
1060
elif self.parent.prefs.enablefeedback:
1061
drScrolledMessageDialog.ShowMessage(self, (str(x) + " occurances of \"" + self.txtSearchFor.GetText() + "\" replaced with \"" + self.txtReplaceWith.GetText() + "\""), "Replace")
1063
self.stc.Finder.DoFind(self.txtSearchFor.GetText(), findflags, findbackwards)
1067
if (self.IsReplace):
1068
self.parent.ReplaceOptions = self.GetOptions()
1070
self.parent.FindOptions = self.GetOptions()
1072
def OnbtnPopUp(self, event):
1074
if eid == self.ID_BTNSF:
1075
s = self.txtSearchFor.GetPosition()[0]
1076
x = self.btnPopUpSearchFor.GetPosition()[0]
1077
self.txtSearchFor.PopUp((x-s, 0))
1078
elif eid == self.ID_BTNRW:
1079
s = self.txtReplaceWith.GetPosition()[0]
1080
x = self.btnPopUpReplaceWith.GetPosition()[0]
1081
self.txtReplaceWith.PopUp((x-s, 0))
1083
def OnCheckRegularExpression(self, event):
1084
usingRegularExpressions = self.chkRegularExpression.GetValue()
1085
self.btnCreateRE.Enable(usingRegularExpressions)
1086
self.chkWholeWord.Enable(not usingRegularExpressions)
1087
if not self.IsReplace:
1088
self.chkFindBackwards.Enable(not usingRegularExpressions)
1090
def OnTextChanged(self, event):
1091
self.btnFind.Enable(len(self.txtSearchFor.GetText()) > 0)
1093
def SetFindString(self, findstring):
1094
self.txtSearchFor.SetValue(findstring)
1095
self.txtSearchFor.SetMark(0, len(findstring))
1096
self.OnTextChanged(None)
1098
def SetOptions(self, OptionsArray):
1099
if len(OptionsArray) > 0:
1100
self.chkRegularExpression.SetValue(OptionsArray[0])
1101
self.btnCreateRE.Enable(OptionsArray[0])
1102
self.chkMatchCase.SetValue(OptionsArray[1])
1103
self.chkFindBackwards.SetValue(OptionsArray[2])
1104
self.chkWholeWord.SetValue(OptionsArray[3])
1105
self.chkInSelection.SetValue(OptionsArray[4])
1106
self.chkFromCursor.SetValue(OptionsArray[5])
1108
if (self.IsReplace):
1109
self.chkPromptOnReplace.SetValue(OptionsArray[6])
b'\\ No newline at end of file'
846
def __init__(self, parent, id, title, stc, IsReplace = 0):
847
wx.Dialog.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(-1, -1), wx.DEFAULT_DIALOG_STYLE | wx.MAXIMIZE_BOX | wx.THICK_FRAME | wx.RESIZE_BORDER)
850
self.ID_CANCEL = 1002
852
self.ID_CHK_REGEX = 1010
853
self.ID_CREATERE = 1011
855
self.ID_SEARCH_TXT = 1012
864
self.theSizer = wx.FlexGridSizer(8, 3, 5, 10)
866
self.IsReplace = IsReplace
869
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
870
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
871
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
873
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
874
self.theSizer.Add(wx.StaticText(self, -1, "Search For: "), 1, wx.SHAPED)
875
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
877
self.txtSearchFor = drFindTextCtrl(self, self.ID_SEARCH_TXT, "", wx.DefaultPosition, wx.Size(250, -1))
878
self.btnPopUpSearchFor = wx.Button(self, self.ID_BTNSF, " Menu ")
879
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
880
self.theSizer.Add(self.txtSearchFor, 1, wx.SHAPED)
881
self.theSizer.Add(self.btnPopUpSearchFor, 1, wx.SHAPED)
883
self.txtSearchFor.SetHistory(parent.FindHistory)
886
#self.SetSize(wx.Size(400, 345))
887
self.txtReplaceWith = drFindTextCtrl(self, -1, "", wx.DefaultPosition, wx.Size(250, -1))
888
self.btnPopUpReplaceWith = wx.Button(self, self.ID_BTNRW, " Menu ")
889
self.txtReplaceWith.SetHistory(parent.ReplaceHistory)
891
self.chkRegularExpression = wx.CheckBox(self, self.ID_CHK_REGEX, "RegularExpression")
892
self.btnCreateRE = wx.Button(self, self.ID_CREATERE, " &Create ")
893
self.chkMatchCase = wx.CheckBox(self, -1, "Match Case")
894
self.chkFindBackwards = wx.CheckBox(self, -1, "Find Backwards")
895
self.chkWholeWord = wx.CheckBox(self, -1, "Whole Word")
896
self.chkInSelection = wx.CheckBox(self, -1, "In Selection")
897
self.chkFromCursor = wx.CheckBox(self, -1, "From Cursor")
900
self.chkRegularExpression.SetValue(parent.prefs.findreplaceregularexpression)
901
self.btnCreateRE.Enable(parent.prefs.findreplaceregularexpression)
902
self.chkMatchCase.SetValue(parent.prefs.findreplacematchcase)
903
self.chkFindBackwards.SetValue(parent.prefs.findreplacefindbackwards)
904
self.chkWholeWord.SetValue(parent.prefs.findreplacewholeword)
905
self.chkInSelection.SetValue(parent.prefs.findreplaceinselection)
906
self.chkFromCursor.SetValue(parent.prefs.findreplacefromcursor)
908
self.chkInSelection.Enable(len(parent.txtDocument.GetSelectedText()) > 0)
911
self.chkPromptOnReplace = wx.CheckBox(self, -1, "Prompt on Replace")
912
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
913
self.theSizer.Add(wx.StaticText(self, -1, "Replace With: "), 1, wx.SHAPED)
914
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
916
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
917
self.theSizer.Add(self.txtReplaceWith, 1 ,wx.SHAPED)
918
self.theSizer.Add(self.btnPopUpReplaceWith, 1, wx.SHAPED)
920
self.chkFromCursor.Disable()
921
self.chkFindBackwards.Disable()
924
self.chkPromptOnReplace.SetValue(parent.prefs.findreplacepromptonreplace)
926
self.Bind(wx.EVT_BUTTON, self.OnbtnPopUp, id=self.ID_BTNRW)
929
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
930
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
931
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
933
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
934
self.theSizer.Add(self.chkRegularExpression, 1, wx.SHAPED)
935
self.theSizer.Add(self.btnCreateRE, 1, wx.SHAPED)
937
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
938
self.theSizer.Add(self.chkMatchCase, 1, wx.SHAPED)
939
self.theSizer.Add(self.chkFindBackwards, 1, wx.SHAPED)
940
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
941
self.theSizer.Add(self.chkWholeWord, 1, wx.SHAPED)
942
self.theSizer.Add(self.chkInSelection, 1, wx.SHAPED)
943
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
944
self.theSizer.Add(self.chkFromCursor, 1, wx.SHAPED)
946
self.theSizer.Add(self.chkPromptOnReplace, 1, wx.SHAPED)
948
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
949
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
950
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
951
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
953
self.btnCancel = wx.Button(self, self.ID_CANCEL, "&Cancel")
954
self.btnFind = wx.Button(self, self.ID_FIND, "&Ok")
955
self.btnFind.Enable(False)
957
self.theSizer.Add(wx.StaticText(self, -1, " "), 1, wx.SHAPED)
958
self.theSizer.Add(self.btnCancel, 1, wx.SHAPED)
959
self.theSizer.Add(self.btnFind, 1, wx.SHAPED)
961
self.SetAutoLayout(True)
962
self.SetSizerAndFit(self.theSizer)
964
self.btnFind.SetDefault()
965
self.txtSearchFor.SetFocus()
967
self.Bind(wx.EVT_BUTTON, self.OnbtnCancel, id=self.ID_CANCEL)
968
self.Bind(wx.EVT_BUTTON, self.OnbtnFind, id=self.ID_FIND)
969
self.Bind(wx.EVT_BUTTON, self.OnbtnCreateRE, id=self.ID_CREATERE)
970
self.Bind(wx.EVT_BUTTON, self.OnbtnPopUp, id=self.ID_BTNSF)
972
self.Bind(wx.EVT_CHECKBOX, self.OnCheckRegularExpression, id=self.ID_CHK_REGEX)
974
self.Bind(wx.EVT_TEXT, self.OnTextChanged, id=self.ID_SEARCH_TXT)
976
self.parent.LoadDialogSizeAndPosition(self, 'findreplacedialog.sizeandposition.dat')
978
def OnCloseW(self, event):
979
self.parent.SaveDialogSizeAndPosition(self, 'findreplacedialog.sizeandposition.dat')
980
if event is not None:
983
def GetOptions(self):
984
rarray = [self.chkRegularExpression.GetValue(), self.chkMatchCase.GetValue(), \
985
self.chkFindBackwards.GetValue(), self.chkWholeWord.GetValue(), \
986
self.chkInSelection.GetValue(), self.chkFromCursor.GetValue()]
989
rarray.append(self.chkPromptOnReplace.GetValue())
993
def OnbtnCancel(self, event):
996
def OnbtnCreateRE(self, event):
997
from drRegularExpressionDialog import drRegularExpressionDialog
998
d = drRegularExpressionDialog(self, -1, "Create Regular Expression")
1001
def OnbtnFind(self, event):
1002
if not self.btnFind.IsEnabled():
1006
findbackwards = self.chkFindBackwards.GetValue()
1008
isRegularExpression = self.chkRegularExpression.GetValue()
1009
isMatchCase = self.chkMatchCase.GetValue()
1011
self.txtSearchFor.AppendToHistory(self.parent.FindHistory)
1013
self.txtReplaceWith.AppendToHistory(self.parent.ReplaceHistory)
1016
if self.chkInSelection.GetValue():
1017
selstart = self.stc.GetSelectionStart()
1018
selend = self.stc.GetSelectionEnd()
1019
if (selend - selstart) < 1:
1021
selend = self.stc.GetTextLength()
1022
self.stc.Finder.SetTargetRange(selstart, selend, findbackwards)
1023
#Do the Search if it's a rectangle:
1024
if self.stc.SelectionIsRectangle():
1026
if isRegularExpression:
1027
x = self.stc.Finder.RectangleREReplaceAll(self.txtSearchFor.GetText(), self.txtReplaceWith.GetText(), isMatchCase)
1028
if self.parent.prefs.enablefeedback:
1029
drScrolledMessageDialog.ShowMessage(self, (str(x) + " occurances of \"" + self.txtSearchFor.GetText() + "\" replaced with \"" + self.txtReplaceWith.GetText() + "\""), "Replace")
1031
x = self.stc.Finder.RectangleReplaceAll(self.txtSearchFor.GetText(), self.txtReplaceWith.GetText(), isMatchCase)
1032
if self.parent.prefs.enablefeedback:
1033
drScrolledMessageDialog.ShowMessage(self, (str(x) + " occurances of \"" + self.txtSearchFor.GetText() + "\" replaced with \"" + self.txtReplaceWith.GetText() + "\""), "Replace")
1035
self.stc.Finder.SetTargetPositions(isMatchCase)
1036
if isRegularExpression:
1037
self.stc.Finder.DoRERectangleFind(self.txtSearchFor.GetText(), isMatchCase)
1039
self.stc.Finder.DoRectangleFind(self.txtSearchFor.GetText(), isMatchCase, findbackwards)
1043
self.stc.Finder.SetTargetRange(0, self.stc.GetTextLength(), findbackwards)
1046
if self.chkFromCursor.GetValue(): #) and (not self.IsReplace):
1047
self.stc.Finder.SetFindPos(self.stc.GetCurrentPos())
1050
if isRegularExpression:
1052
x = self.stc.Finder.REReplaceAll(self.txtSearchFor.GetText(), self.txtReplaceWith.GetText(), isMatchCase, self.chkPromptOnReplace.GetValue())
1054
if self.parent.prefs.enablefeedback:
1055
drScrolledMessageDialog.ShowMessage(self, 'Search string: "' + self.txtSearchFor.GetText() + '" not found.', 'DrPython Replace')
1057
self.parent.SetStatusText( '"'+self.txtSearchFor.GetText() + '" NOT FOUND', 2)
1059
if self.parent.prefs.enablefeedback:
1060
drScrolledMessageDialog.ShowMessage(self, (str(x) + " occurances of \"" + self.txtSearchFor.GetText() + "\" replaced with \"" + self.txtReplaceWith.GetText() + "\""), "Replace")
1062
self.parent.SetStatusText(str(x) + ' occurances of "' + self.txtSearchFor.GetText() + '" replaced with "' + self.txtReplaceWith.GetText() + '"', 2)
1064
self.stc.Finder.DoREFind(self.txtSearchFor.GetText(), isMatchCase)
1067
if self.chkWholeWord.GetValue():
1068
findflags = findflags | wx.stc.STC_FIND_WHOLEWORD
1070
findflags = findflags | wx.stc.STC_FIND_MATCHCASE
1073
x = self.stc.Finder.ReplaceAll(self.txtSearchFor.GetText(), self.txtReplaceWith.GetText(), findflags, self.chkPromptOnReplace.GetValue())
1075
if self.parent.prefs.enablefeedback:
1076
drScrolledMessageDialog.ShowMessage(self, 'Search string: "' + self.txtSearchFor.GetText() + '" not found.', 'DrPython Replace')
1078
self.parent.SetStatusText( '"'+self.txtSearchFor.GetText() + '" NOT FOUND', 2)
1080
if self.parent.prefs.enablefeedback:
1081
drScrolledMessageDialog.ShowMessage(self, (str(x) + " occurances of \"" + self.txtSearchFor.GetText() + "\" replaced with \"" + self.txtReplaceWith.GetText() + "\""), "Replace")
1083
self.parent.SetStatusText(str(x) + ' occurances of "' + self.txtSearchFor.GetText() + '" replaced with "' + self.txtReplaceWith.GetText() + '"', 2)
1085
self.stc.Finder.DoFind(self.txtSearchFor.GetText(), findflags, findbackwards)
1090
self.parent.ReplaceOptions = self.GetOptions()
1092
self.parent.FindOptions = self.GetOptions()
1094
self.stc.Finder.ScrollFewLinesBelow()
1096
self.stc.Finder.ScrollFewLinesAbove()
1097
# top = self.parent.txtDocument.GetCurrentLine() - self.parent.txtDocument.LinesOnScreen()/2
1100
# self.parent.txtDocument.ScrollToLine(top)
1102
def OnbtnPopUp(self, event):
1104
if eid == self.ID_BTNSF:
1105
s = self.txtSearchFor.GetPosition()[0]
1106
x = self.btnPopUpSearchFor.GetPosition()[0]
1107
self.txtSearchFor.PopUp((x-s, 0))
1108
elif eid == self.ID_BTNRW:
1109
s = self.txtReplaceWith.GetPosition()[0]
1110
x = self.btnPopUpReplaceWith.GetPosition()[0]
1111
self.txtReplaceWith.PopUp((x-s, 0))
1113
def OnCheckRegularExpression(self, event):
1114
usingRegularExpressions = self.chkRegularExpression.GetValue()
1115
self.btnCreateRE.Enable(usingRegularExpressions)
1116
self.chkWholeWord.Enable(not usingRegularExpressions)
1117
if not self.IsReplace:
1118
self.chkFindBackwards.Enable(not usingRegularExpressions)
1120
def OnTextChanged(self, event):
1121
self.btnFind.Enable(len(self.txtSearchFor.GetText()) > 0)
1123
def SetFindString(self, findstring):
1124
self.txtSearchFor.SetValue(findstring)
1125
self.txtSearchFor.SetMark(0, len(findstring))
1126
self.OnTextChanged(None)
1128
def SetOptions(self, OptionsArray):
1130
self.chkRegularExpression.SetValue(OptionsArray[0])
1131
self.btnCreateRE.Enable(OptionsArray[0])
1132
self.chkMatchCase.SetValue(OptionsArray[1])
1133
self.chkFindBackwards.SetValue(OptionsArray[2])
1134
self.chkWholeWord.SetValue(OptionsArray[3])
1135
self.chkInSelection.SetValue(OptionsArray[4])
1136
self.chkFromCursor.SetValue(OptionsArray[5])
1139
self.chkPromptOnReplace.SetValue(OptionsArray[6])