Combine connection panel with server panel (close #102)

This commit is contained in:
coderkun 2024-05-24 16:45:40 +02:00
commit e301ce4bd8
14 changed files with 339 additions and 360 deletions

View file

@ -4,9 +4,12 @@
import gi
gi.require_version('Gtk', '4.0')
gi.require_version('Adw', '1')
import locale
from gi.repository import Gtk, Adw, GObject
from mcg.zeroconf import ZeroconfProvider
@ -14,11 +17,21 @@ from gi.repository import Gtk, Adw, GObject
class ServerPanel(Adw.Bin):
__gtype_name__ = 'McgServerPanel'
__gsignals__ = {
'connection-changed': (GObject.SIGNAL_RUN_FIRST, None, (str, int, str)),
'change-output-device': (GObject.SIGNAL_RUN_FIRST, None, (GObject.TYPE_PYOBJECT,bool,)),
}
# Widgets
toolbar = Gtk.Template.Child()
connection_status_page = Gtk.Template.Child()
status_page = Gtk.Template.Child()
stats_page = Gtk.Template.Child()
devices_page = Gtk.Template.Child()
# Connection widgets
zeroconf_list = Gtk.Template.Child()
host_row = Gtk.Template.Child()
port_spinner = Gtk.Template.Child()
password_row = Gtk.Template.Child()
# Status widgets
status_file = Gtk.Template.Child()
status_audio = Gtk.Template.Child()
@ -44,6 +57,10 @@ class ServerPanel(Adw.Bin):
# Widgets
self._none_label = self.status_file.get_label()
# Zeroconf provider
self._zeroconf_provider = ZeroconfProvider()
self._zeroconf_provider.connect_signal(ZeroconfProvider.SIGNAL_SERVICE_NEW, self.on_new_service)
def set_selected(self, selected):
self._is_selected = selected
@ -53,6 +70,72 @@ class ServerPanel(Adw.Bin):
return self.toolbar
def on_new_service(self, service):
name, host, port = service
row_button = Gtk.Button()
row_button.set_label(locale.gettext("use"))
row_button.connect("clicked", self.on_service_selected, host, port)
row = Adw.ActionRow()
row.set_title(name)
row.set_subtitle("{} ({})".format(host, port))
row.add_suffix(row_button)
self.zeroconf_list.insert(row, -1)
def on_service_selected(self, widget, host, port):
self.set_host(host)
self.set_port(port)
@Gtk.Template.Callback()
def on_host_entry_apply(self, widget):
self._call_back()
@Gtk.Template.Callback()
def on_port_spinner_value_changed(self, widget):
self._call_back()
def set_connection_sensitive(self, sensitive):
self.connection_status_page.set_sensitive(sensitive)
self.status_page.set_visible(not sensitive)
self.stats_page.set_visible(not sensitive)
self.devices_page.set_visible(not sensitive)
def set_host(self, host):
self.host_row.set_text(host)
def get_host(self):
return self.host_row.get_text()
def set_port(self, port):
self.port_spinner.set_value(port)
def get_port(self):
return self.port_spinner.get_value_as_int()
def set_password(self, password):
if password is None:
password = ""
self.password_row.set_text(password)
def get_password(self):
if self.password_row.get_text() == "":
return None
else:
return self.password_entry.get_text()
def on_output_device_toggled(self, widget, device):
self.emit('change-output-device', device, widget.get_active())
@ -116,3 +199,7 @@ class ServerPanel(Adw.Bin):
for id in self._output_buttons.keys():
if id not in device_ids:
self.output_devices.remove(self._output_buttons[id].get_parent())
def _call_back(self):
self.emit('connection-changed', self.get_host(), self.get_port(), self.get_password(),)