From 42e9cf6378cfb03a9baf6ddc71ccf58ab337a45c Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 7 Jan 2026 23:35:22 +0900 Subject: [PATCH] feat: add Statusbar class --- dzgui/views/components/statusbar.py | 64 +++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 dzgui/views/components/statusbar.py diff --git a/dzgui/views/components/statusbar.py b/dzgui/views/components/statusbar.py new file mode 100644 index 0000000..4e817ca --- /dev/null +++ b/dzgui/views/components/statusbar.py @@ -0,0 +1,64 @@ +from typing import TYPE_CHECKING + +from dzgui.const.enum import RowType, Preferences +from dzgui.util import strings + +import gi +gi.require_version("Gtk", "3.0") +from gi.repository import Gtk # noqa E402 + +if TYPE_CHECKING: + from dzgui.controllers.mc import Controller + +class Statusbar(Gtk.Statusbar): + def __init__(self, controller: "Controller") -> None: + super().__init__() + + self.controller = controller + self.controller.register_widget("statusbar", self) + + help_text = strings.statusbar_helptext + self.set_text(help_text) + + version = self.controller.get_prefs().version + self.status_right_label = Gtk.Label(label=version) + self.add(self.status_right_label) + + self.players = "" + + def get_text(self) -> str: + area = self.get_message_area() + label = area.get_children()[0] + return label.get_text() + + def set_text(self, string: str) -> None: + if string is None: + return + meta = self.get_context_id("Statusbar") + self.push(meta, string) + + def refresh(self, row: "RowType") -> None: + if row is None: + formatted = "" + else: + formatted = self.format_metadata(row) + self.set_text(formatted) + + def append_distance(self, dist: str) -> None: + # TODO: process strings in controller + if dist == strings.unknown: + dist = f"| Distance: {dist}" + else: + dist = f"| Distance: {dist}" + self.set_text(self.players + dist) + + def format_metadata(self, row: "RowType") -> str: + prefix = row.dict["tooltip"] + + if row == RowType.QUICK_CONNECT or row == RowType.CHNG_FAV: + label = self.controller.query_config(Preferences.FAV_LBL) + if len(label) < 1: + label = "unset" + return f"{prefix} ({label})" + else: + return prefix