fix: connect signals to new notebook tabs

This commit is contained in:
aclist committed 2025-12-21 03:01:55 +09:00
1 parent e281345323
commit 8b3d8c94fd
10 files changed
+137 -197

No files matched your search

+5 -100
View File
@@ -361,20 +361,6 @@ class ContextMenuGroup(Enum):
) )
MAIN_MENU_ROWS = (
RowType.SERVER_BROWSER,
RowType.SAVED_SERVERS,
RowType.RECENT_SERVERS,
RowType.SCAN_LAN,
RowType.SEPARATOR,
RowType.QUICK_CONNECT,
RowType.CONN_BY_IP,
RowType.CONN_BY_ID,
RowType.SEPARATOR,
RowType.ADD_BY_IP,
RowType.ADD_BY_ID,
RowType.CHNG_FAV,
)
HELP_MENU_ROWS = ( HELP_MENU_ROWS = (
RowType.CHANGELOG, RowType.CHANGELOG,
RowType.SHOW_LOG, RowType.SHOW_LOG,
@@ -389,87 +375,6 @@ HELP_MENU_ROWS = (
RowType.THANKS, RowType.THANKS,
) )
#class WindowContext(EnumWithAttrs):
# # TODO: deprecated
# @classmethod
# def row2con(cls, row: RowType) -> "WindowContext":
# m = WindowContext.MAIN_MENU
# for member in cls:
# if row in member.dict["rows"]:
# m = member
# elif row in member.dict["called_by"]:
# m = member
# else:
# continue
# return m
#
# # outer menu pages
# # TODO: some deprecated keys in here
# #MAIN_MENU = {
# # RowType.SERVER_BROWSER,
# # RowType.SAVED_SERVERS,
# # RowType.RECENT_SERVERS,
# # RowType.SCAN_LAN,
# # RowType.SEPARATOR,
# # RowType.QUICK_CONNECT,
# # RowType.CONN_BY_IP,
# # RowType.CONN_BY_ID,
# # RowType.SEPARATOR,
# # RowType.ADD_BY_IP,
# # RowType.ADD_BY_ID,
# # RowType.CHNG_FAV,
# # }
# #MODS = {
# # "label": "Mods",
# # "rows": [],
# # "called_by": [],
# #}
# HELP = {
# "label": "Help",
# "rows": [
# RowType.CHANGELOG,
# RowType.SHOW_LOG,
# RowType.DUMP_LOG,
# RowType.SEPARATOR,
# RowType.DOCS,
# RowType.DOCS_FALLBACK,
# RowType.BUGS,
# RowType.FORUM,
# RowType.SPONSOR,
# RowType.SEPARATOR,
# RowType.THANKS,
# ],
# "called_by": [],
# }
#
# ## inner server contexts
# #TABLE_API = {
# # "label": "",
# # "rows": [],
# # "called_by": [RowType.SERVER_BROWSER],
# #}
# #TABLE_SERVER = {
# # "label": "",
# # "rows": [],
# # "called_by": [
# # RowType.SAVED_SERVERS,
# # RowType.RECENT_SERVERS,
# # RowType.SCAN_LAN,
# # ],
# #}
# #TABLE_MODS = {
# # "label": "",
# # "rows": [],
# # "called_by": [
# # RowType.LIST_MODS,
# # ],
# #}
# #TABLE_LOG = {
# # "label": "",
# # "rows": [],
# # "called_by": [RowType.SHOW_LOG],
# #}
class ModButton(EnumWithAttrs): class ModButton(EnumWithAttrs):
SELECT_ALL = { SELECT_ALL = {
@@ -499,10 +404,10 @@ class ModButton(EnumWithAttrs):
class ButtonType(EnumWithAttrs): class ButtonType(EnumWithAttrs):
MAIN_MENU = { SERVERS = {
"label": strings.buttons.main_label, "label": strings.buttons.servers_label,
"tooltip": strings.buttons.main_tooltip, "tooltip": strings.buttons.servers_tooltip,
"opens": NotebookPage.MAIN, "opens": NotebookPage.SERVERS,
} }
MODS = { MODS = {
"label": strings.buttons.mods_label, "label": strings.buttons.mods_label,
@@ -517,7 +422,7 @@ class ButtonType(EnumWithAttrs):
HELP = { HELP = {
"label": strings.buttons.help_label, "label": strings.buttons.help_label,
"tooltip": strings.buttons.help_tooltip, "tooltip": strings.buttons.help_tooltip,
"opens": NotebookPage.MAIN, "opens": NotebookPage.HELP,
} }
EXIT = { EXIT = {
"label": strings.buttons.exit_label, "label": strings.buttons.exit_label,
+39 -8
View File
@@ -79,8 +79,8 @@ class Controller:
def get_crumbs(self) -> str: def get_crumbs(self) -> str:
return self.mediator.grid.get_breadcrumbs() return self.mediator.grid.get_breadcrumbs()
def get_row_store(self) -> Gtk.ListStore: #def get_row_store(self) -> Gtk.ListStore:
return self.model_manager.get_row_store() # return self.model_manager.get_row_store()
def get_help_store(self) -> Gtk.ListStore: def get_help_store(self) -> Gtk.ListStore:
return self.model_manager.get_help_store() return self.model_manager.get_help_store()
@@ -160,7 +160,8 @@ class Controller:
widget.handler_block_by_func(func) widget.handler_block_by_func(func)
else: else:
widget.handler_unblock_by_func(func) widget.handler_unblock_by_func(func)
self.mediator.treeview.sel_blocked = state # TODO
#self.mediator.treeview.sel_blocked = state
def toggle_debug_mode(self) -> None: def toggle_debug_mode(self) -> None:
self.toggle_config(Preferences.DEBUG) self.toggle_config(Preferences.DEBUG)
@@ -277,6 +278,7 @@ class Controller:
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:
print(button.context)
match button.context: match button.context:
case ButtonType.EXIT: case ButtonType.EXIT:
logger.info("Normal user exit") logger.info("Normal user exit")
@@ -288,13 +290,16 @@ class Controller:
self.load_mods() self.load_mods()
case ButtonType.HELP: case ButtonType.HELP:
help_store = self.model_manager.get_help_store() help_store = self.model_manager.get_help_store()
# TODO: simply set this model once and open the page
self.mediator.treeview.set_model(help_store) self.mediator.treeview.set_model(help_store)
case ButtonType.MAIN_MENU: case ButtonType.SERVERS:
# TODO: going to be deprecated after server notebook is added self.mediator.notebook.set_page_by_enum(button.opens)
row_store = self.model_manager.get_row_store() # TODO: shorten this
self.mediator.treeview.set_model(row_store) treeview = self.mediator.notebook.servers.get_active_treeview()
treeview.grab_focus()
return
self.mediator.grid.notebook.set_page_by_enum(button.opens) self.mediator.notebook.set_page_by_enum(button.opens)
self.set_crumbs(button.get_label()) self.set_crumbs(button.get_label())
# TODO: deprecated? # TODO: deprecated?
@@ -544,3 +549,29 @@ class Controller:
def get_developer_mode(self) -> bool: def get_developer_mode(self) -> bool:
return self.is_developer return self.is_developer
def set_server_statusbar(self) -> None:
# TODO: different models
model = self.model_manager.get_server_store()
model = AppNav.treeview.get_model()
if model is None:
players = 0
hits = 0
else:
hits = len(model)
players = 0
for row in model:
players += row[4]
# TODO: move to util.format
players_pretty = pluralize("players", players)
hits_pretty = pluralize("matches", hits)
formatted = (
f"Found {hits:n} {hits_pretty} with {players:n} {players_pretty}"
)
suffix = "| Distance: calculating..."
if players == 0:
suffix = ""
self.set_text(formatted + suffix)
self.players = formatted
+7 -7
View File
@@ -2,7 +2,7 @@ import re
from dataclasses import dataclass from dataclasses import dataclass
from typing import Self from typing import Self
from dzgui.const.enum import FilterMode, MAIN_MENU_ROWS, HELP_MENU_ROWS from dzgui.const.enum import FilterMode, HELP_MENU_ROWS
from dzgui.util import strings from dzgui.util import strings
import gi import gi
@@ -69,16 +69,16 @@ class ModelManager:
self.ping_cache: dict[str, int] = {} self.ping_cache: dict[str, int] = {}
self.map_store = ListStore(str) self.map_store = ListStore(str)
self.row_store = self.new_model_from_class(MenuCols) #self.row_store = self.new_model_from_class(MenuCols)
self.help_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.mod_store = self.new_model_from_class(ModCols)
self.log_store = self.new_model_from_class(LogCols) self.log_store = self.new_model_from_class(LogCols)
self.modlist_store = self.new_model_from_class(ServerModCols) self.modlist_store = self.new_model_from_class(ServerModCols)
for row in MAIN_MENU_ROWS: #for row in MAIN_MENU_ROWS:
label = row.dict["label"] # label = row.dict["label"]
self.row_store.append([label, row]) # self.row_store.append([label, row])
for row in HELP_MENU_ROWS: for row in HELP_MENU_ROWS:
label = row.dict["label"] label = row.dict["label"]
@@ -100,8 +100,8 @@ class ModelManager:
def get_map_store(self) -> ListStore: def get_map_store(self) -> ListStore:
return self.map_store return self.map_store
def get_row_store(self) -> ListStore: #def get_row_store(self) -> ListStore:
return self.row_store # return self.row_store
def get_help_store(self) -> ListStore: def get_help_store(self) -> ListStore:
return self.help_store return self.help_store
+5 -5
View File
@@ -240,8 +240,8 @@ class Init:
@dataclass(slots=True, frozen=True) @dataclass(slots=True, frozen=True)
class Button: class Button:
main_label: str servers_label: str
main_tooltip: str servers_tooltip: str
mods_label: str mods_label: str
mods_tooltip: str mods_tooltip: str
options_label: str options_label: str
@@ -426,8 +426,8 @@ dialog = Dialog(
) )
buttons = Button( buttons = Button(
main_label="Main menu", servers_label="Servers",
main_tooltip="Search for and connect to servers", servers_tooltip="Search for and connect to servers",
mods_label="Mods", mods_label="Mods",
mods_tooltip="Manage local mods", mods_tooltip="Manage local mods",
options_label="Options", options_label="Options",
@@ -448,7 +448,7 @@ crumbs = Crumbs(
mods="Mods", mods="Mods",
my_servers="Main menu > Saved servers", my_servers="Main menu > Saved servers",
options="Options", options="Options",
servers="Main menu > Server browser", servers="Servers",
thanks="Help > Special thanks", thanks="Help > Special thanks",
developers="Options > Developers", developers="Options > Developers",
) )
+38 -42
View File
@@ -11,13 +11,12 @@ import threading
import typing # noqa import typing # noqa
import warnings import warnings
from collections.abc import Callable #from concurrent.futures import wait
from concurrent.futures import wait #from concurrent.futures import ThreadPoolExecutor
from concurrent.futures import ThreadPoolExecutor
from dataclasses import dataclass from dataclasses import dataclass
from enum import Enum from enum import Enum
from pathlib import Path from pathlib import Path
from typing import Literal, Any
# TODO: most likely very little of this will be retained # TODO: most likely very little of this will be retained
from dzgui.const.enum import ( from dzgui.const.enum import (
@@ -26,7 +25,6 @@ from dzgui.const.enum import (
RowType, RowType,
NotebookPage, NotebookPage,
VAdjustment, VAdjustment,
MAIN_MENU_ROWS,
) )
from dzgui.const.constants import NO_EXPAND, NO_FILL, EXPAND, FILL from dzgui.const.constants import NO_EXPAND, NO_FILL, EXPAND, FILL
from dzgui.const.constants import APP_NAME, APP_NAME_LOWER, WINDOW_DEFAULT_X, WINDOW_DEFAULT_Y from dzgui.const.constants import APP_NAME, APP_NAME_LOWER, WINDOW_DEFAULT_X, WINDOW_DEFAULT_Y
@@ -34,26 +32,25 @@ from dzgui.controllers.mc import Controller
from dzgui.util import css, dist, localize, strings, ip, deck, open_links from dzgui.util import css, dist, localize, strings, ip, deck, open_links
from dzgui.util.format import pluralize from dzgui.util.format import pluralize
# GRID ITEMS # NOTEBOOK ITEMS
# TODO: import notebook only and add components there? # TODO: import notebook only and add components there?
from dzgui.views.pages.changelog import Changelog from dzgui.views.pages.changelog import Changelog
from dzgui.views.pages.keys import Keybindings from dzgui.views.pages.keys import Keybindings
from dzgui.views.pages.thanks import Thanks
from dzgui.views.pages.options import Options from dzgui.views.pages.options import Options
from dzgui.views.pages.servers import ServerNotebook
from dzgui.views.pages.thanks import Thanks
from dzgui.views.components.mod_panel import ModSelectionPanel from dzgui.views.components.mod_panel import ModSelectionPanel
from dzgui.views.components.right_panel import RightPanel from dzgui.views.components.right_panel import RightPanel
from dzgui.views.components.toast import Toast from dzgui.views.components.toast import Toast
from dzgui.views.dialogs.generic import GenericDialog
from dzgui.views.mixins.scrollable_mixin import ScrollableMixin from dzgui.views.mixins.scrollable_mixin import ScrollableMixin
# TREES # TREES
from dzgui.views.trees.tree_log import LogTreeView from dzgui.views.trees.tree_log import LogTreeView
from dzgui.views.trees.tree_menu import MenuTreeView
from dzgui.views.trees.tree_mods import ModTreeView from dzgui.views.trees.tree_mods import ModTreeView
from dzgui.views.trees.tree_servers import ServerTreeView from dzgui.views.trees.tree_servers import ServerTreeView
from dzgui.views.dialogs.generic import GenericDialog
# TODO: not going to be in base anymore # TODO: not going to be in base anymore
import dzgui.util._json as JSON # noqa import dzgui.util._json as JSON # noqa
@@ -233,6 +230,7 @@ class OuterWindow(Gtk.Window):
self.toast = Toast() self.toast = Toast()
self.overlay = Gtk.Overlay() self.overlay = Gtk.Overlay()
self.overlay.add_overlay(self.grid) self.overlay.add_overlay(self.grid)
# TODO: toast is deprecated
self.overlay.add_overlay(self.toast) self.overlay.add_overlay(self.toast)
self.add(self.overlay) self.add(self.overlay)
@@ -244,7 +242,7 @@ class OuterWindow(Gtk.Window):
self.grid.sel_panel.set_visible(False) self.grid.sel_panel.set_visible(False)
# TODO: register from treeview or notebook # TODO: register from treeview or notebook
AppNav.treeview = self.grid.notebook.scrollable_treelist.treeview #AppNav.treeview = self.grid.notebook.scrollable_treelist.treeview
css.load_css() css.load_css()
AppNav.grid.notebook.set_page_by_enum(NotebookPage.SERVERS) AppNav.grid.notebook.set_page_by_enum(NotebookPage.SERVERS)
@@ -268,27 +266,15 @@ class OuterWindow(Gtk.Window):
MainController.save_res_and_quit() MainController.save_res_and_quit()
# TODO: consolidate
# wrap base tree class in this
class ScrollableTree(Gtk.ScrolledWindow):
def __init__(self):
super().__init__()
self.treeview = MenuTreeView(MainController)
self.add(self.treeview)
def _set_adjustment(self, adjustment: VAdjustment) -> None:
pass
class AppHeaderBar(Gtk.HeaderBar): class AppHeaderBar(Gtk.HeaderBar):
def __init__(self): def __init__(self) -> None:
super().__init__() super().__init__()
self.props.title = APP_NAME self.props.title = APP_NAME
self.set_decoration_layout(":minimize,maximize,close") self.set_decoration_layout(":minimize,maximize,close")
self.set_show_close_button(True) self.set_show_close_button(True)
# TODO: deprecated
class ScrollableNote(ScrollableMixin, Gtk.Box): class ScrollableNote(ScrollableMixin, Gtk.Box):
def __init__(self, content_box: Gtk.Box, back_button=False): def __init__(self, content_box: Gtk.Box, back_button=False):
super().__init__(orientation=Gtk.Orientation.VERTICAL) super().__init__(orientation=Gtk.Orientation.VERTICAL)
@@ -322,11 +308,11 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
AppNav.notebook = self AppNav.notebook = self
self.prior_page: int self.prior_page: int
# TODO: set internally # TODO: set static help page
self.scrollable_treelist = ScrollableTree() #self.scrollable_treelist = ScrollableTree()
self.scrollable_treelist.set_hexpand(False) #self.scrollable_treelist.set_hexpand(False)
self.scrollable_treelist.set_vexpand(True) #self.scrollable_treelist.set_vexpand(True)
self.scrollable_treelist.type = None #self.scrollable_treelist.type = None
self.change = Changelog(MainController) self.change = Changelog(MainController)
self.clog = ScrollableNote(self.change, back_button=False) self.clog = ScrollableNote(self.change, back_button=False)
@@ -344,11 +330,8 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
# add all treeviews as page and register them to AppNav and self.indexes # add all treeviews as page and register them to AppNav and self.indexes
# when switching to a treeview, update relevant view and just pop that page # when switching to a treeview, update relevant view and just pop that page
# instead of loading/unloading the model each time # instead of loading/unloading the model each time
from dzgui.views.pages.servers import ServerNotebook
self.servers = ServerNotebook(MainController) self.servers = ServerNotebook(MainController)
#self.ssu = Gtk.ScrolledWindow() AppNav.servers = self.servers
#self.servers = ServerTreeView(MainController)
#self.ssu.add(self.servers)
self.quad = Gtk.ScrolledWindow() self.quad = Gtk.ScrolledWindow()
@@ -369,9 +352,9 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
from dzgui.views.pages.devs import Developers from dzgui.views.pages.devs import Developers
developers = Developers(MainController) developers = Developers(MainController)
self.developers = ScrollableNote(developers) self.developers = ScrollableNote(developers)
self.pages = { self.pages = {
self.scrollable_treelist: NotebookPage.MAIN, #self.scrollable_treelist: NotebookPage.MAIN,
self.clog: NotebookPage.CHANGELOG, self.clog: NotebookPage.CHANGELOG,
self.keys: NotebookPage.KEYS, self.keys: NotebookPage.KEYS,
self.settings: NotebookPage.OPTIONS, self.settings: NotebookPage.OPTIONS,
@@ -491,6 +474,7 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
self.focus_current() self.focus_current()
# TODO: should be an internal property of those pages # TODO: should be an internal property of those pages
blank = [ blank = [
NotebookPage.SERVERS,
NotebookPage.OPTIONS, NotebookPage.OPTIONS,
NotebookPage.THANKS, NotebookPage.THANKS,
NotebookPage.CHANGELOG, NotebookPage.CHANGELOG,
@@ -510,13 +494,11 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
crumbs = enum.dict["crumbs"] crumbs = enum.dict["crumbs"]
MainController.set_crumbs(crumbs) MainController.set_crumbs(crumbs)
# TODO: going to be deprecated after server notebook is added # TODO:
if enum is not NotebookPage.MAIN: # MainController.set_help_menu_crumbs()
return
MainController.set_help_menu_crumbs()
# TODO: move to components
class Statusbar(Gtk.Statusbar): class Statusbar(Gtk.Statusbar):
def __init__(self) -> None: def __init__(self) -> None:
super().__init__() super().__init__()
@@ -603,6 +585,14 @@ class Grid(Gtk.Grid):
self.attach_next_to( self.attach_next_to(
self.breadcrumbs, self.notebook, Gtk.PositionType.TOP, 3, 1 self.breadcrumbs, self.notebook, Gtk.PositionType.TOP, 3, 1
) )
#from dzgui.views.components.connect_panel import ConnectPanel
#self.conpan = ConnectPanel()
#self.attach_next_to(
# self.conpan, self.notebook, Gtk.PositionType.BOTTOM, 3, 1
#)
self.attach_next_to( self.attach_next_to(
self.statusbar, self.notebook, Gtk.PositionType.BOTTOM, 3, 1 self.statusbar, self.notebook, Gtk.PositionType.BOTTOM, 3, 1
) )
@@ -615,6 +605,7 @@ class Grid(Gtk.Grid):
return self.breadcrumbs.get_text() return self.breadcrumbs.get_text()
def set_breadcrumbs(self, text: str) -> None: def set_breadcrumbs(self, text: str) -> None:
# TODO: embolden func
self.breadcrumbs.set_markup(f"<b>{text}</b>") self.breadcrumbs.set_markup(f"<b>{text}</b>")
@@ -658,7 +649,12 @@ class AppNavigation:
window: OuterWindow window: OuterWindow
notebook: Notebook notebook: Notebook
right_panel: RightPanel right_panel: RightPanel
treeview: MenuTreeView #treeview: MenuTreeView
servers: Gtk.ScrolledWindow
browser: ServerTreeView
saved: ServerTreeView
recent: ServerTreeView
lan: ServerTreeView
modtreeview: ModTreeView modtreeview: ModTreeView
logtreeview: LogTreeView logtreeview: LogTreeView
# TODO: add tree_log and tree_server views here # TODO: add tree_log and tree_server views here
+4 -1
View File
@@ -29,7 +29,6 @@ class ButtonBox(Gtk.Box):
orientation=Gtk.Orientation.VERTICAL, orientation=Gtk.Orientation.VERTICAL,
) )
self.prior_button = ButtonType.MAIN_MENU
self.controller = controller self.controller = controller
self.buttons = list() self.buttons = list()
self.connect("key-press-event", self._on_keypress) self.connect("key-press-event", self._on_keypress)
@@ -56,6 +55,10 @@ class ButtonBox(Gtk.Box):
def _on_selection_button_clicked(self, button: Gtk.Button) -> None: def _on_selection_button_clicked(self, button: Gtk.Button) -> None:
self.controller.open_page_by_button(button) self.controller.open_page_by_button(button)
button.set_sensitive(False)
for b in self.buttons:
if b != button:
b.set_sensitive(True)
def _walk_buttons(self, increment: int) -> None: def _walk_buttons(self, increment: int) -> None:
for i, button in enumerate(self.buttons): for i, button in enumerate(self.buttons):
+20 -5
View File
@@ -2,16 +2,31 @@ 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 # noqa E402
from dzgui.views.components.web_button import WebButton
class ConnectPanel(Gtk.Grid): class ConnectPanel(Gtk.Grid):
def __init__(self) -> None: def __init__(self) -> None:
super().__init__() super().__init__(vexpand=False, margin=20)
self.label = Gtk.Label(label="Connect by IP/ID") self.label = Gtk.Label(label="Connect by IP/ID")
self.label2 = Gtk.Label(label="Save server by IP/ID") self.label2 = Gtk.Label(label="Favorite server")
self.entry1 = Gtk.Entry() # TODO: embold function
self.label2.set_markup("<b>Favorite server</b>")
sep = Gtk.Separator()
self.entry1 = Gtk.Entry(placeholder_text="Enter IP or Battlemetrics ID", hexpand=False)
self.entry2 = Gtk.Entry() self.entry2 = Gtk.Entry()
self.fav = Gtk.Label("MY favorite server")
self.favedit = Gtk.Button("Edit")
self.edit = WebButton(label="EDIT")
self.favbutton = Gtk.Button(label="Connect")
self.attach(self.label, 0, 0, 3, 1) self.attach(self.label, 0, 0, 3, 1)
button = Gtk.Button(label="Connect")
self.attach_next_to(self.entry1, self.label, Gtk.PositionType.BOTTOM, 3, 1) self.attach_next_to(self.entry1, self.label, Gtk.PositionType.BOTTOM, 3, 1)
self.attach_next_to(self.label2, self.entry1, Gtk.PositionType.BOTTOM, 3, 1) self.attach_next_to(button, self.entry1, Gtk.PositionType.RIGHT, 3, 1)
self.attach_next_to(self.entry2, self.label2, Gtk.PositionType.BOTTOM, 3, 1)
self.attach_next_to(sep, self.entry1, Gtk.PositionType.BOTTOM, 3, 1)
self.attach_next_to(self.label2, sep, Gtk.PositionType.BOTTOM, 3, 1)
self.attach_next_to(self.fav, self.label2, Gtk.PositionType.BOTTOM, 3, 1)
self.attach_next_to(self.edit, self.fav, Gtk.PositionType.RIGHT, 3, 1)
self.attach_next_to(self.favbutton, self.edit, Gtk.PositionType.RIGHT, 3, 1)
+1 -1
View File
@@ -5,7 +5,7 @@ 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 # noqa E402
# TODO: abstract to support other icons
class WebButton(Gtk.Button): class WebButton(Gtk.Button):
def __init__(self, label: str): def __init__(self, label: str):
super().__init__(label=label) super().__init__(label=label)
+7 -2
View File
@@ -84,10 +84,15 @@ class TreeView(CursorMixin, Gtk.TreeView):
if is_navkey(event.keyval): if is_navkey(event.keyval):
# TODO: investigate this # TODO: investigate this
# TODO: get active tree if server view is open
servers = self.controller.mediator.notebook.servers
tv = servers.get_active_treeview()
if self.sel_blocked is False: if self.sel_blocked is False:
self.controller.suppress_signal( self.controller.suppress_signal(
self.controller.mediator.treeview, tv,
self.controller.mediator.treeview.selected_row, tv.selected_row,
#self.controller.mediator.treeview,
#self.controller.mediator.treeview.selected_row,
"_on_tree_selection_changed", "_on_tree_selection_changed",
True, True,
) )
+11 -26
View File
@@ -80,14 +80,6 @@ class ServerTreeView(TreeView):
self.append_column(column) self.append_column(column)
# TODO: do not load model on initial init
# TODO: test values: see below
#r = Gtk.ListStore(
# str, str, str, str, int, int, int, str, int, int, str, bool
#)
#r.append(["TEST", "a", "a", "a", 0, 0, 0, "a", 0, 0, "a", False])
#self.set_model(r)
self.connect("on_distcalc_started", self._on_calclat_started) self.connect("on_distcalc_started", self._on_calclat_started)
@@ -117,7 +109,7 @@ class ServerTreeView(TreeView):
addr = latest_result[0] addr = latest_result[0]
km = latest_result[1] km = latest_result[1]
cache[addr] = km cache[addr] = km
# TODO: fixme # FIXME
self.statusbar.append_distance(km) self.statusbar.append_distance(km)
return True return True
@@ -137,9 +129,6 @@ class ServerTreeView(TreeView):
return True return True
AppNav.right_panel.filters_vbox.keyword_entry.grab_focus() AppNav.right_panel.filters_vbox.keyword_entry.grab_focus()
case Gdk.KEY_m: case Gdk.KEY_m:
# FIXME: should no longer be relevant
if AppNav.treeview.view == WindowContext.TABLE_MODS:
return True
AppNav.right_panel.filters_vbox.maps_entry.grab_focus() AppNav.right_panel.filters_vbox.maps_entry.grab_focus()
else: else:
keyname = Gdk.keyval_name(event.keyval) keyname = Gdk.keyval_name(event.keyval)
@@ -164,6 +153,7 @@ class ServerTreeView(TreeView):
def _on_server_button_release( def _on_server_button_release(
self, widget: Gtk.Widget, event: Gdk.EventButton self, widget: Gtk.Widget, event: Gdk.EventButton
) -> None: ) -> None:
# TODO: use ContextMixin
if event.type is Gdk.EventType.BUTTON_RELEASE and event.button != 3: if event.type is Gdk.EventType.BUTTON_RELEASE and event.button != 3:
return return
@@ -181,6 +171,7 @@ class ServerTreeView(TreeView):
self.menu = Gtk.Menu() self.menu = Gtk.Menu()
mod_context_items = [ContextMenu.OPEN_WORKSHOP, ContextMenu.DELETE_MOD] mod_context_items = [ContextMenu.OPEN_WORKSHOP, ContextMenu.DELETE_MOD]
# TODO: reimplement server context enums # TODO: reimplement server context enums
# TODO: inherit from tree_servers.py
server_context_items = { server_context_items = {
RowType.SERVER_BROWSER: [ RowType.SERVER_BROWSER: [
ContextMenu.ADD_SERVER, ContextMenu.ADD_SERVER,
@@ -221,12 +212,7 @@ class ServerTreeView(TreeView):
} }
# TODO: how to get current server context # TODO: how to get current server context
if self.view == WindowContext.TABLE_MODS: items = server_context_items[self.subpage]
items = mod_context_items
elif self.subpage in server_context_items:
items = server_context_items[self.subpage]
else:
return
for row in items: for row in items:
if row == ContextMenu.ADD_SERVER: if row == ContextMenu.ADD_SERVER:
@@ -265,22 +251,21 @@ class ServerTreeView(TreeView):
print(self.get_value_at_index(0)) print(self.get_value_at_index(0))
def _parent_selection_changed(self, base_class: TreeView, sel: Gtk.TreeSelection): def _parent_selection_changed(self, base_class: TreeView, sel: Gtk.TreeSelection):
print(self.get_value_at_index(0))
self.terminate_process() self.terminate_process()
record = self.get_record() record = self.get_record()
print(record)
# TODO: ? if record is None:
if not record: # TODO: move to controller
grid.statusbar.update_server_meta() #grid.statusbar.update_server_meta()
return return
ip = record.ip ip = record.ip
self.emit("on_distcalc_started") # TODO
self.current_proc = CalcDist(self, record.ip, self.queue, cache) #self.emit("on_distcalc_started")
self.current_proc.start() #self.current_proc = CalcDist(self, record.ip, self.queue, cache)
#self.current_proc.start()
def get_record_string(self) -> str: def get_record_string(self) -> str:
addr = self.get_value_at_index(7) addr = self.get_value_at_index(7)