mirror of
https://github.com/aclist/dztui.git
synced 2026-10-31 07:02:50 +01:00
feat: add emitter
This commit is contained in:
1 parent
8205559f2e
commit
bb94fbf51b
5 files changed
+66
-5
No files matched your search
@@ -83,6 +83,30 @@ class AppNavigation:
|
|||||||
logtreeview: "LogTreeView"
|
logtreeview: "LogTreeView"
|
||||||
filters: "FilterPanel"
|
filters: "FilterPanel"
|
||||||
|
|
||||||
|
class Emitter(GObject.GObject):
|
||||||
|
def __init__(self) -> None:
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
@GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=(object,))
|
||||||
|
def widget_changed(self, widget: GObject) -> None:
|
||||||
|
pass
|
||||||
|
|
||||||
|
@GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=())
|
||||||
|
def request_keyword_focus(self) -> None:
|
||||||
|
pass
|
||||||
|
|
||||||
|
@GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=())
|
||||||
|
def request_maps_focus(self) -> None:
|
||||||
|
pass
|
||||||
|
|
||||||
|
@GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=())
|
||||||
|
def request_ip_entry_focus(self) -> None:
|
||||||
|
pass
|
||||||
|
|
||||||
|
@GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=())
|
||||||
|
def request_lan_entry_focus(self) -> None:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Controller(GObject.GObject):
|
class Controller(GObject.GObject):
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
@@ -95,6 +119,17 @@ class Controller(GObject.GObject):
|
|||||||
# NOTE: suppress requests until entire UI is loaded
|
# NOTE: suppress requests until entire UI is loaded
|
||||||
self.loaded = False
|
self.loaded = False
|
||||||
|
|
||||||
|
self.emitter = Emitter()
|
||||||
|
self.emitter.connect("widget_changed", self.test_emitter)
|
||||||
|
|
||||||
|
def get_emitter(self) -> Emitter:
|
||||||
|
return self.emitter
|
||||||
|
|
||||||
|
def test_emitter(self, widget: GObject, emitter: Emitter) -> None:
|
||||||
|
print(type(widget))
|
||||||
|
print(type(signal))
|
||||||
|
print(f"caught signal from widget: {widget}")
|
||||||
|
|
||||||
def call_on_thread(func: Callable) -> Callable:
|
def call_on_thread(func: Callable) -> Callable:
|
||||||
def wrapper(*args, **kwargs):
|
def wrapper(*args, **kwargs):
|
||||||
self = args[0]
|
self = args[0]
|
||||||
@@ -393,8 +428,19 @@ class Controller(GObject.GObject):
|
|||||||
|
|
||||||
# TODO: ping column pass
|
# TODO: ping column pass
|
||||||
parsed = Servers.parse_json(serv)
|
parsed = Servers.parse_json(serv)
|
||||||
|
self.mediator.filters.set_unique_maps(parsed)
|
||||||
self.push_data(parsed, FilterMode.INITIAL)
|
self.push_data(parsed, FilterMode.INITIAL)
|
||||||
|
|
||||||
|
#def set_unique_maps(self, records: list) -> None:
|
||||||
|
# if len(records) < 1:
|
||||||
|
# return
|
||||||
|
# u_maps = set([row[1] for row in records])
|
||||||
|
# u_maps = sorted(u_maps)
|
||||||
|
# for m in u_maps:
|
||||||
|
# print(m)
|
||||||
|
# #map_store.append([m])
|
||||||
|
# #self.maps_hr.append(m)
|
||||||
|
|
||||||
def get_help_row(self) -> str:
|
def get_help_row(self) -> str:
|
||||||
tv = self.mediator.menu
|
tv = self.mediator.menu
|
||||||
model = self.get_help_store()
|
model = self.get_help_store()
|
||||||
|
|||||||
@@ -20,6 +20,9 @@ class LanPanel(Gtk.Frame):
|
|||||||
super().__init__(margin_top=10, margin_bottom=5)
|
super().__init__(margin_top=10, margin_bottom=5)
|
||||||
|
|
||||||
# TODO: hide lan panel on other tabs
|
# TODO: hide lan panel on other tabs
|
||||||
|
self.controller = controller
|
||||||
|
self.emitter = controller.get_emitter()
|
||||||
|
|
||||||
label = BoldLabel(lan_panel.heading)
|
label = BoldLabel(lan_panel.heading)
|
||||||
self.set_label_widget(label)
|
self.set_label_widget(label)
|
||||||
|
|
||||||
@@ -30,6 +33,7 @@ class LanPanel(Gtk.Frame):
|
|||||||
self.scan = Gtk.Button(label=lan_panel.scan_button)
|
self.scan = Gtk.Button(label=lan_panel.scan_button)
|
||||||
|
|
||||||
self.entry.connect("string_validated", self._on_port_validated)
|
self.entry.connect("string_validated", self._on_port_validated)
|
||||||
|
self.emitter.connect("request_lan_entry_focus", lambda _: self.entry.grab_focus())
|
||||||
radio1.connect("toggled", self._on_radio_toggled)
|
radio1.connect("toggled", self._on_radio_toggled)
|
||||||
|
|
||||||
self.grid = Gtk.Grid(margin=10, vexpand=False, column_spacing=15, row_spacing=5)
|
self.grid = Gtk.Grid(margin=10, vexpand=False, column_spacing=15, row_spacing=5)
|
||||||
@@ -91,6 +95,7 @@ class AddPanel(Gtk.Frame):
|
|||||||
super().__init__(margin_top=10, margin_bottom=5)
|
super().__init__(margin_top=10, margin_bottom=5)
|
||||||
|
|
||||||
self.controller = controller
|
self.controller = controller
|
||||||
|
self.emitter = controller.get_emitter()
|
||||||
self.classname = "invalid-entry"
|
self.classname = "invalid-entry"
|
||||||
|
|
||||||
label = BoldLabel("Connect")
|
label = BoldLabel("Connect")
|
||||||
@@ -103,6 +108,7 @@ class AddPanel(Gtk.Frame):
|
|||||||
|
|
||||||
self.entry = IpEntry(controller)
|
self.entry = IpEntry(controller)
|
||||||
self.entry.connect("string_validated", self._on_ip_validated)
|
self.entry.connect("string_validated", self._on_ip_validated)
|
||||||
|
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 = Gtk.Grid(margin=10, vexpand=False, column_spacing=15, row_spacing=5)
|
||||||
self.grid.attach(self.entry, 0, 0, COLS, ROWS)
|
self.grid.attach(self.entry, 0, 0, COLS, ROWS)
|
||||||
|
|||||||
@@ -47,6 +47,8 @@ class ValidatedEntry(Gtk.Entry):
|
|||||||
self.set_validation_func(func)
|
self.set_validation_func(func)
|
||||||
self.controller = controller
|
self.controller = controller
|
||||||
|
|
||||||
|
self.emitter = self.controller.get_emitter()
|
||||||
|
|
||||||
self.classname = "invalid-entry"
|
self.classname = "invalid-entry"
|
||||||
self.connect("key-press-event", self._on_entry_keypress)
|
self.connect("key-press-event", self._on_entry_keypress)
|
||||||
self.connect("changed", self._on_text_changed)
|
self.connect("changed", self._on_text_changed)
|
||||||
@@ -57,6 +59,7 @@ class ValidatedEntry(Gtk.Entry):
|
|||||||
|
|
||||||
def mark_valid(self) -> None:
|
def mark_valid(self) -> None:
|
||||||
self.emit("string_validated", True)
|
self.emit("string_validated", True)
|
||||||
|
self.emitter.emit("widget_changed", self)
|
||||||
remove_class(self, self.classname)
|
remove_class(self, self.classname)
|
||||||
|
|
||||||
def mark_invalid(self) -> None:
|
def mark_invalid(self) -> None:
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ class FilterPanel(Gtk.Box):
|
|||||||
|
|
||||||
self.controller = controller
|
self.controller = controller
|
||||||
self.controller.register_widget("filters", self)
|
self.controller.register_widget("filters", self)
|
||||||
|
self.emitter = self.controller.get_emitter()
|
||||||
|
|
||||||
map_store = self.controller.get_map_store()
|
map_store = self.controller.get_map_store()
|
||||||
|
|
||||||
@@ -84,6 +85,9 @@ class FilterPanel(Gtk.Box):
|
|||||||
self.keyword_entry.connect("activate", self._on_keyword_enter)
|
self.keyword_entry.connect("activate", self._on_keyword_enter)
|
||||||
self.keyword_entry.connect("key-press-event", self._on_keyword_keypress)
|
self.keyword_entry.connect("key-press-event", self._on_keyword_keypress)
|
||||||
|
|
||||||
|
self.emitter.connect("request_keyword_focus", lambda _: self.keyword_entry.grab_focus())
|
||||||
|
self.emitter.connect("request_maps_focus", lambda _: self.maps_entry.grab_focus())
|
||||||
|
|
||||||
completion = Gtk.EntryCompletion(inline_completion=True)
|
completion = Gtk.EntryCompletion(inline_completion=True)
|
||||||
completion.set_text_column(0)
|
completion.set_text_column(0)
|
||||||
completion.set_minimum_key_length(1)
|
completion.set_minimum_key_length(1)
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ class ServerTreeView(TreeView):
|
|||||||
QUEUE_CHECK_DELAY = 200
|
QUEUE_CHECK_DELAY = 200
|
||||||
|
|
||||||
self.controller = controller
|
self.controller = controller
|
||||||
|
self.emitter = controller.get_emitter()
|
||||||
self.enum = enum
|
self.enum = enum
|
||||||
|
|
||||||
self.loaded = False
|
self.loaded = False
|
||||||
@@ -146,6 +147,7 @@ class ServerTreeView(TreeView):
|
|||||||
|
|
||||||
def _on_map(self, a) -> None:
|
def _on_map(self, a) -> None:
|
||||||
if self.get_enum() is ServerTab.LAN:
|
if self.get_enum() is ServerTab.LAN:
|
||||||
|
# TODO: use emitter here
|
||||||
self.controller.mediator.grid.conpan.lan.set_visible(True)
|
self.controller.mediator.grid.conpan.lan.set_visible(True)
|
||||||
|
|
||||||
def _on_unmap(self, a) -> None:
|
def _on_unmap(self, a) -> None:
|
||||||
@@ -248,17 +250,17 @@ class ServerTreeView(TreeView):
|
|||||||
case Gdk.KEY_r:
|
case Gdk.KEY_r:
|
||||||
self.refresh_player_count()
|
self.refresh_player_count()
|
||||||
case Gdk.KEY_f:
|
case Gdk.KEY_f:
|
||||||
self.controller.mediator.filters.keyword_entry.grab_focus()
|
self.emitter.emit("request_keyword_focus")
|
||||||
case Gdk.KEY_m:
|
case Gdk.KEY_m:
|
||||||
self.controller.mediator.filters.maps_entry.grab_focus()
|
self.emitter.emit("request_maps_focus")
|
||||||
case Gdk.KEY_i:
|
case Gdk.KEY_i:
|
||||||
# TODO:
|
# TODO:
|
||||||
self.controller.mediator.grid.conpan.add_panel.entry.grab_focus()
|
self.emitter.emit("request_ip_entry_focus")
|
||||||
case Gdk.KEY_p:
|
case Gdk.KEY_p:
|
||||||
if self.enum is ServerTab.LAN:
|
if self.enum is ServerTab.LAN:
|
||||||
self.controller.mediator.grid.conpan.lan.entry.grab_focus()
|
self.emitter.emit("request_lan_entry_focus")
|
||||||
case Gdk.KEY_c:
|
case Gdk.KEY_c:
|
||||||
print("copy to clipboard")
|
print("UNIMPLEMENTED: copy to clipboard")
|
||||||
else:
|
else:
|
||||||
match event.keyval:
|
match event.keyval:
|
||||||
case Gdk.KEY_l | Gdk.KEY_Right:
|
case Gdk.KEY_l | Gdk.KEY_Right:
|
||||||
|
|||||||
Reference in new issue
Block a user