highlight matches

This commit is contained in:
2021-10-28 10:22:15 +02:00
parent dbfe0bebf8
commit cdd382858a
4 changed files with 34 additions and 8 deletions

View File

@@ -250,7 +250,10 @@ class InnerBigText(QWidget):
for l in self.lines: for l in self.lines:
self.update_longest_line(len(l.line())) self.update_longest_line(len(l.line()))
highlighters = self.model.highlights + [self.selection_highlight] highlighters = self.model.highlights
if self.model.get_query_highlight():
highlighters = highlighters + [self.model.get_query_highlight()]
highlighters = highlighters + [self.selection_highlight] # selection highlight should be last
# draw hightlights first - some characters may overlap to the next line # draw hightlights first - some characters may overlap to the next line
# by drawing the background hightlights first we prevent that the hightlight # by drawing the background hightlights first we prevent that the hightlight

View File

@@ -119,11 +119,17 @@ class FilterWidget(QWidget):
# print("cancel started ", time.time()) # print("cancel started ", time.time())
self.filter_task.aborted = True self.filter_task.aborted = True
def reset_filter(self):
self.filter_model.truncate()
self.source_model.set_query_highlight()
self.filter_model.set_query_highlight()
self.source_model.settings.callback_update_ui()
def filter_changed(self): def filter_changed(self):
query = self.query_field.text() query = self.query_field.text()
ignore_case = self.ignore_case.isChecked() ignore_case = self.ignore_case.isChecked()
if len(query) == 0: if len(query) == 0:
self.filter_model.truncate() self.reset_filter()
return return
# cancel previous search # cancel previous search
@@ -140,6 +146,9 @@ class FilterWidget(QWidget):
self.filter_model.truncate() self.filter_model.truncate()
return return
self.source_model.set_query_highlight(regex)
self.filter_model.set_query_highlight(regex)
self.filter_task = FilterTask( self.filter_task = FilterTask(
self.source_model, self.source_model,
self.filter_model, self.filter_model,

View File

@@ -14,7 +14,8 @@ import re
class HighlightRegex(Highlight): class HighlightRegex(Highlight):
def __init__(self, regex: str, brush: QBrush = QBrush(), pen: QPen = Qt.PenStyle.NoPen, brush_full_line=QBrush()): def __init__(self, regex: re.Pattern, brush: QBrush = QBrush(), pen: QPen = Qt.PenStyle.NoPen,
brush_full_line=QBrush()):
self.regex = regex self.regex = regex
self.brush = brush self.brush = brush
self.pen = pen self.pen = pen
@@ -26,10 +27,8 @@ class HighlightRegex(Highlight):
match_iter = re.finditer(self.regex, line.line()) match_iter = re.finditer(self.regex, line.line())
for match in match_iter: for match in match_iter:
#print("%s" % match) #print("%s" % match)
group0 = match.group(0)
start = match.start(0) start = match.start(0)
end = match.end(0) end = match.end(0)
#print("regex: %s" % (group0))
result.append(HighlightedRange( result.append(HighlightedRange(
start, start,
end-start, end-start,

View File

@@ -1,9 +1,10 @@
import math import math
import re
import threading import threading
import time import time
from typing import List from typing import List, Optional
from PyQt6.QtGui import QBrush, QColor from PyQt6.QtGui import QBrush, QColor, QPen
from highlight_regex import HighlightRegex from highlight_regex import HighlightRegex
from line import Line from line import Line
@@ -12,6 +13,7 @@ from settings import Settings
class LogFileModel: class LogFileModel:
_query_highlight: Optional[HighlightRegex] = None
def __init__(self, file: str, settings: Settings): def __init__(self, file: str, settings: Settings):
self.settings = settings self.settings = settings
@@ -20,8 +22,9 @@ class LogFileModel:
self.highlights = [ self.highlights = [
HighlightRegex( HighlightRegex(
r"ERROR", re.compile("ERROR"),
brush=QBrush(QColor(220, 112, 122)), brush=QBrush(QColor(220, 112, 122)),
pen=QPen(QColor(0, 0, 0)),
brush_full_line=QBrush(QColor(255, 112, 122)) brush_full_line=QBrush(QColor(255, 112, 122))
) )
] ]
@@ -32,6 +35,18 @@ class LogFileModel:
def __str__(self): def __str__(self):
return self._file return self._file
def get_query_highlight(self):
return self._query_highlight
def set_query_highlight(self, regex: Optional[re.Pattern] = None):
if regex:
self._query_highlight = HighlightRegex(
regex,
brush=QBrush(QColor(255, 255, 0))
)
else:
self._query_highlight = None
def get_tab_name(self): def get_tab_name(self):
file_name = os.path.basename(self._file) file_name = os.path.basename(self._file)
if len(file_name) > 35: if len(file_name) > 35: