mirror of
https://github.com/aclist/dztui.git
synced 2026-08-26 17:57:06 +02:00
feat: alert button
This commit is contained in:
parent
a2231e3cb9
commit
d9ec01d9b0
@ -31,14 +31,15 @@ HEX_RED = "#FF0000"
|
||||
HEX_ORANGE = "#FFAC1C"
|
||||
|
||||
CLIPBOARD = "edit-copy-symbolic"
|
||||
HELP_BUBBLE = "help-about-symbolic"
|
||||
INPUT_KEYBOARD = "input-keyboard-symbolic"
|
||||
LIST_ADD = "list-add-symbolic"
|
||||
REFRESH_ICON = "view-refresh-symbolic"
|
||||
SEARCH_ICON = "system-search-symbolic"
|
||||
STEAM_ICON = "steam_tray_mono"
|
||||
VIEW_CONCEAL = "view-conceal-symbolic"
|
||||
SEARCH_ICON = "system-search-symbolic"
|
||||
VIEW_REVEAL = "view-reveal-symbolic"
|
||||
INPUT_KEYBOARD = "input-keyboard-symbolic"
|
||||
HELP_BUBBLE = "help-about-symbolic"
|
||||
REFRESH_ICON = "view-refresh-symbolic"
|
||||
WARNING = "dialog-warning-symbolic"
|
||||
WEB_BROWSER = "web-browser-symbolic"
|
||||
|
||||
SEPARATOR = "SEPARATOR"
|
||||
|
||||
@ -36,6 +36,7 @@ from dzgui.const.enum import (
|
||||
from dzgui.config.query import lookup
|
||||
from dzgui.config.userprefs import UserPrefs
|
||||
from dzgui.controllers.emitter import Emitter
|
||||
from dzgui.managers.log import LogManager
|
||||
from dzgui.managers.config import ConfigManager
|
||||
from dzgui.managers.connection import ConnectionManager
|
||||
from dzgui.managers.contextmenu import ContextMenuManager
|
||||
@ -638,3 +639,11 @@ class Controller(GObject.GObject):
|
||||
|
||||
def set_active_keyword(self, keyword: str) -> None:
|
||||
self.get_filter_man().set_active_keyword(keyword)
|
||||
|
||||
def set_alerts(self, count: tuple[int]) -> None:
|
||||
self.alerts = count
|
||||
|
||||
def get_alerts(self) -> tuple[int]:
|
||||
log_man = LogManager()
|
||||
alerts = log_man.get_alerts(self.prefs.paths.debug)
|
||||
return alerts
|
||||
|
||||
@ -613,3 +613,5 @@ steam_icon_missing = "Steam icon not found in IconTheme"
|
||||
missing_changelog = "Error: failed to read changelog"
|
||||
esc_to_return = "Press ESC to return"
|
||||
question_to_return = "Press ? to return"
|
||||
|
||||
alert_button_tooltip = "Click to open debug log"
|
||||
|
||||
@ -1,13 +1,15 @@
|
||||
from typing import Callable, Literal, Self, TYPE_CHECKING
|
||||
|
||||
from dzgui.util.clip import copy_clipboard
|
||||
from dzgui.util.strings import atomic_buttons, connect_panel
|
||||
from dzgui.util.format import pluralize
|
||||
from dzgui.util.strings import alert_button_tooltip, atomic_buttons, connect_panel
|
||||
from dzgui.const.constants import (
|
||||
CLIPBOARD,
|
||||
INPUT_KEYBOARD,
|
||||
LIST_ADD,
|
||||
REFRESH_ICON,
|
||||
STEAM_ICON,
|
||||
WARNING,
|
||||
WEB_BROWSER,
|
||||
)
|
||||
|
||||
@ -157,3 +159,26 @@ class AddButton(IconTextButton):
|
||||
def __init__(self) -> None:
|
||||
super().__init__(icon=LIST_ADD, label=connect_panel.add)
|
||||
self.set_tooltip_text(connect_panel.add_tooltip)
|
||||
|
||||
|
||||
class LoggerAlertsButton(IconTextButton):
|
||||
def __init__(self, warnings: int, errors: int) -> None:
|
||||
warnings_text = ""
|
||||
errors_text = ""
|
||||
separator = ""
|
||||
if warnings > 0:
|
||||
warnings_plural = pluralize("warnings", warnings)
|
||||
warnings_text = f"{warnings} {warnings_plural}"
|
||||
if errors > 0:
|
||||
errors_plural = pluralize("errors", errors)
|
||||
errors_text = f" {errors} {errors_plural}"
|
||||
if warnings + errors > 1:
|
||||
separator = ","
|
||||
concat = warnings_text + separator + errors_text
|
||||
super().__init__(
|
||||
icon=WARNING,
|
||||
label=f"Loaded with{concat}",
|
||||
)
|
||||
self.set_halign(Gtk.Align.END)
|
||||
self.set_hexpand(True)
|
||||
self.set_tooltip_text(alert_button_tooltip)
|
||||
|
||||
@ -2,6 +2,7 @@ from typing import Self, Union, TYPE_CHECKING
|
||||
|
||||
from dzgui.const.enum import NotebookPage, ServerTab
|
||||
from dzgui.util.strings import esc_to_return, question_to_return
|
||||
from dzgui.views.components.buttons import LoggerAlertsButton
|
||||
|
||||
import gi
|
||||
|
||||
@ -32,13 +33,22 @@ class Statusbar(Gtk.Grid):
|
||||
self.attach(self.statusbar, 0, 0, 3, 1)
|
||||
self.attach_next_to(self.spinner, self.statusbar, Gtk.PositionType.RIGHT, 3, 1)
|
||||
|
||||
warnings, errors = self.controller.get_alerts()
|
||||
|
||||
if warnings + errors > 0:
|
||||
alert_button = LoggerAlertsButton(warnings, errors)
|
||||
self.attach_next_to(
|
||||
alert_button, self.spinner, Gtk.PositionType.RIGHT, 3, 1
|
||||
)
|
||||
alert_button.connect("clicked", self._on_alerts_clicked)
|
||||
|
||||
# TODO: pack version event box in right panel into hbox with update button
|
||||
# TODO: spawns a modal or just jumps right to install page
|
||||
#from dzgui.views.components.buttons import IconTextButton
|
||||
#b = IconTextButton("dialog-information-symbolic", label="Updates available")
|
||||
#b.set_halign(Gtk.Align.END)
|
||||
#b.set_hexpand(True)
|
||||
#self.attach_next_to(b, self.spinner, Gtk.PositionType.RIGHT, 3, 1)
|
||||
# from dzgui.views.components.buttons import IconTextButton
|
||||
# b = IconTextButton("dialog-information-symbolic", label="Updates available")
|
||||
# b.set_halign(Gtk.Align.END)
|
||||
# b.set_hexpand(True)
|
||||
# self.attach_next_to(b, self.spinner, Gtk.PositionType.RIGHT, 3, 1)
|
||||
|
||||
self.players = ""
|
||||
|
||||
@ -52,6 +62,12 @@ class Statusbar(Gtk.Grid):
|
||||
self.emitter.connect("servers_loaded", self._on_servers_loaded)
|
||||
self.emitter.connect("mod_page_loaded", self._on_mod_page_loaded)
|
||||
|
||||
def _on_alerts_clicked(self, button: LoggerAlertsButton) -> None:
|
||||
button.hide()
|
||||
# FIXME: hitting ESC from here goes to help list instead of main menu
|
||||
# need some kind of flag
|
||||
self.controller.populate_log()
|
||||
|
||||
def _on_mod_page_loaded(self, emitter: "Emitter") -> None:
|
||||
msg = self.controller.format_mod_statusbar()
|
||||
self.set_by_context(NotebookPage.MODS, msg)
|
||||
@ -80,13 +96,6 @@ class Statusbar(Gtk.Grid):
|
||||
match enum:
|
||||
case NotebookPage.HELP:
|
||||
bar = self.controller.get_help_row()
|
||||
# TODO: drop
|
||||
# case NotebookPage.MODS:
|
||||
# return
|
||||
# case NotebookPage.SERVERS:
|
||||
# context = self.controller.get_active_context()
|
||||
# # self.emitter.emit("servers_loaded", context)
|
||||
# return
|
||||
case NotebookPage.KEYS:
|
||||
bar = question_to_return
|
||||
case _:
|
||||
|
||||
@ -22,7 +22,10 @@ class Log(CursorMixin, HelpMenuMixin, Gtk.Box): # type: ignore
|
||||
|
||||
self.check_bar = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
|
||||
# TODO: strings
|
||||
active = ("WARNING", "CRITICAL", "INFO")
|
||||
active = (
|
||||
"WARNING",
|
||||
"CRITICAL",
|
||||
)
|
||||
for check in ("WARNING", "CRITICAL", "INFO", "DEBUG"):
|
||||
c = Gtk.CheckButton(label=check)
|
||||
self.check_bar.pack_start(c, False, False, 0)
|
||||
|
||||
@ -33,15 +33,18 @@ class LogTreeView(ContextMixin, TreeView):
|
||||
|
||||
self.set_model(None)
|
||||
self.filter: Gtk.TreeModelFilter
|
||||
# TODO: strings
|
||||
self.filters = ["INFO", "CRITICAL", "WARNING"]
|
||||
|
||||
# TODO: strings
|
||||
# NOTE: default filters that should be shown on startup
|
||||
self.filters = ["CRITICAL", "WARNING"]
|
||||
for i, column_title in enumerate(strings.log_cols):
|
||||
renderer = Gtk.CellRendererText()
|
||||
column = Gtk.TreeViewColumn(column_title, renderer, text=i)
|
||||
column.set_sizing(Gtk.TreeViewColumnSizing.FIXED)
|
||||
column.set_resizable(True)
|
||||
column.set_sort_column_id(i)
|
||||
if i == 1:
|
||||
column.set_fixed_width(100)
|
||||
self.append_column(column)
|
||||
|
||||
self.connect("button-press-event", self._on_log_buttonpress)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user