def on_adapter_added(self, _manager, adapter_path): adapter = Adapter(obj_path=adapter_path) menu = self.item_adapter.get_submenu() object_path = adapter.get_object_path() item = Gtk.RadioMenuItem.new_with_label(self._adapters_group, adapter.get_name()) item.show() self._adapters_group = item.get_group() self._itemhandler = item.connect("activate", self.on_adapter_selected, object_path) self._adapterhandler = adapter.connect_signal( "property-changed", self.on_adapter_property_changed) menu.insert(item, self._insert_adapter_item_pos) self._insert_adapter_item_pos += 1 self.adapter_items[object_path] = (item, adapter) if adapter_path == self.blueman.List.Adapter.get_object_path(): item.props.active = True if len(self.adapter_items) > 0: self.item_adapter.props.sensitive = True
def add_to_notebook(self, adapter: Adapter) -> None: hci_dev = os.path.basename(adapter.get_object_path()) hci_dev_num = int(hci_dev[3:]) if hci_dev not in self.tabs: self.tabs[hci_dev] = self.build_adapter_tab(adapter) else: if self.tabs[hci_dev]['visible']: return # might need to update settings at this point ui = self.tabs[hci_dev] ui['visible'] = True name = adapter.get_name() if name == '': name = _('Adapter') + ' %d' % (hci_dev_num + 1) label = Gtk.Label(label=name) ui['label'] = label label.set_max_width_chars(20) label.props.hexpand = True label.set_ellipsize(Pango.EllipsizeMode.END) self.notebook.insert_page(ui['grid'], label, hci_dev_num)
def build_adapter_tab(self, adapter: Adapter) -> "Tab": def on_hidden_toggle(radio: Gtk.RadioButton) -> None: if not radio.props.active: return adapter['DiscoverableTimeout'] = 0 adapter['Discoverable'] = False hscale.set_sensitive(False) def on_always_toggle(radio: Gtk.RadioButton) -> None: if not radio.props.active: return adapter['DiscoverableTimeout'] = 0 adapter['Discoverable'] = True hscale.set_sensitive(False) def on_temporary_toggle(radio: Gtk.RadioButton) -> None: if not radio.props.active: return adapter['Discoverable'] = True hscale.set_sensitive(True) hscale.set_value(3) def on_scale_format_value(_scale: Gtk.Scale, value: float) -> str: if value == 0: if adapter['Discoverable']: return _("Always") else: return _("Hidden") else: return gettext.ngettext("%(minutes)d Minute", "%(minutes)d Minutes", int(value)) % { "minutes": value } def on_scale_value_changed(scale: Gtk.Scale) -> None: val = scale.get_value() logging.info(f"value: {val}") if val == 0 and adapter['Discoverable']: always_radio.props.active = True timeout = int(val * 60) adapter['DiscoverableTimeout'] = timeout def on_name_changed(entry: Gtk.Entry) -> None: adapter['Alias'] = entry.get_text() builder = Builder("adapters-tab.ui") hscale = builder.get_widget("hscale", Gtk.Scale) hscale.connect("format-value", on_scale_format_value) hscale.connect("value-changed", on_scale_value_changed) hscale.set_range(0, 30) hscale.set_increments(1, 1) hidden_radio = builder.get_widget("hidden", Gtk.RadioButton) always_radio = builder.get_widget("always", Gtk.RadioButton) temporary_radio = builder.get_widget("temporary", Gtk.RadioButton) if adapter['Discoverable'] and adapter['DiscoverableTimeout'] > 0: temporary_radio.set_active(True) hscale.set_value(adapter['DiscoverableTimeout']) hscale.set_sensitive(True) elif adapter['Discoverable'] and adapter['DiscoverableTimeout'] == 0: always_radio.set_active(True) else: hidden_radio.set_active(True) name_entry = builder.get_widget("name_entry", Gtk.Entry) name_entry.set_text(adapter.get_name()) hidden_radio.connect("toggled", on_hidden_toggle) always_radio.connect("toggled", on_always_toggle) temporary_radio.connect("toggled", on_temporary_toggle) name_entry.connect("changed", on_name_changed) return { "grid": builder.get_widget("grid", Gtk.Grid), "hidden_radio": hidden_radio, "always_radio": always_radio, "temparary_radio": temporary_radio, "visible": False, "label": Gtk.Label() }