From 07a6ec69fa396523045bd657fc83d98a3ba2079a Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Thu, 26 Jan 2023 19:31:33 +0100 Subject: [PATCH] make it possible to disable highlighters --- src/ui/bigtext/highlight_regex.py | 9 ++++++- src/ui/bigtext/highlighting.py | 5 +++- src/ui/bigtext/logFileModel.py | 7 ++++- src/ui/bigtext/newhighlightingdialog.py | 36 ++++++++++++++++++++----- 4 files changed, 47 insertions(+), 10 deletions(-) diff --git a/src/ui/bigtext/highlight_regex.py b/src/ui/bigtext/highlight_regex.py index 7f81af8..b2322e6 100644 --- a/src/ui/bigtext/highlight_regex.py +++ b/src/ui/bigtext/highlight_regex.py @@ -12,7 +12,8 @@ import re class HighlightRegex(Highlight): def __init__(self, query: str, ignore_case: bool, is_regex: bool, hit_background_color: str = "None", - line_background_color: str = "None"): + line_background_color: str = "None", active: bool = True): + self.active = active self.query = query self.ignore_case = ignore_case self.is_regex = is_regex @@ -29,6 +30,12 @@ class HighlightRegex(Highlight): else: return re.compile(re.escape(self.query), flags=flags) + def is_active(self) -> bool: + return self.active + + def set_active(self, active: bool): + self.active = active + def set_query(self, query: str) -> None: self.query = query self.regex = self._get_regex() diff --git a/src/ui/bigtext/highlighting.py b/src/ui/bigtext/highlighting.py index 92ec1cb..cb1940e 100644 --- a/src/ui/bigtext/highlighting.py +++ b/src/ui/bigtext/highlighting.py @@ -17,6 +17,7 @@ class Highlighting: if not section.startswith("highlighting."): continue + active = session.getboolean(section, "active", fallback=True) query = session.get(section, "query", fallback="") if len(query) == 0: continue @@ -31,7 +32,8 @@ class Highlighting: ignore_case=ignore_case, is_regex=is_regex, hit_background_color=hit_background_color, - line_background_color=line_background_color + line_background_color=line_background_color, + active=active ) result.append(highlight) except: @@ -49,6 +51,7 @@ class Highlighting: section = "highlighting.%d" % section_counter section_counter = section_counter + 1 settings.session.add_section(section) + settings.session.set(section, "active", str(highlighter.active)) settings.session.set(section, "query", highlighter.query) settings.session.set(section, "ignore-case", str(highlighter.ignore_case)) settings.session.set(section, "is-regex", str(highlighter.is_regex)) diff --git a/src/ui/bigtext/logFileModel.py b/src/ui/bigtext/logFileModel.py index 21e7bfd..1915a62 100644 --- a/src/ui/bigtext/logFileModel.py +++ b/src/ui/bigtext/logFileModel.py @@ -26,7 +26,12 @@ class LogFileModel: self._file = os.path.realpath(file) def highlighters(self): - return Highlighting.read_config(self.settings) + all_highlighters = Highlighting.read_config(self.settings) + active_highlighters = [] + for h in all_highlighters: + if h.is_active(): + active_highlighters.append(h) + return active_highlighters def get_file(self): return self._file diff --git a/src/ui/bigtext/newhighlightingdialog.py b/src/ui/bigtext/newhighlightingdialog.py index e026d84..dc4552f 100644 --- a/src/ui/bigtext/newhighlightingdialog.py +++ b/src/ui/bigtext/newhighlightingdialog.py @@ -133,35 +133,57 @@ class HighlightListItemWidget(QWidget): super(HighlightListItemWidget, self).__init__() self.highlight_regex = highlight_regex self.layout = QGridLayout(self) + self.layout.setColumnStretch(4, 1) row = 0 + self.active = QCheckBox("") + self.active.setChecked(highlight_regex.is_active()) + self.active.stateChanged.connect(self._change_active_state) + self.layout.addWidget(self.active, row, 0, 3, 1, alignment=QtCore.Qt.AlignmentFlag.AlignVCenter) + query = QLineEdit(self) query.setText(highlight_regex.query) query.textChanged[str].connect(lambda: highlight_regex.set_query(query.text())) - self.layout.addWidget(query, row, 0, 1, 3) + query.setEnabled(highlight_regex.is_active()) + self.layout.addWidget(query, row, 1, 1, 4) row = row + 1 - self.layout.addWidget(QLabel(_("Hit Background:")), row, 0) + hit_background_label = QLabel(_("Hit Background:")) + hit_background_label.setEnabled(highlight_regex.is_active()) + self.layout.addWidget(hit_background_label, row, 1) hit_background_color = ColorButton(highlight_regex.hit_background_color) hit_background_color.setToolTip(_("Hit Background")) + hit_background_color.setEnabled(highlight_regex.is_active()) hit_background_color.color_drop_down.currentIndexChanged.connect( lambda: highlight_regex.set_hit_background_color(hit_background_color.color)) - self.layout.addWidget(hit_background_color, row, 1) + self.layout.addWidget(hit_background_color, row, 2) ignore_case = QCheckBox(_("Ignore Case")) ignore_case.setChecked(highlight_regex.ignore_case) ignore_case.stateChanged.connect(lambda: highlight_regex.set_is_ignore_case(ignore_case.isChecked())) - self.layout.addWidget(ignore_case, row, 2) + ignore_case.setEnabled(highlight_regex.is_active()) + self.layout.addWidget(ignore_case, row, 3) row = row + 1 - self.layout.addWidget(QLabel(_("Line Background:")), row, 0) + line_background_label = QLabel(_("Line Background:")) + line_background_label.setEnabled(highlight_regex.is_active()) + self.layout.addWidget(line_background_label, row, 1) line_background_color = ColorButton(highlight_regex.line_background_color) line_background_color.setToolTip(_("Line Background")) line_background_color.color_drop_down.currentIndexChanged.connect( lambda: highlight_regex.set_line_background_color(line_background_color.color)) - self.layout.addWidget(line_background_color, row, 1) + line_background_color.setEnabled(highlight_regex.is_active()) + self.layout.addWidget(line_background_color, row, 2) is_regex = QCheckBox(_("Regular Expression")) is_regex.setChecked(highlight_regex.is_regex) is_regex.stateChanged.connect(lambda: highlight_regex.set_is_regex(is_regex.isChecked())) - self.layout.addWidget(is_regex, row, 2) + is_regex.setEnabled(highlight_regex.is_active()) + self.layout.addWidget(is_regex, row, 3) + + def _change_active_state(self): + active = self.active.isChecked() + self.highlight_regex.set_active(active) + for child in self.children(): + if child is not self.active: + child.setEnabled(active)