392 Private slot to search for the entered text while typing. |
392 Private slot to search for the entered text while typing. |
393 |
393 |
394 @param txt text of the search edit |
394 @param txt text of the search edit |
395 @type str |
395 @type str |
396 """ |
396 """ |
|
397 if Preferences.getEditor("QuickSearchEnabled"): |
|
398 aw = self.__viewmanager.activeWindow() |
|
399 aw.hideFindIndicator() |
|
400 if Preferences.getEditor("QuickSearchMarkersEnabled"): |
|
401 self.__quickSearchMarkOccurrences(txt) |
|
402 |
|
403 if self.ui.selectionCheckBox.isChecked(): |
|
404 lineFrom, indexFrom, lineTo, indexTo = self.__selectionBoundary() |
|
405 else: |
|
406 lineFrom, indexFrom, lineTo, indexTo = 0, 0, -1, -1 |
|
407 posixMode = ( |
|
408 Preferences.getEditor("SearchRegexpMode") == 0 |
|
409 and self.ui.regexpCheckBox.isChecked() |
|
410 ) |
|
411 cxx11Mode = ( |
|
412 Preferences.getEditor("SearchRegexpMode") == 1 |
|
413 and self.ui.regexpCheckBox.isChecked() |
|
414 ) |
|
415 |
|
416 self.__finding = True |
|
417 ok = aw.findFirst( |
|
418 txt, |
|
419 self.ui.regexpCheckBox.isChecked(), |
|
420 self.ui.caseCheckBox.isChecked(), |
|
421 self.ui.wordCheckBox.isChecked(), |
|
422 self.ui.wrapCheckBox.isChecked(), |
|
423 not self.__findBackwards, |
|
424 lineFrom, |
|
425 indexFrom, |
|
426 posix=posixMode, |
|
427 cxx11=cxx11Mode, |
|
428 ) |
|
429 if ok: |
|
430 sline, sindex, eline, eindex = aw.getSelection() |
|
431 if ( |
|
432 (sline == lineFrom and sindex >= indexFrom) |
|
433 or (sline > lineFrom and sline < lineTo) |
|
434 or (sline == lineTo and sindex <= indexTo) |
|
435 ): |
|
436 aw.showFindIndicator(sline, sindex, eline, eindex) |
|
437 |
|
438 self.__finding = False |
|
439 |
|
440 if not txt: |
|
441 ok = True # reset the color in case of an empty text |
|
442 |
|
443 self.__setSearchEditColors(ok) |
|
444 |
|
445 def __quickSearchMarkOccurrences(self, txt): |
|
446 """ |
|
447 Private method to mark all occurrences of the search text. |
|
448 |
|
449 @param txt text to search for (string) |
|
450 """ |
397 aw = self.__viewmanager.activeWindow() |
451 aw = self.__viewmanager.activeWindow() |
398 aw.hideFindIndicator() |
452 |
399 if Preferences.getEditor("QuickSearchMarkersEnabled"): |
453 if self.ui.selectionCheckBox.isChecked(): |
400 self.__quickSearchMarkOccurrences(txt) |
454 lineFrom, indexFrom, lineTo, indexTo = self.__selectionBoundary() |
401 |
455 else: |
402 lineFrom, indexFrom, lineTo, indexTo = aw.getSelection() |
456 lineFrom, indexFrom, lineTo, indexTo = 0, 0, -1, -1 |
403 posixMode = ( |
|
404 Preferences.getEditor("SearchRegexpMode") == 0 |
|
405 and self.ui.regexpCheckBox.isChecked() |
|
406 ) |
|
407 cxx11Mode = ( |
|
408 Preferences.getEditor("SearchRegexpMode") == 1 |
|
409 and self.ui.regexpCheckBox.isChecked() |
|
410 ) |
|
411 ok = aw.findFirst( |
|
412 txt, |
|
413 self.ui.regexpCheckBox.isChecked(), |
|
414 self.ui.caseCheckBox.isChecked(), |
|
415 self.ui.wordCheckBox.isChecked(), |
|
416 self.ui.wrapCheckBox.isChecked(), |
|
417 not self.__findBackwards, |
|
418 lineFrom, |
|
419 indexFrom, |
|
420 posix=posixMode, |
|
421 cxx11=cxx11Mode, |
|
422 ) |
|
423 if ok: |
|
424 sline, sindex, eline, eindex = aw.getSelection() |
|
425 aw.showFindIndicator(sline, sindex, eline, eindex) |
|
426 |
|
427 if not txt: |
|
428 ok = True # reset the color in case of an empty text |
|
429 |
|
430 self.__setSearchEditColors(ok) |
|
431 |
|
432 def __quickSearchMarkOccurrences(self, txt): |
|
433 """ |
|
434 Private method to mark all occurrences of the search text. |
|
435 |
|
436 @param txt text to search for (string) |
|
437 """ |
|
438 aw = self.__viewmanager.activeWindow() |
|
439 |
|
440 lineFrom = 0 |
|
441 indexFrom = 0 |
|
442 lineTo = -1 |
|
443 indexTo = -1 |
|
444 |
457 |
445 aw.clearSearchIndicators() |
458 aw.clearSearchIndicators() |
446 posixMode = ( |
459 posixMode = ( |
447 Preferences.getEditor("SearchRegexpMode") == 0 |
460 Preferences.getEditor("SearchRegexpMode") == 0 |
448 and self.ui.regexpCheckBox.isChecked() |
461 and self.ui.regexpCheckBox.isChecked() |
463 posix=posixMode, |
476 posix=posixMode, |
464 cxx11=cxx11Mode, |
477 cxx11=cxx11Mode, |
465 ) |
478 ) |
466 while ok: |
479 while ok: |
467 tgtPos, tgtLen = aw.getFoundTarget() |
480 tgtPos, tgtLen = aw.getFoundTarget() |
468 aw.setSearchIndicator(tgtPos, tgtLen) |
481 if tgtLen == 0: |
|
482 break |
|
483 if len(self.__selections) > 1: |
|
484 sline, sindex = aw.lineIndexFromPosition(tgtPos) |
|
485 eline, eindex = aw.lineIndexFromPosition(tgtPos + tgtLen) |
|
486 indicate = ( |
|
487 (sline == lineFrom and sindex >= indexFrom) |
|
488 or (sline > lineFrom and sline < lineTo) |
|
489 or (sline == lineTo and sindex <= indexTo) |
|
490 ) |
|
491 else: |
|
492 indicate = True |
|
493 if indicate: |
|
494 aw.setSearchIndicator(tgtPos, tgtLen) |
469 ok = aw.findNextTarget() |
495 ok = aw.findNextTarget() |
470 |
496 |
471 def __setSearchEditColors(self, ok): |
497 def __setSearchEditColors(self, ok): |
472 """ |
498 """ |
473 Private method to set the search edit colors. |
499 Private method to set the search edit colors. |
494 txt = self.ui.findtextCombo.currentText() |
520 txt = self.ui.findtextCombo.currentText() |
495 if not txt: |
521 if not txt: |
496 return |
522 return |
497 |
523 |
498 line, index = aw.getCursorPosition() |
524 line, index = aw.getCursorPosition() |
499 text = aw.text(line) |
525 word = aw.getWord(line, index) |
500 |
526 self.ui.findtextCombo.setEditText(word) |
501 rx = re.compile(r"[^\w_]") |
527 self.ui.findtextCombo.lineEdit().selectAll() |
502 match = rx.search(text, index) |
528 self.__quickSearch(word) |
503 if match: |
|
504 end = match.start() |
|
505 if end > index: |
|
506 ext = text[index:end] |
|
507 txt += ext |
|
508 self.ui.findtextCombo.setEditText(txt) |
|
509 self.ui.findtextCombo.lineEdit().selectAll() |
|
510 self.__quickSearch(txt) |
|
511 |
529 |
512 @pyqtSlot(bool) |
530 @pyqtSlot(bool) |
513 def __updateQuickSearchMarkers(self, on): |
531 def __updateQuickSearchMarkers(self, on): |
514 """ |
532 """ |
515 Private slot to handle the selection of the various check boxes. |
533 Private slot to handle the selection of the various check boxes. |
614 Private method to mark all occurrences of the search text. |
632 Private method to mark all occurrences of the search text. |
615 |
633 |
616 @param txt text to search for (string) |
634 @param txt text to search for (string) |
617 """ |
635 """ |
618 aw = self.__viewmanager.activeWindow() |
636 aw = self.__viewmanager.activeWindow() |
619 lineFrom = 0 |
|
620 indexFrom = 0 |
|
621 lineTo = -1 |
|
622 indexTo = -1 |
|
623 if self.ui.selectionCheckBox.isChecked(): |
637 if self.ui.selectionCheckBox.isChecked(): |
624 lineFrom, indexFrom, lineTo, indexTo = self.__selectionBoundary() |
638 lineFrom, indexFrom, lineTo, indexTo = self.__selectionBoundary() |
|
639 else: |
|
640 lineFrom, indexFrom, lineTo, indexTo = 0, 0, -1, -1 |
625 posixMode = ( |
641 posixMode = ( |
626 Preferences.getEditor("SearchRegexpMode") == 0 |
642 Preferences.getEditor("SearchRegexpMode") == 0 |
627 and self.ui.regexpCheckBox.isChecked() |
643 and self.ui.regexpCheckBox.isChecked() |
628 ) |
644 ) |
629 cxx11Mode = ( |
645 cxx11Mode = ( |