diff --git a/dzgui/controllers/mc.py b/dzgui/controllers/mc.py index 2d747f0..ec4b289 100644 --- a/dzgui/controllers/mc.py +++ b/dzgui/controllers/mc.py @@ -329,13 +329,15 @@ class Controller: def toggle_server_panels(self, state: bool) -> None: self.mediator.grid.toggle_filter_panel(state) self.mediator.grid.toggle_connect_panel(state) + self.mediator.grid.toggle_refresh_button(state) def toggle_mod_panel(self, state: bool) -> None: self.mediator.grid.right_panel.sel_panel.set_visible(state) def show_developers_page(self) -> None: self.open_page(NotebookPage.DEVELOPERS) - # TODO: focus first row + # TODO: put cursor on first row + #self.mediator.developers.focus_first_row() def open_page(self, page: NotebookPage) -> None: self.mediator.grid.notebook.set_page_by_enum(page) @@ -363,8 +365,7 @@ class Controller: self.mediator.notebook.set_page_by_enum(button.opens) self.set_crumbs(button.get_label()) - # TODO: deprecated? - def open_self_workshop(self, uid: str) -> None: + def open_user_workshop(self, uid: str) -> None: # NOTE: uid may contain leading zeroes, not a real integer client = self.query_config(Preferences.CLIENT) open_workshop_page(uid, client) @@ -666,3 +667,9 @@ class Controller: self.mediator.grid.right_panel.filters_vbox.toggle_check(11) case _: return False + + def get_favorite_label(self) -> str | None: + fav = str(self.query_config(Preferences.FAV_LBL)) + if len(fav) < 1: + return None + return fav diff --git a/dzgui/controllers/model.py b/dzgui/controllers/model.py index 2b75b76..3372bf5 100644 --- a/dzgui/controllers/model.py +++ b/dzgui/controllers/model.py @@ -69,9 +69,7 @@ class ModelManager: self.ping_cache: dict[str, int] = {} self.map_store = ListStore(str) - #self.row_store = self.new_model_from_class(MenuCols) self.help_store = self.new_model_from_class(MenuCols) - self.mod_store = self.new_model_from_class(ModCols) self.log_store = self.new_model_from_class(LogCols) self.modlist_store = self.new_model_from_class(ServerModCols) diff --git a/dzgui/util/keys.py b/dzgui/util/keys.py index 4f20038..04f291d 100644 --- a/dzgui/util/keys.py +++ b/dzgui/util/keys.py @@ -23,22 +23,3 @@ def is_ctrl_mask(event: Gdk.EventKey) -> bool: return True else: return False - -def is_filterkey(key: int) -> bool: - keys = ( - Gdk.KEY_0, - Gdk.KEY_1, - Gdk.KEY_2, - Gdk.KEY_3, - Gdk.KEY_4, - Gdk.KEY_5, - Gdk.KEY_6, - Gdk.KEY_7, - Gdk.KEY_8, - Gdk.KEY_9, - Gdk.KEY_backslash, - Gdk.KEY_minus, - ) - if key in keys: - return True - return False diff --git a/dzgui/util/strings.py b/dzgui/util/strings.py index 1fcab97..1529a79 100644 --- a/dzgui/util/strings.py +++ b/dzgui/util/strings.py @@ -508,4 +508,33 @@ server_labels = ServerLabels( lan="LAN", ) +@dataclass(slots=True, frozen=True) +class ConnectPanel: + connect: str + add: str + edit: str + favorite: str + add_con: str + placeholder: str + entry_tooltip: str + add_tooltip: str + connect_tooltip: str + no_fav: str + +connect_panel = ConnectPanel( + connect="Connect", + add="Add", + edit="Edit", + favorite="Favorite server", + add_con="Add/connect", + placeholder="Enter IP or Battlemetrics ID", + entry_tooltip=( + "- IP: Format as IP:Query port\ne.g. 192.168.1.1:27016\n" + "- Battlemetrics: numeric server ID\ne.g. 123456" + ), + add_tooltip="Add to my servers", + connect_tooltip="Connect to this server", + no_fav="None set. Right click a server and select 'Set favorite' to set.", +) + distance_suffix = "Distance: calculating..." diff --git a/dzgui/views/base.py b/dzgui/views/base.py index 41919e4..12d3301 100644 --- a/dzgui/views/base.py +++ b/dzgui/views/base.py @@ -66,6 +66,7 @@ logger = logging.getLogger(__name__) warnings.filterwarnings("ignore", ".*g_value_get_int", Warning) # TODO: move to controller +# kilometer cache; note, user may change measurement it partway through, flush cache #cache: dict[str, int] = {} ## TODO: move to configs/servers @@ -283,7 +284,7 @@ class Notebook(ScrollableMixin, Gtk.Notebook): self.keys = Keybindings() self.settings = Options(MainController) - # NOTE: server and quad tables should have hexpand property set to True + # NOTE: server, mod, and log tables should have hexpand property set to True self.servers = ServerNotebook(MainController) self.mods = Mods(MainController) @@ -295,9 +296,8 @@ class Notebook(ScrollableMixin, Gtk.Notebook): # TODO: change this class to scrolledwindow self.thanks = ScrollableNote(Thanks(), back_button=False) - - developers = Developers(MainController) # TODO: change this class to scrolledwindow + developers = Developers(MainController) self.developers = ScrollableNote(developers) self.pages = { @@ -314,7 +314,7 @@ class Notebook(ScrollableMixin, Gtk.Notebook): self.indexes = {} """ - Note that due to historical reasons, GtkNotebook refuses to switch to a page + Note that due to historical reasons, Gtk.Notebook refuses to switch to a page unless the child widget is visible. Therefore, it is recommended to show child widgets before adding them to a notebook. """ @@ -436,9 +436,9 @@ class Grid(Gtk.Grid): self.set_breadcrumbs(strings.label_main_menu) self.notebook = Notebook() - self.conpan = ConnectPanel() + self.conpan = ConnectPanel(MainController) - self.attach(self.notebook, 0, 0, MAX_COLS, 1) + self.attach(self.notebook, 0, 0, MAX_COLS, SINGLE_ROW) els = ( (self.breadcrumbs, self.notebook, Gtk.PositionType.TOP, MAX_COLS, SINGLE_ROW), @@ -457,6 +457,10 @@ class Grid(Gtk.Grid): def toggle_connect_panel(self, state: bool) -> None: self.conpan.set_visible(state) + def toggle_refresh_button(self, state: bool) -> None: + self.right_panel.refresh_button.set_visible(state) + + # TODO make this method internal to Statusbar def get_breadcrumbs(self) -> str: return self.breadcrumbs.get_text() diff --git a/dzgui/views/components/web_button.py b/dzgui/views/components/buttons.py similarity index 66% rename from dzgui/views/components/web_button.py rename to dzgui/views/components/buttons.py index 1089de8..62f56c4 100644 --- a/dzgui/views/components/web_button.py +++ b/dzgui/views/components/buttons.py @@ -1,5 +1,5 @@ from dzgui.views.components.icon import Icon -from dzgui.const.constants import REFRESH_ICON, WEB_BROWSER +from dzgui.const.constants import REFRESH_ICON, WEB_BROWSER, INPUT_KEYBOARD import gi gi.require_version("Gtk", "3.0") @@ -9,7 +9,6 @@ from gi.repository import Gtk # noqa E402 class IconButton(Gtk.Button): def __init__(self, icon: str, margin: int = 0): super().__init__() - i = Icon(icon, l_margin=margin) self.set_image(i) self.set_image_position(Gtk.PositionType.RIGHT) @@ -18,7 +17,6 @@ class IconButton(Gtk.Button): class IconTextButton(IconButton): def __init__(self, icon: str, label: str): super().__init__(icon, margin=5) - self.set_label(label) @@ -31,4 +29,14 @@ class WebButton(IconTextButton): class RefreshButton(IconTextButton): def __init__(self, label: str): super().__init__(icon=REFRESH_ICON, label=label) - pass + self.set_margin_top(10) + self.set_margin_start(80) + self.set_margin_end(80) + + +class KeysButton(IconTextButton): + def __init__(self, label: str): + super().__init__(icon=INPUT_KEYBOARD, label=label) + self.set_margin_top(10) + self.set_margin_start(80) + self.set_margin_end(80) diff --git a/dzgui/views/components/connect_panel.py b/dzgui/views/components/connect_panel.py index 660dc67..97f132a 100644 --- a/dzgui/views/components/connect_panel.py +++ b/dzgui/views/components/connect_panel.py @@ -1,47 +1,72 @@ -from dzgui.util.format import embolden -from dzgui.views.components.web_button import WebButton +from typing import TYPE_CHECKING + +from dzgui.util.strings import connect_panel +from dzgui.views.components.buttons import WebButton +from dzgui.views.components.labels import BoldLabel 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 ConnectPanel(Gtk.Frame): - def __init__(self) -> None: + def __init__(self, controller: "Controller") -> None: super().__init__(margin_top=10, margin_bottom=5) - self.label = Gtk.Label(label="Add/connect") - self.label2 = Gtk.Label(label="Favorite server") + COLS = 1 + ROWS = 1 + self.controller = controller - # TODO: strings - text = embolden("Favorite server") - self.label2.set_markup(text) - self.entry1 = Gtk.Entry(placeholder_text="Enter IP or Battlemetrics ID", hexpand=False) - self.entry2 = Gtk.Entry() - self.fav = Gtk.Label(label="MY favorite server very long title") - self.favedit = Gtk.Button("Edit") - self.edit = WebButton(label="EDIT") - self.favbutton = Gtk.Button(label="Connect") + self.entry = Gtk.Entry( + placeholder_text=connect_panel.placeholder, + hexpand=True, + tooltip_text=connect_panel.entry_tooltip + ) - # TODO: dedent - long = """IP: Format as IP:Query port, e.g.\n192.168.1.1:27016\n - Battlemetrics: numeric server ID - """ + # TODO: get ip as well? + user_fav = self.controller.get_favorite_label() - # TODO: add tooltips to all buttons - self.entry1.set_tooltip_text(long) + server_name = user_fav if user_fav is not None else connect_panel.no_fav + scrollable_label = Gtk.ScrolledWindow() + label = Gtk.Label(label=server_name, halign=Gtk.Align.START) + scrollable_label.add(label) - self.con = Gtk.Button(label="Connect") - self.addb = Gtk.Button(label="Add") + self.fav_button = Gtk.Button(label=connect_panel.connect, + tooltip_text=connect_panel.connect_tooltip + ) + self.fav_edit = Gtk.Button(label=connect_panel.edit) + self.edit_server = WebButton(label="EDIT") + + self.conn_server= Gtk.Button(label=connect_panel.connect, + tooltip_text=connect_panel.connect_tooltip + ) + self.add_server = Gtk.Button(label=connect_panel.add, + tooltip_text=connect_panel.add_tooltip + ) + + self.conn_server.set_sensitive(False) + self.add_server.set_sensitive(False) + if server_name is None: + self.fav_button.set_sensitive(False) + + add_label = BoldLabel(connect_panel.add_con) + conn_label = BoldLabel(connect_panel.favorite) self.grid = Gtk.Grid(margin=10, vexpand=False, column_spacing=15, row_spacing=5) - self.grid.attach(self.label2, 0, 0, 3, 1) - button = Gtk.Button(label="Connect") - self.grid.attach_next_to(self.fav, self.label2, Gtk.PositionType.RIGHT, 3, 1) - self.grid.attach_next_to(self.favbutton, self.fav, Gtk.PositionType.RIGHT, 3, 1) - self.grid.attach_next_to(self.label, self.label2, Gtk.PositionType.BOTTOM, 3, 1) - self.grid.attach_next_to(self.entry1, self.label, Gtk.PositionType.RIGHT, 3, 1) - self.grid.attach_next_to(self.addb, self.entry1, Gtk.PositionType.RIGHT, 3, 1) - self.grid.attach_next_to(self.con, self.addb, Gtk.PositionType.RIGHT, 3, 1) + self.grid.attach(conn_label, 0, 0, COLS, ROWS) + + els = ( + (scrollable_label, conn_label, Gtk.PositionType.RIGHT, 3, ROWS), + (self.fav_button, scrollable_label, Gtk.PositionType.RIGHT, COLS, ROWS), + (add_label, conn_label, Gtk.PositionType.BOTTOM, COLS, ROWS), + (self.entry, scrollable_label, Gtk.PositionType.BOTTOM, COLS, ROWS), + (self.add_server, self.fav_button, Gtk.PositionType.BOTTOM, COLS, ROWS), + (self.conn_server, self.add_server, Gtk.PositionType.RIGHT, COLS, ROWS), + ) + + for el, sibling, pos, h_span, v_span in els: + self.grid.attach_next_to(el, sibling, pos, h_span, v_span) self.add(self.grid) diff --git a/dzgui/views/components/filter_panel.py b/dzgui/views/components/filter_panel.py index ad51ac7..8afa0d1 100644 --- a/dzgui/views/components/filter_panel.py +++ b/dzgui/views/components/filter_panel.py @@ -1,15 +1,15 @@ import logging +from typing import Literal import gi # noqa E402 gi.require_version("Gtk", "3.0") from gi.repository import Gtk, Gdk, Pango, GLib -from typing import Literal -from dzgui.util import strings -from dzgui.util.format import embolden -from dzgui.util.margins import set_surrounding_margins from dzgui.const.enum import FilterMode from dzgui.const.constants import NO_EXPAND, NO_FILL, NO_PADDING +from dzgui.util import strings +from dzgui.util.margins import set_surrounding_margins +from dzgui.views.components.labels import BoldLabel logger = logging.getLogger(__name__) @@ -17,7 +17,6 @@ class FilterPanel(Gtk.Box): def __init__(self, controller): super().__init__(spacing=6, vexpand=False) - # TODO: set strings in constants self.default_filters = { strings.filter_1pp: True, strings.filter_day: True, @@ -39,10 +38,11 @@ class FilterPanel(Gtk.Box): self.checks = [] self.maps_hr = [] + self.enabled_filters = dict(self.default_filters) - self.keyword_filter = "" - self.selected_map = strings.all_maps - self.prior_map = strings.all_maps + self.keyword_filter: str + self.selected_map: str = strings.all_maps + self.prior_map: str = strings.all_maps button_grid = Gtk.Grid( halign=Gtk.Align.CENTER, column_spacing=5, column_homogeneous=True @@ -72,9 +72,7 @@ class FilterPanel(Gtk.Box): self.set_margin_top(1) # TODO: strings - text = embolden("Filters") - self.filters_label = Gtk.Label() - self.filters_label.set_markup(text) + self.filters_label = BoldLabel("Filters") self.keyword_entry = Gtk.Entry() self.keyword_entry.set_placeholder_text("Filter by keyword") @@ -99,16 +97,13 @@ class FilterPanel(Gtk.Box): self.maps_entry.connect("key-press-event", self._on_map_entry_keypress) # FIXME: only giving two params to pack_start - # cf. EXPAND + # cf. EXPAND, NO_EXPAND self.maps_combo.pack_start(renderer_text, True) self.maps_combo.connect("changed", self._on_map_changed) self.maps_combo.connect("key-press-event", self._on_combo_keypress) - # TODO: consolidate - self.pack_start(self.filters_label, NO_EXPAND, NO_FILL, NO_PADDING) - self.pack_start(self.keyword_entry, NO_EXPAND, NO_FILL, NO_PADDING) - self.pack_start(self.maps_combo, NO_EXPAND, NO_FILL, NO_PADDING) - self.pack_start(button_grid, NO_EXPAND, NO_FILL, NO_PADDING) + for el in self.filters_label, self.keyword_entry, self.maps_combo, button_grid: + self.pack_start(el, NO_EXPAND, NO_FILL, NO_PADDING) def set_unique_maps(self, maps: list) -> None: if len(maps) < 1: diff --git a/dzgui/views/components/mod_panel.py b/dzgui/views/components/mod_panel.py index 185e542..109969a 100644 --- a/dzgui/views/components/mod_panel.py +++ b/dzgui/views/components/mod_panel.py @@ -3,7 +3,7 @@ from typing import TYPE_CHECKING from dzgui.const.enum import ModButton from dzgui.const.constants import NO_EXPAND, FILL, NO_PADDING from dzgui.util.strings import mod_panel -from dzgui.util.format import embolden +from dzgui.views.components.labels import BoldLabel import gi gi.require_version("Gtk", "3.0") @@ -27,9 +27,7 @@ class ModSelectionPanel(Gtk.Box): self.controller = controller - header = Gtk.Label() - text = embolden(mod_panel.header) - header.set_markup(text) + header = BoldLabel(mod_panel.header) self.main_panel = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6) buttons = ( diff --git a/dzgui/views/components/right_panel.py b/dzgui/views/components/right_panel.py index 879b8c7..fb72e42 100644 --- a/dzgui/views/components/right_panel.py +++ b/dzgui/views/components/right_panel.py @@ -7,8 +7,7 @@ from dzgui.views.components.buttonbox import ButtonBox from dzgui.views.components.filter_panel import FilterPanel from dzgui.views.components.mod_panel import ModSelectionPanel from dzgui.views.components.icon import Icon -from dzgui.views.components.web_button import RefreshButton -# TODO: rename web_button +from dzgui.views.components.buttons import RefreshButton, KeysButton from dzgui.const.constants import NO_EXPAND, NO_FILL, EXPAND, FILL, INPUT_KEYBOARD, NO_PADDING from dzgui.util import strings @@ -17,71 +16,31 @@ class RightPanel(Gtk.Box): def __init__(self, controller): super().__init__(spacing=6, orientation=Gtk.Orientation.VERTICAL) + self.controller = controller + self.controller.register_widget("right_panel", self) + self.button_vbox = ButtonBox(controller) - - self.filters_vbox = FilterPanel(controller) self.sel_panel = ModSelectionPanel(controller) - self.controller.register_widget("right_panel", self) - - self.sel_panel.set_visible(False) - self.filters_vbox.set_visible(False) - - # TODO: more custom button classes - self.ping = Gtk.Button( - label=strings.ping_servers, - margin_top=10, - margin_start=80, - margin_end=80, - tooltip_text=strings.ping_tooltip, - ) - self.ping.connect("clicked", self._on_ping_clicked) - - # TODO: drop after adding context menu row - self.debug_toggle = Gtk.ToggleButton( - label=strings.debug_mode, - margin_top=10, - margin_start=80, - margin_end=80, - tooltip_text=strings.debug_tooltip, - ) - - # TODO: icon + # TODO: strings, move strings into buttons.py self.refresh_button = RefreshButton("Refresh") - self.refresh_button.set_margin_top(10) - self.refresh_button.set_margin_start(80) - self.refresh_button.set_margin_end(80) + # TODO: tooltip, strings + # TODO: update refresh button sensitivity on cooldown + self.refresh_button.set_tooltip_text("Refresh server data") self.refresh_button.connect("clicked", self._on_refresh_clicked) - #if controller.query_config(Preferences.DEBUG) == True: - # self.debug_toggle.set_active(True) - #self.debug_toggle.connect("toggled", self._on_debug_toggled) - - # TODO: make button class - i = Icon(INPUT_KEYBOARD) - i.set_margin_start(5) - self.keys = Gtk.Button( - label=strings.keys_button, - margin_start=80, - margin_end=80, - tooltip_text=strings.keys_tooltip, - image = i, - ) - self.keys.set_image_position(Gtk.PositionType.RIGHT) + self.keys = KeysButton(strings.keys_button) + self.keys.set_tooltip_text(strings.keys_tooltip) self.keys.connect("clicked", self._on_question_clicked) - for el in self.button_vbox, self.filters_vbox, self.refresh_button: + for el in self.button_vbox, self.keys, self.filters_vbox, self.refresh_button: self.pack_start(el, NO_EXPAND, FILL, NO_PADDING) self.pack_start(self.sel_panel, NO_EXPAND, NO_FILL, NO_PADDING) - self.pack_start(self.keys, NO_EXPAND, FILL, NO_PADDING) - - - def enable_ping_button(self, state: bool) -> None: - self.ping.set_visible(state) + # TODO: move to filter panel def reinit_maps(self, rows: list) -> None: self.controller.reinit_map_store() # TODO: communicate with controller @@ -93,38 +52,38 @@ class RightPanel(Gtk.Box): def _on_refresh_clicked(self, button: RefreshButton) -> None: self.controller.refresh_tree() - def _on_ping_clicked(self, button: Gtk.Button) -> None: - # TODO - block_signals() + #def _on_ping_clicked(self, button: Gtk.Button) -> None: + # # TODO + # block_signals() - def _update_pings(): - # TODO - rows = ModelManager.get_filtered() - with ThreadPoolExecutor(100) as executor: - futures = [ - executor.submit(Servers.ping, i, row) - for i, row in enumerate(rows) - ] - wait(futures) - for future in futures: - res = future.result() - path = Gtk.TreePath.new_from_indices([res.iteration]) - temp_model[path][9] = res.ping - ModelManager.ping_cache[res.addr] = res.ping - # TODO: drop/rewrite - self.AppNav.treeview.set_model(temp_model) - self.AppNav.treeview.wait_dialog.destroy() - self.AppNav.treeview.grab_focus() + # def _update_pings(): + # # TODO + # rows = ModelManager.get_filtered() + # with ThreadPoolExecutor(100) as executor: + # futures = [ + # executor.submit(Servers.ping, i, row) + # for i, row in enumerate(rows) + # ] + # wait(futures) + # for future in futures: + # res = future.result() + # path = Gtk.TreePath.new_from_indices([res.iteration]) + # temp_model[path][9] = res.ping + # ModelManager.ping_cache[res.addr] = res.ping + # # TODO: drop/rewrite + # self.AppNav.treeview.set_model(temp_model) + # self.AppNav.treeview.wait_dialog.destroy() + # self.AppNav.treeview.grab_focus() - # TODO: - unblock_signals() + # # TODO: + # unblock_signals() - temp_model = self.AppNav.treeview.get_model() - self.AppNav.treeview.set_model(None) - self.AppNav.treeview.wait_dialog = GenericDialog("Pinging servers", Popup.WAIT) - self.AppNav.treeview.wait_dialog.show_all() - thread = threading.Thread(target=_update_pings, args=()) - thread.start() + # temp_model = self.AppNav.treeview.get_model() + # self.AppNav.treeview.set_model(None) + # self.AppNav.treeview.wait_dialog = GenericDialog("Pinging servers", Popup.WAIT) + # self.AppNav.treeview.wait_dialog.show_all() + # thread = threading.Thread(target=_update_pings, args=()) + # thread.start() def _on_question_clicked(self, button: Gtk.Button) -> None: self.controller.open_keybindings() diff --git a/dzgui/views/dialogs/link_dialog.py b/dzgui/views/dialogs/link_dialog.py index ed98f59..b5db94f 100644 --- a/dzgui/views/dialogs/link_dialog.py +++ b/dzgui/views/dialogs/link_dialog.py @@ -5,7 +5,7 @@ from dzgui.const.enum import Popup, Preferences from dzgui.const.constants import NO_EXPAND, NO_FILL from dzgui.util.open_links import open_user_workshop from dzgui.views.dialogs.generic import GenericDialog -from dzgui.views.components.web_button import WebButton +from dzgui.views.components.buttons import WebButton import gi gi.require_version("Gtk", "3.0") @@ -41,8 +41,9 @@ class WorkshopLinkDialog(GenericDialog): def _on_button_clicked(self, button: Gtk.Button, uid: str) -> None: # TODO: currently checks user id on instantiation - client = self.controller.query_config(Preferences.CLIENT) - open_user_workshop(uid, client) + self.controller.open_user_workshop(uid) + #client = self.controller.query_config(Preferences.CLIENT) + #open_user_workshop(uid, client) def _on_dialog_response( self, dialog: Self, resp: Gtk.ResponseType diff --git a/dzgui/views/pages/devs.py b/dzgui/views/pages/devs.py index 40ff46b..80b01fe 100644 --- a/dzgui/views/pages/devs.py +++ b/dzgui/views/pages/devs.py @@ -3,8 +3,8 @@ from typing import Union, TYPE_CHECKING from dzgui.const.enum import NotebookPage from dzgui.util.css import add_class -from dzgui.util.format import embolden from dzgui.util.strings import developers +from dzgui.views.components.labels import BoldLabel import gi # noqa E402 gi.require_version("Gtk", "3.0") @@ -35,13 +35,9 @@ class Developers(Gtk.Box): back_button = Gtk.Button(label="Back", halign=Gtk.Align.START) back_button.connect("clicked", self._on_back_clicked) - paths_label = Gtk.Label() - text = embolden(developers.paths_label) - paths_label.set_markup(text) - prefs_label = Gtk.Label() - text = embolden(developers.prefs_label) - prefs_label.set_markup(text) + paths_label = BoldLabel(developers.paths_label) + prefs_label = BoldLabel(developers.prefs_label) paths_tree = self._make_tree(self.controller.prefs.paths) prefs_tree = self._make_tree(self.controller.prefs) diff --git a/dzgui/views/pages/options.py b/dzgui/views/pages/options.py index a8967e2..8d6fe55 100644 --- a/dzgui/views/pages/options.py +++ b/dzgui/views/pages/options.py @@ -8,7 +8,7 @@ from dzgui.util import strings, css, open_links from dzgui.views.components.label import LeftLabel from dzgui.views.components.eventbox import InfoEventBox -from dzgui.views.components.web_button import WebButton +from dzgui.views.components.buttons import WebButton from dzgui.views.dialogs.link_dialog import WorkshopLinkDialog from dzgui.const.enum import Preferences, Popup @@ -303,6 +303,7 @@ class Options(Gtk.Box): #call_on_thread(show_wait_dialog, cmd, wait_msg, "") def _on_client_changed(self, combo: Gtk.ComboBoxText) -> None: + # TODO: use two columns or constants here, not strings client = combo.get_active_text() match client: case "Steam": @@ -423,9 +424,10 @@ class Options(Gtk.Box): return box def populate_settings(self) -> None: + # TODO: controller.get_config() prefs = self.controller.get_prefs() if prefs.paths.config.is_file() is False: - # in case file got deleted locally + # NOTE: in case file got deleted locally self.controller.spawn_dialog(strings.config_not_found, Popup.QUIT) return diff --git a/dzgui/views/trees/tree_servers.py b/dzgui/views/trees/tree_servers.py index b24afff..a686165 100644 --- a/dzgui/views/trees/tree_servers.py +++ b/dzgui/views/trees/tree_servers.py @@ -180,6 +180,7 @@ class ServerTreeView(TreeView): case Gdk.KEY_r: self.refresh_player_count() case Gdk.KEY_f: + # TODO: register filter panel instead of mediating thru right panel self.controller.mediator.grid.right_panel.filters_vbox.keyword_entry.grab_focus() case Gdk.KEY_m: self.controller.mediator.grid.right_panel.filters_vbox.maps_entry.grab_focus() @@ -191,7 +192,7 @@ class ServerTreeView(TreeView): self.controller.toggle_check(event) def set_context_menu(self, items: ContextMenuGroup) -> None: - # TODO: if debug is on, add raw command + # TODO: if debug is on, add raw command copy to context menu for item in items.value: menu_item = EnumeratedMenuItem(item) menu_item.connect("activate", self._on_menu_click) @@ -199,6 +200,7 @@ class ServerTreeView(TreeView): self.menu.show_all() def _on_menu_click(self, item) -> None: + print(f"UNIMPLEMENTED: {item.enum}") pass def _on_server_button_release(