diff --git a/dzgui/controllers/emitter.py b/dzgui/controllers/emitter.py index 58684e9..c58f4d7 100644 --- a/dzgui/controllers/emitter.py +++ b/dzgui/controllers/emitter.py @@ -136,6 +136,10 @@ class Emitter(GObject.GObject): def api_change_failed(self) -> None: pass + @GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=()) + def already_saved_server(self) -> None: + pass + @GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=(str,)) def keyword_set(self, keyword: str) -> None: pass diff --git a/dzgui/controllers/mc.py b/dzgui/controllers/mc.py index c5a08e3..63c0967 100644 --- a/dzgui/controllers/mc.py +++ b/dzgui/controllers/mc.py @@ -569,6 +569,9 @@ class Controller(GObject.GObject): def get_menu(self) -> "MenuTreeView": return self.mediator.menu + def is_in_favs(self) -> bool: + return self.config_man.is_in_favs() + def get_config_man(self) -> ConfigManager: return self.config_man diff --git a/dzgui/model/servers.py b/dzgui/model/servers.py index baaa65e..814e81d 100644 --- a/dzgui/model/servers.py +++ b/dzgui/model/servers.py @@ -265,6 +265,7 @@ class ServerModelManager: proxy_man.remove_row_from_control(record) else: if config_man.is_in_favs(fqip): + self.emitter.emit("already_saved_server") return config_man.add_saved_server(fqip) if proxy_man.has_control_model() is False: diff --git a/dzgui/views/components/connect_panel.py b/dzgui/views/components/connect_panel.py index 71e7fff..e75c45c 100644 --- a/dzgui/views/components/connect_panel.py +++ b/dzgui/views/components/connect_panel.py @@ -204,6 +204,7 @@ class AddPanel(Gtk.Frame): self.emitter.connect( "request_ip_entry_focus", lambda _: self.entry.grab_focus() ) + self.emitter.connect("already_saved_server", self._on_duplicate_server) self.grid = Gtk.Grid(margin=10, vexpand=False, column_spacing=15, row_spacing=5) self.grid.attach(self.entry, 0, 0, COLS, ROWS) @@ -216,6 +217,21 @@ class AddPanel(Gtk.Frame): self.add(self.grid) + # TODO: dynamic popover text + self.pop = Gtk.Popover() + self.pop_label = Gtk.Label( + label="This address is already in your Saved Servers", + margin_start=10, + margin_end=10, + ) + self.pop.add(self.pop_label) + self.pop.show_all() + self.pop.set_margin_start(10) + self.pop.set_relative_to(self.entry) + + def _on_duplicate_server(self, emitter: "Emitter") -> None: + self.pop.popup() + def _on_connect_clicked(self, button: Gtk.Button) -> None: addr = self.entry.get_text() self.controller.connect_by_str(addr) @@ -226,9 +242,7 @@ class AddPanel(Gtk.Frame): def _on_activate(self, entry: Gtk.Entry) -> None: # NOTE: default action is to add a record, not connect - if not self.add_server.is_sensitive(): - return - self._add_server() + self.add_server.emit("clicked") def _on_add_clicked(self, button: Gtk.Button) -> None: self._add_server()