def plugin_widget(self): self.__get_devices() plugin_box = gtk.VBox() adapter_box = gtk.HBox(spacing=5) adapter_image = ImageBox( app_theme.get_pixbuf("bluetooth/enable_open.png")) adapter_label = self.__setup_label(_("Adapter")) adapter_toggle = self.__setup_toggle() if self.my_bluetooth.adapter: adapter_toggle.set_active(self.my_bluetooth.adapter.get_powered()) if self.my_bluetooth.adapter.get_powered(): self.tray_icon.set_icon_theme("enable") else: self.tray_icon.set_icon_theme("enable_disconnect") adapter_toggle.connect("toggled", self.__adapter_toggled) separator_align = self.__setup_align(padding_bottom=0) separator = self.__setup_separator() separator_align.add(separator) ''' devices treeview ''' device_treeview = TreeView() device_separator_align = self.__setup_align() device_separator = self.__setup_separator() device_separator_align.add(device_separator) device_count = len(self.device_items) if device_count: device_treeview.delete_all_items() device_treeview.add_items(self.device_items) device_treeview.set_size_request( self.width, device_count * DeviceItem.ITEM_HEIGHT) else: device_treeview.set_child_visible(False) device_separator_align.set_size_request(-1, 0) device_separator_align.set_child_visible(False) ''' select button ''' select_button_align = self.__setup_align() select_button = SelectButton(_("Advanced options..."), font_size=10, ali_padding=5) select_button.set_size_request(self.width, 25) select_button.connect( "clicked", self.__bluetooth_selected ) # I don't know why, but replacing "button-press-event" with select_button_align.add(select_button) # clicked really works... adapter_box.pack_start(adapter_image, False, False) adapter_box.pack_start(adapter_label, False, False) adapter_box.pack_start(adapter_toggle, False, False) plugin_box.pack_start(adapter_box, False, False) plugin_box.pack_start(separator_align, False, False) plugin_box.pack_start(device_treeview, False, False) plugin_box.pack_start(device_separator_align, False, False) plugin_box.pack_start(select_button_align, False, False) return plugin_box
def plugin_widget(self): self.__get_devices() plugin_box = gtk.VBox() adapter_box = gtk.HBox(spacing = 5) adapter_image = ImageBox(app_theme.get_pixbuf("bluetooth/enable_open.png")) adapter_label = self.__setup_label(_("Adapter")) adapter_toggle = self.__setup_toggle() if self.my_bluetooth.adapter: adapter_toggle.set_active(self.my_bluetooth.adapter.get_powered()) if self.my_bluetooth.adapter.get_powered(): self.tray_icon.set_icon_theme("enable") else: self.tray_icon.set_icon_theme("enable_disconnect") adapter_toggle.connect("toggled", self.__adapter_toggled) separator_align = self.__setup_align(padding_bottom = 0) separator = self.__setup_separator() separator_align.add(separator) ''' devices treeview ''' device_treeview = TreeView() device_separator_align = self.__setup_align() device_separator = self.__setup_separator() device_separator_align.add(device_separator) device_count = len(self.device_items) if device_count: device_treeview.delete_all_items() device_treeview.add_items(self.device_items) device_treeview.set_size_request(self.width, device_count * DeviceItem.ITEM_HEIGHT) else: device_treeview.set_child_visible(False) device_separator_align.set_size_request(-1, 0) device_separator_align.set_child_visible(False) ''' select button ''' select_button_align = self.__setup_align() select_button = SelectButton(_("Advanced options..."), font_size = 10, ali_padding = 5) select_button.set_size_request(self.width, 25) select_button.connect("clicked", self.__bluetooth_selected) # I don't know why, but replacing "button-press-event" with select_button_align.add(select_button) # clicked really works... adapter_box.pack_start(adapter_image, False, False) adapter_box.pack_start(adapter_label, False, False) adapter_box.pack_start(adapter_toggle, False, False) plugin_box.pack_start(adapter_box, False, False) plugin_box.pack_start(separator_align, False, False) plugin_box.pack_start(device_treeview, False, False) plugin_box.pack_start(device_separator_align, False, False) plugin_box.pack_start(select_button_align, False, False) return plugin_box
class SearchPage(gtk.VBox): ''' class docs ''' def __init__(self, data_manager): ''' init docs ''' # Init. gtk.VBox.__init__(self) self.data_manager = data_manager self.keywords = [] self.all_pkg_names = [] self.message_bar = MessageBar(18) self.content_box = gtk.VBox() self.treeview = TreeView(enable_drag_drop=False, expand_column=0) self.cute_message_image = gtk.VBox() self.cute_message_pixbuf = utils.get_common_locale_image_pixbuf("info", "noresult.png") self.cute_message_image.connect("expose-event", self.expose_cute_message_image) self.content_box.pack_start(self.message_bar, False, False) self.content_box.pack_start(self.treeview) self.loading_box = LoadingBox() self.pack_start(self.loading_box, True, True) self.treeview.connect("items-change", self.update_message_bar) self.treeview.draw_mask = self.draw_mask def expose_cute_message_image(self, widget, event): if self.cute_message_pixbuf: cr = widget.window.cairo_create() rect = widget.allocation cr.set_source_rgba(1, 1, 1, 0) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.fill() draw_pixbuf( cr, self.cute_message_pixbuf, rect.x + (rect.width - self.cute_message_pixbuf.get_width()) / 2, rect.y + (rect.height - self.cute_message_pixbuf.get_height()) / 2, ) def update_message_bar(self, treeview): if len(treeview.visible_items) > 0: self.message_bar.set_message(_("%s: %s matched applications") % (' '.join(self.keywords), len(self.all_pkg_names))) container_remove_all(self) self.pack_start(self.content_box) global_event.emit("update-current-status-pkg-page", treeview) else: container_remove_all(self) self.pack_start(self.cute_message_image) def draw_mask(self, cr, x, y, w, h): ''' Draw mask interface. @param cr: Cairo context. @param x: X coordiante of draw area. @param y: Y coordiante of draw area. @param w: Width of draw area. @param h: Height of draw area. ''' draw_vlinear(cr, x, y, w, h, [(0, ("#FFFFFF", 0.9)), (1, ("#FFFFFF", 0.9)),] ) def update(self, keywords): self.keywords = keywords self.treeview.delete_all_items() self.all_pkg_names = self.data_manager.search_query(keywords) if self.all_pkg_names: if len(self.all_pkg_names) > LOAD_ITEMS_NUMBER: self.load_new_items(self.all_pkg_names[:LOAD_ITEMS_NUMBER]) else: self.load_new_items(self.all_pkg_names) else: self.update_message_bar(self.treeview) self.treeview.scrolled_window.connect('vscrollbar-state-changed', self.scrolled_window_vscrollbar_handler) def scrolled_window_vscrollbar_handler(self, widget, state): if state == "bottom": current_item_number = len(self.treeview.visible_items) all_pkgs_number = len(self.all_pkg_names) start = current_item_number if current_item_number < all_pkgs_number and (current_item_number+LOAD_ITEMS_NUMBER) < all_pkgs_number: end = current_item_number+LOAD_ITEMS_NUMBER elif current_item_number < all_pkgs_number and (current_item_number+LOAD_ITEMS_NUMBER) >= all_pkgs_number: end = all_pkgs_number else: return self.load_new_items(self.all_pkg_names[start:end]) def load_new_items(self, pkg_names): if pkg_names: results = self.data_manager.get_search_pkgs_info(pkg_names) self.data_manager.get_pkgs_install_status( pkg_names, reply_handler=lambda status: self.search_reply_handler(status, results), error_handler=handle_dbus_error) else: self.update_message_bar(self.treeview) def search_reply_handler(self, status, results): for (i, result) in enumerate(results): result.append(status[i]) self.render_search_info(results, self.keywords) def render_search_info(self, pkg_infos, keywords): self.keywords = keywords items = [] for pkg_info in pkg_infos: items.append(SearchItem(pkg_info, self.data_manager, keywords)) self.treeview.add_items(items)
class CompletionWindow(Window): ''' class docs ''' def __init__(self, window_width, window_height): ''' init docs ''' # Init. Window.__init__( self, shadow_visible=False, shadow_radius = 0, shape_frame_function=self.shape_completion_window_frame, expose_frame_function=self.expose_completion_window_frame, # window_type=gtk.WINDOW_POPUP, ) self.window_width = window_width self.window_height = window_height self.window_offset_x = 0 self.window_offset_y = 0 self.align_size = 2 self.treeview = TreeView( enable_highlight=False, enable_multiple_select=False, enable_drag_drop=False,) self.treeview.draw_mask = self.treeview_draw_mask self.treeview.scrolled_window.tag_by_popup_grab_window = True self.treeview_align = gtk.Alignment() self.treeview_align.set(0.5, 0.5, 1, 1) self.treeview_align.set_padding(self.align_size, self.align_size, self.align_size, self.align_size) self.treeview_align.add(self.treeview) self.window_frame.pack_start(self.treeview_align, True, True) self.connect("realize", self.realize_completion_window) self.get_scrolledwindow = self.get_scrolledwindow wrap_grab_window(completion_grab_window, self) def get_scrolledwindow(self): return self.treeview.scrolled_window def shape_completion_window_frame(self, widget, event): pass def treeview_draw_mask(self, cr, x, y, w, h): cr.set_source_rgba(1, 1, 1, 0.95) cr.rectangle(x, y, w, h) cr.fill() def expose_completion_window_frame(self, widget, event): cr = widget.window.cairo_create() rect = widget.allocation cr = widget.window.cairo_create() rect = widget.allocation cr.set_source_rgb(1,1,1) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.fill() cr.set_line_width(1) cr.set_source_rgb(*color_hex_to_cairo("#c7c7c7")) cr.rectangle(*rect) cr.stroke() def show(self, keyword): self.treeview.delete_all_items() self.treeview.add_items([TextItem(key) for key in ["linux", "deepin", "word", keyword]]) self.treeview.select_first_item() # self.treeview.grab_focus() (x, y) = get_widget_root_coordinate(search_entry, WIDGET_POS_BOTTOM_LEFT, True) self.move(x + self.window_offset_x, y + self.window_offset_y) self.show_all() def realize_completion_window(self, widget): self.set_default_size(self.window_width, self.window_height) self.set_geometry_hints( None, self.window_width, # minimum width self.window_height, # minimum height self.window_width, self.window_height, -1, -1, -1, -1, -1, -1 )
class Region(gtk.Alignment): def __init__(self, connection=None): gtk.Alignment.__init__(self, 0, 0, 0, 0) ################# self.provider_select = None self.connect('expose-event', self.expose_event) self.prop_dict = {} main_table = gtk.Table(2, 2, False) main_table.set_row_spacing(1, 10) main_table.set_col_spacings(4) self.add(main_table) self.country_tree = TreeView( enable_multiple_select=False, enable_drag_drop=False, ) self.country_tree.set_expand_column(1) self.country_tree.set_size_request(365, 380) self.country_tree.draw_mask = self.draw_mask self.country_tree.connect("button-press-item", self.country_selected) left_box_align = gtk.Alignment(0, 0, 0, 0) left_box_align.set_padding(1, 1, 1, 1) left_box_align.add(self.country_tree) left_box_align.show_all() left_box = gtk.VBox() # wrap title country_title = TitleBar( app_theme.get_pixbuf("network/globe-green.png"), _("Country or Region:"), has_separator=False) left_box.pack_start(country_title, False, False) left_box.pack_start(left_box_align, False, False) self.provider_tree = TreeView( enable_multiple_select=False, enable_drag_drop=False, ) self.provider_tree.set_expand_column(0) self.provider_tree.set_size_request(365, 380) self.provider_tree.draw_mask = self.draw_mask self.provider_tree.connect("button-press-item", self.provider_selected) right_box_align = gtk.Alignment(0, 0, 0, 0) right_box_align.set_padding(1, 1, 1, 1) right_box_align.add(self.provider_tree) right_box = gtk.VBox() # wrap title provider_title = TitleBar(app_theme.get_pixbuf("network/building.png"), _("Provider:"), has_separator=False) right_box.pack_start(provider_title, False, False) right_box.pack_start(right_box_align, False, False) main_left_align = gtk.Alignment(0, 0, 0, 0) main_left_align.set_padding(15, 0, 20, 0) main_left_align.add(left_box) main_table.attach(main_left_align, 0, 1, 0, 1) main_right_align = gtk.Alignment(0, 0, 0, 0) main_right_align.set_padding(15, 0, 0, 20) main_right_align.add(right_box) main_table.attach(main_right_align, 1, 2, 0, 1) hints = _( "Tips:This assistant helps you easily set up a mobile broadband connection to a cellular network." ) left_box_align.connect("expose-event", self.expose_outline) right_box_align.connect("expose-event", self.expose_outline) next_button = Button("Next") next_button.connect("clicked", self.next_button_clicked) self.foot_box = FootBox() self.foot_box.set_buttons([next_button]) self.foot_box.set_tip(hints) main_table.attach(self.foot_box, 0, 2, 1, 2) self.show_all() #self.init() def expose_outline(self, widget, event): cr = widget.window.cairo_create() rect = widget.allocation with cairo_disable_antialias(cr): cr.set_line_width(1) cr.set_source_rgb(*BORDER_COLOR) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.stroke() def draw_mask(self, cr, x, y, w, h): cr.set_source_rgb(1, 1, 1) cr.rectangle(x, y, w, h) cr.fill() def expose_event(self, widget, event): cr = widget.window.cairo_create() rect = widget.allocation cr.set_source_rgb(1, 1, 1) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.fill() def expose_hint_background(self, widget, event): bg_color = color_hex_to_cairo(TREEVIEW_BG_COLOR) cr = widget.window.cairo_create() rect = widget.allocation cr.set_source_rgb(*bg_color) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.fill() with cairo_disable_antialias(cr): cr.set_source_rgb(*BORDER_COLOR) cr.set_line_width(1) cr.rectangle(rect.x, rect.y, rect.width, rect.height - 1) cr.stroke() def next_button_clicked(self, widget): # 检查是否选择了运营商 if not self.provider_select: print "provider has not selected" return try: self.plan_select except: self.plan_select = None def add_keys(settings): self.prop_dict = settings username = self.__sp.get_provider_username(self.code, self.provider_select) password = self.__sp.get_provider_password(self.code, self.provider_select) add_keys({ "cdma": { "number": "#777", "username": username, "password": password } }) provider_type = "cdma" if self.plan_select: self.prop_dict.pop("cdma") apn = self.plan_select index = self.__sp.get_provider_apns_name( self.code, self.provider_select).index(apn) (network_id, network_type) = self.__sp.get_provider_networks( self.code, self.provider_select)[index] add_keys({ "gsm": { "number": "*99#", "username": username, "password": password, "apn": apn, #"network_id": network_id, "network_type": network_type } }) provider_type = "gsm" #setting_page = nm_module.slider.get_page_by_name("setting") #broadband = setting_page.setting_group.get_broadband() if self.connection_type == None: new_connection = getattr(nm_module.nm_remote_settings, "new_%s_connection" % provider_type)() Dispatcher.emit("region-back", new_connection, self.prop_dict, provider_type) #setting_page.sidebar.new_connection_list[provider_type].append(new_connection) #setting_page.init(setting_page.sidebar.new_connection_list) #setting_page.sidebar.set_active(new_connection) #broadband.set_new_values(self.prop_dict, provider_type) else: Dispatcher.emit("region-back", self.connection, self.prop_dict, provider_type) #broadband.set_new_values(self.prop_dict, provider_type) nm_module.slider._slide_to_page("setting", "none") def init(self, connection): if connection == None: self.connection_type = None else: self.connection = connection mobile_type = connection.get_setting("connection").type self.connection_type = mobile_type Dispatcher.send_submodule_crumb(_("Region"), 2) from mm.provider import ServiceProviders self.__sp = ServiceProviders() self.country_list = self.__sp.get_country_name_list() self.country_tree.delete_all_items() self.country_tree.add_items( [CountryItem(_(country)) for country in self.country_list]) # add a bottom line for last item code = self.__sp.get_country_from_timezone() self.country_codes = self.__sp.get_country_list() try: selected_country = self.country_tree.visible_items[ self.country_codes.index(code)] self.country_tree.select_items([selected_country]) self.auto_scroll_to() self.country_tree.emit("button-press-item", selected_country, 0, 1, 1) except: pass def country_selected(self, widget, w, a, b, c): self.provider_tree.delete_all_items() self.code = self.country_codes[widget.select_rows[0]] if self.connection_type: self.provider_names = getattr( self.__sp, "get_country_%s_providers_name" % self.connection_type)(self.code) else: self.provider_names = self.__sp.get_country_providers_name( self.code) self.provider_select = None self.provider_tree.add_items( [Item(p, self.__sp, self.code) for p in self.provider_names]) self.provider_tree.show_all() def provider_selected(self, widget, item, column, offset_x, offset_y): if type(item) is Item: self.provider_select = item.content self.plan_select = None else: self.plan_select = item.content def auto_scroll_to(self): vadjust = self.country_tree.scrolled_window.get_vadjustment() upper = vadjust.upper page_size = vadjust.page_size vadjust.set_value( min(upper - page_size, (self.country_tree.select_rows[0] - 4) * 30))
class SearchPage(gtk.VBox): ''' class docs ''' def __init__(self, data_manager): ''' init docs ''' # Init. gtk.VBox.__init__(self) self.data_manager = data_manager self.keywords = [] self.all_pkg_names = [] self.message_bar = MessageBar(18) self.content_box = gtk.VBox() self.treeview = TreeView(enable_drag_drop=False, expand_column=0) global_event.register_event("delete-search-page-items", self.treeview.delete_items) self.cute_message_image = gtk.VBox() self.cute_message_pixbuf = utils.get_common_locale_image_pixbuf("info", "noresult.png") self.cute_message_image.connect("expose-event", self.expose_cute_message_image) self.content_box.pack_start(self.message_bar, False, False) self.content_box.pack_start(self.treeview) self.loading_box = LoadingBox() self.pack_start(self.loading_box, True, True) self.treeview.connect("items-change", self.update_message_bar) self.treeview.draw_mask = self.draw_mask def expose_cute_message_image(self, widget, event): if self.cute_message_pixbuf: cr = widget.window.cairo_create() rect = widget.allocation cr.set_source_rgba(1, 1, 1, 0) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.fill() draw_pixbuf( cr, self.cute_message_pixbuf, rect.x + (rect.width - self.cute_message_pixbuf.get_width()) / 2, rect.y + (rect.height - self.cute_message_pixbuf.get_height()) / 2, ) def update_message_bar(self, treeview): if len(treeview.visible_items) > 0: self.message_bar.set_message( " ".join(self.keywords) + ": " + _("%s applications searched") % len(self.all_pkg_names)) container_remove_all(self) self.pack_start(self.content_box) global_event.emit("update-current-status-pkg-page", treeview) else: container_remove_all(self) self.pack_start(self.cute_message_image) def draw_mask(self, cr, x, y, w, h): ''' Draw mask interface. @param cr: Cairo context. @param x: X coordiante of draw area. @param y: Y coordiante of draw area. @param w: Width of draw area. @param h: Height of draw area. ''' draw_vlinear(cr, x, y, w, h, [(0, ("#FFFFFF", 0.9)), (1, ("#FFFFFF", 0.9)),] ) def update(self, keywords): self.keywords = keywords self.treeview.delete_all_items() self.all_pkg_names = self.data_manager.search_query(keywords) if self.all_pkg_names: if len(self.all_pkg_names) > LOAD_ITEMS_NUMBER: self.load_new_items(self.all_pkg_names[:LOAD_ITEMS_NUMBER]) else: self.load_new_items(self.all_pkg_names) else: self.update_message_bar(self.treeview) self.treeview.scrolled_window.connect('vscrollbar-state-changed', self.scrolled_window_vscrollbar_handler) def scrolled_window_vscrollbar_handler(self, widget, state): if state == "bottom": current_item_number = len(self.treeview.visible_items) all_pkgs_number = len(self.all_pkg_names) start = current_item_number if current_item_number < all_pkgs_number and (current_item_number+LOAD_ITEMS_NUMBER) < all_pkgs_number: end = current_item_number+LOAD_ITEMS_NUMBER elif current_item_number < all_pkgs_number and (current_item_number+LOAD_ITEMS_NUMBER) >= all_pkgs_number: end = all_pkgs_number else: return self.load_new_items(self.all_pkg_names[start:end]) def load_new_items(self, pkg_names): if pkg_names: items = [] for pkg_name in pkg_names: items.append(SearchItem(pkg_name, self.data_manager, self.keywords)) self.treeview.add_items(items) #global_event.emit("show-pkg-view", self.page_box) else: self.update_message_bar(self.treeview)
class Region(gtk.Alignment): def __init__(self, connection=None): gtk.Alignment.__init__(self, 0, 0, 0, 0) ################# self.provider_select = None self.connect('expose-event', self.expose_event) self.prop_dict = {} main_table = gtk.Table(2, 2, False) main_table.set_row_spacing(1, 10) main_table.set_col_spacings(4) self.add(main_table) self.country_tree = TreeView(enable_multiple_select=False, enable_drag_drop=False, ) self.country_tree.set_expand_column(1) self.country_tree.set_size_request(365, 380) self.country_tree.draw_mask = self.draw_mask self.country_tree.connect("button-press-item", self.country_selected) left_box_align = gtk.Alignment(0, 0, 0, 0) left_box_align.set_padding(1,1,1,1) left_box_align.add(self.country_tree) left_box_align.show_all() left_box = gtk.VBox() # wrap title country_title = TitleBar(app_theme.get_pixbuf("network/globe-green.png"), _("Country or Region:"), has_separator=False) left_box.pack_start(country_title, False, False) left_box.pack_start(left_box_align, False, False) self.provider_tree = TreeView(enable_multiple_select=False, enable_drag_drop=False, ) self.provider_tree.set_expand_column(0) self.provider_tree.set_size_request(365, 380) self.provider_tree.draw_mask = self.draw_mask self.provider_tree.connect("button-press-item", self.provider_selected) right_box_align = gtk.Alignment(0, 0, 0, 0) right_box_align.set_padding(1,1,1,1) right_box_align.add(self.provider_tree) right_box = gtk.VBox() # wrap title provider_title = TitleBar(app_theme.get_pixbuf("network/building.png"), _("Provider:"), has_separator=False) right_box.pack_start(provider_title, False, False) right_box.pack_start(right_box_align, False, False) main_left_align = gtk.Alignment(0, 0, 0, 0) main_left_align.set_padding(15, 0, 20, 0) main_left_align.add(left_box) main_table.attach(main_left_align, 0, 1, 0, 1) main_right_align = gtk.Alignment(0, 0, 0, 0) main_right_align.set_padding(15, 0, 0, 20) main_right_align.add(right_box) main_table.attach(main_right_align, 1, 2, 0, 1) hints = _("Tips:This assistant helps you easily set up a mobile broadband connection to a cellular network.") left_box_align.connect("expose-event", self.expose_outline) right_box_align.connect("expose-event", self.expose_outline) next_button = Button("Next") next_button.connect("clicked", self.next_button_clicked) self.foot_box = FootBox() self.foot_box.set_buttons([next_button]) self.foot_box.set_tip(hints) main_table.attach(self.foot_box, 0, 2, 1, 2) self.show_all() #self.init() def expose_outline(self, widget, event): cr = widget.window.cairo_create() rect = widget.allocation with cairo_disable_antialias(cr): cr.set_line_width(1) cr.set_source_rgb(*BORDER_COLOR) cr.rectangle(rect.x, rect.y, rect.width , rect.height ) cr.stroke() def draw_mask(self, cr, x, y, w, h): cr.set_source_rgb(1, 1, 1) cr.rectangle(x, y, w, h) cr.fill() def expose_event(self, widget, event): cr = widget.window.cairo_create() rect = widget.allocation cr.set_source_rgb( 1, 1, 1) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.fill() def expose_hint_background(self, widget, event): bg_color = color_hex_to_cairo(TREEVIEW_BG_COLOR) cr = widget.window.cairo_create() rect = widget.allocation cr.set_source_rgb(*bg_color) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.fill() with cairo_disable_antialias(cr): cr.set_source_rgb(*BORDER_COLOR) cr.set_line_width(1) cr.rectangle(rect.x , rect.y, rect.width , rect.height -1) cr.stroke() def next_button_clicked(self, widget): # 检查是否选择了运营商 if not self.provider_select: print "provider has not selected" return try: self.plan_select except: self.plan_select = None def add_keys(settings): self.prop_dict = settings username = self.__sp.get_provider_username(self.code, self.provider_select) password = self.__sp.get_provider_password(self.code, self.provider_select) add_keys({"cdma": { "number": "#777", "username": username, "password": password}}) provider_type = "cdma" if self.plan_select: self.prop_dict.pop("cdma") apn = self.plan_select index = self.__sp.get_provider_apns_name(self.code, self.provider_select).index(apn) (network_id, network_type) = self.__sp.get_provider_networks(self.code, self.provider_select)[index] add_keys({"gsm":{ "number": "*99#", "username": username, "password": password, "apn": apn, #"network_id": network_id, "network_type": network_type}}) provider_type = "gsm" #setting_page = nm_module.slider.get_page_by_name("setting") #broadband = setting_page.setting_group.get_broadband() if self.connection_type == None: new_connection = getattr(nm_module.nm_remote_settings, "new_%s_connection"%provider_type)() Dispatcher.emit("region-back", new_connection, self.prop_dict, provider_type) #setting_page.sidebar.new_connection_list[provider_type].append(new_connection) #setting_page.init(setting_page.sidebar.new_connection_list) #setting_page.sidebar.set_active(new_connection) #broadband.set_new_values(self.prop_dict, provider_type) else: Dispatcher.emit("region-back", self.connection, self.prop_dict, provider_type) #broadband.set_new_values(self.prop_dict, provider_type) nm_module.slider._slide_to_page("setting", "none") def init(self, connection): if connection == None: self.connection_type = None else: self.connection = connection mobile_type = connection.get_setting("connection").type self.connection_type = mobile_type Dispatcher.send_submodule_crumb(_("Region"), 2) from mm.provider import ServiceProviders self.__sp = ServiceProviders() self.country_list = self.__sp.get_country_name_list() self.country_tree.delete_all_items() self.country_tree.add_items([CountryItem(_(country)) for country in self.country_list]) # add a bottom line for last item code = self.__sp.get_country_from_timezone() self.country_codes = self.__sp.get_country_list() try: selected_country = self.country_tree.visible_items[self.country_codes.index(code)] self.country_tree.select_items([selected_country]) self.auto_scroll_to() self.country_tree.emit("button-press-item", selected_country, 0, 1, 1) except: pass def country_selected(self, widget, w, a, b, c): self.provider_tree.delete_all_items() self.code = self.country_codes[widget.select_rows[0]] if self.connection_type: self.provider_names = getattr(self.__sp, "get_country_%s_providers_name"%self.connection_type)(self.code) else: self.provider_names = self.__sp.get_country_providers_name(self.code) self.provider_select = None self.provider_tree.add_items([Item(p, self.__sp, self.code) for p in self.provider_names]) self.provider_tree.show_all() def provider_selected(self, widget, item, column, offset_x, offset_y): if type(item) is Item: self.provider_select = item.content self.plan_select = None else: self.plan_select = item.content def auto_scroll_to(self): vadjust = self.country_tree.scrolled_window.get_vadjustment() upper = vadjust.upper page_size = vadjust.page_size vadjust.set_value(min(upper - page_size, (self.country_tree.select_rows[0]- 4)*30))
class CompletionWindow(Window): ''' class docs ''' def __init__(self, window_width, window_height): ''' init docs ''' # Init. Window.__init__( self, # shadow_visible=False, shape_frame_function=self.shape_completion_window_frame, expose_frame_function=self.expose_completion_window_frame) self.window_width = window_width self.window_height = window_height self.window_offset_x = 8 self.window_offset_y = 34 self.align_size = 2 self.treeview = TreeView( [], enable_highlight=False, enable_multiple_select=False, enable_drag_drop=False, expand_column=0, ) self.treeview.scrolled_window.tag_by_popup_grab_window = True self.treeview_align = gtk.Alignment() self.treeview_align.set(0.5, 0.5, 1, 1) self.treeview_align.set_padding(self.align_size, self.align_size, self.align_size, self.align_size) self.treeview_align.add(self.treeview) self.treeview.connect("press-return", self.treeview_press_return) self.treeview.draw_mask = self.draw_mask self.window_frame.pack_start(self.treeview_align, True, True) self.connect("realize", self.realize_completion_window) self.get_scrolledwindow = self.get_scrolledwindow wrap_grab_window(completion_grab_window, self) completion_grab_window.connect("input-method-focus-in", self.input_method_focus_in) completion_grab_window.connect("input-method-commit", self.input_method_commit) self.keymap = { "Home" : self.treeview.select_first_item, "End" : self.treeview.select_last_item, "Page_Up" : self.treeview.scroll_page_up, "Page_Down" : self.treeview.scroll_page_down, "Up" : self.treeview.select_prev_item, "Down" : self.treeview.select_next_item, } def draw_mask(self, cr, x, y, w, h): ''' Draw mask interface. @param cr: Cairo context. @param x: X coordiante of draw area. @param y: Y coordiante of draw area. @param w: Width of draw area. @param h: Height of draw area. ''' draw_vlinear(cr, x, y, w, h, [(0, ("#ffffff", 0.9)), (1, ("#ffffff", 0.9)),] ) def treeview_press_return(self, treeview, select_items): if len(select_items) > 0: completion_grab_window.popup_grab_window_focus_out() global_event.emit("switch-to-detail-page", select_items[0].text) def set_input_method_cursor(self): entry_buffer = search_entry.entry.entry_buffer cursor_pos = entry_buffer.get_cursor_pos(entry_buffer.get_insert_index())[0] (entry_x, entry_y) = search_entry.translate_coordinates(search_entry.get_toplevel(), 0, 0) (window_x, window_y) = search_entry.get_toplevel().window.get_origin() completion_grab_window.im.set_cursor_location( gtk.gdk.Rectangle( window_x + entry_x + cursor_pos[0], window_y + entry_y + cursor_pos[1], 1, cursor_pos[3])) def input_method_focus_in(self, grab_window, im): self.set_input_method_cursor() def input_method_commit(self, grab_window, im, input_text): self.set_input_method_cursor() search_entry.set_text("%s%s" % (search_entry.get_text(), input_text)) def get_scrolledwindow(self): return self.treeview.scrolled_window def shape_completion_window_frame(self, widget, event): pass def expose_completion_window_frame(self, widget, event): cr = widget.window.cairo_create() rect = widget.allocation with cairo_disable_antialias(cr): cr.set_line_width(1) cr.set_source_rgba(*alpha_color_hex_to_cairo(ui_theme.get_alpha_color("window_frame_outside_3").get_color_info())) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.fill() cr.set_source_rgba(*alpha_color_hex_to_cairo(ui_theme.get_alpha_color("window_frame_inside_2").get_color_info())) cr.rectangle(rect.x + 1, rect.y + 1, rect.width - 2, rect.height - 2) cr.fill() def show(self, search_string, pkg_names): search_entry.entry.entry_buffer.grab_focus_flag = True self.treeview.delete_all_items() self.treeview.add_items(map(lambda pkg_name: TextItem(pkg_name, search_string), pkg_names)) self.treeview.draw_area.grab_focus() (x, y) = get_widget_root_coordinate(search_entry, WIDGET_POS_BOTTOM_LEFT, False) self.move(x + self.window_offset_x, y + self.window_offset_y) self.show_all() def realize_completion_window(self, widget): self.set_default_size(self.window_width, self.window_height) self.set_geometry_hints( None, self.window_width, # minimum width self.window_height, # minimum height self.window_width, self.window_height, -1, -1, -1, -1, -1, -1 )
class TrayUI(gtk.VBox): def __init__(self): gtk.VBox.__init__(self, spacing=0) self.init_ui() self.active_ap_index = [] self.all_showed = False def init_ui(self): self.wire = Section(app_theme.get_pixbuf("network/cable.png"), _("Wired")) self.wireless = Section(app_theme.get_pixbuf("network/wifi.png"), _("Wireless")) self.mobile = Section(app_theme.get_pixbuf("network/3g.png"), _("Mobile Network")) # vpn self.vpn = Section(app_theme.get_pixbuf("network/vpn.png"), _("VPN Network")) self.dsl = Section(app_theme.get_pixbuf("network/dsl.png"), _("DSL")) self.ssid_list = [] self.tree_box = gtk.VBox(spacing=0) self.button_more = SelectButton(_("Advanced..."), font_size=10, ali_padding=5) self.button_more.set_size_request(-1, 25) #self.pack_start(self.button_more, False, False) self.ap_tree = TreeView(mask_bound_height=0) self.ap_tree.set_expand_column(0) self.vpn_list = ConList() self.dsl_list = DSLConList() self.wire_box = self.section_box([self.wire]) self.wireless_box = self.section_box([self.wireless, self.tree_box]) self.mobile_box = self.section_box([self.mobile]) self.vpn_box = self.section_box([self.vpn, self.vpn_list]) self.dsl_box = self.section_box([self.dsl, self.dsl_list]) self.wire_state = False self.wireless_state = False self.mobile_state = False self.vpn_state = False self.dsl_state = False self.device_tree = None self.pack_start(self.wire_box, False, False) self.pack_start(self.wireless_box, False, False) self.pack_start(self.mobile_box, False, False) self.pack_start(self.vpn_box, False, False) self.pack_start(self.dsl_box, False, False) self.pack_start(self.button_more, False, False) def get_widget_height(self): height = 0 if self.wire_state: height += 35 if self.wireless_state: height += 35 if self.ap_tree.visible_items and self.wireless.get_active(): height += self.ap_tree.get_size_request()[1] if self.device_tree: height += 22 if self.mobile_state: height += 35 if self.vpn_state: height += 35 + len(self.vpn_list.get_children()) * 22 if self.dsl_state: height += 35 + len(self.dsl_list.get_children()) * 22 height += 5 height += 25 return height def section_box(self, widgets): box = gtk.VBox(spacing=0) for w in widgets: box.pack_start(w, False, False) style.add_separator(box, 10) return box def remove_net(self, net_type): #print net_type getattr(self, net_type + "_box").set_no_show_all(True) #getattr(self, net_type).set_active((True, False)) getattr(self, net_type + "_box").hide() setattr(self, net_type + "_state", False) def show_net(self, net_type): getattr(self, net_type + "_box").set_no_show_all(False) getattr(self, net_type + "_box").show() setattr(self, net_type + "_state", True) def set_wired_state(self, widget, new_state, reason): if new_state is 20: self.wire.set_active(0) else: tray_log.debug(__name__, new_state, reason) def set_visible_aps(self, show_all=False): if not self.__ap_list: self.visible_aps = [] return tray_log.debug(len(self.__ap_list)) if show_all: if len(self.__ap_list) <= 10: self.visible_aps = self.__ap_list[:] else: self.visible_aps = self.__ap_list[:10] self.more_button.set_ap_list([]) self.show_all = True else: if len(self.__ap_list) <= 5: self.visible_aps = self.__ap_list[:] self.show_all = True else: self.visible_aps = self.__ap_list[:5] self.more_button.set_ap_list(self.__ap_list[5:]) self.show_all = False def set_ap(self, ap_list, redraw=True): if not ap_list: return self.__set_ap_list(ap_list) #print "DEBUG", len(self.visible_aps), self.show_all self.ap_tree.delete_all_items() container_remove_all(self.tree_box) self.ap_tree.add_items(map(lambda ap: SsidItem(ap), self.__ap_list)) length = len(self.ap_tree.visible_items) if length <= 10: self.ap_tree.set_size_request(-1, WIDGET_HEIGHT * length) else: self.ap_tree.set_size_request(-1, WIDGET_HEIGHT * 10) for item in self.ap_tree.visible_items: item.set_padding(10) self.tree_box.pack_start(self.ap_tree, False, False) self.show_all() if redraw: Dispatcher.request_resize() def __set_ap_list(self, ap_list): self.__ap_list = ap_list def move_active(self, index): if index != [] and self.__ap_list: for i in index: if i < len(self.ap_tree.visible_items): self.ap_tree.delete_item_by_index(i) self.ap_tree.add_items([SsidItem(self.__ap_list[i])], insert_pos=0) else: self.ap_tree.delete_item_by_index(-1) self.ap_tree.add_items([SsidItem(self.__ap_list[i])], insert_pos=0) self.ap_tree.visible_items[0].set_active(True) def set_active_ap(self, index, state): self.active_ap_index = index self.set_ap(self.__ap_list, redraw=False) if index: self.move_active(index) def get_active_ap(self): return self.active_ap_index def add_switcher(self): if not hasattr(self, "device_tree") or not self.device_tree: self.device_tree = TreeView([DeviceItem()], mask_bound_height=0) self.device_tree.set_expand_column(1) self.wireless_box.pack_start(self.device_tree, False, False) self.wireless_box.reorder_child( self.wireless_box.get_children()[-2], len(self.wireless_box.get_children())) tray_log.debug(self.wireless_box.get_children()) net_manager.emit_wifi_switch(0) def remove_switcher(self): if self.device_tree: self.wireless_box.remove(self.device_tree) self.device_tree = None def get_active_in_ui(self): return filter(lambda i: i.get_active() == True, self.ap_tree.visible_items) def reset_tree(self): if len(self.ap_tree.visible_items) >= 5 and self.all_showed: remove_items = self.ap_tree.visible_items[5:] self.ap_tree.delete_items(remove_items) self.ap_tree.set_size_request(-1, WIDGET_HEIGHT * 5) self.tree_box.pack_start(self.more_button, False, False) self.all_showed = False
class CompletionWindow(Window): ''' class docs ''' def __init__(self, window_width, window_height): ''' init docs ''' # Init. Window.__init__( self, # shadow_visible=False, shape_frame_function=self.shape_completion_window_frame, expose_frame_function=self.expose_completion_window_frame) self.window_width = window_width self.window_height = window_height self.window_offset_x = 8 self.window_offset_y = 34 self.align_size = 2 self.treeview = TreeView( [], enable_highlight=False, enable_multiple_select=False, enable_drag_drop=False, expand_column=0, ) self.treeview.scrolled_window.tag_by_popup_grab_window = True self.treeview_align = gtk.Alignment() self.treeview_align.set(0.5, 0.5, 1, 1) self.treeview_align.set_padding(self.align_size, self.align_size, self.align_size, self.align_size) self.treeview_align.add(self.treeview) self.treeview.connect("press-return", self.treeview_press_return) self.treeview.draw_mask = self.draw_mask self.window_frame.pack_start(self.treeview_align, True, True) self.connect("realize", self.realize_completion_window) self.get_scrolledwindow = self.get_scrolledwindow wrap_grab_window(completion_grab_window, self) completion_grab_window.connect("input-method-focus-in", self.input_method_focus_in) completion_grab_window.connect("input-method-commit", self.input_method_commit) self.keymap = { "Home": self.treeview.select_first_item, "End": self.treeview.select_last_item, "Page_Up": self.treeview.scroll_page_up, "Page_Down": self.treeview.scroll_page_down, "Up": self.treeview.select_prev_item, "Down": self.treeview.select_next_item, } def draw_mask(self, cr, x, y, w, h): ''' Draw mask interface. @param cr: Cairo context. @param x: X coordiante of draw area. @param y: Y coordiante of draw area. @param w: Width of draw area. @param h: Height of draw area. ''' draw_vlinear(cr, x, y, w, h, [ (0, ("#ffffff", 0.9)), (1, ("#ffffff", 0.9)), ]) def treeview_press_return(self, treeview, select_items): if len(select_items) > 0: completion_grab_window.popup_grab_window_focus_out() global_event.emit("switch-to-detail-page", select_items[0].text) def set_input_method_cursor(self): entry_buffer = search_entry.entry.entry_buffer cursor_pos = entry_buffer.get_cursor_pos( entry_buffer.get_insert_index())[0] (entry_x, entry_y) = search_entry.translate_coordinates( search_entry.get_toplevel(), 0, 0) (window_x, window_y) = search_entry.get_toplevel().window.get_origin() completion_grab_window.im.set_cursor_location( gtk.gdk.Rectangle(window_x + entry_x + cursor_pos[0], window_y + entry_y + cursor_pos[1], 1, cursor_pos[3])) def input_method_focus_in(self, grab_window, im): self.set_input_method_cursor() def input_method_commit(self, grab_window, im, input_text): self.set_input_method_cursor() search_entry.set_text("%s%s" % (search_entry.get_text(), input_text)) def get_scrolledwindow(self): return self.treeview.scrolled_window def shape_completion_window_frame(self, widget, event): pass def expose_completion_window_frame(self, widget, event): cr = widget.window.cairo_create() rect = widget.allocation with cairo_disable_antialias(cr): cr.set_line_width(1) cr.set_source_rgba(*alpha_color_hex_to_cairo( ui_theme.get_alpha_color( "window_frame_outside_3").get_color_info())) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.fill() cr.set_source_rgba(*alpha_color_hex_to_cairo( ui_theme.get_alpha_color( "window_frame_inside_2").get_color_info())) cr.rectangle(rect.x + 1, rect.y + 1, rect.width - 2, rect.height - 2) cr.fill() def show(self, search_string, pkg_names): search_entry.entry.entry_buffer.grab_focus_flag = True self.treeview.delete_all_items() self.treeview.add_items( map(lambda pkg_name: TextItem(pkg_name, search_string), pkg_names)) self.treeview.draw_area.grab_focus() (x, y) = get_widget_root_coordinate(search_entry, WIDGET_POS_BOTTOM_LEFT, False) self.move(x + self.window_offset_x, y + self.window_offset_y) self.show_all() def realize_completion_window(self, widget): self.set_default_size(self.window_width, self.window_height) self.set_geometry_hints( None, self.window_width, # minimum width self.window_height, # minimum height self.window_width, self.window_height, -1, -1, -1, -1, -1, -1)