diff --git a/dzgui/views/components/right_panel.py b/dzgui/views/components/right_panel.py index 386de3c..d5553b1 100644 --- a/dzgui/views/components/right_panel.py +++ b/dzgui/views/components/right_panel.py @@ -1,16 +1,17 @@ from typing import TYPE_CHECKING from dzgui.const.enum import ServerTab +from dzgui.util.clip import copy_clipboard 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.buttons import RefreshButton, KeysButton -from dzgui.const.constants import NO_EXPAND, NO_FILL, FILL, NO_PADDING +from dzgui.const.constants import NO_EXPAND, NO_FILL, FILL, NO_PADDING, EXPAND import gi gi.require_version("Gtk", "3.0") -from gi.repository import Gtk, GLib # noqa E402 +from gi.repository import Gtk, Gdk, GLib # noqa E402 if TYPE_CHECKING: from dzgui.controllers.mc import Controller @@ -35,16 +36,45 @@ class RightPanel(Gtk.Box): self.refresh_button = RefreshButton(controller) self.keys = KeysButton(controller) + self.copying = False + + version = self.controller.get_prefs().version + self.version_label = Gtk.Label( + label=version, + hexpand=True, + vexpand=True, + halign=Gtk.Align.END, + valign=Gtk.Align.END, + ) + eb = Gtk.EventBox(halign=Gtk.Align.END, valign=Gtk.Align.END) + eb.add(self.version_label) + eb.connect("button-press-event", self._on_version_clicked) + 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(eb, NO_EXPAND, FILL, NO_PADDING) def _on_servers_loaded(self, emitter: "Emitter", context: "ServerTab") -> None: state = self.controller.has_server_model() for widget in (self.refresh_button, self.filters_vbox): widget.set_sensitive(state) + def _on_version_clicked(self, widget: Gtk.EventBox, event: Gdk.EventButton) -> None: + def revert() -> GLib.SOURCE_REMOVE: + self.copying = False + self.version_label.set_text(version) + return GLib.SOURCE_REMOVE + + if self.copying: + return + self.copying = True + version = self.version_label.get_text() + self.version_label.set_text("Copied!") + copy_clipboard(version) + GLib.timeout_add_seconds(0.5, revert) + # TODO: reference for ping pass # def _on_ping_clicked(self, button: Gtk.Button) -> None: # block_signals() diff --git a/dzgui/views/components/statusbar.py b/dzgui/views/components/statusbar.py index fba3bcc..a6893d6 100644 --- a/dzgui/views/components/statusbar.py +++ b/dzgui/views/components/statusbar.py @@ -29,16 +29,8 @@ class Statusbar(Gtk.Grid): self.spinner = Gtk.Spinner() - version = self.controller.get_prefs().version - self.status_right_label = Gtk.Label( - label=version, hexpand=True, halign=Gtk.Align.END - ) - self.attach(self.statusbar, 0, 0, 3, 1) self.attach_next_to(self.spinner, self.statusbar, Gtk.PositionType.RIGHT, 3, 1) - self.attach_next_to( - self.status_right_label, self.spinner, Gtk.PositionType.RIGHT, 3, 1 - ) self.players = ""