mirror of
https://github.com/aclist/dztui.git
synced 2026-08-27 02:07:18 +02:00
feat: toggle log levels
This commit is contained in:
parent
d45d0a8da0
commit
a2231e3cb9
@ -1,12 +1,14 @@
|
||||
import inspect
|
||||
import logging
|
||||
import threading
|
||||
from typing import Any
|
||||
from typing import Any, TYPE_CHECKING
|
||||
|
||||
from functools import wraps
|
||||
from typing import Callable
|
||||
from dzgui.views.dialogs.generic import WaitDialog
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from dzgui.controllers.mc import Controller
|
||||
|
||||
import gi
|
||||
|
||||
@ -29,7 +31,9 @@ def call_on_thread(dialog_str: str) -> Callable:
|
||||
"Attribute 'thread_man' must be of type 'ThreadingManager'"
|
||||
)
|
||||
self.thread_man.call_on_thread(dialog_str, stored)
|
||||
|
||||
return wrapper
|
||||
|
||||
return decorator
|
||||
|
||||
|
||||
|
||||
@ -13,29 +13,34 @@ if TYPE_CHECKING:
|
||||
from dzgui.controllers.mc import Controller
|
||||
|
||||
|
||||
class Log(CursorMixin, HelpMenuMixin, Gtk.ScrolledWindow): # type: ignore
|
||||
class Log(CursorMixin, HelpMenuMixin, Gtk.Box): # type: ignore
|
||||
def __init__(self, controller: "Controller") -> None:
|
||||
super().__init__()
|
||||
super().__init__(orientation=Gtk.Orientation.VERTICAL)
|
||||
self.scrolled = Gtk.ScrolledWindow()
|
||||
self.treeview = LogTreeView(controller)
|
||||
self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||
self.box.add(self.treeview)
|
||||
|
||||
#self.add(self.treeview)
|
||||
# TODO proxymodel into this
|
||||
self.scrolled.add(self.treeview)
|
||||
|
||||
self.check_bar = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
|
||||
for check in ("Warning", "Critical", "Debug", "Info"):
|
||||
# TODO: strings
|
||||
active = ("WARNING", "CRITICAL", "INFO")
|
||||
for check in ("WARNING", "CRITICAL", "INFO", "DEBUG"):
|
||||
c = Gtk.CheckButton(label=check)
|
||||
self.check_bar.pack_start(c, False, False, 0)
|
||||
# c.set_active(True)
|
||||
self.box.add(self.check_bar)
|
||||
self.add(self.box)
|
||||
if check in active:
|
||||
c.set_active(True)
|
||||
c.connect("clicked", self._on_checkbox_clicked)
|
||||
self.add(self.scrolled)
|
||||
self.add(self.check_bar)
|
||||
|
||||
self.controller = controller
|
||||
self.controller.register_widget("logtreeview", self.treeview)
|
||||
|
||||
self.connect("key-press-event", self._on_esc_keypress)
|
||||
|
||||
def _on_checkbox_clicked(self, checkbox: Gtk.CheckButton) -> None:
|
||||
label = checkbox.get_label()
|
||||
self.treeview.toggle_filter(label)
|
||||
|
||||
def get_treeview(self) -> LogTreeView:
|
||||
return self.treeview
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import logging
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
from typing import Any, TYPE_CHECKING
|
||||
|
||||
from dzgui.const.enum import ContextMenuGroup
|
||||
from dzgui.model.model_factory import ModelFactory
|
||||
@ -28,9 +28,13 @@ class LogTreeView(ContextMixin, TreeView):
|
||||
|
||||
self.set_headers_visible(True)
|
||||
self.set_fixed_height_mode(True)
|
||||
self.set_vexpand(True)
|
||||
self.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE)
|
||||
|
||||
self.set_model(None)
|
||||
self.filter: Gtk.TreeModelFilter
|
||||
# TODO: strings
|
||||
self.filters = ["INFO", "CRITICAL", "WARNING"]
|
||||
|
||||
for i, column_title in enumerate(strings.log_cols):
|
||||
renderer = Gtk.CellRendererText()
|
||||
@ -45,9 +49,26 @@ class LogTreeView(ContextMixin, TreeView):
|
||||
|
||||
def populate_log(self, filepath: str) -> None:
|
||||
model = ModelFactory().new_model_from_logfile(filepath)
|
||||
self.set_model(model)
|
||||
self.filter = model.filter_new()
|
||||
self.filter.set_visible_func(self._filter_rows)
|
||||
self.set_model(self.filter)
|
||||
self.filter.refilter()
|
||||
self.set_cursor(0)
|
||||
|
||||
def toggle_filter(self, _filter: str) -> None:
|
||||
if _filter in self.filters:
|
||||
self.filters.remove(_filter)
|
||||
else:
|
||||
self.filters.append(_filter)
|
||||
self.filter.refilter()
|
||||
|
||||
def _filter_rows(
|
||||
self, model: Gtk.ListStore, _iter: Gtk.TreeIter, data: Any
|
||||
) -> None:
|
||||
if len(self.filters) < 1:
|
||||
return False
|
||||
return model[_iter][1] in self.filters
|
||||
|
||||
def _on_log_buttonpress(self, widget: Gtk.Widget, event: Gdk.EventButton) -> None:
|
||||
if event.button == Gdk.BUTTON_SECONDARY:
|
||||
self.present_menu(widget, event)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user