def __init_my_bluetooth_and_start_service(self): try: self.my_bluetooth = MyBluetooth(self.__on_adapter_removed, self.__on_default_adapter_changed) if self.my_bluetooth.adapter: self.my_bluetooth.adapter.connect( "property-changed", self.__on_adapter_property_changed) except Exception, e: print e
def __init__(self, module_frame): ''' init docs ''' gtk.VBox.__init__(self) self.module_frame = module_frame self.my_bluetooth = MyBluetooth(self.__on_adapter_removed, self.__on_default_adapter_changed, self.__device_found) self.periodic_timer = None self.is_discoverable = False self.is_searching = False ''' enable open ''' if self.my_bluetooth.adapter: self.my_bluetooth.adapter.connect("property-changed", self.__on_property_changed) if self.my_bluetooth.adapter.get_powered(): self.title_align, self.title_label = self.__setup_title_align( app_theme.get_pixbuf("bluetooth/enable_open.png"), _("Bluetooth")) self.title_label.set_sensitive(True) else: self.title_align, self.title_label = self.__setup_title_align( app_theme.get_pixbuf("bluetooth/enable_open_disable.png"), _("Bluetooth")) else: self.title_align, self.title_label = self.__setup_title_align( app_theme.get_pixbuf("bluetooth/enable_open_disable.png"), _("Bluetooth")) self.title_label.set_sensitive(False) self.enable_align = self.__setup_align() self.enable_box = gtk.HBox(spacing=WIDGET_SPACING) self.enable_open_label = self.__setup_label(_("Enable bluetooth")) if self.my_bluetooth.adapter: self.my_bluetooth.adapter.set_powered(permanent_settings.get_powered()) self.enable_open_label.set_sensitive(self.my_bluetooth.adapter.get_powered()) else: self.enable_open_label.set_sensitive(False) self.enable_open_toggle_align = self.__setup_align(padding_top = 4, padding_left = 158) self.enable_open_toggle = self.__setup_toggle() if self.my_bluetooth.adapter: self.enable_open_toggle.set_active(self.my_bluetooth.adapter.get_powered()) self.enable_open_toggle.connect("toggled", self.__toggled, "enable_open") self.enable_open_toggle_align.add(self.enable_open_toggle) self.__widget_pack_start(self.enable_box, [self.enable_open_label, self.enable_open_toggle_align]) self.enable_align.add(self.enable_box) ''' display ''' self.display_align = self.__setup_align() self.display_box = gtk.HBox(spacing=WIDGET_SPACING) self.display_device_label = self.__setup_label(_("Device name")) if self.my_bluetooth.adapter: self.display_device_label.set_sensitive(self.my_bluetooth.adapter.get_powered()) else: self.display_device_label.set_sensitive(False) self.display_device_entry = InputEntry() if self.my_bluetooth.adapter: self.display_device_entry.set_text(self.my_bluetooth.adapter.get_name()) self.display_device_entry.set_sensitive(self.my_bluetooth.adapter.get_powered()) else: self.display_device_entry.set_sensitive(False) self.display_device_entry.set_size(HSCALEBAR_WIDTH, WIDGET_HEIGHT) self.display_device_entry.entry.connect("changed", self.__display_device_changed) self.__widget_pack_start(self.display_box, [self.display_device_label, self.display_device_entry]) self.display_align.add(self.display_box) ''' enable searchable ''' self.search_align = self.__setup_align() self.search_box = gtk.HBox(spacing=WIDGET_SPACING) self.search_label = self.__setup_label(_("Discoverable")) if self.my_bluetooth.adapter: self.search_label.set_sensitive(self.my_bluetooth.adapter.get_powered()) else: self.search_label.set_sensitive(False) self.search_timeout_align = self.__setup_align(padding_top = 0, padding_left = 0) self.search_timeout_label = self.__setup_label("", width = 110, align = ALIGN_START) self.search_timeout_align.add(self.search_timeout_label) self.search_toggle_align = self.__setup_align(padding_top = 4, padding_left = 18) self.search_toggle = self.__setup_toggle() if self.my_bluetooth.adapter: self.search_toggle.set_active(self.my_bluetooth.adapter.get_discoverable()) self.search_toggle.connect("toggled", self.__toggled, "search") self.search_toggle_align.add(self.search_toggle) self.__widget_pack_start(self.search_box, [self.search_label, self.search_timeout_align, self.search_toggle_align ]) self.search_align.add(self.search_box) ''' device iconview ''' self.device_align = self.__setup_align() self.device_iconview = DeviceIconView() self.device_iconview.set_size_request(690, 228) self.device_align.add(self.device_iconview) ''' operation ''' self.oper_align = self.__setup_align() self.oper_box = gtk.HBox(spacing = WIDGET_SPACING) self.notice_label = Label("", text_x_align = ALIGN_START, label_width = 610) self.search_button = Button(_("Search")) if self.my_bluetooth.adapter: self.search_button.set_sensitive(self.my_bluetooth.adapter.get_powered()) else: self.search_button.set_sensitive(False) self.search_button.connect("clicked", self.__on_search) self.__widget_pack_start(self.oper_box, [self.notice_label, self.search_button, ]) self.oper_align.add(self.oper_box) ''' this->gtk.VBox pack_start ''' self.__widget_pack_start(self, [self.title_align, self.enable_align, self.display_align, self.search_align, self.device_align, self.oper_align]) if self.my_bluetooth.adapter == None: self.set_sensitive(False) self.connect("expose-event", self.__expose) if self.my_bluetooth.adapter and self.my_bluetooth.adapter.get_powered(): self.__get_devices()
def __init__(self, module_frame): ''' init docs ''' gtk.VBox.__init__(self) self.module_frame = module_frame self.my_bluetooth = MyBluetooth(self.__on_adapter_removed, self.__on_default_adapter_changed, self.__device_found) self.periodic_timer = None self.is_discoverable = False self.is_searching = False ''' enable open ''' if self.my_bluetooth.adapter: self.my_bluetooth.adapter.connect("property-changed", self.__on_property_changed) if self.my_bluetooth.adapter.get_powered(): self.title_align, self.title_label = self.__setup_title_align( app_theme.get_pixbuf("bluetooth/enable_open.png"), _("Bluetooth")) self.title_label.set_sensitive(True) else: self.title_align, self.title_label = self.__setup_title_align( app_theme.get_pixbuf("bluetooth/enable_open_disable.png"), _("Bluetooth")) else: self.title_align, self.title_label = self.__setup_title_align( app_theme.get_pixbuf("bluetooth/enable_open_disable.png"), _("Bluetooth")) self.title_label.set_sensitive(False) self.enable_align = self.__setup_align() self.enable_box = gtk.HBox(spacing=WIDGET_SPACING) self.enable_open_label = self.__setup_label(_("Enable bluetooth")) if self.my_bluetooth.adapter: self.my_bluetooth.adapter.set_powered( permanent_settings.get_powered()) self.enable_open_label.set_sensitive( self.my_bluetooth.adapter.get_powered()) else: self.enable_open_label.set_sensitive(False) self.enable_open_toggle_align = self.__setup_align(padding_top=4, padding_left=158) self.enable_open_toggle = self.__setup_toggle() if self.my_bluetooth.adapter: self.enable_open_toggle.set_active( self.my_bluetooth.adapter.get_powered()) self.enable_open_toggle.connect("toggled", self.__toggled, "enable_open") self.enable_open_toggle_align.add(self.enable_open_toggle) self.__widget_pack_start( self.enable_box, [self.enable_open_label, self.enable_open_toggle_align]) self.enable_align.add(self.enable_box) ''' display ''' self.display_align = self.__setup_align() self.display_box = gtk.HBox(spacing=WIDGET_SPACING) self.display_device_label = self.__setup_label(_("Device name")) if self.my_bluetooth.adapter: self.display_device_label.set_sensitive( self.my_bluetooth.adapter.get_powered()) else: self.display_device_label.set_sensitive(False) self.display_device_entry = InputEntry() if self.my_bluetooth.adapter: self.display_device_entry.set_text( self.my_bluetooth.adapter.get_name()) self.display_device_entry.set_sensitive( self.my_bluetooth.adapter.get_powered()) else: self.display_device_entry.set_sensitive(False) self.display_device_entry.set_size(HSCALEBAR_WIDTH, WIDGET_HEIGHT) self.display_device_entry.entry.connect("changed", self.__display_device_changed) self.__widget_pack_start( self.display_box, [self.display_device_label, self.display_device_entry]) self.display_align.add(self.display_box) ''' enable searchable ''' self.search_align = self.__setup_align() self.search_box = gtk.HBox(spacing=WIDGET_SPACING) self.search_label = self.__setup_label(_("Discoverable")) if self.my_bluetooth.adapter: self.search_label.set_sensitive( self.my_bluetooth.adapter.get_powered()) else: self.search_label.set_sensitive(False) self.search_timeout_align = self.__setup_align(padding_top=0, padding_left=0) self.search_timeout_label = self.__setup_label("", width=110, align=ALIGN_START) self.search_timeout_align.add(self.search_timeout_label) self.search_toggle_align = self.__setup_align(padding_top=4, padding_left=18) self.search_toggle = self.__setup_toggle() if self.my_bluetooth.adapter: self.search_toggle.set_active( self.my_bluetooth.adapter.get_discoverable()) self.search_toggle.connect("toggled", self.__toggled, "search") self.search_toggle_align.add(self.search_toggle) self.__widget_pack_start(self.search_box, [ self.search_label, self.search_timeout_align, self.search_toggle_align ]) self.search_align.add(self.search_box) ''' device iconview ''' self.device_align = self.__setup_align() self.device_iconview = DeviceIconView() self.device_iconview.set_size_request(690, 228) self.device_align.add(self.device_iconview) ''' operation ''' self.oper_align = self.__setup_align() self.oper_box = gtk.HBox(spacing=WIDGET_SPACING) self.notice_label = Label("", text_x_align=ALIGN_START, label_width=610) self.search_button = Button(_("Search")) if self.my_bluetooth.adapter: self.search_button.set_sensitive( self.my_bluetooth.adapter.get_powered()) else: self.search_button.set_sensitive(False) self.search_button.connect("clicked", self.__on_search) self.__widget_pack_start(self.oper_box, [ self.notice_label, self.search_button, ]) self.oper_align.add(self.oper_box) ''' this->gtk.VBox pack_start ''' self.__widget_pack_start(self, [ self.title_align, self.enable_align, self.display_align, self.search_align, self.device_align, self.oper_align ]) if self.my_bluetooth.adapter == None: self.set_sensitive(False) self.connect("expose-event", self.__expose) if self.my_bluetooth.adapter and self.my_bluetooth.adapter.get_powered( ): self.__get_devices()
class BlueToothView(gtk.VBox): ''' class docs ''' def __init__(self, module_frame): ''' init docs ''' gtk.VBox.__init__(self) self.module_frame = module_frame self.my_bluetooth = MyBluetooth(self.__on_adapter_removed, self.__on_default_adapter_changed, self.__device_found) self.periodic_timer = None self.is_discoverable = False self.is_searching = False ''' enable open ''' if self.my_bluetooth.adapter: self.my_bluetooth.adapter.connect("property-changed", self.__on_property_changed) if self.my_bluetooth.adapter.get_powered(): self.title_align, self.title_label = self.__setup_title_align( app_theme.get_pixbuf("bluetooth/enable_open.png"), _("Bluetooth")) self.title_label.set_sensitive(True) else: self.title_align, self.title_label = self.__setup_title_align( app_theme.get_pixbuf("bluetooth/enable_open_disable.png"), _("Bluetooth")) else: self.title_align, self.title_label = self.__setup_title_align( app_theme.get_pixbuf("bluetooth/enable_open_disable.png"), _("Bluetooth")) self.title_label.set_sensitive(False) self.enable_align = self.__setup_align() self.enable_box = gtk.HBox(spacing=WIDGET_SPACING) self.enable_open_label = self.__setup_label(_("Enable bluetooth")) if self.my_bluetooth.adapter: self.my_bluetooth.adapter.set_powered(permanent_settings.get_powered()) self.enable_open_label.set_sensitive(self.my_bluetooth.adapter.get_powered()) else: self.enable_open_label.set_sensitive(False) self.enable_open_toggle_align = self.__setup_align(padding_top = 4, padding_left = 158) self.enable_open_toggle = self.__setup_toggle() if self.my_bluetooth.adapter: self.enable_open_toggle.set_active(self.my_bluetooth.adapter.get_powered()) self.enable_open_toggle.connect("toggled", self.__toggled, "enable_open") self.enable_open_toggle_align.add(self.enable_open_toggle) self.__widget_pack_start(self.enable_box, [self.enable_open_label, self.enable_open_toggle_align]) self.enable_align.add(self.enable_box) ''' display ''' self.display_align = self.__setup_align() self.display_box = gtk.HBox(spacing=WIDGET_SPACING) self.display_device_label = self.__setup_label(_("Device name")) if self.my_bluetooth.adapter: self.display_device_label.set_sensitive(self.my_bluetooth.adapter.get_powered()) else: self.display_device_label.set_sensitive(False) self.display_device_entry = InputEntry() if self.my_bluetooth.adapter: self.display_device_entry.set_text(self.my_bluetooth.adapter.get_name()) self.display_device_entry.set_sensitive(self.my_bluetooth.adapter.get_powered()) else: self.display_device_entry.set_sensitive(False) self.display_device_entry.set_size(HSCALEBAR_WIDTH, WIDGET_HEIGHT) self.display_device_entry.entry.connect("changed", self.__display_device_changed) self.__widget_pack_start(self.display_box, [self.display_device_label, self.display_device_entry]) self.display_align.add(self.display_box) ''' enable searchable ''' self.search_align = self.__setup_align() self.search_box = gtk.HBox(spacing=WIDGET_SPACING) self.search_label = self.__setup_label(_("Discoverable")) if self.my_bluetooth.adapter: self.search_label.set_sensitive(self.my_bluetooth.adapter.get_powered()) else: self.search_label.set_sensitive(False) self.search_timeout_align = self.__setup_align(padding_top = 0, padding_left = 0) self.search_timeout_label = self.__setup_label("", width = 110, align = ALIGN_START) self.search_timeout_align.add(self.search_timeout_label) self.search_toggle_align = self.__setup_align(padding_top = 4, padding_left = 18) self.search_toggle = self.__setup_toggle() if self.my_bluetooth.adapter: self.search_toggle.set_active(self.my_bluetooth.adapter.get_discoverable()) self.search_toggle.connect("toggled", self.__toggled, "search") self.search_toggle_align.add(self.search_toggle) self.__widget_pack_start(self.search_box, [self.search_label, self.search_timeout_align, self.search_toggle_align ]) self.search_align.add(self.search_box) ''' device iconview ''' self.device_align = self.__setup_align() self.device_iconview = DeviceIconView() self.device_iconview.set_size_request(690, 228) self.device_align.add(self.device_iconview) ''' operation ''' self.oper_align = self.__setup_align() self.oper_box = gtk.HBox(spacing = WIDGET_SPACING) self.notice_label = Label("", text_x_align = ALIGN_START, label_width = 610) self.search_button = Button(_("Search")) if self.my_bluetooth.adapter: self.search_button.set_sensitive(self.my_bluetooth.adapter.get_powered()) else: self.search_button.set_sensitive(False) self.search_button.connect("clicked", self.__on_search) self.__widget_pack_start(self.oper_box, [self.notice_label, self.search_button, ]) self.oper_align.add(self.oper_box) ''' this->gtk.VBox pack_start ''' self.__widget_pack_start(self, [self.title_align, self.enable_align, self.display_align, self.search_align, self.device_align, self.oper_align]) if self.my_bluetooth.adapter == None: self.set_sensitive(False) self.connect("expose-event", self.__expose) if self.my_bluetooth.adapter and self.my_bluetooth.adapter.get_powered(): self.__get_devices() def __on_property_changed(self, adapter, key, value): if key == "Powered": if value == 1: self.enable_open_toggle.set_active(True) # removed by hualet, this will cause devices are added twice. # self.__set_enable_open(True) else: self.enable_open_toggle.set_active(False) # self.__set_enable_open(False) if key == "Devices": # fixbug: iconview didn't update accordingly # while adapter paired other devices in system tray. self.device_iconview.clear() self.__get_devices() def sendfile(self, device_name): event_manager.emit("send-file", device_name) def cancel(self): event_manager.emit("cancel", None) def __on_adapter_removed(self): self.set_sensitive(False) def __on_default_adapter_changed(self): self.set_sensitive(True) self.display_device_entry.set_text(self.my_bluetooth.adapter.get_name()) def __display_device_changed(self, widget, event): self.my_bluetooth.adapter.set_name(widget.get_text()) def __setup_separator(self): hseparator = HSeparator(app_theme.get_shadow_color("hSeparator").get_color_info(), 0, 0) hseparator.set_size_request(500, HSEPARATOR_HEIGHT) return hseparator def __setup_title_label(self, text="", text_color=app_theme.get_color("globalTitleForeground"), text_size=TITLE_FONT_SIZE, text_x_align=ALIGN_START, label_width=180): return Label(text = text, text_color = text_color, text_size = text_size, text_x_align = text_x_align, label_width = label_width, enable_select = False, enable_double_click = False) def __setup_title_align(self, pixbuf, text, padding_top=TEXT_WINDOW_TOP_PADDING, padding_left=TEXT_WINDOW_LEFT_PADDING): align = self.__setup_align(padding_top = padding_top, padding_left = padding_left) align_box = gtk.VBox(spacing = WIDGET_SPACING) title_box = gtk.HBox(spacing = WIDGET_SPACING) image = ImageBox(pixbuf) label = self.__setup_title_label(text) separator = self.__setup_separator() self.__widget_pack_start(title_box, [image, label]) self.__widget_pack_start(align_box, [title_box, separator]) align.add(align_box) return align, label def __get_devices(self): devices = self.my_bluetooth.get_devices() items = [] i = 0 while i < len(devices): items.append(DeviceItem(devices[i].get_name(), app_theme.get_pixbuf("bluetooth/%s.png" % bluetooth_class_to_type(devices[i].get_class())).get_pixbuf(), devices[i], self.my_bluetooth.adapter, devices[i].get_paired(), self.module_frame)) i += 1 self.device_iconview.add_items(items) def __refresh_notice_label(self): searching_str = _("Discovering device") if self.notice_label.get_text().count(".") == 3: self.notice_label.set_text(searching_str + ".") else: self.notice_label.set_text(self.notice_label.get_text() + ".") return True def __on_search(self, widget): if not self.is_searching: self.my_bluetooth.adapter.start_discovery() self.notice_label.set_text(_("Discovering device")) self.refresh_lable_timeout = gobject.timeout_add_seconds(1, self.__refresh_notice_label) self.my_bluetooth.adapter.connect("property-changed", self.on_adapter_property_changed) self.is_searching = True def on_adapter_property_changed(self, obj, key, value): if key == "Discovering" and value == False: gobject.source_remove(self.refresh_lable_timeout) if self.is_searching: self.my_bluetooth.adapter.stop_discovery() self.is_searching = False self.notice_label.set_text("") def __device_found(self, adapter, address, values): print "address", address if address not in adapter.get_address_records(): device_path = adapter.create_device(address) if device_path == "None": return device = Device(device_path) items = [] if not values.has_key("Name"): return print bluetooth_class_to_type(device.get_class()) items.append(DeviceItem(values['Name'], app_theme.get_pixbuf("bluetooth/%s.png" % bluetooth_class_to_type(device.get_class())).get_pixbuf(), device, adapter)) self.device_iconview.add_items(items) def __set_enable_open(self, is_open=True): self.enable_open_label.set_sensitive(is_open) self.display_device_label.set_sensitive(is_open) self.search_label.set_sensitive(is_open) self.display_align.set_sensitive(is_open) self.display_device_entry.set_sensitive(is_open) # self.device_iconview.set_sensitive(is_open) self.search_align.set_sensitive(is_open) self.search_timeout_label.set_child_visible(False) self.search_button.set_sensitive(is_open) # changed by hualet, to fix the bug that device icons stay while disabling the iconview widget if is_open: self.__get_devices() else: self.device_iconview.clear() def __toggled(self, widget, object): if self.my_bluetooth.adapter == None: return if object == "enable_open": self.__set_enable_open(widget.get_active()) permanent_settings.set_powered(widget.get_active()) self.my_bluetooth.adapter.set_powered(widget.get_active()) return if object == "search": self.is_discoverable = widget.get_active() self.my_bluetooth.adapter.set_discoverable(self.is_discoverable) self.search_timeout_label.set_child_visible(self.is_discoverable) if self.is_discoverable: self.periodic_timer = PerodicTimer(self, 1) else: self.periodic_timer.stop() return def __expose(self, widget, event): cr = widget.window.cairo_create() rect = widget.allocation cr.set_source_rgb(*color_hex_to_cairo(MODULE_BG_COLOR)) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.fill() def __setup_label(self, text="", width=180, align=ALIGN_END): return Label(text, None, TITLE_FONT_SIZE, align, width, False, False, False) def __setup_combo(self, items=[], width=HSCALEBAR_WIDTH): combo = ComboBox(items, None, 0, width, width) combo.set_size_request(width, WIDGET_HEIGHT) return combo def __setup_toggle(self): return ToggleButton( app_theme.get_pixbuf("toggle_button/inactive_normal.png"), app_theme.get_pixbuf("toggle_button/active_normal.png"), inactive_disable_dpixbuf = app_theme.get_pixbuf("toggle_button/inactive_normal.png"), active_disable_dpixbuf = app_theme.get_pixbuf("toggle_button/inactive_normal.png")) def __setup_align(self, xalign=0, yalign=0, xscale=0, yscale=0, padding_top=BETWEEN_SPACING, padding_bottom=0, padding_left=TEXT_WINDOW_LEFT_PADDING, padding_right=20): align = gtk.Alignment() align.set(xalign, yalign, xscale, yscale) align.set_padding(padding_top, padding_bottom, padding_left, padding_right) return align def __widget_pack_start(self, parent_widget, widgets=[], expand=False, fill=False): if parent_widget == None: return for item in widgets: parent_widget.pack_start(item, expand, fill)
class BlueToothView(gtk.VBox): ''' class docs ''' def __init__(self, module_frame): ''' init docs ''' gtk.VBox.__init__(self) self.module_frame = module_frame self.my_bluetooth = MyBluetooth(self.__on_adapter_removed, self.__on_default_adapter_changed, self.__device_found) self.periodic_timer = None self.is_discoverable = False self.is_searching = False ''' enable open ''' if self.my_bluetooth.adapter: self.my_bluetooth.adapter.connect("property-changed", self.__on_property_changed) if self.my_bluetooth.adapter.get_powered(): self.title_align, self.title_label = self.__setup_title_align( app_theme.get_pixbuf("bluetooth/enable_open.png"), _("Bluetooth")) self.title_label.set_sensitive(True) else: self.title_align, self.title_label = self.__setup_title_align( app_theme.get_pixbuf("bluetooth/enable_open_disable.png"), _("Bluetooth")) else: self.title_align, self.title_label = self.__setup_title_align( app_theme.get_pixbuf("bluetooth/enable_open_disable.png"), _("Bluetooth")) self.title_label.set_sensitive(False) self.enable_align = self.__setup_align() self.enable_box = gtk.HBox(spacing=WIDGET_SPACING) self.enable_open_label = self.__setup_label(_("Enable bluetooth")) if self.my_bluetooth.adapter: self.my_bluetooth.adapter.set_powered( permanent_settings.get_powered()) self.enable_open_label.set_sensitive( self.my_bluetooth.adapter.get_powered()) else: self.enable_open_label.set_sensitive(False) self.enable_open_toggle_align = self.__setup_align(padding_top=4, padding_left=158) self.enable_open_toggle = self.__setup_toggle() if self.my_bluetooth.adapter: self.enable_open_toggle.set_active( self.my_bluetooth.adapter.get_powered()) self.enable_open_toggle.connect("toggled", self.__toggled, "enable_open") self.enable_open_toggle_align.add(self.enable_open_toggle) self.__widget_pack_start( self.enable_box, [self.enable_open_label, self.enable_open_toggle_align]) self.enable_align.add(self.enable_box) ''' display ''' self.display_align = self.__setup_align() self.display_box = gtk.HBox(spacing=WIDGET_SPACING) self.display_device_label = self.__setup_label(_("Device name")) if self.my_bluetooth.adapter: self.display_device_label.set_sensitive( self.my_bluetooth.adapter.get_powered()) else: self.display_device_label.set_sensitive(False) self.display_device_entry = InputEntry() if self.my_bluetooth.adapter: self.display_device_entry.set_text( self.my_bluetooth.adapter.get_name()) self.display_device_entry.set_sensitive( self.my_bluetooth.adapter.get_powered()) else: self.display_device_entry.set_sensitive(False) self.display_device_entry.set_size(HSCALEBAR_WIDTH, WIDGET_HEIGHT) self.display_device_entry.entry.connect("changed", self.__display_device_changed) self.__widget_pack_start( self.display_box, [self.display_device_label, self.display_device_entry]) self.display_align.add(self.display_box) ''' enable searchable ''' self.search_align = self.__setup_align() self.search_box = gtk.HBox(spacing=WIDGET_SPACING) self.search_label = self.__setup_label(_("Discoverable")) if self.my_bluetooth.adapter: self.search_label.set_sensitive( self.my_bluetooth.adapter.get_powered()) else: self.search_label.set_sensitive(False) self.search_timeout_align = self.__setup_align(padding_top=0, padding_left=0) self.search_timeout_label = self.__setup_label("", width=110, align=ALIGN_START) self.search_timeout_align.add(self.search_timeout_label) self.search_toggle_align = self.__setup_align(padding_top=4, padding_left=18) self.search_toggle = self.__setup_toggle() if self.my_bluetooth.adapter: self.search_toggle.set_active( self.my_bluetooth.adapter.get_discoverable()) self.search_toggle.connect("toggled", self.__toggled, "search") self.search_toggle_align.add(self.search_toggle) self.__widget_pack_start(self.search_box, [ self.search_label, self.search_timeout_align, self.search_toggle_align ]) self.search_align.add(self.search_box) ''' device iconview ''' self.device_align = self.__setup_align() self.device_iconview = DeviceIconView() self.device_iconview.set_size_request(690, 228) self.device_align.add(self.device_iconview) ''' operation ''' self.oper_align = self.__setup_align() self.oper_box = gtk.HBox(spacing=WIDGET_SPACING) self.notice_label = Label("", text_x_align=ALIGN_START, label_width=610) self.search_button = Button(_("Search")) if self.my_bluetooth.adapter: self.search_button.set_sensitive( self.my_bluetooth.adapter.get_powered()) else: self.search_button.set_sensitive(False) self.search_button.connect("clicked", self.__on_search) self.__widget_pack_start(self.oper_box, [ self.notice_label, self.search_button, ]) self.oper_align.add(self.oper_box) ''' this->gtk.VBox pack_start ''' self.__widget_pack_start(self, [ self.title_align, self.enable_align, self.display_align, self.search_align, self.device_align, self.oper_align ]) if self.my_bluetooth.adapter == None: self.set_sensitive(False) self.connect("expose-event", self.__expose) if self.my_bluetooth.adapter and self.my_bluetooth.adapter.get_powered( ): self.__get_devices() def __on_property_changed(self, adapter, key, value): if key == "Powered": if value == 1: self.enable_open_toggle.set_active(True) # removed by hualet, this will cause devices are added twice. # self.__set_enable_open(True) else: self.enable_open_toggle.set_active(False) # self.__set_enable_open(False) if key == "Devices": # fixbug: iconview didn't update accordingly # while adapter paired other devices in system tray. self.device_iconview.clear() self.__get_devices() def sendfile(self, device_name): event_manager.emit("send-file", device_name) def cancel(self): event_manager.emit("cancel", None) def __on_adapter_removed(self): self.set_sensitive(False) def __on_default_adapter_changed(self): self.set_sensitive(True) self.display_device_entry.set_text( self.my_bluetooth.adapter.get_name()) def __display_device_changed(self, widget, event): self.my_bluetooth.adapter.set_name(widget.get_text()) def __setup_separator(self): hseparator = HSeparator( app_theme.get_shadow_color("hSeparator").get_color_info(), 0, 0) hseparator.set_size_request(500, HSEPARATOR_HEIGHT) return hseparator def __setup_title_label( self, text="", text_color=app_theme.get_color("globalTitleForeground"), text_size=TITLE_FONT_SIZE, text_x_align=ALIGN_START, label_width=180): return Label(text=text, text_color=text_color, text_size=text_size, text_x_align=text_x_align, label_width=label_width, enable_select=False, enable_double_click=False) def __setup_title_align(self, pixbuf, text, padding_top=TEXT_WINDOW_TOP_PADDING, padding_left=TEXT_WINDOW_LEFT_PADDING): align = self.__setup_align(padding_top=padding_top, padding_left=padding_left) align_box = gtk.VBox(spacing=WIDGET_SPACING) title_box = gtk.HBox(spacing=WIDGET_SPACING) image = ImageBox(pixbuf) label = self.__setup_title_label(text) separator = self.__setup_separator() self.__widget_pack_start(title_box, [image, label]) self.__widget_pack_start(align_box, [title_box, separator]) align.add(align_box) return align, label def __get_devices(self): devices = self.my_bluetooth.get_devices() items = [] i = 0 while i < len(devices): items.append( DeviceItem( devices[i].get_name(), app_theme.get_pixbuf( "bluetooth/%s.png" % bluetooth_class_to_type( devices[i].get_class())).get_pixbuf(), devices[i], self.my_bluetooth.adapter, devices[i].get_paired(), self.module_frame)) i += 1 self.device_iconview.add_items(items) def __refresh_notice_label(self): searching_str = _("Discovering device") if self.notice_label.get_text().count(".") == 3: self.notice_label.set_text(searching_str + ".") else: self.notice_label.set_text(self.notice_label.get_text() + ".") return True def __on_search(self, widget): if not self.is_searching: self.my_bluetooth.adapter.start_discovery() self.notice_label.set_text(_("Discovering device")) self.refresh_lable_timeout = gobject.timeout_add_seconds( 1, self.__refresh_notice_label) self.my_bluetooth.adapter.connect("property-changed", self.on_adapter_property_changed) self.is_searching = True def on_adapter_property_changed(self, obj, key, value): if key == "Discovering" and value == False: gobject.source_remove(self.refresh_lable_timeout) if self.is_searching: self.my_bluetooth.adapter.stop_discovery() self.is_searching = False self.notice_label.set_text("") def __device_found(self, adapter, address, values): print "address", address if address not in adapter.get_address_records(): device_path = adapter.create_device(address) if device_path == "None": return device = Device(device_path) items = [] if not values.has_key("Name"): return print bluetooth_class_to_type(device.get_class()) items.append( DeviceItem( values['Name'], app_theme.get_pixbuf( "bluetooth/%s.png" % bluetooth_class_to_type( device.get_class())).get_pixbuf(), device, adapter)) self.device_iconview.add_items(items) def __set_enable_open(self, is_open=True): self.enable_open_label.set_sensitive(is_open) self.display_device_label.set_sensitive(is_open) self.search_label.set_sensitive(is_open) self.display_align.set_sensitive(is_open) self.display_device_entry.set_sensitive(is_open) # self.device_iconview.set_sensitive(is_open) self.search_align.set_sensitive(is_open) self.search_timeout_label.set_child_visible(False) self.search_button.set_sensitive(is_open) # changed by hualet, to fix the bug that device icons stay while disabling the iconview widget if is_open: self.__get_devices() else: self.device_iconview.clear() def __toggled(self, widget, object): if self.my_bluetooth.adapter == None: return if object == "enable_open": self.__set_enable_open(widget.get_active()) permanent_settings.set_powered(widget.get_active()) self.my_bluetooth.adapter.set_powered(widget.get_active()) return if object == "search": self.is_discoverable = widget.get_active() self.my_bluetooth.adapter.set_discoverable(self.is_discoverable) self.search_timeout_label.set_child_visible(self.is_discoverable) if self.is_discoverable: self.periodic_timer = PerodicTimer(self, 1) else: self.periodic_timer.stop() return def __expose(self, widget, event): cr = widget.window.cairo_create() rect = widget.allocation cr.set_source_rgb(*color_hex_to_cairo(MODULE_BG_COLOR)) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.fill() def __setup_label(self, text="", width=180, align=ALIGN_END): return Label(text, None, TITLE_FONT_SIZE, align, width, False, False, False) def __setup_combo(self, items=[], width=HSCALEBAR_WIDTH): combo = ComboBox(items, None, 0, width, width) combo.set_size_request(width, WIDGET_HEIGHT) return combo def __setup_toggle(self): return ToggleButton( app_theme.get_pixbuf("toggle_button/inactive_normal.png"), app_theme.get_pixbuf("toggle_button/active_normal.png"), inactive_disable_dpixbuf=app_theme.get_pixbuf( "toggle_button/inactive_normal.png"), active_disable_dpixbuf=app_theme.get_pixbuf( "toggle_button/inactive_normal.png")) def __setup_align(self, xalign=0, yalign=0, xscale=0, yscale=0, padding_top=BETWEEN_SPACING, padding_bottom=0, padding_left=TEXT_WINDOW_LEFT_PADDING, padding_right=20): align = gtk.Alignment() align.set(xalign, yalign, xscale, yscale) align.set_padding(padding_top, padding_bottom, padding_left, padding_right) return align def __widget_pack_start(self, parent_widget, widgets=[], expand=False, fill=False): if parent_widget == None: return for item in widgets: parent_widget.pack_start(item, expand, fill)