(self, direction: int = 1)
| 713 | return self.find.lower() in line.lower() |
| 714 | |
| 715 | def advance_search(self, direction: int = 1) -> None: |
| 716 | first = self.pointer_line is None |
| 717 | start_line = ( |
| 718 | ( |
| 719 | self.scroll_offset.y |
| 720 | if direction == 1 |
| 721 | else self.scroll_offset.y + self.scrollable_content_region.height - 1 |
| 722 | ) |
| 723 | if self.pointer_line is None |
| 724 | else self.pointer_line + direction |
| 725 | ) |
| 726 | if direction == 1: |
| 727 | line_range = range(start_line, self.line_count) |
| 728 | else: |
| 729 | line_range = range(start_line, -1, -1) |
| 730 | |
| 731 | scroll_y = self.scroll_offset.y |
| 732 | max_scroll_y = scroll_y + self.scrollable_content_region.height - 1 |
| 733 | if self.show_find: |
| 734 | check_match = self.check_match |
| 735 | index_to_span = self.index_to_span |
| 736 | with self._lock: |
| 737 | for line_no in line_range: |
| 738 | log_file, start, end = index_to_span(line_no) |
| 739 | line = log_file.get_raw(start, end).decode( |
| 740 | "utf-8", errors="replace" |
| 741 | ) |
| 742 | if check_match(line): |
| 743 | self.pointer_line = line_no |
| 744 | self.scroll_pointer_to_center() |
| 745 | return |
| 746 | self.app.bell() |
| 747 | else: |
| 748 | self.pointer_line = next( |
| 749 | iter(line_range), self.pointer_line or self.scroll_offset.y |
| 750 | ) |
| 751 | if first: |
| 752 | self.refresh() |
| 753 | else: |
| 754 | if self.pointer_line is not None and ( |
| 755 | self.pointer_line < scroll_y or self.pointer_line > max_scroll_y |
| 756 | ): |
| 757 | self.scroll_pointer_to_center() |
| 758 | |
| 759 | def scroll_pointer_to_center(self, animate: bool = True): |
| 760 | if self.pointer_line is None: |
no test coverage detected