Combine connection panel with server panel (close #102)
This commit is contained in:
parent
75b99e5820
commit
e301ce4bd8
14 changed files with 339 additions and 360 deletions
|
|
@ -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(),)
|
||||
|
|
|
|||
Loading…
Reference in a new issue