diff --git a/dzgui/config/query.py b/dzgui/config/query.py index 1af14a5..e9d8a1f 100644 --- a/dzgui/config/query.py +++ b/dzgui/config/query.py @@ -5,6 +5,7 @@ from dzgui.util._json import read_json from dzgui.const.enum import Preferences + class ConfigFileError(Exception): pass @@ -39,4 +40,4 @@ def get_favorites(path: Path) -> list[str]: def enum_to_key(enum: Preferences) -> str: - return str(enum.dict["key"]) + return str(enum.key) diff --git a/dzgui/const/enum.py b/dzgui/const/enum.py index b1728f9..5b39564 100644 --- a/dzgui/const/enum.py +++ b/dzgui/const/enum.py @@ -1,7 +1,9 @@ +from __future__ import annotations +from dataclasses import dataclass from enum import Enum -from typing import Any, Self from dzgui.util import strings +from dzgui.strings import rows class Port(Enum): @@ -46,125 +48,61 @@ class FilterMode(Enum): TOGGLE_ON = 3 -class EnumWithAttrs(Enum): - def __new__(cls, *args: Any, **kwargs: Any) -> Self: - value = len(cls.__members__) + 1 - obj = object.__new__(cls) - obj._value_ = value - return obj - - def __init__(self, d: dict): - self.dict = d +@dataclass(slots=True, frozen=True) +class ModButtonMeta: + label: str + tooltip: str -class Preferences(EnumWithAttrs): - STEAM = { - "key": "steam_api", - } - CLIENT = { - "key": "client", - } - WINDOW = { - "key": "fullscreen", - } - DIST = { - "key": "use_miles", - } - NAME = { - "key": "name", - } - DEFAULT = { - "key": "default_steam_path", - } - FAV_LBL = { - "key": "fav_label", - } - FAV_SRV = { - "key": "fav_server", - } - IP_LIST = { - "key": "ip_list", - } - START_TAB = { - "key": "start_tab", - } +@dataclass(slots=True, frozen=True) +class ButtonTypeMeta: + label: str + tooltip: str + opens: NotebookPage -class NotebookPage(EnumWithAttrs): - OFFLINE = {"crumbs": strings.crumbs.offline, "statusbar": True} - CHANGELOG = {"crumbs": strings.crumbs.changelog, "statusbar": True} - DEVELOPERS = {"crumbs": strings.crumbs.developers, "statusbar": False} - HELP = {"crumbs": strings.crumbs._help, "statusbar": True} - KEYS = {"crumbs": strings.crumbs.keys, "statusbar": True} - LOG = {"crumbs": strings.crumbs.log, "statusbar": True} - MODS = {"crumbs": strings.crumbs.mods, "statusbar": True} - OPTIONS = {"crumbs": strings.crumbs.options, "statusbar": False} - SERVERS = {"crumbs": strings.crumbs.servers, "statusbar": True} - THANKS = {"crumbs": strings.crumbs.thanks, "statusbar": True} - CONNECTION = {"crumbs": "Connect", "statusbar": True} +@dataclass(slots=True, frozen=True) +class ConfigKey: + key: str -class RowType(EnumWithAttrs): - # TODO: strings - CHANGELOG = { - "label": "View changelog", - "tooltip": "Opens the DZGUI changelog", - } - SHOW_LOG = { - "label": "Show debug log", - "tooltip": "Read the DZGUI log generated since startup", - } - SEPARATOR = { - "label": "SEPARATOR", - "tooltip": "", - } - DUMP_LOG = { - "label": "Output system info to log file", - "tooltip": "Dump diagnostic data for troubleshooting", - } - DOCS = { - "label": "Documentation/help files (GitHub) ⧉", - "tooltip": "Open the DZGUI documentation in a browser", - } - DOCS_FALLBACK = { - "label": "Documentation/help files (Codeberg mirror) ⧉", - "tooltip": "Open the DZGUI documentation in a browser", - } - BUGS = { - "label": "Report a bug (GitHub) ⧉", - "tooltip": "Open the DZGUI issue tracker in a browser", - } - FORUM = { - "label": "DZGUI Subreddit ⧉", - "tooltip": "Open the DZGUI discussion forum in a browser", - } - SPONSOR = { - "label": "Sponsor (GitHub) ⧉", - "tooltip": "Sponsor development of the DZGUI project", - } - THANKS = { - "label": "Special thanks", - "tooltip": "A list of contributors, testers, and sponsors", - } +@dataclass(slots=True, frozen=True) +class NotebookMeta: + crumbs: str + has_statusbar: bool -# TODO: rename to ContextMenuItem -class ContextMenu(EnumWithAttrs): - ADD_NOTE = {"label": strings.add_note} - ADD_SERVER = {"label": strings.add} - CONNECT = {"label": strings.connect} - COPY_LOG_CLIPBOARD = {"label": strings.copy_log} - COPY_SERVER_IP = {"label": strings.copy_ip} - COPY_SERVER_NAME = {"label": strings.copy_name} - UNSUB_MOD = {"label": strings.unsub_mod} - VALIDATE_MOD = {"label": strings.validate_mod} - OPEN_WORKSHOP = {"label": strings.open_workshop} - REFRESH_PLAYERS = {"label": strings.refresh_players} - REMOVE_HISTORY = {"label": strings.remove_history} - REMOVE_SERVER = {"label": strings.remove} - SET_FAV = {"label": strings.add_fav} - SHOW_DETAILS = {"label": strings.show_details} - SHOW_MODS = {"label": strings.show_mods} +@dataclass(slots=True, frozen=True) +class RowMeta: + label: str + tooltip: str + + +@dataclass(slots=True, frozen=True) +class ContextMenuMeta: + label: str + + +class ContextMenuItem(Enum): + ADD_NOTE = ContextMenuMeta(strings.add_note) + ADD_SERVER = ContextMenuMeta(strings.add) + CONNECT = ContextMenuMeta(strings.connect) + COPY_LOG_CLIPBOARD = ContextMenuMeta(strings.copy_log) + COPY_SERVER_IP = ContextMenuMeta(strings.copy_ip) + COPY_SERVER_NAME = ContextMenuMeta(strings.copy_name) + UNSUB_MOD = ContextMenuMeta(strings.unsub_mod) + VALIDATE_MOD = ContextMenuMeta(strings.validate_mod) + OPEN_WORKSHOP = ContextMenuMeta(strings.open_workshop) + REFRESH_PLAYERS = ContextMenuMeta(strings.refresh_players) + REMOVE_HISTORY = ContextMenuMeta(strings.remove_history) + REMOVE_SERVER = ContextMenuMeta(strings.remove) + SET_FAV = ContextMenuMeta(strings.add_fav) + SHOW_DETAILS = ContextMenuMeta(strings.show_details) + SHOW_MODS = ContextMenuMeta(strings.show_mods) + + @property + def label(self) -> str: + return self.value.label class ContextMenuGroup(Enum): @@ -172,113 +110,193 @@ class ContextMenuGroup(Enum): Groupings of context menu items """ - SERVER_MOD = (ContextMenu.OPEN_WORKSHOP,) - MOD = (ContextMenu.OPEN_WORKSHOP, ContextMenu.UNSUB_MOD, ContextMenu.VALIDATE_MOD) + SERVER_MOD = (ContextMenuItem.OPEN_WORKSHOP,) + MOD = ( + ContextMenuItem.OPEN_WORKSHOP, + ContextMenuItem.UNSUB_MOD, + ContextMenuItem.VALIDATE_MOD, + ) MOD_OFFLINE = (None,) - LOG = (ContextMenu.COPY_LOG_CLIPBOARD,) + LOG = (ContextMenuItem.COPY_LOG_CLIPBOARD,) SERVER_BROWSER = ( - ContextMenu.CONNECT, - ContextMenu.ADD_SERVER, - ContextMenu.SET_FAV, - ContextMenu.COPY_SERVER_NAME, - ContextMenu.COPY_SERVER_IP, - ContextMenu.ADD_NOTE, - ContextMenu.SHOW_MODS, - ContextMenu.SHOW_DETAILS, - ContextMenu.REFRESH_PLAYERS, + ContextMenuItem.CONNECT, + ContextMenuItem.ADD_SERVER, + ContextMenuItem.SET_FAV, + ContextMenuItem.COPY_SERVER_NAME, + ContextMenuItem.COPY_SERVER_IP, + ContextMenuItem.ADD_NOTE, + ContextMenuItem.SHOW_MODS, + ContextMenuItem.SHOW_DETAILS, + ContextMenuItem.REFRESH_PLAYERS, ) SCAN_LAN = ( - ContextMenu.CONNECT, - ContextMenu.SET_FAV, - ContextMenu.COPY_SERVER_NAME, - ContextMenu.COPY_SERVER_IP, - ContextMenu.ADD_NOTE, - ContextMenu.SHOW_MODS, - ContextMenu.SHOW_DETAILS, - ContextMenu.REFRESH_PLAYERS, + ContextMenuItem.CONNECT, + ContextMenuItem.SET_FAV, + ContextMenuItem.COPY_SERVER_NAME, + ContextMenuItem.COPY_SERVER_IP, + ContextMenuItem.ADD_NOTE, + ContextMenuItem.SHOW_MODS, + ContextMenuItem.SHOW_DETAILS, + ContextMenuItem.REFRESH_PLAYERS, ) SAVED = ( - ContextMenu.CONNECT, - ContextMenu.SET_FAV, - ContextMenu.REMOVE_SERVER, - ContextMenu.COPY_SERVER_NAME, - ContextMenu.COPY_SERVER_IP, - ContextMenu.ADD_NOTE, - ContextMenu.SHOW_MODS, - ContextMenu.SHOW_DETAILS, - ContextMenu.REFRESH_PLAYERS, + ContextMenuItem.CONNECT, + ContextMenuItem.SET_FAV, + ContextMenuItem.REMOVE_SERVER, + ContextMenuItem.COPY_SERVER_NAME, + ContextMenuItem.COPY_SERVER_IP, + ContextMenuItem.ADD_NOTE, + ContextMenuItem.SHOW_MODS, + ContextMenuItem.SHOW_DETAILS, + ContextMenuItem.REFRESH_PLAYERS, ) RECENT = ( - ContextMenu.CONNECT, - ContextMenu.ADD_SERVER, - ContextMenu.SET_FAV, - ContextMenu.REMOVE_HISTORY, - ContextMenu.COPY_SERVER_NAME, - ContextMenu.COPY_SERVER_IP, - ContextMenu.ADD_NOTE, - ContextMenu.SHOW_MODS, - ContextMenu.SHOW_DETAILS, - ContextMenu.REFRESH_PLAYERS, + ContextMenuItem.CONNECT, + ContextMenuItem.ADD_SERVER, + ContextMenuItem.SET_FAV, + ContextMenuItem.REMOVE_HISTORY, + ContextMenuItem.COPY_SERVER_NAME, + ContextMenuItem.COPY_SERVER_IP, + ContextMenuItem.ADD_NOTE, + ContextMenuItem.SHOW_MODS, + ContextMenuItem.SHOW_DETAILS, + ContextMenuItem.REFRESH_PLAYERS, ) -class ModButton(EnumWithAttrs): - SELECT_ALL = { - "label": strings.mod_panel.select_all, - "tooltip": strings.mod_panel.select_all_tooltip, - } - UNSELECT_ALL = { - "label": strings.mod_panel.unselect_all, - "tooltip": strings.mod_panel.unselect_all_tooltip, - } - HIGHLIGHT_STALE = { - "label": strings.mod_panel.highlight_stale, - "tooltip": strings.mod_panel.highlight_stale_tooltip, - } - UNHIGHLIGHT_STALE = { - "label": strings.mod_panel.unhighlight_stale, - "tooltip": strings.mod_panel.unhighlight_stale_tooltip, - } - UNSUB_SELECTED = { - "label": strings.mod_panel.unsub_selected, - "tooltip": strings.mod_panel.unsub_selected_tooltip, - } - SELECT_STALE = { - "label": strings.mod_panel.select_stale, - "tooltip": strings.mod_panel.select_stale_tooltip, - } - VALIDATE = { - "label": strings.mod_panel.validate, - "tooltip": strings.mod_panel.validate_tooltip, - } +class Preferences(Enum): + STEAM = ConfigKey("steam_api") + CLIENT = ConfigKey("client") + WINDOW = ConfigKey("fullscreen") + DIST = ConfigKey("use_miles") + NAME = ConfigKey("name") + DEFAULT = ConfigKey("default_steam_path") + FAV_LBL = ConfigKey("fav_label") + FAV_SRV = ConfigKey("fav_server") + IP_LIST = ConfigKey("ip_list") + START_TAB = ConfigKey("start_tab") + + @property + def key(self) -> str: + return self.value.key -class ButtonType(EnumWithAttrs): - SERVERS = { - "label": strings.buttons.servers_label, - "tooltip": strings.buttons.servers_tooltip, - "opens": NotebookPage.SERVERS, - } - MODS = { - "label": strings.buttons.mods_label, - "tooltip": strings.buttons.mods_tooltip, - "opens": NotebookPage.MODS, - } - OPTIONS = { - "label": strings.buttons.options_label, - "tooltip": strings.buttons.options_tooltip, - "opens": NotebookPage.OPTIONS, - } - HELP = { - "label": strings.buttons.help_label, - "tooltip": strings.buttons.help_tooltip, - "opens": NotebookPage.HELP, - } - EXIT = { - "label": strings.buttons.exit_label, - "tooltip": strings.buttons.exit_tooltip, - "opens": None, - } +class NotebookPage(Enum): + OFFLINE = NotebookMeta(strings.crumbs.offline, True) + CHANGELOG = NotebookMeta(strings.crumbs.changelog, True) + DEVELOPERS = NotebookMeta(strings.crumbs.developers, False) + HELP = NotebookMeta(strings.crumbs._help, True) + KEYS = NotebookMeta(strings.crumbs.keys, True) + LOG = NotebookMeta(strings.crumbs.log, True) + MODS = NotebookMeta(strings.crumbs.mods, True) + OPTIONS = NotebookMeta(strings.crumbs.options, False) + SERVERS = NotebookMeta(strings.crumbs.servers, True) + THANKS = NotebookMeta(strings.crumbs.thanks, True) + CONNECTION = NotebookMeta(strings.crumbs.connect, True) + + @property + def crumbs(self) -> str: + return self.value.crumbs + + @property + def has_statusbar(self) -> bool: + return self.value.has_statusbar + + +class RowType(Enum): + CHANGELOG = RowMeta(rows.changelog_label, rows.changelog_status) + SHOW_LOG = RowMeta(rows.log_label, rows.log_status) + SEPARATOR = RowMeta(rows.separator_label, rows.separator_status) + DUMP_LOG = RowMeta(rows.system_log_label, rows.system_log_status) + DOCS = RowMeta(rows.docs_label, rows.docs_status) + DOCS_FALLBACK = RowMeta(rows.docs_fallback_label, rows.docs_fallback_status) + BUGS = RowMeta(rows.bugs_label, rows.bugs_status) + FORUM = RowMeta(rows.forum_label, rows.forum_status) + SPONSOR = RowMeta(rows.sponsor_label, rows.sponsor_status) + THANKS = RowMeta(rows.thanks_label, rows.thanks_status) + + @property + def label(self) -> str: + return self.value.label + + @property + def tooltip(self) -> str: + return self.value.tooltip + + +class ModButton(Enum): + SELECT_ALL = ModButtonMeta( + strings.mod_panel.select_all, strings.mod_panel.select_all_tooltip + ) + UNSELECT_ALL = ModButtonMeta( + strings.mod_panel.unselect_all, strings.mod_panel.unselect_all_tooltip + ) + HIGHLIGHT_STALE = ModButtonMeta( + strings.mod_panel.highlight_stale, strings.mod_panel.highlight_stale_tooltip + ) + UNHIGHLIGHT_STALE = ModButtonMeta( + strings.mod_panel.unhighlight_stale, strings.mod_panel.unhighlight_stale_tooltip + ) + UNSUB_SELECTED = ModButtonMeta( + strings.mod_panel.unsub_selected, + strings.mod_panel.unsub_selected_tooltip, + ) + SELECT_STALE = ModButtonMeta( + strings.mod_panel.select_stale, + strings.mod_panel.select_stale_tooltip, + ) + VALIDATE = ModButtonMeta( + strings.mod_panel.validate, + strings.mod_panel.validate_tooltip, + ) + + @property + def label(self) -> str: + return self.value.label + + @property + def tooltip(self) -> str: + return self.value.tooltip + + +class ButtonType(Enum): + SERVERS = ButtonTypeMeta( + strings.buttons.servers_label, + strings.buttons.servers_tooltip, + NotebookPage.SERVERS, + ) + MODS = ButtonTypeMeta( + strings.buttons.mods_label, + strings.buttons.mods_tooltip, + NotebookPage.MODS, + ) + OPTIONS = ButtonTypeMeta( + strings.buttons.options_label, + strings.buttons.options_tooltip, + NotebookPage.OPTIONS, + ) + HELP = ButtonTypeMeta( + strings.buttons.help_label, + strings.buttons.help_tooltip, + NotebookPage.HELP, + ) + EXIT = ButtonTypeMeta( + strings.buttons.exit_label, + strings.buttons.exit_tooltip, + None, + ) + + @property + def label(self) -> str: + return self.value.label + + @property + def tooltip(self) -> str: + return self.value.tooltip + + @property + def opens(self) -> str: + return self.value.opens HELP_MENU_ROWS = ( diff --git a/dzgui/controllers/mc.py b/dzgui/controllers/mc.py index 1a05955..192b327 100644 --- a/dzgui/controllers/mc.py +++ b/dzgui/controllers/mc.py @@ -8,7 +8,7 @@ import dzgui.util._json as JSON # noqa from dzgui.const.enum import ( ButtonType, - ContextMenu, + ContextMenuItem, FilterMode, NotebookPage, Preferences, @@ -262,7 +262,7 @@ class Controller(GObject.GObject): logger.critical(e) return - def menu_action(self, action: ContextMenu, tree: "ServerTreeView") -> None: + def menu_action(self, action: ContextMenuItem, tree: "ServerTreeView") -> None: context_man = ContextMenuManager(tree, self) context_man.process(action) @@ -274,7 +274,7 @@ class Controller(GObject.GObject): except Exception as e: dialog = ExceptionDialog(self, str(e)) dialog.show_all() - dialog.run() + dialog.run() # type: ignore[no-untyped-call] def select_colorized(self) -> None: mod_man = self.mediator.modtreeview.get_mod_man() @@ -308,7 +308,7 @@ class Controller(GObject.GObject): except Exception as e: dialog = ExceptionDialog(self, str(e)) dialog.show_all() - dialog.run() + dialog.run() # type: ignore[no-untyped-call] def update_steam_api_key(self, text: str) -> None: self.config_man.update_steam_api_key(text) @@ -365,12 +365,11 @@ class Controller(GObject.GObject): filter_man = self.get_filter_man() return filter_man.get_map_store() - def get_enabled_filters(self) -> dict: + def get_enabled_filters(self) -> dict[str, bool]: filter_man = self.get_filter_man() return filter_man.get_filters() # FIXME: wipe maps store when changing tabs if model is none - def has_server_model(self) -> bool: treeview = self.get_active_treeview() proxy_man = treeview.get_proxy_man() diff --git a/dzgui/managers/config.py b/dzgui/managers/config.py index 7490b15..8b715ec 100644 --- a/dzgui/managers/config.py +++ b/dzgui/managers/config.py @@ -124,7 +124,7 @@ class ConfigManager: return False def enum_to_key(self, enum: Preferences) -> str: - return str(enum.dict["key"]) + return str(enum.key) def toggle_config(self, key: Preferences) -> None: try: diff --git a/dzgui/managers/contextmenu.py b/dzgui/managers/contextmenu.py index 016ce7b..ded03ec 100644 --- a/dzgui/managers/contextmenu.py +++ b/dzgui/managers/contextmenu.py @@ -2,7 +2,7 @@ import logging from typing import TYPE_CHECKING from dzgui.const.constants import APP_NAME -from dzgui.const.enum import ContextMenu, Preferences +from dzgui.const.enum import ContextMenuItem, Preferences from dzgui.util.clip import copy_clipboard from dzgui.util.open_links import open_workshop_page @@ -34,7 +34,7 @@ class ContextMenuManager: self.controller = controller self.treeview = treeview - def process(self, action: ContextMenu) -> None: + def process(self, action: ContextMenuItem) -> None: if isinstance(self.treeview, ServerTreeView): record = self.treeview.get_record() if record is None: @@ -42,14 +42,14 @@ class ContextMenuManager: match action: # UNTHREADED - case ContextMenu.ADD_NOTE: + case ContextMenuItem.ADD_NOTE: dialog = NoteDialog(self.controller) - dialog.run() - case ContextMenu.COPY_SERVER_IP: + dialog.run() # type: ignore[no-untyped-call] + case ContextMenuItem.COPY_SERVER_IP: self.copy_server_ip() - case ContextMenu.COPY_SERVER_NAME: + case ContextMenuItem.COPY_SERVER_NAME: self.copy_server_name() - case ContextMenu.SET_FAV: + case ContextMenuItem.SET_FAV: name = self.treeview.get_value_at_index(0) # NOTE: fully qualified ip fqip = self.treeview.get_record_string() @@ -58,40 +58,40 @@ class ContextMenuManager: self.controller.set_fav(name, fqip, simple) # THREADED - case ContextMenu.ADD_SERVER: + case ContextMenuItem.ADD_SERVER: self.controller.add_by_record(record) - case ContextMenu.CONNECT: + case ContextMenuItem.CONNECT: self.controller.connect_by_record(record) - case ContextMenu.REFRESH_PLAYERS: + case ContextMenuItem.REFRESH_PLAYERS: self.controller.refresh_players(record) - case ContextMenu.REMOVE_HISTORY: + case ContextMenuItem.REMOVE_HISTORY: self.controller.remove_from_history(record) - case ContextMenu.REMOVE_SERVER: + case ContextMenuItem.REMOVE_SERVER: self.controller.remove_by_record(record) - case ContextMenu.SHOW_DETAILS: + case ContextMenuItem.SHOW_DETAILS: self.controller.get_details(record) - case ContextMenu.SHOW_MODS: + case ContextMenuItem.SHOW_MODS: self.controller.get_modlist(record) if isinstance(self.treeview, (ModTreeView, OfflineModTreeView)): match action: - case ContextMenu.OPEN_WORKSHOP: + case ContextMenuItem.OPEN_WORKSHOP: self.open_mod_page() - case ContextMenu.UNSUB_MOD: + case ContextMenuItem.UNSUB_MOD: self.controller.unsub_mods(self.treeview) - case ContextMenu.VALIDATE_MOD: + case ContextMenuItem.VALIDATE_MOD: self.controller.validate_mods(self.treeview) case _: pass if isinstance(self.treeview, LogTreeView): match action: - case ContextMenu.COPY_LOG_CLIPBOARD: + case ContextMenuItem.COPY_LOG_CLIPBOARD: self.copy_log() if isinstance(self.treeview, ServerModTreeView): match action: - case ContextMenu.OPEN_WORKSHOP: + case ContextMenuItem.OPEN_WORKSHOP: self.open_mod_page() def copy_server_ip(self) -> None: diff --git a/dzgui/model/model_factory.py b/dzgui/model/model_factory.py index 7dfffbf..cee089f 100644 --- a/dzgui/model/model_factory.py +++ b/dzgui/model/model_factory.py @@ -147,7 +147,7 @@ class ModelFactory: def make_help_store(self) -> FastInsertListStore: store = self.new_model_from_class(MenuCols) - rows = [[row.dict["label"], row] for row in HELP_MENU_ROWS] + rows = [[row.label, row] for row in HELP_MENU_ROWS] store.extend(rows) return store diff --git a/dzgui/util/strings.py b/dzgui/util/strings.py index 931ca88..ac27a7a 100644 --- a/dzgui/util/strings.py +++ b/dzgui/util/strings.py @@ -252,6 +252,7 @@ class Crumbs: developers: str default: str offline: str + connect: str @dataclass(slots=True, frozen=True) @@ -439,6 +440,7 @@ crumbs = Crumbs( developers="Options > Developers", default="Servers > ", offline="Mods > Play offline", + connect="Connect", ) no_mods = "No local mods found." diff --git a/dzgui/views/components/buttonbox.py b/dzgui/views/components/buttonbox.py index 496f237..2b440cf 100644 --- a/dzgui/views/components/buttonbox.py +++ b/dzgui/views/components/buttonbox.py @@ -51,9 +51,9 @@ class ButtonBox(Gtk.Box): for side_button in ButtonType: button = ContextualButton( - label=side_button.dict["label"], - opens=side_button.dict["opens"], - tooltip=side_button.dict["tooltip"], + label=side_button.label, + opens=side_button.opens, + tooltip=side_button.tooltip, context=side_button, ) diff --git a/dzgui/views/components/crumbs.py b/dzgui/views/components/crumbs.py index cd57426..7366d5e 100644 --- a/dzgui/views/components/crumbs.py +++ b/dzgui/views/components/crumbs.py @@ -43,7 +43,7 @@ class Breadcrumbs(Gtk.Label): label = page.get_current_tab_text() self.set_server_crumbs(label) else: - crumbs = enum.dict["crumbs"] + crumbs = enum.crumbs self.set_crumbs(crumbs) def set_server_crumbs(self, suffix: str) -> None: diff --git a/dzgui/views/components/mod_panel.py b/dzgui/views/components/mod_panel.py index 7c913c4..c7693d9 100644 --- a/dzgui/views/components/mod_panel.py +++ b/dzgui/views/components/mod_panel.py @@ -20,8 +20,8 @@ class EnumeratedModButton(Gtk.Button): super().__init__(margin_start=10, margin_end=10, focus_on_click=False) self.enum = enum - self.set_label(enum.dict["label"]) - self.set_tooltip_text(enum.dict["tooltip"]) + self.set_label(enum.label) + self.set_tooltip_text(enum.tooltip) class ModPanelButton(EnumeratedModButton): diff --git a/dzgui/views/components/statusbar.py b/dzgui/views/components/statusbar.py index 7eb75a3..b6cb1fc 100644 --- a/dzgui/views/components/statusbar.py +++ b/dzgui/views/components/statusbar.py @@ -60,7 +60,7 @@ class Statusbar(Gtk.Grid): return enum = notebook.get_page_by_enum() - show_statusbar = enum.dict["statusbar"] + show_statusbar = enum.has_statusbar if show_statusbar is False: self.set_by_context(enum, "") @@ -152,5 +152,5 @@ class Statusbar(Gtk.Grid): row = tree.get_value_at_index(1) if self.controller.loaded is False: return - tooltip = row.dict["tooltip"] + tooltip = row.tooltip self.set_by_context(NotebookPage.HELP, tooltip) diff --git a/dzgui/views/mixins/context_mixin.py b/dzgui/views/mixins/context_mixin.py index 5befa2c..2742f89 100644 --- a/dzgui/views/mixins/context_mixin.py +++ b/dzgui/views/mixins/context_mixin.py @@ -1,7 +1,7 @@ import logging from dzgui.const.constants import APP_NAME -from dzgui.const.enum import ContextMenu +from dzgui.const.enum import ContextMenuItem from dzgui.util.keys import is_ctrl_mask, is_navkey from dzgui.util.strings import edit_note from dzgui.views.trees.tree_base import TreeView @@ -15,9 +15,7 @@ logger = logging.getLogger(APP_NAME) class ContextMixin(TreeView): - def present_menu( - self, widget: Gtk.Widget, event: Gdk.Event - ) -> bool: + def present_menu(self, widget: Gtk.Widget, event: Gdk.Event) -> bool: if self.menu is None: return False @@ -60,17 +58,17 @@ class ContextMixin(TreeView): self.context_menu.select_first(False) return True - def _process_dynamic_row(self, row: ContextMenu) -> Gtk.MenuItem: - if row == ContextMenu.ADD_SERVER and self.is_in_favs(): # type: ignore - row = ContextMenu.REMOVE_SERVER + def _process_dynamic_row(self, row: ContextMenuItem) -> Gtk.MenuItem: + if row == ContextMenuItem.ADD_SERVER and self.is_in_favs(): # type: ignore + row = ContextMenuItem.REMOVE_SERVER - item = Gtk.MenuItem(label=row.dict["label"]) + item = Gtk.MenuItem(label=row.label) item.connect("activate", self._on_menu_click, row) - if row == ContextMenu.SHOW_MODS: + if row == ContextMenuItem.SHOW_MODS: item.set_sensitive(self.is_modded()) # type: ignore - if row == ContextMenu.ADD_NOTE: + if row == ContextMenuItem.ADD_NOTE: if self.controller.has_note(): item.set_label(edit_note) @@ -94,7 +92,7 @@ class ContextMixin(TreeView): except AttributeError: return False - def _on_menu_click(self, widget: Gtk.MenuItem, enum: ContextMenu) -> None: + def _on_menu_click(self, widget: Gtk.MenuItem, enum: ContextMenuItem) -> None: self.controller.menu_action(enum, self) # type: ignore def _on_key(self, menu: Gtk.Menu, event: Gdk.EventKey) -> bool | None: diff --git a/dzgui/views/trees/tree_menu.py b/dzgui/views/trees/tree_menu.py index 04a17f2..a0964bc 100644 --- a/dzgui/views/trees/tree_menu.py +++ b/dzgui/views/trees/tree_menu.py @@ -77,4 +77,4 @@ class MenuTreeView(TreeView): raise ValueError("Trying to call a method on non-existent model") _iter = self.get_focused_row_iter() rowtype = model.get_value(_iter, 1) - return str(rowtype.dict["tooltip"]) + return str(rowtype.tooltip) diff --git a/dzgui/views/trees/tree_servers.py b/dzgui/views/trees/tree_servers.py index 3143c6d..9dd19ff 100644 --- a/dzgui/views/trees/tree_servers.py +++ b/dzgui/views/trees/tree_servers.py @@ -7,7 +7,7 @@ from warnings import deprecated from dzgui.api.servers import ping, Record from dzgui.const.constants import APP_NAME -from dzgui.const.enum import ContextMenu, ContextMenuGroup, ServerTab +from dzgui.const.enum import ContextMenuItem, ContextMenuGroup, ServerTab from dzgui.managers.filter import FilterManager from dzgui.model.proxy_model import ProxyModelManager from dzgui.util import strings @@ -250,9 +250,9 @@ class ServerTreeView(ContextMixin, TreeView): # type: ignore if self.enum is ServerTab.LAN: self.emitter.emit("request_custom_port_focus") case Gdk.KEY_c: - self.controller.menu_action(ContextMenu.COPY_SERVER_IP, self) + self.controller.menu_action(ContextMenuItem.COPY_SERVER_IP, self) case Gdk.KEY_r: - self.controller.menu_action(ContextMenu.REFRESH_PLAYERS, self) + self.controller.menu_action(ContextMenuItem.REFRESH_PLAYERS, self) else: match event.keyval: case Gdk.KEY_l | Gdk.KEY_Right: