Compare commits

..
Author SHA1 Message Date
aclist 3dc37561be chore: update pyproject.toml 2026-11-10 03:02:35 +09:00
aclist 13786591b3 chore: restore exclusion for GLibUnix 2026-11-10 03:02:06 +09:00
aclist 9eb1342877 drop: unused imports script 2026-11-10 03:00:35 +09:00
aclist 3f29484895 chore: drop unused Gtk imports 2026-11-10 02:59:22 +09:00
62 changed files with 324 additions and 419 deletions

No files matched your search

-2
View File
@@ -37,8 +37,6 @@ Users wishing to review the licenses to these components can inspect the `LICENS
Steam and the Steam logo are trademarks and/or registered trademarks of Valve Corporation in the U.S. and/or other countries. Steam and the Steam logo are trademarks and/or registered trademarks of Valve Corporation in the U.S. and/or other countries.
DayZ is a trademark and brand of Bohemia Interactive a.s.
## Disclaimer ## Disclaimer
DZGUI is beta-quality software and is provided as-is. DZGUI is beta-quality software and is provided as-is.
+1 -2
View File
@@ -5,7 +5,6 @@ from dzgui.util._json import read_json
from dzgui.const.enum import Preferences from dzgui.const.enum import Preferences
class ConfigFileError(Exception): class ConfigFileError(Exception):
pass pass
@@ -40,4 +39,4 @@ def get_favorites(path: Path) -> list[str]:
def enum_to_key(enum: Preferences) -> str: def enum_to_key(enum: Preferences) -> str:
return str(enum.key) return str(enum.dict["key"])
+206 -224
View File
@@ -1,9 +1,7 @@
from __future__ import annotations
from dataclasses import dataclass
from enum import Enum from enum import Enum
from typing import Any, Self
from dzgui.util import strings from dzgui.util import strings
from dzgui.strings import rows
class Port(Enum): class Port(Enum):
@@ -48,61 +46,125 @@ class FilterMode(Enum):
TOGGLE_ON = 3 TOGGLE_ON = 3
@dataclass(slots=True, frozen=True) class EnumWithAttrs(Enum):
class ModButtonMeta: def __new__(cls, *args: Any, **kwargs: Any) -> Self:
label: str value = len(cls.__members__) + 1
tooltip: str obj = object.__new__(cls)
obj._value_ = value
return obj
def __init__(self, d: dict):
self.dict = d
@dataclass(slots=True, frozen=True) class Preferences(EnumWithAttrs):
class ButtonTypeMeta: STEAM = {
label: str "key": "steam_api",
tooltip: str }
opens: NotebookPage | None 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 NotebookPage(EnumWithAttrs):
class ConfigKey: OFFLINE = {"crumbs": strings.crumbs.offline, "statusbar": True}
key: str 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 RowType(EnumWithAttrs):
class NotebookMeta: # TODO: strings
crumbs: str CHANGELOG = {
has_statusbar: bool "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) # TODO: rename to ContextMenuItem
class RowMeta: class ContextMenu(EnumWithAttrs):
label: str ADD_NOTE = {"label": strings.add_note}
tooltip: str ADD_SERVER = {"label": strings.add}
CONNECT = {"label": strings.connect}
COPY_LOG_CLIPBOARD = {"label": strings.copy_log}
@dataclass(slots=True, frozen=True) COPY_SERVER_IP = {"label": strings.copy_ip}
class ContextMenuMeta: COPY_SERVER_NAME = {"label": strings.copy_name}
label: str UNSUB_MOD = {"label": strings.unsub_mod}
VALIDATE_MOD = {"label": strings.validate_mod}
OPEN_WORKSHOP = {"label": strings.open_workshop}
class ContextMenuItem(Enum): REFRESH_PLAYERS = {"label": strings.refresh_players}
ADD_NOTE = ContextMenuMeta(strings.add_note) REMOVE_HISTORY = {"label": strings.remove_history}
ADD_SERVER = ContextMenuMeta(strings.add) REMOVE_SERVER = {"label": strings.remove}
CONNECT = ContextMenuMeta(strings.connect) SET_FAV = {"label": strings.add_fav}
COPY_LOG_CLIPBOARD = ContextMenuMeta(strings.copy_log) SHOW_DETAILS = {"label": strings.show_details}
COPY_SERVER_IP = ContextMenuMeta(strings.copy_ip) SHOW_MODS = {"label": strings.show_mods}
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): class ContextMenuGroup(Enum):
@@ -110,193 +172,113 @@ class ContextMenuGroup(Enum):
Groupings of context menu items Groupings of context menu items
""" """
SERVER_MOD = (ContextMenuItem.OPEN_WORKSHOP,) SERVER_MOD = (ContextMenu.OPEN_WORKSHOP,)
MOD = ( MOD = (ContextMenu.OPEN_WORKSHOP, ContextMenu.UNSUB_MOD, ContextMenu.VALIDATE_MOD)
ContextMenuItem.OPEN_WORKSHOP,
ContextMenuItem.UNSUB_MOD,
ContextMenuItem.VALIDATE_MOD,
)
MOD_OFFLINE = (None,) MOD_OFFLINE = (None,)
LOG = (ContextMenuItem.COPY_LOG_CLIPBOARD,) LOG = (ContextMenu.COPY_LOG_CLIPBOARD,)
SERVER_BROWSER = ( SERVER_BROWSER = (
ContextMenuItem.CONNECT, ContextMenu.CONNECT,
ContextMenuItem.ADD_SERVER, ContextMenu.ADD_SERVER,
ContextMenuItem.SET_FAV, ContextMenu.SET_FAV,
ContextMenuItem.COPY_SERVER_NAME, ContextMenu.COPY_SERVER_NAME,
ContextMenuItem.COPY_SERVER_IP, ContextMenu.COPY_SERVER_IP,
ContextMenuItem.ADD_NOTE, ContextMenu.ADD_NOTE,
ContextMenuItem.SHOW_MODS, ContextMenu.SHOW_MODS,
ContextMenuItem.SHOW_DETAILS, ContextMenu.SHOW_DETAILS,
ContextMenuItem.REFRESH_PLAYERS, ContextMenu.REFRESH_PLAYERS,
) )
SCAN_LAN = ( SCAN_LAN = (
ContextMenuItem.CONNECT, ContextMenu.CONNECT,
ContextMenuItem.SET_FAV, ContextMenu.SET_FAV,
ContextMenuItem.COPY_SERVER_NAME, ContextMenu.COPY_SERVER_NAME,
ContextMenuItem.COPY_SERVER_IP, ContextMenu.COPY_SERVER_IP,
ContextMenuItem.ADD_NOTE, ContextMenu.ADD_NOTE,
ContextMenuItem.SHOW_MODS, ContextMenu.SHOW_MODS,
ContextMenuItem.SHOW_DETAILS, ContextMenu.SHOW_DETAILS,
ContextMenuItem.REFRESH_PLAYERS, ContextMenu.REFRESH_PLAYERS,
) )
SAVED = ( SAVED = (
ContextMenuItem.CONNECT, ContextMenu.CONNECT,
ContextMenuItem.SET_FAV, ContextMenu.SET_FAV,
ContextMenuItem.REMOVE_SERVER, ContextMenu.REMOVE_SERVER,
ContextMenuItem.COPY_SERVER_NAME, ContextMenu.COPY_SERVER_NAME,
ContextMenuItem.COPY_SERVER_IP, ContextMenu.COPY_SERVER_IP,
ContextMenuItem.ADD_NOTE, ContextMenu.ADD_NOTE,
ContextMenuItem.SHOW_MODS, ContextMenu.SHOW_MODS,
ContextMenuItem.SHOW_DETAILS, ContextMenu.SHOW_DETAILS,
ContextMenuItem.REFRESH_PLAYERS, ContextMenu.REFRESH_PLAYERS,
) )
RECENT = ( RECENT = (
ContextMenuItem.CONNECT, ContextMenu.CONNECT,
ContextMenuItem.ADD_SERVER, ContextMenu.ADD_SERVER,
ContextMenuItem.SET_FAV, ContextMenu.SET_FAV,
ContextMenuItem.REMOVE_HISTORY, ContextMenu.REMOVE_HISTORY,
ContextMenuItem.COPY_SERVER_NAME, ContextMenu.COPY_SERVER_NAME,
ContextMenuItem.COPY_SERVER_IP, ContextMenu.COPY_SERVER_IP,
ContextMenuItem.ADD_NOTE, ContextMenu.ADD_NOTE,
ContextMenuItem.SHOW_MODS, ContextMenu.SHOW_MODS,
ContextMenuItem.SHOW_DETAILS, ContextMenu.SHOW_DETAILS,
ContextMenuItem.REFRESH_PLAYERS, ContextMenu.REFRESH_PLAYERS,
) )
class Preferences(Enum): class ModButton(EnumWithAttrs):
STEAM = ConfigKey("steam_api") SELECT_ALL = {
CLIENT = ConfigKey("client") "label": strings.mod_panel.select_all,
WINDOW = ConfigKey("fullscreen") "tooltip": strings.mod_panel.select_all_tooltip,
DIST = ConfigKey("use_miles") }
NAME = ConfigKey("name") UNSELECT_ALL = {
DEFAULT = ConfigKey("default_steam_path") "label": strings.mod_panel.unselect_all,
FAV_LBL = ConfigKey("fav_label") "tooltip": strings.mod_panel.unselect_all_tooltip,
FAV_SRV = ConfigKey("fav_server") }
IP_LIST = ConfigKey("ip_list") HIGHLIGHT_STALE = {
START_TAB = ConfigKey("start_tab") "label": strings.mod_panel.highlight_stale,
"tooltip": strings.mod_panel.highlight_stale_tooltip,
@property }
def key(self) -> str: UNHIGHLIGHT_STALE = {
return self.value.key "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 NotebookPage(Enum): class ButtonType(EnumWithAttrs):
OFFLINE = NotebookMeta(strings.crumbs.offline, True) SERVERS = {
CHANGELOG = NotebookMeta(strings.crumbs.changelog, True) "label": strings.buttons.servers_label,
DEVELOPERS = NotebookMeta(strings.crumbs.developers, False) "tooltip": strings.buttons.servers_tooltip,
HELP = NotebookMeta(strings.crumbs._help, True) "opens": NotebookPage.SERVERS,
KEYS = NotebookMeta(strings.crumbs.keys, True) }
LOG = NotebookMeta(strings.crumbs.log, True) MODS = {
MODS = NotebookMeta(strings.crumbs.mods, True) "label": strings.buttons.mods_label,
OPTIONS = NotebookMeta(strings.crumbs.options, False) "tooltip": strings.buttons.mods_tooltip,
SERVERS = NotebookMeta(strings.crumbs.servers, True) "opens": NotebookPage.MODS,
THANKS = NotebookMeta(strings.crumbs.thanks, True) }
CONNECTION = NotebookMeta(strings.crumbs.connect, True) OPTIONS = {
"label": strings.buttons.options_label,
@property "tooltip": strings.buttons.options_tooltip,
def crumbs(self) -> str: "opens": NotebookPage.OPTIONS,
return self.value.crumbs }
HELP = {
@property "label": strings.buttons.help_label,
def has_statusbar(self) -> bool: "tooltip": strings.buttons.help_tooltip,
return self.value.has_statusbar "opens": NotebookPage.HELP,
}
EXIT = {
class RowType(Enum): "label": strings.buttons.exit_label,
CHANGELOG = RowMeta(rows.changelog_label, rows.changelog_status) "tooltip": strings.buttons.exit_tooltip,
SHOW_LOG = RowMeta(rows.log_label, rows.log_status) "opens": None,
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) -> NotebookPage | None:
return self.value.opens
HELP_MENU_ROWS = ( HELP_MENU_ROWS = (
+2 -2
View File
@@ -3,8 +3,8 @@ from typing import TYPE_CHECKING
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository.Gtk import ListStore # noqa E402 from gi.repository.Gtk import ListStore
from gi.repository import Gdk, GObject # noqa E402 from gi.repository import GObject
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.const.enum import NotebookPage, ServerTab from dzgui.const.enum import NotebookPage, ServerTab
+8 -9
View File
@@ -8,7 +8,7 @@ import dzgui.util._json as JSON # noqa
from dzgui.const.enum import ( from dzgui.const.enum import (
ButtonType, ButtonType,
ContextMenuItem, ContextMenu,
FilterMode, FilterMode,
NotebookPage, NotebookPage,
Preferences, Preferences,
@@ -32,7 +32,7 @@ from dzgui.views.dialogs.generic import ExceptionDialog
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk, GLib, GObject # noqa E402 from gi.repository import Gtk, Gdk, GLib, GObject
logger = logging.getLogger(APP_NAME) logger = logging.getLogger(APP_NAME)
@@ -196,9 +196,7 @@ class Controller(GObject.GObject):
def show_developers_page(self) -> None: def show_developers_page(self) -> None:
self.open_page(NotebookPage.DEVELOPERS) self.open_page(NotebookPage.DEVELOPERS)
def open_page(self, page: NotebookPage | None) -> None: def open_page(self, page: NotebookPage) -> None:
if page is None:
return
self.mediator.grid.notebook.set_page_by_enum(page) self.mediator.grid.notebook.set_page_by_enum(page)
def open_page_by_button(self, button: "ContextualButton") -> None: def open_page_by_button(self, button: "ContextualButton") -> None:
@@ -264,7 +262,7 @@ class Controller(GObject.GObject):
logger.critical(e) logger.critical(e)
return return
def menu_action(self, action: ContextMenuItem, tree: "ServerTreeView") -> None: def menu_action(self, action: ContextMenu, tree: "ServerTreeView") -> None:
context_man = ContextMenuManager(tree, self) context_man = ContextMenuManager(tree, self)
context_man.process(action) context_man.process(action)
@@ -276,7 +274,7 @@ class Controller(GObject.GObject):
except Exception as e: except Exception as e:
dialog = ExceptionDialog(self, str(e)) dialog = ExceptionDialog(self, str(e))
dialog.show_all() dialog.show_all()
dialog.run() # type: ignore[no-untyped-call] dialog.run()
def select_colorized(self) -> None: def select_colorized(self) -> None:
mod_man = self.mediator.modtreeview.get_mod_man() mod_man = self.mediator.modtreeview.get_mod_man()
@@ -310,7 +308,7 @@ class Controller(GObject.GObject):
except Exception as e: except Exception as e:
dialog = ExceptionDialog(self, str(e)) dialog = ExceptionDialog(self, str(e))
dialog.show_all() dialog.show_all()
dialog.run() # type: ignore[no-untyped-call] dialog.run()
def update_steam_api_key(self, text: str) -> None: def update_steam_api_key(self, text: str) -> None:
self.config_man.update_steam_api_key(text) self.config_man.update_steam_api_key(text)
@@ -367,11 +365,12 @@ class Controller(GObject.GObject):
filter_man = self.get_filter_man() filter_man = self.get_filter_man()
return filter_man.get_map_store() return filter_man.get_map_store()
def get_enabled_filters(self) -> dict[str, bool]: def get_enabled_filters(self) -> dict:
filter_man = self.get_filter_man() filter_man = self.get_filter_man()
return filter_man.get_filters() return filter_man.get_filters()
# FIXME: wipe maps store when changing tabs if model is none # FIXME: wipe maps store when changing tabs if model is none
def has_server_model(self) -> bool: def has_server_model(self) -> bool:
treeview = self.get_active_treeview() treeview = self.get_active_treeview()
proxy_man = treeview.get_proxy_man() proxy_man = treeview.get_proxy_man()
+1 -1
View File
@@ -124,7 +124,7 @@ class ConfigManager:
return False return False
def enum_to_key(self, enum: Preferences) -> str: def enum_to_key(self, enum: Preferences) -> str:
return str(enum.key) return str(enum.dict["key"])
def toggle_config(self, key: Preferences) -> None: def toggle_config(self, key: Preferences) -> None:
try: try:
-5
View File
@@ -55,11 +55,6 @@ from dzgui.util.symlink import rebuild_symlinks
from dzgui.views.dialogs.generic import ExceptionDialog from dzgui.views.dialogs.generic import ExceptionDialog
from dzgui.views.dialogs.servers import ServerDetailsDialog, ServerModDialog from dzgui.views.dialogs.servers import ServerDetailsDialog, ServerModDialog
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib # noqa E402
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.api.servers import A2SInfo, Record from dzgui.api.servers import A2SInfo, Record
from dzgui.controllers.mc import Controller from dzgui.controllers.mc import Controller
+19 -19
View File
@@ -2,7 +2,7 @@ import logging
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from dzgui.const.constants import APP_NAME from dzgui.const.constants import APP_NAME
from dzgui.const.enum import ContextMenuItem, Preferences from dzgui.const.enum import ContextMenu, Preferences
from dzgui.util.clip import copy_clipboard from dzgui.util.clip import copy_clipboard
from dzgui.util.open_links import open_workshop_page from dzgui.util.open_links import open_workshop_page
@@ -34,7 +34,7 @@ class ContextMenuManager:
self.controller = controller self.controller = controller
self.treeview = treeview self.treeview = treeview
def process(self, action: ContextMenuItem) -> None: def process(self, action: ContextMenu) -> None:
if isinstance(self.treeview, ServerTreeView): if isinstance(self.treeview, ServerTreeView):
record = self.treeview.get_record() record = self.treeview.get_record()
if record is None: if record is None:
@@ -42,14 +42,14 @@ class ContextMenuManager:
match action: match action:
# UNTHREADED # UNTHREADED
case ContextMenuItem.ADD_NOTE: case ContextMenu.ADD_NOTE:
dialog = NoteDialog(self.controller) dialog = NoteDialog(self.controller)
dialog.run() # type: ignore[no-untyped-call] dialog.run()
case ContextMenuItem.COPY_SERVER_IP: case ContextMenu.COPY_SERVER_IP:
self.copy_server_ip() self.copy_server_ip()
case ContextMenuItem.COPY_SERVER_NAME: case ContextMenu.COPY_SERVER_NAME:
self.copy_server_name() self.copy_server_name()
case ContextMenuItem.SET_FAV: case ContextMenu.SET_FAV:
name = self.treeview.get_value_at_index(0) name = self.treeview.get_value_at_index(0)
# NOTE: fully qualified ip # NOTE: fully qualified ip
fqip = self.treeview.get_record_string() fqip = self.treeview.get_record_string()
@@ -58,40 +58,40 @@ class ContextMenuManager:
self.controller.set_fav(name, fqip, simple) self.controller.set_fav(name, fqip, simple)
# THREADED # THREADED
case ContextMenuItem.ADD_SERVER: case ContextMenu.ADD_SERVER:
self.controller.add_by_record(record) self.controller.add_by_record(record)
case ContextMenuItem.CONNECT: case ContextMenu.CONNECT:
self.controller.connect_by_record(record) self.controller.connect_by_record(record)
case ContextMenuItem.REFRESH_PLAYERS: case ContextMenu.REFRESH_PLAYERS:
self.controller.refresh_players(record) self.controller.refresh_players(record)
case ContextMenuItem.REMOVE_HISTORY: case ContextMenu.REMOVE_HISTORY:
self.controller.remove_from_history(record) self.controller.remove_from_history(record)
case ContextMenuItem.REMOVE_SERVER: case ContextMenu.REMOVE_SERVER:
self.controller.remove_by_record(record) self.controller.remove_by_record(record)
case ContextMenuItem.SHOW_DETAILS: case ContextMenu.SHOW_DETAILS:
self.controller.get_details(record) self.controller.get_details(record)
case ContextMenuItem.SHOW_MODS: case ContextMenu.SHOW_MODS:
self.controller.get_modlist(record) self.controller.get_modlist(record)
if isinstance(self.treeview, (ModTreeView, OfflineModTreeView)): if isinstance(self.treeview, (ModTreeView, OfflineModTreeView)):
match action: match action:
case ContextMenuItem.OPEN_WORKSHOP: case ContextMenu.OPEN_WORKSHOP:
self.open_mod_page() self.open_mod_page()
case ContextMenuItem.UNSUB_MOD: case ContextMenu.UNSUB_MOD:
self.controller.unsub_mods(self.treeview) self.controller.unsub_mods(self.treeview)
case ContextMenuItem.VALIDATE_MOD: case ContextMenu.VALIDATE_MOD:
self.controller.validate_mods(self.treeview) self.controller.validate_mods(self.treeview)
case _: case _:
pass pass
if isinstance(self.treeview, LogTreeView): if isinstance(self.treeview, LogTreeView):
match action: match action:
case ContextMenuItem.COPY_LOG_CLIPBOARD: case ContextMenu.COPY_LOG_CLIPBOARD:
self.copy_log() self.copy_log()
if isinstance(self.treeview, ServerModTreeView): if isinstance(self.treeview, ServerModTreeView):
match action: match action:
case ContextMenuItem.OPEN_WORKSHOP: case ContextMenu.OPEN_WORKSHOP:
self.open_mod_page() self.open_mod_page()
def copy_server_ip(self) -> None: def copy_server_ip(self) -> None:
+1 -1
View File
@@ -30,7 +30,7 @@ import dzgui.api.pefile as PeFile
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402 from gi.repository import Gtk
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.controllers.mc import Controller from dzgui.controllers.mc import Controller
+1 -1
View File
@@ -15,7 +15,7 @@ if TYPE_CHECKING:
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib # noqa E402 from gi.repository import GLib
logger = logging.getLogger(APP_NAME) logger = logging.getLogger(APP_NAME)
-5
View File
@@ -15,11 +15,6 @@ from dzgui.strings import dialogs
from dzgui.managers.threading import call_on_thread, StoredFunc, ThreadingManager from dzgui.managers.threading import call_on_thread, StoredFunc, ThreadingManager
from dzgui.views.dialogs.generic import ExceptionDialog, QuitDialog from dzgui.views.dialogs.generic import ExceptionDialog, QuitDialog
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib # noqa E402
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.controllers.mc import Controller from dzgui.controllers.mc import Controller
+3 -3
View File
@@ -7,8 +7,8 @@ from dzgui.util.strings import delimiter
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository.Gtk import ListStore, TreeIter # noqa E402 from gi.repository.Gtk import ListStore, TreeIter
from gi.repository import GObject # noqa E402 from gi.repository import GObject
GTYPE_TO_PYTHON = { GTYPE_TO_PYTHON = {
GObject.type_from_name(GObject.type_name(ptype)): ptype GObject.type_from_name(GObject.type_name(ptype)): ptype
@@ -147,7 +147,7 @@ class ModelFactory:
def make_help_store(self) -> FastInsertListStore: def make_help_store(self) -> FastInsertListStore:
store = self.new_model_from_class(MenuCols) store = self.new_model_from_class(MenuCols)
rows = [[row.label, row] for row in HELP_MENU_ROWS] rows = [[row.dict["label"], row] for row in HELP_MENU_ROWS]
store.extend(rows) store.extend(rows)
return store return store
+1 -1
View File
@@ -21,7 +21,7 @@ from dzgui.views.dialogs.generic import ExceptionDialog
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib # noqa E402 from gi.repository import Gtk, GLib
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.api.servers import A2SInfo, Record from dzgui.api.servers import A2SInfo, Record
-29
View File
@@ -1,29 +0,0 @@
changelog_label = "View changelog"
changelog_status = "Opens the DZGUI changelog"
log_label = "Show debug log"
log_status = "Read the DZGUI log generated since startup"
separator_label = "SEPARATOR"
separator_status = ""
system_log_label = "Output system info to log file"
system_log_status = "Dump diagnostic data for troubleshooting"
docs_label = "Documentation/help files (GitHub) ⧉"
docs_status = "Open the DZGUI documentation in a browser"
docs_fallback_label = "Documentation/help files (Codeberg mirror) ⧉"
docs_fallback_status = "Open the DZGUI documentation in a browser"
bugs_label = "Report a bug (GitHub) ⧉"
bugs_status = "Open the DZGUI issue tracker in a browser"
forum_label = "DZGUI Subreddit ⧉"
forum_status = "Open the DZGUI discussion forum in a browser"
sponsor_label = "Sponsor (GitHub) ⧉"
sponsor_status = "Sponsor development of the DZGUI project"
thanks_label = "Special thanks"
thanks_status = "A list of contributors, testers, and sponsors"
+1 -2
View File
@@ -1,8 +1,7 @@
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
gi.require_version("Gdk", "3.0") from gi.repository import Gtk, Gdk
from gi.repository import Gtk, Gdk # noqa E402
def copy_clipboard(text: str) -> None: def copy_clipboard(text: str) -> None:
+1 -1
View File
@@ -5,7 +5,7 @@ from dzgui.const.constants import APP_NAME_LOWER, CSS_PATH
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk # noqa E402 from gi.repository import Gtk, Gdk
def add_class(widget: Gtk.Widget, label: str) -> None: def add_class(widget: Gtk.Widget, label: str) -> None:
-5
View File
@@ -7,11 +7,6 @@ from dzgui.const.constants import APP_NAME
from dzgui.util.ip import get_coords from dzgui.util.ip import get_coords
from dzgui.util.localize import number from dzgui.util.localize import number
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402
if TYPE_CHECKING: if TYPE_CHECKING:
from queue import Queue from queue import Queue
from dzgui.const.enum import ServerTab from dzgui.const.enum import ServerTab
+1 -1
View File
@@ -7,7 +7,7 @@ from dzgui.util.strings import no_mods, no_servers, workshop
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402 from gi.repository import Gtk
def format_pango(text: str) -> str: def format_pango(text: str) -> str:
+4 -1
View File
@@ -1,6 +1,8 @@
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gdk # noqa E402 from gi.repository import Gdk
def is_navkey(key: int) -> bool: def is_navkey(key: int) -> bool:
nav_keys = [ nav_keys = [
@@ -18,6 +20,7 @@ def is_navkey(key: int) -> bool:
return True return True
return False return False
def is_ctrl_mask(event: Gdk.EventKey) -> bool: def is_ctrl_mask(event: Gdk.EventKey) -> bool:
if event.state is Gdk.ModifierType.CONTROL_MASK: if event.state is Gdk.ModifierType.CONTROL_MASK:
return True return True
+3 -1
View File
@@ -1,6 +1,8 @@
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402 from gi.repository import Gtk
def set_surrounding_margins(widget: Gtk.Widget, margin: int) -> None: def set_surrounding_margins(widget: Gtk.Widget, margin: int) -> None:
""" """
+1 -1
View File
@@ -4,7 +4,7 @@ from typing import cast, TYPE_CHECKING
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk, GLib # noqa E402 from gi.repository import Gdk, GLib
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.controllers.mc import Controller from dzgui.controllers.mc import Controller
-2
View File
@@ -252,7 +252,6 @@ class Crumbs:
developers: str developers: str
default: str default: str
offline: str offline: str
connect: str
@dataclass(slots=True, frozen=True) @dataclass(slots=True, frozen=True)
@@ -440,7 +439,6 @@ crumbs = Crumbs(
developers="Options > Developers", developers="Options > Developers",
default="Servers > ", default="Servers > ",
offline="Mods > Play offline", offline="Mods > Play offline",
connect="Connect",
) )
no_mods = "No local mods found." no_mods = "No local mods found."
+1 -1
View File
@@ -38,7 +38,7 @@ import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
gi.require_version("GLibUnix", "2.0") gi.require_version("GLibUnix", "2.0")
from gi.repository import Gtk, GLib, GLibUnix, Gdk # type: ignore # noqa E402 from gi.repository import Gtk, GLib, GLibUnix, Gdk # type: ignore
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.config.userprefs import UserPrefs from dzgui.config.userprefs import UserPrefs
+5 -5
View File
@@ -7,7 +7,7 @@ from dzgui.const.enum import ButtonType
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk # noqa E402 from gi.repository import Gtk, Gdk
logger = logging.getLogger(APP_NAME) logger = logging.getLogger(APP_NAME)
@@ -19,7 +19,7 @@ if TYPE_CHECKING:
class ContextualButton(Gtk.Button): class ContextualButton(Gtk.Button):
def __init__( def __init__(
self, label: str, opens: "NotebookPage" | None, tooltip: str, context: ButtonType self, label: str, opens: "NotebookPage", tooltip: str, context: ButtonType
) -> None: ) -> None:
super().__init__( super().__init__(
label=label, label=label,
@@ -51,9 +51,9 @@ class ButtonBox(Gtk.Box):
for side_button in ButtonType: for side_button in ButtonType:
button = ContextualButton( button = ContextualButton(
label=side_button.label, label=side_button.dict["label"],
opens=side_button.opens, opens=side_button.dict["opens"],
tooltip=side_button.tooltip, tooltip=side_button.dict["tooltip"],
context=side_button, context=side_button,
) )
+1 -1
View File
@@ -22,7 +22,7 @@ from dzgui.strings import connect_panel
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk, GLib # noqa E402 from gi.repository import Gtk, GLib
if TYPE_CHECKING: if TYPE_CHECKING:
from gi.repository import GLib from gi.repository import GLib
+1 -1
View File
@@ -18,7 +18,7 @@ from dzgui.views.components.labels import BoldLabel
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk # noqa E402 from gi.repository import Gtk, Gdk
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.controllers.mc import Controller from dzgui.controllers.mc import Controller
+2 -2
View File
@@ -7,7 +7,7 @@ from dzgui.util.format import embolden
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib, Gdk, GObject, Pango # noqa E402 from gi.repository import Gtk
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.controllers.mc import Controller from dzgui.controllers.mc import Controller
@@ -43,7 +43,7 @@ class Breadcrumbs(Gtk.Label):
label = page.get_current_tab_text() label = page.get_current_tab_text()
self.set_server_crumbs(label) self.set_server_crumbs(label)
else: else:
crumbs = enum.crumbs crumbs = enum.dict["crumbs"]
self.set_crumbs(crumbs) self.set_crumbs(crumbs)
def set_server_crumbs(self, suffix: str) -> None: def set_server_crumbs(self, suffix: str) -> None:
+1 -1
View File
@@ -9,7 +9,7 @@ from dzgui.strings.errors import api_popover
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk, GObject # noqa E402 from gi.repository import Gtk, Gdk, GObject
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.controllers.mc import Controller from dzgui.controllers.mc import Controller
+1 -1
View File
@@ -6,7 +6,7 @@ from dzgui.const.constants import HELP_BUBBLE
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk # noqa E402 from gi.repository import Gtk, Gdk
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.controllers.mc import Controller from dzgui.controllers.mc import Controller
+5 -2
View File
@@ -17,7 +17,7 @@ from dzgui.views.components.labels import BoldLabel
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk, Pango, GLib # noqa E402 from gi.repository import Gtk, Gdk, Pango, GLib
logger = logging.getLogger(APP_NAME) logger = logging.getLogger(APP_NAME)
@@ -42,7 +42,10 @@ class ButtonGrid(Gtk.Grid):
self.checks: list[Gtk.CheckButton] = [] self.checks: list[Gtk.CheckButton] = []
flowbox = Gtk.FlowBox( flowbox = Gtk.FlowBox(
halign=Gtk.Align.CENTER, min_children_per_line=3, max_children_per_line=3, selection_mode=Gtk.SelectionMode.NONE halign=Gtk.Align.CENTER,
min_children_per_line=3,
max_children_per_line=3,
selection_mode=Gtk.SelectionMode.NONE,
) )
for check in defaults.keys(): for check in defaults.keys():
+1 -1
View File
@@ -1,7 +1,7 @@
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402 from gi.repository import Gtk
class Icon(Gtk.Image): class Icon(Gtk.Image):
+1 -1
View File
@@ -3,7 +3,7 @@ from dzgui.util.format import embolden
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402 from gi.repository import Gtk
class BoldLabel(Gtk.Label): class BoldLabel(Gtk.Label):
+1 -1
View File
@@ -1,7 +1,7 @@
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib # noqa E402 from gi.repository import Gtk
class MapsCombo(Gtk.EntryCompletion): class MapsCombo(Gtk.EntryCompletion):
+3 -3
View File
@@ -8,7 +8,7 @@ from dzgui.views.components.labels import BoldLabel
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402 from gi.repository import Gtk
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.controllers.mc import Controller from dzgui.controllers.mc import Controller
@@ -20,8 +20,8 @@ class EnumeratedModButton(Gtk.Button):
super().__init__(margin_start=10, margin_end=10, focus_on_click=False) super().__init__(margin_start=10, margin_end=10, focus_on_click=False)
self.enum = enum self.enum = enum
self.set_label(enum.label) self.set_label(enum.dict["label"])
self.set_tooltip_text(enum.tooltip) self.set_tooltip_text(enum.dict["tooltip"])
class ModPanelButton(EnumeratedModButton): class ModPanelButton(EnumeratedModButton):
+1 -1
View File
@@ -23,7 +23,7 @@ from dzgui.views.components.buttons import IconTextButton, RefreshButton, KeysBu
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk, GLib # noqa E402 from gi.repository import Gtk, Gdk, GLib
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.controllers.mc import Controller from dzgui.controllers.mc import Controller
+3 -3
View File
@@ -7,7 +7,7 @@ from dzgui.views.components.buttons import LoggerAlertsButton
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402 from gi.repository import Gtk
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.const.enum import ServerTab from dzgui.const.enum import ServerTab
@@ -60,7 +60,7 @@ class Statusbar(Gtk.Grid):
return return
enum = notebook.get_page_by_enum() enum = notebook.get_page_by_enum()
show_statusbar = enum.has_statusbar show_statusbar = enum.dict["statusbar"]
if show_statusbar is False: if show_statusbar is False:
self.set_by_context(enum, "") self.set_by_context(enum, "")
@@ -152,5 +152,5 @@ class Statusbar(Gtk.Grid):
row = tree.get_value_at_index(1) row = tree.get_value_at_index(1)
if self.controller.loaded is False: if self.controller.loaded is False:
return return
tooltip = row.tooltip tooltip = row.dict["tooltip"]
self.set_by_context(NotebookPage.HELP, tooltip) self.set_by_context(NotebookPage.HELP, tooltip)
+2 -1
View File
@@ -2,8 +2,9 @@ from typing import Literal
from dzgui.util import css from dzgui.util import css
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib # noqa E402 from gi.repository import Gtk, GLib
class Toast(Gtk.EventBox): class Toast(Gtk.EventBox):
+1 -1
View File
@@ -10,7 +10,7 @@ from dzgui.views.components.labels import BoldLabel
from dzgui.views.components.box import VBox, HBox from dzgui.views.components.box import VBox, HBox
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib, GObject # type: ignore # noqa E402 from gi.repository import Gtk, GLib, GObject
DAY_START_TIME = time(hour=6, minute=0, second=0) DAY_START_TIME = time(hour=6, minute=0, second=0)
DAY_END_TIME = time(hour=18, minute=0, second=0) DAY_END_TIME = time(hour=18, minute=0, second=0)
+1 -1
View File
@@ -8,7 +8,7 @@ from dzgui.views.mixins.colorscheme import ColorAwareApp
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402 from gi.repository import Gtk
class AbortDialog(ColorAwareApp, Gtk.MessageDialog): # type: ignore class AbortDialog(ColorAwareApp, Gtk.MessageDialog): # type: ignore
+2 -2
View File
@@ -2,10 +2,10 @@ from pathlib import Path
from dzgui.util.strings import picker from dzgui.util.strings import picker
import gi # noqa E402 import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402 from gi.repository import Gtk
class FilePicker(Gtk.FileChooserDialog): class FilePicker(Gtk.FileChooserDialog):
+1 -1
View File
@@ -8,7 +8,7 @@ from dzgui.views.components.buttons import ClipboardButton
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib, Gdk, GObject, Pango # noqa E402 from gi.repository import Gtk, GLib
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.controllers.mc import Controller from dzgui.controllers.mc import Controller
+1 -1
View File
@@ -9,7 +9,7 @@ from dzgui.views.components.buttons import SteamTextButton
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib, Gdk, GObject, Pango # noqa E402 from gi.repository import Gtk
if TYPE_CHECKING: if TYPE_CHECKING:
+2 -2
View File
@@ -3,10 +3,10 @@ from typing import Self, TYPE_CHECKING
from dzgui.views.components.entry import ValidatedEntry from dzgui.views.components.entry import ValidatedEntry
from dzgui.views.dialogs.generic import GenericDialog from dzgui.views.dialogs.generic import GenericDialog
import gi # noqa E402 import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gdk, Gtk # noqa E402 from gi.repository import Gtk
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.controllers.mc import Controller from dzgui.controllers.mc import Controller
+1 -1
View File
@@ -18,7 +18,7 @@ from dzgui.views.mixins.colorscheme import ColorAwareApp
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib, Pango # noqa E402 from gi.repository import Gtk, GLib, Pango
class Assistant(Gtk.Assistant): class Assistant(Gtk.Assistant):
+2 -2
View File
@@ -14,7 +14,7 @@ from dzgui.const.constants import (
HERO_PATH, HERO_PATH,
FLATPAK_ROOT_PATH, FLATPAK_ROOT_PATH,
LEGACY_CONFIG_PATH, LEGACY_CONFIG_PATH,
TMP_PATH TMP_PATH,
) )
from dzgui.const.boilerplate import config_boilerplate from dzgui.const.boilerplate import config_boilerplate
from dzgui.const.endpoints import STEAM_API_SETUP from dzgui.const.endpoints import STEAM_API_SETUP
@@ -35,7 +35,7 @@ from dzgui.views.trees.tree_simple import SimpleTree
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gdk, Gtk, GLib, GObject, GdkPixbuf # noqa E402 from gi.repository import Gtk, GLib, GObject, GdkPixbuf
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.config.xdg import Xdg from dzgui.config.xdg import Xdg
+12 -10
View File
@@ -1,7 +1,7 @@
import logging import logging
from dzgui.const.constants import APP_NAME from dzgui.const.constants import APP_NAME
from dzgui.const.enum import ContextMenuItem from dzgui.const.enum import ContextMenu
from dzgui.util.keys import is_ctrl_mask, is_navkey from dzgui.util.keys import is_ctrl_mask, is_navkey
from dzgui.util.strings import edit_note from dzgui.util.strings import edit_note
from dzgui.views.trees.tree_base import TreeView from dzgui.views.trees.tree_base import TreeView
@@ -9,13 +9,15 @@ from dzgui.views.trees.tree_base import TreeView
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib, Gdk, GObject, Pango # noqa E402 from gi.repository import Gtk, Gdk
logger = logging.getLogger(APP_NAME) logger = logging.getLogger(APP_NAME)
class ContextMixin(TreeView): 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: if self.menu is None:
return False return False
@@ -58,17 +60,17 @@ class ContextMixin(TreeView):
self.context_menu.select_first(False) self.context_menu.select_first(False)
return True return True
def _process_dynamic_row(self, row: ContextMenuItem) -> Gtk.MenuItem: def _process_dynamic_row(self, row: ContextMenu) -> Gtk.MenuItem:
if row == ContextMenuItem.ADD_SERVER and self.is_in_favs(): # type: ignore if row == ContextMenu.ADD_SERVER and self.is_in_favs(): # type: ignore
row = ContextMenuItem.REMOVE_SERVER row = ContextMenu.REMOVE_SERVER
item = Gtk.MenuItem(label=row.label) item = Gtk.MenuItem(label=row.dict["label"])
item.connect("activate", self._on_menu_click, row) item.connect("activate", self._on_menu_click, row)
if row == ContextMenuItem.SHOW_MODS: if row == ContextMenu.SHOW_MODS:
item.set_sensitive(self.is_modded()) # type: ignore item.set_sensitive(self.is_modded()) # type: ignore
if row == ContextMenuItem.ADD_NOTE: if row == ContextMenu.ADD_NOTE:
if self.controller.has_note(): if self.controller.has_note():
item.set_label(edit_note) item.set_label(edit_note)
@@ -92,7 +94,7 @@ class ContextMixin(TreeView):
except AttributeError: except AttributeError:
return False return False
def _on_menu_click(self, widget: Gtk.MenuItem, enum: ContextMenuItem) -> None: def _on_menu_click(self, widget: Gtk.MenuItem, enum: ContextMenu) -> None:
self.controller.menu_action(enum, self) # type: ignore self.controller.menu_action(enum, self) # type: ignore
def _on_key(self, menu: Gtk.Menu, event: Gdk.EventKey) -> bool | None: def _on_key(self, menu: Gtk.Menu, event: Gdk.EventKey) -> bool | None:
+1 -1
View File
@@ -5,7 +5,7 @@ from dzgui.util.keys import is_ctrl_mask
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib, Gdk, GObject, Pango # noqa E402 from gi.repository import Gtk, Gdk
class CursorMixin: class CursorMixin:
+1 -1
View File
@@ -3,7 +3,7 @@ from dzgui.views.trees.tree_base import TreeView
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib, Gdk, GObject, Pango # noqa E402 from gi.repository import Gtk
class ModsMixin: class ModsMixin:
+1 -1
View File
@@ -15,7 +15,7 @@ from dzgui.views.mixins.scrollable_mixin import ScrollableMixin
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402 from gi.repository import Gtk
logger = logging.getLogger(APP_NAME) logger = logging.getLogger(APP_NAME)
+2 -2
View File
@@ -7,10 +7,10 @@ from dzgui.util.strings import developers
from dzgui.views.components.labels import BoldLabel from dzgui.views.components.labels import BoldLabel
from dzgui.views.trees.tree_base import TreeView from dzgui.views.trees.tree_base import TreeView
import gi # noqa E402 import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402 from gi.repository import Gtk
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.controllers.mc import Controller from dzgui.controllers.mc import Controller
+1 -1
View File
@@ -4,7 +4,7 @@ from dzgui.views.trees.tree_menu import MenuTreeView
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402 from gi.repository import Gtk
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.controllers.mc import Controller from dzgui.controllers.mc import Controller
+1 -1
View File
@@ -7,7 +7,7 @@ from dzgui.util.css import add_class
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402 from gi.repository import Gtk
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.controllers.mc import Controller from dzgui.controllers.mc import Controller
+1 -1
View File
@@ -9,7 +9,7 @@ from dzgui.views.trees.tree_log import LogTreeView
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402 from gi.repository import Gtk
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.controllers.mc import Controller from dzgui.controllers.mc import Controller
+1 -1
View File
@@ -18,7 +18,7 @@ from dzgui.views.trees.tree_server_mods import ServerModTreeView
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gdk, Gtk # noqa E402 from gi.repository import Gdk, Gtk
if TYPE_CHECKING: if TYPE_CHECKING:
+1 -1
View File
@@ -10,7 +10,7 @@ from dzgui.util.strings import server_labels
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk, GLib # noqa E402 from gi.repository import Gtk, Gdk
logger = logging.getLogger(APP_NAME) logger = logging.getLogger(APP_NAME)
+1 -1
View File
@@ -8,7 +8,7 @@ from dzgui.views.mixins.scrollable_mixin import ScrollableMixin
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402 from gi.repository import Gtk
# TODO: wrap and center long values # TODO: wrap and center long values
if TYPE_CHECKING: if TYPE_CHECKING:
+1 -1
View File
@@ -12,7 +12,7 @@ from dzgui.views.mixins.context_mixin import ContextMixin
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib, Gdk, GObject, Pango # noqa E402 from gi.repository import Gtk, Gdk
if TYPE_CHECKING: if TYPE_CHECKING:
from pathlib import Path from pathlib import Path
+1 -1
View File
@@ -77,4 +77,4 @@ class MenuTreeView(TreeView):
raise ValueError("Trying to call a method on non-existent model") raise ValueError("Trying to call a method on non-existent model")
_iter = self.get_focused_row_iter() _iter = self.get_focused_row_iter()
rowtype = model.get_value(_iter, 1) rowtype = model.get_value(_iter, 1)
return str(rowtype.tooltip) return str(rowtype.dict["tooltip"])
+3 -3
View File
@@ -7,7 +7,7 @@ from warnings import deprecated
from dzgui.api.servers import ping, Record from dzgui.api.servers import ping, Record
from dzgui.const.constants import APP_NAME from dzgui.const.constants import APP_NAME
from dzgui.const.enum import ContextMenuItem, ContextMenuGroup, ServerTab from dzgui.const.enum import ContextMenu, ContextMenuGroup, ServerTab
from dzgui.managers.filter import FilterManager from dzgui.managers.filter import FilterManager
from dzgui.model.proxy_model import ProxyModelManager from dzgui.model.proxy_model import ProxyModelManager
from dzgui.util import strings from dzgui.util import strings
@@ -250,9 +250,9 @@ class ServerTreeView(ContextMixin, TreeView): # type: ignore
if self.enum is ServerTab.LAN: if self.enum is ServerTab.LAN:
self.emitter.emit("request_custom_port_focus") self.emitter.emit("request_custom_port_focus")
case Gdk.KEY_c: case Gdk.KEY_c:
self.controller.menu_action(ContextMenuItem.COPY_SERVER_IP, self) self.controller.menu_action(ContextMenu.COPY_SERVER_IP, self)
case Gdk.KEY_r: case Gdk.KEY_r:
self.controller.menu_action(ContextMenuItem.REFRESH_PLAYERS, self) self.controller.menu_action(ContextMenu.REFRESH_PLAYERS, self)
else: else:
match event.keyval: match event.keyval:
case Gdk.KEY_l | Gdk.KEY_Right: case Gdk.KEY_l | Gdk.KEY_Right:
+1
View File
@@ -78,6 +78,7 @@ line-length = 88
indent-width = 4 indent-width = 4
extend-exclude = ["*lib/a2s"] extend-exclude = ["*lib/a2s"]
lint.unfixable = ["F401", "I001"] lint.unfixable = ["F401", "I001"]
lint.ignore = ["E402"]
[tool.ruff.format] [tool.ruff.format]
quote-style = "double" quote-style = "double"
-38
View File
@@ -1,38 +0,0 @@
from pathlib import Path
def iterate(search_str: str) -> None:
# TODO: exclude files from .gitignore
print()
print(f"Searching for '{search_str}'")
print()
files = Path(".").rglob("*")
ignore = [
"scripts/",
".git",
"egg",
"CHANGELOG",
".mypy",
"build/",
"test.py",
"bugs",
"pyproject.toml",
]
for file in files:
if file.is_dir():
continue
if any(s in str(file) for s in ignore):
continue
try:
text = file.read_text()
if search_str in text:
c = text.count(search_str)
if 0 < c < 2:
print(file, c)
except Exception:
continue
imports = ["Pango", "GObject", "GLib", "Gdk", "Gtk"]
for i in imports:
iterate(i)
+1 -1
View File
@@ -6,7 +6,7 @@ from dzgui.views.dialogs.servers import ServerDetailsDialog
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402 from gi.repository import Gtk
class MockController: class MockController: