mirror of
https://github.com/aclist/dztui.git
synced 2026-11-06 10:00:54 +01:00
fix: clean up signal emission
This commit is contained in:
1 parent
4946705a8b
commit
25f19cfd10
15 files changed
+116
-72
No files matched your search
@@ -1,20 +1,26 @@
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from dzgui.util.strings import connect_panel, fav_panel, lan_panel
|
||||
from dzgui.views.components.buttons import AddButton, ClipboardButton, SteamConnectButton
|
||||
from dzgui.views.components.buttons import (
|
||||
AddButton,
|
||||
ClipboardButton,
|
||||
SteamConnectButton,
|
||||
)
|
||||
from dzgui.views.components.entry import IpEntry, PortEntry
|
||||
from dzgui.views.components.labels import BoldLabel
|
||||
|
||||
import gi
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gdk # noqa E402
|
||||
from gi.repository import Gtk, Gdk # noqa E402
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from dzgui.controllers.mc import Controller
|
||||
from dzgui.controllers.mc import Controller, Emitter
|
||||
|
||||
COLS = 1
|
||||
ROWS = 1
|
||||
|
||||
|
||||
class LanPanel(Gtk.Frame):
|
||||
def __init__(self, controller: "Controller") -> None:
|
||||
super().__init__(margin_top=10, margin_bottom=5)
|
||||
@@ -27,20 +33,26 @@ class LanPanel(Gtk.Frame):
|
||||
self.set_label_widget(label)
|
||||
|
||||
radio1 = Gtk.RadioButton.new_with_label(None, lan_panel.default_button)
|
||||
radio2 = Gtk.RadioButton.new_with_label_from_widget(radio1, lan_panel.custom_button)
|
||||
radio2 = Gtk.RadioButton.new_with_label_from_widget(
|
||||
radio1, lan_panel.custom_button
|
||||
)
|
||||
|
||||
self.entry = PortEntry(controller)
|
||||
self.scan = Gtk.Button(label=lan_panel.scan_button)
|
||||
|
||||
self.entry.connect("string_validated", self._on_port_validated)
|
||||
self.emitter.connect("request_lan_entry_focus", lambda _: self.entry.grab_focus())
|
||||
self.emitter.connect(
|
||||
"request_lan_entry_focus", lambda _: self.entry.grab_focus()
|
||||
)
|
||||
radio1.connect("toggled", self._on_radio_toggled)
|
||||
|
||||
self.grid = Gtk.Grid(margin=10, vexpand=False, column_spacing=15, row_spacing=5)
|
||||
self.grid.attach(radio1, 0, 0, COLS, ROWS)
|
||||
self.grid.attach_next_to(radio2, radio1, Gtk.PositionType.RIGHT, COLS, ROWS)
|
||||
self.grid.attach_next_to(self.entry, radio2, Gtk.PositionType.RIGHT, COLS, ROWS)
|
||||
self.grid.attach_next_to(self.scan, self.entry, Gtk.PositionType.RIGHT, COLS, ROWS)
|
||||
self.grid.attach_next_to(
|
||||
self.scan, self.entry, Gtk.PositionType.RIGHT, COLS, ROWS
|
||||
)
|
||||
|
||||
self.add(self.grid)
|
||||
|
||||
@@ -52,6 +64,7 @@ class LanPanel(Gtk.Frame):
|
||||
def _on_port_validated(self, entry: Gtk.Entry, state: bool) -> None:
|
||||
self.scan.set_sensitive(state)
|
||||
|
||||
|
||||
class FavPanel(Gtk.Frame):
|
||||
def __init__(self, controller: "Controller") -> None:
|
||||
super().__init__(margin_top=10, margin_bottom=5)
|
||||
@@ -63,8 +76,17 @@ class FavPanel(Gtk.Frame):
|
||||
|
||||
# TODO: improve upon this, cache fav ip when changed globally
|
||||
user_fav, self.fav_ip = self.controller.get_favorite()
|
||||
server_name = f"{user_fav} ({self.fav_ip})" if user_fav is not None else connect_panel.no_fav
|
||||
self.fav_label = Gtk.Label(label=server_name, track_visited_links=False, halign=Gtk.Align.START, hexpand=True)
|
||||
server_name = (
|
||||
f"{user_fav} ({self.fav_ip})"
|
||||
if user_fav is not None
|
||||
else connect_panel.no_fav
|
||||
)
|
||||
self.fav_label = Gtk.Label(
|
||||
label=server_name,
|
||||
track_visited_links=False,
|
||||
halign=Gtk.Align.START,
|
||||
hexpand=True,
|
||||
)
|
||||
# NOTE: disable vscrollbar to prevent layout jumping behavior
|
||||
scrollable_label = Gtk.ScrolledWindow(vscrollbar_policy=Gtk.PolicyType.NEVER)
|
||||
scrollable_label.add(self.fav_label)
|
||||
@@ -108,12 +130,18 @@ class AddPanel(Gtk.Frame):
|
||||
|
||||
self.entry = IpEntry(controller)
|
||||
self.entry.connect("string_validated", self._on_ip_validated)
|
||||
self.emitter.connect("request_ip_entry_focus", lambda _: self.entry.grab_focus())
|
||||
self.emitter.connect(
|
||||
"request_ip_entry_focus", lambda _: self.entry.grab_focus()
|
||||
)
|
||||
|
||||
self.grid = Gtk.Grid(margin=10, vexpand=False, column_spacing=15, row_spacing=5)
|
||||
self.grid.attach(self.entry, 0, 0, COLS, ROWS)
|
||||
self.grid.attach_next_to(self.add_server, self.entry, Gtk.PositionType.RIGHT, COLS, ROWS)
|
||||
self.grid.attach_next_to(self.conn_server, self.add_server, Gtk.PositionType.RIGHT, COLS, ROWS)
|
||||
self.grid.attach_next_to(
|
||||
self.add_server, self.entry, Gtk.PositionType.RIGHT, COLS, ROWS
|
||||
)
|
||||
self.grid.attach_next_to(
|
||||
self.conn_server, self.add_server, Gtk.PositionType.RIGHT, COLS, ROWS
|
||||
)
|
||||
|
||||
self.add(self.grid)
|
||||
|
||||
@@ -127,6 +155,8 @@ class ConnectPanel(Gtk.Box):
|
||||
super().__init__(orientation=Gtk.Orientation.VERTICAL)
|
||||
|
||||
self.controller = controller
|
||||
emitter = self.controller.get_emitter()
|
||||
emitter.connect("lan_tab_toggled", self._on_lan_tab_toggled)
|
||||
|
||||
self.lan = LanPanel(controller)
|
||||
self.fav = FavPanel(controller)
|
||||
@@ -134,3 +164,6 @@ class ConnectPanel(Gtk.Box):
|
||||
|
||||
for el in self.lan, self.fav, self.add_panel:
|
||||
self.add(el)
|
||||
|
||||
def _on_lan_tab_toggled(self, emitter: "Emitter", state: bool) -> None:
|
||||
self.lan.set_visible(state)
|
||||
@@ -2,7 +2,7 @@ import logging
|
||||
from typing import Literal, TYPE_CHECKING
|
||||
|
||||
from dzgui.const.enum import FilterMode
|
||||
from dzgui.const.constants import NO_EXPAND, NO_FILL, NO_PADDING
|
||||
from dzgui.const.constants import NO_EXPAND, NO_FILL, NO_PADDING, SEARCH_ICON
|
||||
from dzgui.util import strings
|
||||
from dzgui.util.margins import set_surrounding_margins
|
||||
from dzgui.views.components.labels import BoldLabel
|
||||
@@ -42,7 +42,7 @@ class FilterPanel(Gtk.Box):
|
||||
self.controller.register_widget("filters", self)
|
||||
self.emitter = self.controller.get_emitter()
|
||||
|
||||
map_store = self.controller.get_map_store()
|
||||
self.map_store = self.controller.get_map_store()
|
||||
|
||||
self.checks = []
|
||||
self.maps_hr = []
|
||||
@@ -86,8 +86,13 @@ class FilterPanel(Gtk.Box):
|
||||
self.keyword_entry = Gtk.Entry()
|
||||
# TODO :strings
|
||||
self.keyword_entry.set_placeholder_text("Filter by keyword")
|
||||
self.keyword_entry.connect("activate", self._on_keyword_enter)
|
||||
self.keyword_entry.connect("activate", self._on_keyword_activated)
|
||||
self.keyword_entry.connect("key-press-event", self._on_keyword_keypress)
|
||||
self.keyword_entry.set_icon_from_icon_name(
|
||||
Gtk.EntryIconPosition.SECONDARY, SEARCH_ICON
|
||||
)
|
||||
self.keyword_entry.set_icon_activatable(Gtk.EntryIconPosition.SECONDARY, False)
|
||||
# entry.connect("icon-release", self._on_icon_release)
|
||||
|
||||
self.emitter.connect(
|
||||
"request_keyword_focus", lambda _: self.keyword_entry.grab_focus()
|
||||
@@ -103,7 +108,7 @@ class FilterPanel(Gtk.Box):
|
||||
completion.connect("match_selected", self._on_completer_match)
|
||||
|
||||
renderer_text = Gtk.CellRendererText(ellipsize=Pango.EllipsizeMode.END)
|
||||
self.maps_combo = Gtk.ComboBox.new_with_model_and_entry(map_store)
|
||||
self.maps_combo = Gtk.ComboBox.new_with_model_and_entry(self.map_store)
|
||||
self.maps_combo.set_entry_text_column(0)
|
||||
|
||||
self.maps_entry = self.maps_combo.get_child()
|
||||
@@ -166,7 +171,7 @@ class FilterPanel(Gtk.Box):
|
||||
If entry is exact match for value in liststore,
|
||||
trigger map change function
|
||||
"""
|
||||
for i in enumerate(map_store): # type: ignore
|
||||
for i in enumerate(self.map_store): # type: ignore
|
||||
if text == i[1][0]:
|
||||
self.maps_combo.set_active(i[0])
|
||||
self._on_map_changed(self.maps_combo)
|
||||
@@ -174,7 +179,7 @@ class FilterPanel(Gtk.Box):
|
||||
GLib.idle_add(self.restore_focus_to_treeview)
|
||||
"""
|
||||
This is a workaround for widget.grab_remove()
|
||||
Sets cursor position to SOL when unfocusing
|
||||
Sets cursor position to start of line when unfocusing
|
||||
"""
|
||||
text = self.maps_entry.get_text()
|
||||
self.maps_entry.set_position(len(text))
|
||||
@@ -192,9 +197,8 @@ class FilterPanel(Gtk.Box):
|
||||
def _on_map_completion(self, entry, editable):
|
||||
text = entry.get_text()
|
||||
completion = entry.get_completion()
|
||||
map_store = self.controller.get_map_store()
|
||||
if len(text) >= completion.get_minimum_key_length():
|
||||
completion.set_model(map_store)
|
||||
completion.set_model(self.map_store)
|
||||
|
||||
def restore_focus_to_treeview(self) -> Literal[False]:
|
||||
view = self.controller.get_active_treeview()
|
||||
@@ -232,7 +236,7 @@ class FilterPanel(Gtk.Box):
|
||||
def get_keyword_filter(self) -> str:
|
||||
return self.keyword_filter
|
||||
|
||||
def _on_keyword_enter(self, entry: Gtk.Entry) -> None:
|
||||
def _on_keyword_activated(self, entry: Gtk.Entry) -> None:
|
||||
# TODO:
|
||||
self.controller.mediator.window.set_keep_below(False)
|
||||
keyword = entry.get_text().lower()
|
||||
|
||||
@@ -11,7 +11,7 @@ gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk # noqa E402
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from dzgui.controllers.mc import Controller
|
||||
from dzgui.controllers.mc import Controller, Emitter
|
||||
|
||||
|
||||
class EnumeratedModButton(Gtk.Button):
|
||||
@@ -28,6 +28,8 @@ class ModSelectionPanel(Gtk.Box):
|
||||
super().__init__(spacing=6, orientation=Gtk.Orientation.VERTICAL, margin_top=15)
|
||||
|
||||
self.controller = controller
|
||||
emitter = controller.get_emitter()
|
||||
emitter.connect("mod_page_toggled", self._on_mod_page_toggled)
|
||||
|
||||
header = BoldLabel(mod_panel.header)
|
||||
|
||||
@@ -58,6 +60,9 @@ class ModSelectionPanel(Gtk.Box):
|
||||
for el in header, self.main_panel, self.stale_panel:
|
||||
self.pack_start(el, NO_EXPAND, FILL, NO_PADDING)
|
||||
|
||||
def _on_mod_page_toggled(self, emitter: "Emitter", state: bool) -> None:
|
||||
self.set_visible(state)
|
||||
|
||||
def after_colorize(self) -> None:
|
||||
self.controller.unselect_all_mods()
|
||||
self.swap_sensitive(True)
|
||||
|
||||
@@ -29,6 +29,7 @@ class RightPanel(Gtk.Box):
|
||||
|
||||
self.button_vbox = ButtonBox(controller)
|
||||
self.filters_vbox = FilterPanel(controller)
|
||||
|
||||
self.sel_panel = ModSelectionPanel(controller)
|
||||
|
||||
emitter.connect("servers_loaded", self.toggle_refresh_button)
|
||||
|
||||
@@ -49,25 +49,10 @@ class Statusbar(Gtk.Grid):
|
||||
"switch-page", self._on_notebook_page_changed
|
||||
)
|
||||
|
||||
# TODO:
|
||||
self.emitter.connect("distcalc_started", self._on_distcalc_started)
|
||||
self.emitter.connect("distcalc_ended", self._on_distcalc_ended)
|
||||
self.emitter.connect("servers_loaded", self._on_servers_loaded)
|
||||
|
||||
# self.connect("distcalc_ended", self._on_distcalc_ended)
|
||||
|
||||
# @GObject.Signal(
|
||||
# flags=GObject.SignalFlags.RUN_LAST,
|
||||
# arg_types=(
|
||||
# object,
|
||||
# object,
|
||||
# ),
|
||||
# )
|
||||
# def distcalc_ended(
|
||||
# self, dist: Union[str, None], context: Union["ServerTab", NotebookPage]
|
||||
# ) -> None:
|
||||
# pass
|
||||
|
||||
def _on_notebook_page_changed(
|
||||
self, notebook: "Notebook", child: Gtk.Widget, index: int
|
||||
) -> None:
|
||||
@@ -95,7 +80,8 @@ class Statusbar(Gtk.Grid):
|
||||
case NotebookPage.HELP:
|
||||
bar = self.controller.get_help_row()
|
||||
case NotebookPage.SERVERS:
|
||||
# self.emit("server_page_changed", ServerTab.BROWSER)
|
||||
context = self.controller.get_active_context()
|
||||
self.emitter.emit("servers_loaded", context)
|
||||
return
|
||||
case NotebookPage.KEYS:
|
||||
bar = question_to_return
|
||||
|
||||
Reference in new issue
Block a user