class DeviceSelectorDialog(gtk.Dialog): def __init__(self, title=_("Select Device"), parent=None, discover=True): gtk.Dialog.__init__(self, title, parent, 0, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) self.set_has_separator(False) self.props.resizable = False self.props.icon_name = "blueman" self.selector = DeviceSelectorWidget() self.selector.show() #self.selector.destroy() #self.selector = None align = gtk.Alignment(0.5,0.5,1.0,1.0) align.add(self.selector) align.set_padding(6,6,6,6) align.show() self.vbox.pack_start(align) #(adapter, device) self.selection = None self.selector.List.connect("device-selected", self.on_device_selected) self.selector.List.connect("adapter-changed", self.on_adapter_changed) if discover: self.selector.List.DiscoverDevices() self.selector.List.connect("row-activated", self.on_row_activated) def on_row_activated(self, treeview, path, view_column, *args): self.response(gtk.RESPONSE_ACCEPT) def on_adapter_changed(self, devlist, adapter): self.selection = None def on_device_selected(self, devlist, device, iter): self.selection = (devlist.Adapter.GetObjectPath(), device) def GetSelection(self): if self.selection: return (self.selection[0], self.selection[1].Copy()) else: return None
class DeviceSelectorDialog(Gtk.Dialog): def __init__(self, title=_("Select Device"), parent=None, discover=True, adapter_name=None): super(DeviceSelectorDialog, self).__init__(title, parent, 0, ("_Cancel", Gtk.ResponseType.REJECT, "_OK", Gtk.ResponseType.ACCEPT), icon_name="blueman", resizable=False, name="DeviceSelectorDialog") self.vbox.props.halign = Gtk.Align.CENTER self.vbox.props.valign = Gtk.Align.CENTER self.vbox.props.hexpand = True self.vbox.props.vexpand = True self.vbox.props.margin = 6 self.selector = DeviceSelectorWidget(adapter_name=adapter_name) self.selector.show() self.vbox.pack_start(self.selector, True, True, 0) self.selection = None self.selector.List.connect("device-selected", self.on_device_selected) self.selector.List.connect("adapter-changed", self.on_adapter_changed) if discover: self.selector.List.DiscoverDevices() self.selector.List.connect("row-activated", self.on_row_activated) def on_row_activated(self, treeview, path, view_column, *args): self.response(Gtk.ResponseType.ACCEPT) def on_adapter_changed(self, devlist, adapter): self.selection = None def on_device_selected(self, devlist, device, tree_iter): self.selection = (devlist.Adapter.get_object_path(), device) def GetSelection(self): if self.selection: return (self.selection[0], self.selection[1]) else: return None
class DeviceSelectorDialog(Gtk.Dialog): def __init__(self, title=_("Select Device"), parent=None, discover=True): super(DeviceSelectorDialog, self).__init__(title, parent, 0, ("_Cancel", Gtk.ResponseType.REJECT, "_OK", Gtk.ResponseType.ACCEPT)) self.set_name("DeviceSelectorDialog") self.props.resizable = False self.props.icon_name = "blueman" self.selector = DeviceSelectorWidget() self.selector.show() #self.selector.destroy() #self.selector = None align = Gtk.Alignment.new(0.5, 0.5, 1.0, 1.0) align.add(self.selector) align.set_padding(6, 6, 6, 6) align.show() self.vbox.pack_start(align, True, True, 0) #(adapter, device) self.selection = None self.selector.List.connect("device-selected", self.on_device_selected) self.selector.List.connect("adapter-changed", self.on_adapter_changed) if discover: self.selector.List.DiscoverDevices() self.selector.List.connect("row-activated", self.on_row_activated) def on_row_activated(self, treeview, path, view_column, *args): self.response(Gtk.ResponseType.ACCEPT) def on_adapter_changed(self, devlist, adapter): self.selection = None def on_device_selected(self, devlist, device, tree_iter): self.selection = (devlist.Adapter.get_object_path(), device) def GetSelection(self): if self.selection: return (self.selection[0], self.selection[1]) else: return None
class DeviceSelectorDialog(gtk.Dialog): def __init__(self, title=_("Select Device"), parent=None, discover=True): gtk.Dialog.__init__(self, title, parent, 0, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) self.set_has_separator(False) self.props.resizable = False self.props.icon_name = "blueman" self.selector = DeviceSelectorWidget() self.selector.show() #self.selector.destroy() #self.selector = None align = gtk.Alignment(0.5, 0.5, 1.0, 1.0) align.add(self.selector) align.set_padding(6, 6, 6, 6) align.show() self.vbox.pack_start(align) #(adapter, device) self.selection = None self.selector.List.connect("device-selected", self.on_device_selected) self.selector.List.connect("adapter-changed", self.on_adapter_changed) if discover: self.selector.List.DiscoverDevices() self.selector.List.connect("row-activated", self.on_row_activated) def on_row_activated(self, treeview, path, view_column, *args): self.response(gtk.RESPONSE_ACCEPT) def on_adapter_changed(self, devlist, adapter): self.selection = None def on_device_selected(self, devlist, device, iter): self.selection = (devlist.Adapter.GetObjectPath(), device) def GetSelection(self): if self.selection: return (self.selection[0], self.selection[1].Copy()) else: return None
class DeviceSelectorDialog(Gtk.Dialog): def __init__(self, title=_("Select Device"), parent=None, discover=True): Gtk.Dialog.__init__(self, title, parent, 0, ("_Cancel", Gtk.ResponseType.REJECT, "_OK", Gtk.ResponseType.ACCEPT)) self.set_name("DeviceSelectorDialog") self.props.resizable = False self.props.icon_name = "blueman" self.selector = DeviceSelectorWidget() self.selector.show() #self.selector.destroy() #self.selector = None align = Gtk.Alignment.new(0.5, 0.5, 1.0, 1.0) align.add(self.selector) align.set_padding(6, 6, 6, 6) align.show() self.vbox.pack_start(align, True, True, 0) #(adapter, device) self.selection = None self.selector.List.connect("device-selected", self.on_device_selected) self.selector.List.connect("adapter-changed", self.on_adapter_changed) if discover: self.selector.List.DiscoverDevices() self.selector.List.connect("row-activated", self.on_row_activated) def on_row_activated(self, treeview, path, view_column, *args): self.response(Gtk.ResponseType.ACCEPT) def on_adapter_changed(self, devlist, adapter): self.selection = None def on_device_selected(self, devlist, device, iter): self.selection = (devlist.Adapter.get_object_path(), device) def GetSelection(self): if self.selection: return (self.selection[0], self.selection[1].Copy()) else: return None
class DeviceSelectorDialog(Gtk.Dialog): def __init__(self, title=_("Select Device"), parent=None, discover=True, adapter_name=None): super(DeviceSelectorDialog, self).__init__( title, parent, 0, ("_Cancel", Gtk.ResponseType.REJECT, "_OK", Gtk.ResponseType.ACCEPT), icon_name="blueman", resizable=False, name="DeviceSelectorDialog" ) self.vbox.props.halign = Gtk.Align.CENTER self.vbox.props.valign = Gtk.Align.CENTER self.vbox.props.hexpand = True self.vbox.props.vexpand = True self.vbox.props.margin = 6 self.selector = DeviceSelectorWidget(adapter_name=adapter_name) self.selector.show() self.vbox.pack_start(self.selector, True, True, 0) self.selection = None self.selector.List.connect("device-selected", self.on_device_selected) self.selector.List.connect("adapter-changed", self.on_adapter_changed) if discover: self.selector.List.DiscoverDevices() self.selector.List.connect("row-activated", self.on_row_activated) def on_row_activated(self, treeview, path, view_column, *args): self.response(Gtk.ResponseType.ACCEPT) def on_adapter_changed(self, devlist, adapter): self.selection = None def on_device_selected(self, devlist, device, tree_iter): self.selection = (devlist.Adapter.get_object_path(), device) def GetSelection(self): if self.selection: return (self.selection[0], self.selection[1]) else: return None
class NstBluetooth: def __init__(self): setup_icon_path() self.list = DeviceSelectorWidget() self.list.show() self.list.List.connect("row-activated", self.on_row_activated) self.list.List.connect("device-selected", self.on_device_selected) self.config = Config("transfer") self.device = None self.list.set_size_request(240, 280) self.button = Gtk.ToggleButton() box = Gtk.HBox() self.button.add(box) self.button_image = Gtk.Image() self.button_label = Gtk.Label() self.button_label.props.use_markup = True self.button_label.props.ellipsize = Pango.EllipsizeMode.END if self.config.props.last_device == None: self.list.List.set_cursor((0,)) else: iter = self.list.List.find_device(self.config.props.last_device) if iter: self.list.List.set_cursor(self.list.List.get_model().get_path(iter)) box.pack_start(self.button_image, False, True) box.pack_start(Gtk.VSeparator, False, True, 4) box.pack_start(self.button_label, True, True, 0) self.button.show_all() self.button.connect("toggled", self.on_button_toggled) self.wd = Gtk.Window(Gtk.WindowType.POPUP) self.wd.props.decorated = False self.wd.props.skip_pager_hint = True self.wd.props.skip_taskbar_hint = True # self.wd.props.modal = True self.wd.connect("button_press_event", self.on_button_press) self.wd.add(self.list) self.wd.realize() def on_row_activated(self, treeview, path, column): self.button.props.active = False def on_device_selected(self, treeview, device, iter): self.config.props.last_device = str(device.Address) self.button_label.props.label = "<b>%s</b> (%s)" % (device.Alias, device.Address) self.button_label.props.tooltip_markup = self.button_label.props.label self.button_image.props.icon_name = device.Icon self.device = device def on_button_press(self, widget, data=None): if data == None or data.window == None: return False child = data.window.get_user_data() if child != widget: while child: if child == widget: return False child = child.parent self.button.props.active = False return True def popup_grab_on_window(self, window, activate_time): if Gdk.pointer_grab(window, True, Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.POINTER_MOTION_MASK, None, None, activate_time) == 0: if Gdk.keyboard_grab(window, True, activate_time) == 0: return True else: Gdk.pointer_ungrab(activate_time) return False return False def on_button_toggled(self, button): if button.props.active: if not self.popup_grab_on_window(button.window, Gtk.get_current_event_time()): print('error during grab') return x, y = button.window.get_origin() x += button.allocation[0] y += button.allocation[1] + button.allocation[3] self.wd.move(x, y) self.list.set_size_request(button.allocation[2], 280) self.wd.grab_add() self.wd.show() self.wd.grab_focus() self.popup_grab_on_window(self.wd.window, Gtk.get_current_event_time()) else: self.wd.hide() self.wd.grab_remove() def get_contacts_widget(self): return self.button def send_files(self, files): spawn(["blueman-sendto", "-d", self.device.Address] + files) return True def destroy(self): pass
class NstBluetooth: def __init__(self): setup_icon_path() self.list = DeviceSelectorWidget() self.list.show() self.list.List.connect("row-activated", self.on_row_activated) self.list.List.connect("device-selected", self.on_device_selected) self.config = Config("transfer") self.device = None self.list.set_size_request(240, 280) self.button = gtk.ToggleButton() box = gtk.HBox() self.button.add(box) self.button_image = gtk.Image() self.button_label = gtk.Label() self.button_label.props.use_markup = True self.button_label.props.ellipsize = pango.ELLIPSIZE_END if self.config.props.last_device == None: self.list.List.set_cursor((0,)) else: iter = self.list.List.find_device(self.config.props.last_device) if iter: self.list.List.set_cursor(self.list.List.get_model().get_path(iter)) box.pack_start(self.button_image, False, True) box.pack_start(gtk.VSeparator(), False, True, 4) box.pack_start(self.button_label) self.button.show_all() self.button.connect("toggled", self.on_button_toggled) self.wd = gtk.Window(gtk.WINDOW_POPUP) self.wd.props.decorated = False self.wd.props.skip_pager_hint = True self.wd.props.skip_taskbar_hint = True #self.wd.props.modal = True self.wd.connect("button_press_event", self.on_button_press) self.wd.add(self.list) self.wd.realize() def on_row_activated(self, treeview, path, column): self.button.props.active = False def on_device_selected(self, treeview, device, iter): self.config.props.last_device = str(device.Address) self.button_label.props.label = "<b>%s</b> (%s)" % (device.Alias, device.Address) self.button_label.props.tooltip_markup = self.button_label.props.label self.button_image.props.icon_name = device.Icon self.device = device def on_button_press(self, widget, data=None): if data == None or data.window == None: return False child = data.window.get_user_data() if child != widget: while child: if child == widget: return False child = child.parent self.button.props.active = False return True def popup_grab_on_window(self, window, activate_time): if gtk.gdk.pointer_grab(window, True, gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK | gtk.gdk.POINTER_MOTION_MASK, None, None, activate_time) == 0: if gtk.gdk.keyboard_grab (window, True, activate_time) == 0: return True else: gtk.gdk.pointer_ungrab(activate_time) return False return False def on_button_toggled(self, button): if button.props.active: if not self.popup_grab_on_window(button.window, gtk.get_current_event_time()): print 'error during grab' return x, y = button.window.get_origin() x += button.allocation[0] y += button.allocation[1] + button.allocation[3] self.wd.move(x, y) self.list.set_size_request(button.allocation[2], 280) self.wd.grab_add() self.wd.show() self.wd.grab_focus() self.popup_grab_on_window(self.wd.window, gtk.get_current_event_time()) else: self.wd.hide() self.wd.grab_remove() def get_contacts_widget(self): return self.button def send_files(self, files): spawn(["blueman-sendto", "-d", self.device.Address] + files) return True def destroy(self): pass