class MirrorsBox(BaseBox): def __init__(self): BaseBox.__init__(self) self.current_mirror_item = None self.select_best_mirror_button_texts = { "normal": _("Select the best mirror"), "wait": _("Waiting"), "success": _("Successfully") } self.main_box.pack_start(self.create_mirror_select_table(), True, True) self.main_box.pack_start(self.create_source_update_frequency_table(), False, True) self.mirror_test_obj = None global_event.register_event("mirror-test-finished", self.finish_mirror_test) global_event.register_event("cancel-mirror-test", self.cancel_mirror_test) global_event.register_event("mirror-backend-changed", self.mirror_changed_handler) def create_source_update_frequency_table(self): main_table = gtk.Table(3, 2) main_table.set_row_spacings(CONTENT_ROW_SPACING) dir_title_label = Label(_("Refresh package lists")) # auto update check button self.is_auto_update_button = CheckButton(label_text=_('Upgrade automatically')) self.is_auto_update_button.connect('released', self.change_auto_update) self.is_auto_update_button.set_active(utils.is_auto_update()) self.update_label = Label(_("Time interval: ")) self.update_spin = SpinBox(int(get_update_interval()), 0, 168, 1) self.update_spin.connect("value-changed", lambda w, v: set_update_interval(v)) self.hour_lablel = Label(_(" hour")) self.hour_lablel.set_size_request(50, 12) spin_hbox = gtk.HBox(spacing=3) spin_hbox.pack_start(self.update_label, False, False) spin_hbox.pack_start(self.update_spin, False, False) spin_hbox.pack_start(self.hour_lablel, False, False) main_table.attach(dir_title_label, 0, 2, 0, 1, yoptions=gtk.FILL) main_table.attach(create_separator_box(), 0, 2, 1, 2, yoptions=gtk.FILL) main_table.attach(self.is_auto_update_button, 0, 1, 2, 3, xoptions=gtk.FILL) main_table.attach(spin_hbox, 1, 2, 2, 3, xpadding=10, xoptions=gtk.FILL) return main_table def change_auto_update(self, widget, data=None): widget_active = widget.get_active() self.update_spin.set_sensitive(widget_active) self.update_label.set_sensitive(widget_active) self.hour_lablel.set_sensitive(widget_active) utils.set_auto_update(widget_active) daemon_running = is_dbus_name_exists(DSC_UPDATE_DAEMON_NAME) if widget_active and not daemon_running: dsc_daemon_path = os.path.join(get_parent_dir(__file__, 2), 'update_data/apt/dsc-daemon.py') subprocess.Popen(['python', dsc_daemon_path], stderr=subprocess.STDOUT, shell=False) elif not widget_active and daemon_running: session = dbus.SessionBus() dbus_obj = session.get_object(DSC_UPDATE_DAEMON_NAME, DSC_UPDATE_DAEMON_PATH) iface = dbus.Interface(dbus_obj, DSC_UPDATE_DAEMON_NAME) iface.quit() def select_best_mirror(self, widget): widget.set_label(self.select_best_mirror_button_texts["wait"]) widget.set_sensitive(False) global_event.emit("toggle-waiting-dialog", True) utils.ThreadMethod(self.change_to_nearest_mirror_thread, (widget, )).start() def cancel_mirror_test(self): if self.mirror_test_obj: self.mirror_test_obj.cancel() self.mirror_test_obj = None self.finish_mirror_test("") def change_to_nearest_mirror_thread(self, widget): from mirror_speed.ip_detect import get_nearest_mirrors hostnames = get_nearest_mirrors() self.mirror_test_obj = MirrorTest(hostnames) hostname = self.mirror_test_obj.run() for mirror in self.mirrors_list: if mirror.hostname == hostname: global_event.emit("mirror-test-finished", mirror) break def finish_mirror_test(self, mirror): for item in self.mirror_view.visible_items: if item.mirror == mirror: self.mirror_view.visible_item(item) self.select_best_mirror_button.set_sensitive(True) self.select_best_mirror_button.set_label(self.select_best_mirror_button_texts["normal"]) def create_mirror_select_table(self): main_table = gtk.Table(3, 2) main_table.set_row_spacings(CONTENT_ROW_SPACING) mirror_select_title = Label(_("Select mirror")) self.select_best_mirror_button = Button(self.select_best_mirror_button_texts["normal"]) self.select_best_mirror_button.connect("clicked", self.select_best_mirror) self.mirrors_dir = os.path.join(get_parent_dir(__file__, 2), 'mirrors') self.current_mirror_hostname = utils.get_current_mirror_hostname() self.mirror_items = self.get_mirror_items() self.mirror_view = TreeView(self.mirror_items, enable_drag_drop=False, enable_multiple_select=False, mask_bound_height=0, ) self.mirror_view.set_expand_column(1) self.mirror_view.set_size_request(-1, 280) self.mirror_view.draw_mask = self.mirror_treeview_draw_mask main_table.attach(mirror_select_title, 0, 1, 0, 1, yoptions=gtk.FILL) main_table.attach(self.select_best_mirror_button, 1, 2, 0, 1, xoptions=gtk.FILL) main_table.attach(create_separator_box(), 0, 2, 1, 2, xoptions=gtk.FILL) main_table.attach(self.mirror_view, 0, 2, 2, 3, xoptions=gtk.FILL) return main_table def mirror_changed_handler(self, mirror): item = None for i in self.mirror_view.visible_items: if i.mirror == mirror: item = i break if item: self.current_mirror_item = item for i in self.mirror_items: if i != item and i.radio_button.active == True: i.radio_button.active = False elif i == item: i.radio_button.active = True self.mirror_view.queue_draw() self.mirror_view.visible_item(item) def mirror_treeview_draw_mask(self, cr, x, y, w, h): cr.set_source_rgba(1, 1, 1, 0.5) cr.rectangle(x, y, w, h) cr.fill() def get_mirror_items(self): items = [] self.mirrors_list = get_mirrors() for m in self.mirrors_list: item = MirrorItem(m, self.mirror_clicked_callback) if m.hostname == self.current_mirror_hostname: item.radio_button.active = True self.current_mirror_item = item items.append(item) items.sort(key=lambda item:item.mirror.priority) return items def mirror_clicked_callback(self, item): if item != self.current_mirror_item: global_event.emit('start-change-mirror', item.mirror)
class Form(DialogBox): def __init__(self): DialogBox.__init__( self, _("Convert"), FORM_WIDTH, FORM_HEIGHT, mask_type=DIALOG_MASK_SINGLE_PAGE, close_callback=self.hide_all, modal=True, window_hint=gtk.gdk.WINDOW_TYPE_HINT_DIALOG, window_pos=gtk.WIN_POS_CENTER, # skip_taskbar_hint=False, resizable=False, ) # Init value. self.init_value() # Init all widgets. self.InitializeComponent() def init_value(self): read_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "xml") self.read_xml = ReadXml(read_path) self.model_dict = {} # init brand EN list. self.brand_dict = { "intel": _("intel"), "zte": _("zte"), "hasee": _("hasee"), "apple": _("apple"), "nokia": _("nokia"), "alcatel": _("alcatel"), "google": _("google"), "asus": _("asus"), "hp": _("hp"), "sony": _("sony"), "hedy": _("hedy"), "archos": _("archos"), "boway": _("boway"), "bird": _("bird"), "vivo": _("vivo"), "great wall": _("great wall"), "changhong": _("changhong"), "skyworth": _("skyworth"), "dell": _("dell"), "philips": _("philips"), "toshiba": _("toshiba"), "amazon": _("amazon"), "sdo": _("sdo"), "disney": _("disney"), "haier": _("haier"), "fujitsu": _("fujitsu"), "acer": _("acer"), "lenovo": _("lenovo"), "gigabyte": _("gigabyte"), "xiaomi": _("xiaomi"), "huawei": _("huawei"), "blackberry": _("blackberry"), "motorola": _("motorola"), "sangsung": _("sangsung"), "meizu ": _("meizu "), "benq": _("benq"), "panasonic": _("panasonic"), "sony ericsson": _("sony ericsson"), "pioneer": _("pioneer"), "hyundai": _("hyundai"), "newman": _("newman"), "coolpad": _("coolpad"), "malata": _("malata"), "malata": _("malata"), "sharp": _("sharp"), "gionee": _("gionee"), "k-touch": _("k-touch"), "Pantech": _("Pantech"), "hisense": _("hisense"), "teclast": _("teclast"), "cube": _("cube"), "amoi": _("amoi"), "doov": _("doov"), "minte": _("minte"), "dopod": _("dopod"), "eton": _("eton"), "cherr": _("cherr"), "gaoxinqi": _("gaoxinqi"), "konka": _("konka"), "viewsonic": _("viewsonic"), "xibo": _("xibo"), "hosin": _("hosin"), "apanda": _("apanda"), "iocean": _("iocean"), "mastone": _("mastone") } def InitializeComponent(self): # Init form event. # self.connect("destroy", lambda w : self.destroy()) self.connect("destroy", lambda w: self.hide_all()) # Init widgets. self.brand_label = Label("%s: " % _("Phone brand")) self.format_label = Label("%s: " % _("Output format")) self.bit_rate_label = Label("%s: " % _("Audio encoder")) self.frame_rate_label = Label("%s: " % _("Video encoder")) self.path_label = Label("%s: " % _("Output directory")) self.model_label = Label("%s: " % _("Phone model")) self.ratio_label = Label(' %s: ' % _("Resolution")) self.path_entry = InputEntry() self.save_path_entry = InputEntry() fixed_width = 108 self.brand_combo = NewComboBox(fixed_width) self.format_combo = NewComboBox(fixed_width) self.bit_rate_combo = NewComboBox(fixed_width) self.frame_rate_combo = NewComboBox(fixed_width) self.model_combo = NewComboBox(fixed_width) self.ratio_combo = NewComboBox(fixed_width) self.modify_chooser_btn = FileChooserButton( "选择") # connect self.FileChooser self.save_chooser_btn = Button(_("Change")) self.start_btn = Button(_("Start")) self.close_btn = Button(_("Close")) self.higt_set_bool = False self.higt_set_btn = LabelButton() #Button(_("Advanced")) self.show_and_hide_task_btn = Button(_("Task Manager")) self.higt_hbox = gtk.HBox() self.higt_hbox.pack_start(self.higt_set_btn) self.higt_align = gtk.Alignment() self.higt_align.add(self.higt_hbox) self.higt_align.set_padding(0, 0, 7, 0) self.higt_align.set(1, 0, 1, 0) self.left_button_box.set_buttons([self.higt_align]) self.right_button_box.set_buttons([self.start_btn, self.close_btn]) # ratio_combo. self.__ratio_list = [ "176 x 220", "240 x 320", "320 x 240", "320 x 480", "400 x 240", "480 x 800", "540 x 960", "600 x 1024", "640 x 480", "720 x 1280", "800 x 480", "800 x 600", "1024 x 600", "1024 x 768", "1152 x 864", ] self.ratio_items = [] for ratio in self.__ratio_list: self.ratio_combo.append_text(ratio) self.ratio_items.append((ratio, ratio)) self.ratio_combo.set_active(5) # brand_combo. brand_items = [] for brand in self.read_xml.brand_dict.keys(): brand_po = brand if self.brand_dict.has_key(brand): brand_po = self.brand_dict[brand] brand_items.append((brand_po, brand)) self.brand_combo.set_items(brand_items, 0) #self.brand_combo.add_items(brand_items, 0) self.brand_combo.prepend_text(_("No Presets")) self.brand_combo.connect("changed", self.brand_combo_item_selected) # model_combo. self.model_label.set_sensitive(False) self.model_combo.set_sensitive(False) self.model_combo.prepend_text(_("No Model")) self.model_combo.connect("changed", self.model_combo_item_selected) # self.save_chooser_btn.set_size_request(75, 21) self.save_chooser_btn.connect("clicked", self.save_chooser_btn_clicked) # path_entry. PATH_ENTRY_WIDTH = 240 PATH_ENTRY_HEIGHT = 22 self.save_path_entry.set_sensitive(False) self.save_path_entry.set_text(self.get_home_path()) self.save_path_entry.set_size(PATH_ENTRY_WIDTH, PATH_ENTRY_HEIGHT) self.close_btn.connect("clicked", lambda w: self.hide_all()) # higt_set_btn. self.higt_set_btn.connect("clicked", self.higt_set_btn_clicked) # form body box add main fixed. self.body_table_ali = gtk.Alignment() self.body_table_ali.set_padding(6, 0, 0, 0) self.body_table = gtk.Table(rows=6, columns=4, homogeneous=False) self.body_table_ali.add(self.body_table) self.brand_model_hbox = gtk.HBox() top, bottom = 5, 5 brand_position = eval(_("('brand_position', 20)")) model_position = eval(_("('model_position', 20)")) self.brand_hbox_ali, self.brand_hbox = self.create_hbox( bottom, top, 15 + int(brand_position[1]), 0, self.brand_label, self.brand_combo) self.model_hbox_ali, self.model_hbox = self.create_hbox( bottom, top, 50 - int(model_position[1]), 0, self.model_label, self.model_combo) self.brand_model_hbox.pack_start(self.brand_hbox_ali, False, False) self.brand_model_hbox.pack_start(self.model_hbox_ali, False, False) format_position = eval(_("('format_position', 12)")) ratio_position = eval(_("('ratio_position', 18)")) self.format_hbox_ali, self.format_hbox = self.create_hbox( bottom, top, 15 + int(format_position[1]), 0, self.format_label, self.format_combo) self.ratio_hbox_ali, ratio_hbox = self.create_hbox( bottom, top, 50 - int(ratio_position[1]), 0, self.ratio_label, self.ratio_combo) self.format_ratio_hbox = gtk.HBox() self.format_ratio_hbox.pack_start(self.format_hbox_ali, False, False) self.format_ratio_hbox.pack_start(self.ratio_hbox_ali, False, False) frame_rate_position = eval(_("('frame_position', 13)")) bit_rate_position = eval(_("('bit_rate_position', 28)")) self.frame_rate_hbox_ali, self.frame_rate_hbox = self.create_hbox( bottom, top, 15 + int(frame_rate_position[1]), 0, self.frame_rate_label, self.frame_rate_combo) self.bit_rate_hbox_ali, self.bit_rate_hbox = self.create_hbox( bottom, top, 50 - int(bit_rate_position[1]), 0, self.bit_rate_label, self.bit_rate_combo) self.bit_frame_hbox = gtk.HBox() self.bit_frame_hbox.pack_start(self.frame_rate_hbox_ali, False, False) self.bit_frame_hbox.pack_start(self.bit_rate_hbox_ali, False, False) # self.path_label, self.save_path_entry, self.save_chooser_btn self.save_path_hbox_ali = gtk.Alignment() self.save_path_hbox = gtk.HBox() self.save_path_hbox_ali.set_padding(5, 5, 16, 0) self.save_path_hbox_ali.add(self.save_path_hbox) self.save_path_entry_ali = gtk.Alignment() self.save_path_entry_ali.set_padding(1, 0, 0, 0) self.save_path_entry_ali.add(self.save_path_entry) self.save_chooser_btn_ali = gtk.Alignment() self.save_chooser_btn_ali.set_padding(0, 0, 10, 0) self.save_chooser_btn_ali.add(self.save_chooser_btn) self.save_path_hbox.pack_start(self.path_label, False, False) self.save_path_hbox.pack_start(self.save_path_entry_ali, False, False) self.save_path_hbox.pack_start(self.save_chooser_btn_ali, False, False) # left right top, bottom. '''brand_model_hbox.''' # self.body_table.attach(self.brand_model_hbox, 0, 1, 0, 1, gtk.EXPAND, gtk.EXPAND) self.body_table.attach(self.brand_model_hbox, 0, 1, 0, 1, gtk.FILL, gtk.FILL) # self.body_table.attach(self.model_hbox, 1, 2, 0, 1, gtk.EXPAND, gtk.EXPAND) # self.body_table.attach(self.model_hbox, 2, 3, 0, 1, gtk.EXPAND, gtk.EXPAND) # self.body_table.attach(self.model_hbox, 3, 4, 0, 1, gtk.EXPAND, gtk.EXPAND) '''format_ratio_hbox.''' # self.body_table.attach(self.format_ratio_hbox, 0, 1, 1, 2, gtk.EXPAND, gtk.EXPAND) self.body_table.attach(self.format_ratio_hbox, 0, 1, 1, 2, gtk.FILL, gtk.FILL) # self.body_table.attach(self.format_combo, 1, 2, 1, 2, gtk.EXPAND, gtk.EXPAND) # self.body_table.attach(self.ratio_hbox, 2, 3, 1, 2, gtk.EXPAND, gtk.EXPAND) # self.body_table.attach(self.ratio_combo, 3, 4, 1, 2, gtk.EXPAND, gtk.EXPAND) '''bit_frame_hbox.''' # self.body_table.attach(self.bit_frame_hbox, 0, 1, 2, 3, gtk.EXPAND, gtk.EXPAND) self.body_table.attach(self.bit_frame_hbox, 0, 1, 2, 3, gtk.FILL, gtk.FILL) '''save_path_hbox.''' # self.body_table.attach(self.save_path_hbox_ali, 0, 1, 3, 4, gtk.EXPAND, gtk.EXPAND) self.body_table.attach(self.save_path_hbox_ali, 0, 1, 3, 4, gtk.FILL, gtk.FILL) self.body_box.pack_start(self.body_table_ali, True, True) self.hide_setting() def create_hbox(self, top, bottom, left, right, child1, child2): hbox_ali = gtk.Alignment() hbox_ali.set_padding(top, bottom, left, right) hbox = gtk.HBox() hbox_ali.add(hbox) hbox.pack_start(child1, False, False) hbox.pack_start(child2, False, False) return hbox_ali, hbox def get_home_path(self): return os.path.expanduser("~") def save_chooser_btn_clicked(self, widget): '''保存目录... ...''' self.show_open_dir_dialog_window() def show_open_dir_dialog_window(self): open_dialog = gtk.FileChooserDialog( _("Choose a directory"), None, gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK)) # current floader set. open_dialog.set_current_folder(self.get_home_path()) # run dir dialog window. res = open_dialog.run() if res == gtk.RESPONSE_OK: path_string = open_dialog.get_filename() if path_string: self.save_path_entry.set_text(path_string) # destroy dialog window. open_dialog.destroy() def brand_combo_item_selected(self, combo, item_content): self.model_combo.clear_items() self.ratio_combo.clear_items() # try: self.model_dict = self.read_xml.load( self.read_xml.brand_dict[item_content]) except Exception, e: print "brand_combo_item_selected[error]:", e self.model_dict = {} # if item_content != _("No Presets") and self.model_dict != {}: model_items = [] for model in self.model_dict: model_items.append((model, model)) self.model_combo.set_items(model_items, 0) # self.model_combo.droplist.set_size_request(-1, self.model_combo.droplist_height) self.model_combo.set_active(0) self.model_combo.set_sensitive(True) self.model_label.set_sensitive(True) else: # clear model and ratio all text. self.model_combo.append_text(_("No Model")) self.model_combo.set_sensitive(False) self.model_label.set_sensitive(False) # add ratios. for ratio in self.ratio_items: self.ratio_combo.append_text(ratio[0]) self.ratio_combo.set_active(5)
class DscPreferenceDialog(PreferenceDialog): def __init__(self): PreferenceDialog.__init__(self, 566, 488) self.current_mirror_item = None self.normal_settings = gtk.VBox() self.normal_settings.set_spacing(TABLE_ROW_SPACING) self.normal_settings.pack_start(self.create_uninstall_box(), False, True) self.normal_settings.pack_start(self.create_download_dir_table(), False, True) self.normal_settings_align = gtk.Alignment(0, 0, 1, 1) self.normal_settings_align.set_padding(padding_left=5, padding_right=5, padding_top=25, padding_bottom=10) self.normal_settings_align.add(self.normal_settings) self.mirror_settings = gtk.VBox() self.mirror_settings.set_app_paintable(True) self.mirror_settings.connect("expose-event", self.mirror_settings_align_expose) self.mirror_settings.set_spacing(TABLE_ROW_SPACING) self.mirror_settings.pack_start(self.create_mirror_select_table(), False, True) self.mirror_settings.pack_start(self.create_source_update_frequency_table(), False, True) self.mirror_settings_inner_align = gtk.Alignment(0.5, 0.5, 1, 1) self.mirror_settings_inner_align.set_padding(padding_top=25, padding_bottom=10, padding_left=0, padding_right=0) self.mirror_settings_inner_align.add(self.mirror_settings) self.mirror_settings_scrolled_win = ScrolledWindow() self.mirror_settings_scrolled_win.add_child(self.mirror_settings_inner_align) self.mirror_settings_align = gtk.Alignment(0, 0, 1, 1) self.mirror_settings_align.set_padding(padding_left=0, padding_right=0, padding_top=0, padding_bottom=3) self.mirror_settings_align.add(self.mirror_settings_scrolled_win) self.set_preference_items([ (_("General"), self.normal_settings_align), (_("Mirrors"), self.mirror_settings_align), (_("About"), AboutBox()), ]) def mirror_settings_align_expose(self, widget, event=None): cr = widget.window.cairo_create() rect = widget.allocation # draw backgound cr.rectangle(*rect) #cr.set_source_rgb(*color_hex_to_cairo("#ff0000")) cr.set_source_rgba(1, 1, 1, 0) cr.fill() def mirror_select_action(self, repo_urls): self.data_manager.change_source_list(repo_urls, reply_handler=handle_dbus_reply, error_handler=handle_dbus_error) def create_mirror_select_table(self): vbox = gtk.VBox() vbox.set_size_request(423, -1) main_table = gtk.Table(2, 2) main_table.set_row_spacings(CONTENT_ROW_SPACING) dir_title_label = Label(_("Select mirror")) dir_title_label.set_size_request(423, 12) label_align = gtk.Alignment() label_align.set_padding(0, 0, 10, 0) label_align.add(dir_title_label) self.mirrors_dir = os.path.join(get_parent_dir(__file__, 2), 'mirrors') self.current_mirror_hostname = utils.get_current_mirror_hostname() self.mirror_items = self.get_mirror_items() self.mirror_view = TreeView(self.mirror_items, enable_drag_drop=False, enable_multiple_select=False, #mask_bound_height=0, ) self.mirror_view.set_expand_column(1) self.mirror_view.set_size_request(-1, len(self.mirror_view.visible_items) * self.mirror_view.visible_items[0].get_height()) self.mirror_view.draw_mask = self.mirror_treeview_draw_mask #self.display_current_mirror() self.mirror_test_progressbar = ProgressBar() main_table.attach(label_align, 0, 2, 0, 1, yoptions=gtk.FILL, xpadding=8) main_table.attach(create_separator_box(), 0, 2, 1, 2, yoptions=gtk.FILL) title = _("Select best mirror") info_message = _("Please wait. The process will take 30 seconds or more depending on your network connection") self.select_best_mirror_dialog = WaitingDialog(title, info_message, self.cancel_mirror_test) global_event.register_event("mirror-changed", self.mirror_changed_handler) global_event.register_event("update-list-finish", self.update_list_finish_handler) vbox.pack_start(main_table, False, False) vbox.pack_start(self.mirror_view, False, False) return vbox def cancel_mirror_test(self, widget): try: self.mirror_test.terminated = True gobject.source_remove(self.update_status_id) except: pass self.select_best_mirror_dialog.hide_all() def update_list_finish_handler(self): self.select_best_mirror_dialog.hide_all() def mirror_changed_handler(self, item): for i in self.mirror_items: if i != item and i.radio_button.active == True: i.radio_button.active = False elif i == item: i.radio_button.active = True self.mirror_view.queue_draw() def test_mirror_action(self, widget): self.select_best_mirror_dialog.set_transient_for(self) self.select_best_mirror_dialog.set_position(gtk.WIN_POS_CENTER_ON_PARENT) self.select_best_mirror_dialog.show_all() distro = aptsources.distro.get_distro() #distro.get_sources(SourcesList()) pipe = os.popen("dpkg --print-architecture") arch = pipe.read().strip() test_file = "dists/%s/Contents-%s.gz" % \ ( distro.codename, #"quantal", arch, ) self.mirror_test = MirrorTest(self.mirrors_list, test_file) self.mirror_test.start() # now run the tests in a background thread, and update the UI on each event self.update_status_id = gtk.timeout_add(100, self.update_progress) def update_progress(self): if self.mirror_test.running: return True else: time.sleep(1) if self.mirror_test.best != None: for item in self.mirror_items: if item.mirror == self.mirror_test.best[1]: print item.mirror.get_repo_urls() self.mirror_clicked_callback(item) else: self.select_best_mirror_dialog.loading_widget.hide_all() self.select_best_mirror_dialog.info_message_label.set_text(_("Test for downloading mirror failed. Please check your network connection.")) self.select_best_mirror_dialog.close_button.set_label(_("Close")) return False def mirror_treeview_draw_mask(self, cr, x, y, w, h): cr.set_source_rgba(1, 1, 1, 0.9) cr.rectangle(x, y, w, h) cr.fill() def get_mirror_items(self): items = [] self.mirrors_list = [] for ini_file in os.listdir(self.mirrors_dir): m = Mirror(os.path.join(self.mirrors_dir, ini_file)) item = MirrorItem(m, self.mirror_clicked_callback) if m.hostname == self.current_mirror_hostname: item.radio_button.active = True self.current_mirror_item = item self.mirrors_list.append(m) items.append(item) items.sort(key=lambda x:x.mirror.priority) return items def mirror_clicked_callback(self, item): if item != self.current_mirror_item: self.current_mirror_item = item global_event.emit('change-mirror', item) self.hide_all() def create_source_update_frequency_table(self): main_table = gtk.Table(3, 2) main_table.set_row_spacings(CONTENT_ROW_SPACING) dir_title_label = Label(_("Update applications lists")) dir_title_label.set_size_request(200, 12) label_align = gtk.Alignment() label_align.set_padding(0, 0, 0, 0) label_align.add(dir_title_label) self.is_auto_update_button = CheckButton(label_text=_('Update automatically')) self.is_auto_update_button.connect('toggled', self.change_auto_update) self.update_label = Label(_("Time interval: ")) self.update_spin = SpinBox(int(get_update_interval()), 0, 168, 1) self.update_spin.connect("value-changed", lambda w, v: set_update_interval(v)) self.hour_lablel = Label(_(" hour")) self.hour_lablel.set_size_request(50, 12) spin_hbox = gtk.HBox(spacing=3) spin_hbox.pack_start(self.update_label, False, False) spin_hbox.pack_start(self.update_spin, False, False) spin_hbox.pack_start(self.hour_lablel, False, False) main_table.attach(label_align, 0, 2, 0, 1, yoptions=gtk.FILL, xpadding=8) main_table.attach(create_separator_box(), 0, 2, 1, 2, yoptions=gtk.FILL) main_table.attach(self.is_auto_update_button, 0, 1, 2, 3, xpadding=10, xoptions=gtk.FILL) main_table.attach(spin_hbox, 1, 2, 2, 3, xpadding=10, xoptions=gtk.FILL) if is_auto_update(): self.is_auto_update_button.set_active(True) else: self.is_auto_update_button.toggled() return main_table def create_download_dir_table(self): main_table = gtk.Table(4, 2) main_table.set_row_spacings(CONTENT_ROW_SPACING) dir_title_label = Label(_("Download settings")) dir_title_label.set_size_request(200, 12) label_align = gtk.Alignment() label_align.set_padding(0, 0, 0, 0) label_align.add(dir_title_label) download_number_label = Label(_('Max download task number: ')) self.download_number_comobox = ComboBox( items = [(str(i+1), i+1) for i in range(10)], select_index = int(get_download_number())-1, ) self.download_number_comobox.connect("item-selected", self.download_number_comobox_changed) download_number_hbox = gtk.HBox(spacing=5) download_number_hbox.pack_start(download_number_label, False, False) download_number_hbox.pack_start(self.download_number_comobox, False, False) change_download_dir_label = Label(_("Download directory: ")) self.dir_entry = InputEntry() self.dir_entry.set_text(get_software_download_dir()) self.dir_entry.set_editable(False) self.dir_entry.set_size(200, 25) modify_button = Button(_("Change")) modify_button.connect("clicked", self.change_download_save_dir) download_dir_hbox = gtk.HBox(spacing=5) download_dir_hbox.pack_start(change_download_dir_label, False, False) download_dir_hbox.pack_start(self.dir_entry, False, False) download_dir_hbox.pack_start(modify_button, False, False) main_table.attach(label_align, 0, 2, 0, 1, yoptions=gtk.FILL, xpadding=8) main_table.attach(create_separator_box(), 0, 2, 1, 2, yoptions=gtk.FILL) main_table.attach(download_number_hbox, 0, 2, 2, 3, xpadding=10, xoptions=gtk.FILL) main_table.attach(download_dir_hbox, 0, 2, 3, 4, xpadding=10, xoptions=gtk.FILL) return main_table def create_uninstall_box(self): main_table = gtk.Table(2, 2) main_table.set_row_spacings(CONTENT_ROW_SPACING) uninstall_title_label = Label(_("On uninstall software")) uninstall_title_label.set_size_request(350, 12) # mini_check_button self.delete_check_button = CheckButton(_("Delete configuration files")) self.delete_check_button.set_active(get_purg_flag()) self.delete_check_button.connect("toggled", lambda w: set_purge_flag(self.delete_check_button.get_active())) main_table.attach(uninstall_title_label, 0, 2, 0, 1, yoptions=gtk.FILL, xpadding=8) main_table.attach(create_separator_box(), 0, 2, 1, 2, yoptions=gtk.FILL) main_table.attach(self.delete_check_button, 0, 1, 2, 3, yoptions=gtk.FILL) return main_table def change_download_save_dir(self, widget): local_dir = WinDir(False).run() if local_dir: local_dir = os.path.expanduser(local_dir) if local_dir != get_software_download_dir(): self.dir_entry.set_editable(True) self.dir_entry.set_text(local_dir) self.dir_entry.set_editable(False) set_software_download_dir(local_dir) global_event.emit('download-directory-changed') def download_number_comobox_changed(self, widget, name, value, index): set_download_number(value) global_event.emit('max-download-number-changed', value) def change_auto_update(self, widget, data=None): self.update_spin.set_sensitive(widget.get_active()) set_auto_update(widget.get_active()) self.update_label.set_sensitive(widget.get_active()) self.hour_lablel.set_sensitive(widget.get_active()) dsc_daemon_path = os.path.join(get_parent_dir(__file__, 2), 'update_data/apt/dsc-daemon.py') if widget.get_active(): subprocess.Popen(['python', dsc_daemon_path], stderr=subprocess.STDOUT, shell=False)
class Section(gtk.HBox): TOGGLE_INSENSITIVE = 0 TOGGLE_INACTIVE = 1 TOGGLE_ACTIVE = 2 def __init__(self, icon, text, has_separater=True): gtk.HBox.__init__(self) self.icon = icon self.text = text self.height = 30 self.set_size_request(-1, self.height) self.has_separater = has_separater self.__init_ui() def __init_ui(self): icon = ImageBox(self.icon) self.label = Label(self.text) self.offbutton = SwitchButton() self.pack_start(self.__wrap_with_align(icon), False, False) self.pack_start(self.__wrap_with_align(self.label, align="left"), False, False, padding=10) self.pack_end(self.__wrap_with_align(self.offbutton), False, False) self.show_all() def connect_to_toggle(self, toggle_func): self.offbutton.connect("toggled", lambda w: toggle_func()) self.timer = Timer(200, toggle_func) def toggle_callback(self, widget): if self.timer.alive(): self.timer.restart() else: self.timer.start() def __wrap_with_align(self, widget, align="right", h=25): if align is "left": align = gtk.Alignment(0, 0.5, 1, 0) elif align is "right": align = gtk.Alignment(1, 0.5, 0, 0) align.set_padding(0, 0, 1, 0) align.set_size_request(-1, h) align.add(widget) return align def get_active(self): return self.offbutton.get_active() def set_active(self, state, emit=False): ''' state format : (dev_state, con_state) ''' tray_log.debug("someone set button", state) #print "---------------------" #print "someone set off button" #print "state", state #print "active", self.get_active() #print "------------------------" (dev_state, con_state) = state if dev_state is False: self.offbutton.set_active(False) self.label.set_sensitive(dev_state) self.offbutton.set_sensitive(dev_state) else: self.label.set_sensitive(dev_state) self.offbutton.set_sensitive(dev_state) self.offbutton.set_active(con_state) if emit: self.offbutton.emit("toggled") def set_sensitive(self, state): self.offbutton.set_sensitive(state) def set_padding(self, child, padding): self.set_child_packing(child, False, False, padding, gtk.PACK_START)
class Form(DialogBox): def __init__(self): DialogBox.__init__( self, _("Convert"), FORM_WIDTH, FORM_HEIGHT, mask_type=DIALOG_MASK_SINGLE_PAGE, close_callback=self.hide_all, modal=True, window_hint=gtk.gdk.WINDOW_TYPE_HINT_DIALOG, window_pos=gtk.WIN_POS_CENTER, # skip_taskbar_hint=False, resizable=False, ) # Init value. self.init_value() # Init all widgets. self.InitializeComponent() def init_value(self): read_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "xml") self.read_xml = ReadXml(read_path) self.model_dict = {} # init brand EN list. self.brand_dict = { "intel": _("intel"), "zte": _("zte"), "hasee": _("hasee"), "apple": _("apple"), "nokia": _("nokia"), "alcatel": _("alcatel"), "google": _("google"), "asus": _("asus"), "hp": _("hp"), "sony": _("sony"), "hedy": _("hedy"), "archos": _("archos"), "boway": _("boway"), "bird": _("bird"), "vivo": _("vivo"), "great wall": _("great wall"), "changhong": _("changhong"), "skyworth": _("skyworth"), "dell": _("dell"), "philips": _("philips"), "toshiba": _("toshiba"), "amazon": _("amazon"), "sdo": _("sdo"), "disney": _("disney"), "haier": _("haier"), "fujitsu": _("fujitsu"), "acer": _("acer"), "lenovo": _("lenovo"), "gigabyte": _("gigabyte"), "xiaomi": _("xiaomi"), "huawei": _("huawei"), "blackberry": _("blackberry"), "motorola": _("motorola"), "sangsung": _("sangsung"), "meizu ": _("meizu "), "benq": _("benq"), "panasonic": _("panasonic"), "sony ericsson": _("sony ericsson"), "pioneer": _("pioneer"), "hyundai": _("hyundai"), "newman": _("newman"), "coolpad": _("coolpad"), "malata": _("malata"), "malata": _("malata"), "sharp": _("sharp"), "gionee": _("gionee"), "k-touch": _("k-touch"), "Pantech": _("Pantech"), "hisense": _("hisense"), "teclast": _("teclast"), "cube": _("cube"), "amoi": _("amoi"), "doov": _("doov"), "minte": _("minte"), "dopod": _("dopod"), "eton": _("eton"), "cherr": _("cherr"), "gaoxinqi": _("gaoxinqi"), "konka": _("konka"), "viewsonic": _("viewsonic"), "xibo": _("xibo"), "hosin": _("hosin"), "apanda": _("apanda"), "iocean": _("iocean"), "mastone": _("mastone"), } def InitializeComponent(self): # Init form event. # self.connect("destroy", lambda w : self.destroy()) self.connect("destroy", lambda w: self.hide_all()) # Init widgets. self.brand_label = Label("%s: " % _("Phone brand")) self.format_label = Label("%s: " % _("Output format")) self.bit_rate_label = Label("%s: " % _("Audio encoder")) self.frame_rate_label = Label("%s: " % _("Video encoder")) self.path_label = Label("%s: " % _("Output directory")) self.model_label = Label("%s: " % _("Phone model")) self.ratio_label = Label(" %s: " % _("Resolution")) self.path_entry = InputEntry() self.save_path_entry = InputEntry() fixed_width = 108 self.brand_combo = NewComboBox(fixed_width) self.format_combo = NewComboBox(fixed_width) self.bit_rate_combo = NewComboBox(fixed_width) self.frame_rate_combo = NewComboBox(fixed_width) self.model_combo = NewComboBox(fixed_width) self.ratio_combo = NewComboBox(fixed_width) self.modify_chooser_btn = FileChooserButton("选择") # connect self.FileChooser self.save_chooser_btn = Button(_("Change")) self.start_btn = Button(_("Start")) self.close_btn = Button(_("Close")) self.higt_set_bool = False self.higt_set_btn = LabelButton() # Button(_("Advanced")) self.show_and_hide_task_btn = Button(_("Task Manager")) self.higt_hbox = gtk.HBox() self.higt_hbox.pack_start(self.higt_set_btn) self.higt_align = gtk.Alignment() self.higt_align.add(self.higt_hbox) self.higt_align.set_padding(0, 0, 7, 0) self.higt_align.set(1, 0, 1, 0) self.left_button_box.set_buttons([self.higt_align]) self.right_button_box.set_buttons([self.start_btn, self.close_btn]) # ratio_combo. self.__ratio_list = [ "176 x 220", "240 x 320", "320 x 240", "320 x 480", "400 x 240", "480 x 800", "540 x 960", "600 x 1024", "640 x 480", "720 x 1280", "800 x 480", "800 x 600", "1024 x 600", "1024 x 768", "1152 x 864", ] self.ratio_items = [] for ratio in self.__ratio_list: self.ratio_combo.append_text(ratio) self.ratio_items.append((ratio, ratio)) self.ratio_combo.set_active(5) # brand_combo. brand_items = [] for brand in self.read_xml.brand_dict.keys(): brand_po = brand if self.brand_dict.has_key(brand): brand_po = self.brand_dict[brand] brand_items.append((brand_po, brand)) self.brand_combo.set_items(brand_items, 0) # self.brand_combo.add_items(brand_items, 0) self.brand_combo.prepend_text(_("No Presets")) self.brand_combo.connect("changed", self.brand_combo_item_selected) # model_combo. self.model_label.set_sensitive(False) self.model_combo.set_sensitive(False) self.model_combo.prepend_text(_("No Model")) self.model_combo.connect("changed", self.model_combo_item_selected) # self.save_chooser_btn.set_size_request(75, 21) self.save_chooser_btn.connect("clicked", self.save_chooser_btn_clicked) # path_entry. PATH_ENTRY_WIDTH = 240 PATH_ENTRY_HEIGHT = 22 self.save_path_entry.set_sensitive(False) self.save_path_entry.set_text(self.get_home_path()) self.save_path_entry.set_size(PATH_ENTRY_WIDTH, PATH_ENTRY_HEIGHT) self.close_btn.connect("clicked", lambda w: self.hide_all()) # higt_set_btn. self.higt_set_btn.connect("clicked", self.higt_set_btn_clicked) # form body box add main fixed. self.body_table_ali = gtk.Alignment() self.body_table_ali.set_padding(6, 0, 0, 0) self.body_table = gtk.Table(rows=6, columns=4, homogeneous=False) self.body_table_ali.add(self.body_table) self.brand_model_hbox = gtk.HBox() top, bottom = 5, 5 brand_position = eval(_("('brand_position', 20)")) model_position = eval(_("('model_position', 20)")) self.brand_hbox_ali, self.brand_hbox = self.create_hbox( bottom, top, 15 + int(brand_position[1]), 0, self.brand_label, self.brand_combo ) self.model_hbox_ali, self.model_hbox = self.create_hbox( bottom, top, 50 - int(model_position[1]), 0, self.model_label, self.model_combo ) self.brand_model_hbox.pack_start(self.brand_hbox_ali, False, False) self.brand_model_hbox.pack_start(self.model_hbox_ali, False, False) format_position = eval(_("('format_position', 12)")) ratio_position = eval(_("('ratio_position', 18)")) self.format_hbox_ali, self.format_hbox = self.create_hbox( bottom, top, 15 + int(format_position[1]), 0, self.format_label, self.format_combo ) self.ratio_hbox_ali, ratio_hbox = self.create_hbox( bottom, top, 50 - int(ratio_position[1]), 0, self.ratio_label, self.ratio_combo ) self.format_ratio_hbox = gtk.HBox() self.format_ratio_hbox.pack_start(self.format_hbox_ali, False, False) self.format_ratio_hbox.pack_start(self.ratio_hbox_ali, False, False) frame_rate_position = eval(_("('frame_position', 13)")) bit_rate_position = eval(_("('bit_rate_position', 28)")) self.frame_rate_hbox_ali, self.frame_rate_hbox = self.create_hbox( bottom, top, 15 + int(frame_rate_position[1]), 0, self.frame_rate_label, self.frame_rate_combo ) self.bit_rate_hbox_ali, self.bit_rate_hbox = self.create_hbox( bottom, top, 50 - int(bit_rate_position[1]), 0, self.bit_rate_label, self.bit_rate_combo ) self.bit_frame_hbox = gtk.HBox() self.bit_frame_hbox.pack_start(self.frame_rate_hbox_ali, False, False) self.bit_frame_hbox.pack_start(self.bit_rate_hbox_ali, False, False) # self.path_label, self.save_path_entry, self.save_chooser_btn self.save_path_hbox_ali = gtk.Alignment() self.save_path_hbox = gtk.HBox() self.save_path_hbox_ali.set_padding(5, 5, 16, 0) self.save_path_hbox_ali.add(self.save_path_hbox) self.save_path_entry_ali = gtk.Alignment() self.save_path_entry_ali.set_padding(1, 0, 0, 0) self.save_path_entry_ali.add(self.save_path_entry) self.save_chooser_btn_ali = gtk.Alignment() self.save_chooser_btn_ali.set_padding(0, 0, 10, 0) self.save_chooser_btn_ali.add(self.save_chooser_btn) self.save_path_hbox.pack_start(self.path_label, False, False) self.save_path_hbox.pack_start(self.save_path_entry_ali, False, False) self.save_path_hbox.pack_start(self.save_chooser_btn_ali, False, False) # left right top, bottom. """brand_model_hbox.""" # self.body_table.attach(self.brand_model_hbox, 0, 1, 0, 1, gtk.EXPAND, gtk.EXPAND) self.body_table.attach(self.brand_model_hbox, 0, 1, 0, 1, gtk.FILL, gtk.FILL) # self.body_table.attach(self.model_hbox, 1, 2, 0, 1, gtk.EXPAND, gtk.EXPAND) # self.body_table.attach(self.model_hbox, 2, 3, 0, 1, gtk.EXPAND, gtk.EXPAND) # self.body_table.attach(self.model_hbox, 3, 4, 0, 1, gtk.EXPAND, gtk.EXPAND) """format_ratio_hbox.""" # self.body_table.attach(self.format_ratio_hbox, 0, 1, 1, 2, gtk.EXPAND, gtk.EXPAND) self.body_table.attach(self.format_ratio_hbox, 0, 1, 1, 2, gtk.FILL, gtk.FILL) # self.body_table.attach(self.format_combo, 1, 2, 1, 2, gtk.EXPAND, gtk.EXPAND) # self.body_table.attach(self.ratio_hbox, 2, 3, 1, 2, gtk.EXPAND, gtk.EXPAND) # self.body_table.attach(self.ratio_combo, 3, 4, 1, 2, gtk.EXPAND, gtk.EXPAND) """bit_frame_hbox.""" # self.body_table.attach(self.bit_frame_hbox, 0, 1, 2, 3, gtk.EXPAND, gtk.EXPAND) self.body_table.attach(self.bit_frame_hbox, 0, 1, 2, 3, gtk.FILL, gtk.FILL) """save_path_hbox.""" # self.body_table.attach(self.save_path_hbox_ali, 0, 1, 3, 4, gtk.EXPAND, gtk.EXPAND) self.body_table.attach(self.save_path_hbox_ali, 0, 1, 3, 4, gtk.FILL, gtk.FILL) self.body_box.pack_start(self.body_table_ali, True, True) self.hide_setting() def create_hbox(self, top, bottom, left, right, child1, child2): hbox_ali = gtk.Alignment() hbox_ali.set_padding(top, bottom, left, right) hbox = gtk.HBox() hbox_ali.add(hbox) hbox.pack_start(child1, False, False) hbox.pack_start(child2, False, False) return hbox_ali, hbox def get_home_path(self): return os.path.expanduser("~") def save_chooser_btn_clicked(self, widget): """保存目录... ...""" self.show_open_dir_dialog_window() def show_open_dir_dialog_window(self): open_dialog = gtk.FileChooserDialog( _("Choose a directory"), None, gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK), ) # current floader set. open_dialog.set_current_folder(self.get_home_path()) # run dir dialog window. res = open_dialog.run() if res == gtk.RESPONSE_OK: path_string = open_dialog.get_filename() if path_string: self.save_path_entry.set_text(path_string) # destroy dialog window. open_dialog.destroy() def brand_combo_item_selected(self, combo, item_content): self.model_combo.clear_items() self.ratio_combo.clear_items() # try: self.model_dict = self.read_xml.load(self.read_xml.brand_dict[item_content]) except Exception, e: print "brand_combo_item_selected[error]:", e self.model_dict = {} # if item_content != _("No Presets") and self.model_dict != {}: model_items = [] for model in self.model_dict: model_items.append((model, model)) self.model_combo.set_items(model_items, 0) # self.model_combo.droplist.set_size_request(-1, self.model_combo.droplist_height) self.model_combo.set_active(0) self.model_combo.set_sensitive(True) self.model_label.set_sensitive(True) else: # clear model and ratio all text. self.model_combo.append_text(_("No Model")) self.model_combo.set_sensitive(False) self.model_label.set_sensitive(False) # add ratios. for ratio in self.ratio_items: self.ratio_combo.append_text(ratio[0]) self.ratio_combo.set_active(5)
class PPPConf(gtk.VBox): ENTRY = 0 OFFBUTTON = 1 TABLE_WIDTH = 150 def __init__(self, settings_obj=None): gtk.VBox.__init__(self) #self.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) #Dispatcher.set_button = set_button_callback #self.module_frame = module_frame # 新增settings_obj变量,用于访问shared_methods.Settings对象 self.settings_obj = settings_obj self.method_title = TitleBar(None, _("Configure Method"), width=self.TABLE_WIDTH, has_separator=False) self.refuse_eap_label = Label(_("EAP"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.refuse_pap_label = Label(_("PAP"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.refuse_chap_label = Label(_("CHAP"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.refuse_mschap_label = Label(_("MSCHAP"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.refuse_mschapv2_label = Label(_("MSCHAP v2"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.refuse_eap = SwitchButton() self.refuse_pap = SwitchButton() self.refuse_chap = SwitchButton() self.refuse_mschap = SwitchButton() self.refuse_mschapv2 = SwitchButton() self.method_table = gtk.Table(23, 3, False) # visible settings self.compression_title = TitleBar(None, _("Compression"), width=self.TABLE_WIDTH, has_separator=False) self.echo_title = TitleBar(None, _("Echo"), width=self.TABLE_WIDTH, has_separator=False) #compressio))n = Label(_("Compression"), text_size=TITLE_FONT_SIZE) self.require_mppe_label = Label( _("Use point-to-point encryption(mppe)"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.require_mppe_128_label = Label(_("Require 128-bit encryption"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.mppe_stateful_label = Label(_("Use stateful MPPE"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.nobsdcomp_label = Label(_("Allow BSD data Compression"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.nodeflate_label = Label(_("Allow Deflate data compression"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.no_vj_comp_label = Label(_("Use TCP header compression"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) #echo = Label("Echo", text_size=TITLE_FONT_SIZE) self.ppp_echo_label = Label(_("Send PPP echo packets"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.nopcomp_label = Label( _("Use protocal field compression negotiation"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.noaccomp_label = Label(_("Use Address/Control compression"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.require_mppe = SwitchButton() self.require_mppe_128 = SwitchButton() self.mppe_stateful = SwitchButton() self.nobsdcomp = SwitchButton() self.nodeflate = SwitchButton() self.no_vj_comp = SwitchButton() self.nopcomp = SwitchButton() self.noaccomp = SwitchButton() self.ppp_echo = SwitchButton() self.ip_sec_enable = SwitchButton() ## Settings for IPSec self.ipsec_title = TitleBar(None, _("IPSec Setting"), width=self.TABLE_WIDTH, has_separator=False) self.ip_sec_enable_label = Label(_("Enable IPSec tunnel to l2tp host"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.group_name_label = Label(_("Group Name:"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.gateway_id_label = Label(_("Gateway ID:"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.pre_shared_key_label = Label(_("Pre_Shared_key"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.group_name = InputEntry() self.group_name.set_size(self.TABLE_WIDTH, 22) self.gateway_id = InputEntry() self.gateway_id.set_size(self.TABLE_WIDTH, 22) self.pre_shared_key = PasswordEntry() self.pre_shared_key.set_text = self.pre_shared_key.entry.set_text self.pre_shared_key.set_size(self.TABLE_WIDTH, 22) methods_list = [ "refuse_eap", "refuse_eap_label", "refuse_pap", "refuse_pap_label", "refuse_chap", "refuse_chap_label", "refuse_mschap", "refuse_mschap_label", "refuse_mschapv2", "refuse_mschapv2_label" ] compression_list = [ "require_mppe_label", "require_mppe", "require_mppe_128_label", "require_mppe_128", "mppe_stateful_label", "mppe_stateful", "nobsdcomp_label", "nobsdcomp", "nodeflate_label", "nodeflate", "no_vj_comp_label", "no_vj_comp", "nopcomp_label", "nopcomp", "noaccomp_label", "noaccomp" ] echo_list = ["ppp_echo_label", "ppp_echo"] ip_sec_list = [ "ip_sec_enable_label", "ip_sec_enable", "group_name_label", "group_name", "gateway_id_label", "gateway_id", "pre_shared_key_label", "pre_shared_key" ] for name in (compression_list + echo_list + methods_list + ip_sec_list): widget = getattr(self, name) if not name.endswith("label"): align = style.wrap_with_align(widget, align="left") else: align = style.wrap_with_align(widget, width=210) setattr(self, name + "_align", align) #vbox = gtk.VBox() table_align = gtk.Alignment(0, 0, 0, 0) table_align.add(self.method_table) style.set_table(self.method_table) self.pack_start(table_align, False, False) self.method_table.set_row_spacing(5, 20) self.method_table.set_row_spacing(15, 20) self.method_table.set_row_spacing(18, 20) Dispatcher.connect("vpn-type-change", lambda w, c: self.refresh(c)) #align = style.set_box_with_align(vbox, "text") #self.add_with_viewport(align) #style.draw_background_color(align) #confirm_button = Button("Confirm") #confirm_button.connect("clicked", self.confirm_button_cb) #button_aligns = gtk.Alignment(0.5 , 1, 0, 0) #button_aligns.add(confirm_button) #self.add(button_aligns) #self.require_mppe_128.set_sensitive(False) #self.mppe_stateful.set_sensitive(False) ##self.refresh() def init_signal(self): self.refuse_eap.connect("toggled", self.check_button_cb, "refuse-eap") self.refuse_pap.connect("toggled", self.check_button_cb, "refuse-pap") self.refuse_chap.connect("toggled", self.check_button_cb, "refuse-chap") self.refuse_mschap.connect("toggled", self.check_button_cb, "refuse-mschap") self.refuse_mschapv2.connect("toggled", self.check_button_cb, "refuse-mschapv2") self.require_mppe.connect("toggled", self.click_mppe_callback, "require-mppe") self.require_mppe_128.connect("toggled", self.check_button_cb, "require-mppe-128") self.mppe_stateful.connect("toggled", self.check_button_cb, "mppe-stateful") self.nobsdcomp.connect("toggled", self.check_button_cb, "nobsdcomp") self.nodeflate.connect("toggled", self.check_button_cb, "nodeflate") self.no_vj_comp.connect("toggled", self.check_button_cb, "no-vj-comp") self.ppp_echo.connect("toggled", self.check_button_cb, "echo") self.nopcomp.connect("toggled", self.check_button_cb, "nopcomp") self.noaccomp.connect("toggled", self.check_button_cb, "noaccomp") self.ip_sec_enable.connect("toggled", self.enable_ipsec_cb) #self.group_name.entry.connect("focus-out-event", self.entry_focus_out_cb, "ipsec-group-name") #self.gateway_id.entry.connect("focus-out-event", self.entry_focus_out_cb, "ipsec-gataway-id") #self.pre_shared_key.entry.connect("focus-out-event", self.entry_focus_out_cb, "ipsec-psk") self.group_name.entry.connect("changed", self.entry_changed_cb, "ipsec-group-name") self.gateway_id.entry.connect("changed", self.entry_changed_cb, "ipsec-gateway-id") self.pre_shared_key.entry.connect("changed", self.entry_changed_cb, "ipsec-psk") def init_ui(self): self.service_type = self.vpn_setting.service_type.split(".")[-1] def table_attach(widget_name, row, padding=0): label = getattr(self, widget_name + "_label_align") widget = getattr(self, widget_name + "_align") self.method_table.attach(label, 0, 2, row, row + 1) self.method_table.attach(widget, 2, 3, row, row + 1, xpadding=padding) #print self.service_type container_remove_all(self.method_table) self.method_table.attach(self.method_title, 0, 3, 0, 1) table_attach("refuse_eap", 1) table_attach("refuse_pap", 2) table_attach("refuse_chap", 3) table_attach("refuse_mschap", 4) table_attach("refuse_mschapv2", 5) self.method_table.attach(self.compression_title, 0, 3, 6, 7) table_attach("require_mppe", 8) if self.require_mppe.get_active(): table_attach("require_mppe_128", 9) table_attach("mppe_stateful", 10) table_attach("nobsdcomp", 11) table_attach("nodeflate", 12) table_attach("no_vj_comp", 13) self.method_table.attach(self.echo_title, 0, 3, 16, 17) table_attach("ppp_echo", 18) if self.service_type == "l2tp": #print "this is l2tp" table_attach("nopcomp", 14) table_attach("noaccomp", 15) self.method_table.attach(self.ipsec_title, 0, 3, 19, 20) table_attach("ip_sec_enable", 20) if self.ip_sec_enable.get_active(): table_attach("group_name", 21) table_attach("gateway_id", 22) table_attach("pre_shared_key", 23) self.method_table.show_all() def refresh(self, connection): self.connection = connection self.vpn_setting = self.connection.get_setting("vpn") #========================= # retreieve settings self.service_type = self.vpn_setting.service_type.split(".")[-1] #print ">>",self.vpn_setting.data refuse_eap = self.vpn_setting.get_data_item("refuse-eap") refuse_pap = self.vpn_setting.get_data_item("refuse-pap") refuse_chap = self.vpn_setting.get_data_item("refuse-chap") refuse_mschap = self.vpn_setting.get_data_item("refuse-mschap") refuse_mschapv2 = self.vpn_setting.get_data_item("refuse-mschapv2") require_mppe = self.vpn_setting.get_data_item("require-mppe") require_mppe_128 = self.vpn_setting.get_data_item("require-mppe-128") mppe_stateful = self.vpn_setting.get_data_item("mppe-stateful") nobsdcomp = self.vpn_setting.get_data_item("nobsdcomp") nodeflate = self.vpn_setting.get_data_item("nodeflate") no_vj_comp = self.vpn_setting.get_data_item("no-vj-comp") lcp_echo_failure = self.vpn_setting.get_data_item("lcp-echo-failure") lcp_echo_interval = self.vpn_setting.get_data_item("lcp-echo-interval") self.refuse_mschap.set_active(refuse_mschap == None) self.refuse_mschapv2.set_active(refuse_mschapv2 == None) self.require_mppe.set_active(require_mppe != None) self.refuse_eap.set_active(refuse_eap == None) self.refuse_pap.set_active(refuse_pap == None) self.refuse_chap.set_active(refuse_chap == None) self.require_mppe_128.set_active(require_mppe_128 != None) if self.require_mppe_128.get_active() or self.mppe_stateful.get_active( ): self.require_mppe.set_active(True) self.mppe_stateful.set_active(mppe_stateful != None) self.nobsdcomp.set_active(nobsdcomp == None) self.nodeflate.set_active(nodeflate == None) self.no_vj_comp.set_active(no_vj_comp == None) if self.service_type == "l2tp": nopcomp = self.vpn_setting.get_data_item("nopcomp") noaccomp = self.vpn_setting.get_data_item("noaccomp") ipsec_enabled = self.vpn_setting.get_data_item("ipsec-enabled") self.nopcomp.set_active(nopcomp == None) self.noaccomp.set_active(noaccomp == None) if ipsec_enabled: self.ip_sec_enable.set_active(True) ipsec_group_name = self.vpn_setting.get_data_item( "ipsec-group-name") ipsec_gateway_id = self.vpn_setting.get_data_item( "ipsec-gateway-id") ipsec_psk = self.vpn_setting.get_data_item("ipsec-psk") self.group_name.set_text(ipsec_group_name) self.gateway_id.set_text(ipsec_gateway_id) self.pre_shared_key.set_text(ipsec_psk) else: self.ip_sec_enable.set_active(False) if lcp_echo_failure == None and lcp_echo_interval == None: self.ppp_echo.set_active(False) else: self.ppp_echo.set_active(True) self.init_signal() self.init_lock = False self.require_mppe.emit("toggled") self.init_lock = True self.init_ui() #================================== # Connect signal def enable_ipsec_cb(self, widget): active = widget.get_active() if active: self.vpn_setting.set_data_item("ipsec-enabled", "yes") self.group_name.set_sensitive(True) self.gateway_id.set_sensitive(True) self.pre_shared_key.set_sensitive(True) ipsec_group_name = self.vpn_setting.get_data_item( "ipsec-group-name") ipsec_gateway_id = self.vpn_setting.get_data_item( "ipsec-gateway-id") ipsec_psk = self.vpn_setting.get_data_item("ipsec-psk") #print ipsec_group_name self.group_name.set_text(ipsec_group_name) self.gateway_id.set_text(ipsec_gateway_id) self.pre_shared_key.set_text(ipsec_psk) self.init_ui() else: self.vpn_setting.delete_data_item("ipsec-enabled") self.group_name.set_text("") self.gateway_id.set_text("") self.pre_shared_key.set_text("") self.group_name.set_sensitive(False) self.gateway_id.set_sensitive(False) self.pre_shared_key.set_sensitive(False) self.init_ui() def entry_focus_out_cb(self, widget, event, key): text = widget.get_text() if text and key != "name": self.vpn_setting.set_data_item(key, text) else: self.vpn_setting.delete_data_item(key) def entry_changed_cb(self, widget, string, key): if string == "": #print key,"entry is empty" self.vpn_setting.delete_data_item(key) elif key != "name": self.vpn_setting.set_data_item(key, string) if self.connection.check_setting_finish(): Dispatcher.set_button("save", True) else: Dispatcher.set_button("save", False) def check_button_cb(self, widget, key): auth_lock = self.auth_lock() active = widget.get_active() if key.startswith("refuse"): if active: self.vpn_setting.delete_data_item(key) else: self.vpn_setting.set_data_item(key, "yes") if auth_lock: self.require_mppe_label.set_sensitive(False) self.require_mppe.set_sensitive(False) self.set_group_sensitive(True) else: self.require_mppe_label.set_sensitive(True) self.require_mppe.set_sensitive(True) elif key.startswith("no"): if active: self.vpn_setting.delete_data_item(key) else: self.vpn_setting.set_data_item(key, "yes") elif key == "echo": if active: self.vpn_setting.set_data_item("lcp-echo-failure", "5") self.vpn_setting.set_data_item("lcp-echo-interval", "30") else: self.vpn_setting.delete_data_item("lcp-echo-failure") self.vpn_setting.delete_data_item("lcp-echo-interval") elif key.startswith("ipsec"): if active: self.vpn_setting.set_data_item(key, "yes") else: self.vpn_setting.delete_data_item(key) elif key.startswith("require") or key.startswith("mppe"): if active: self.vpn_setting.set_data_item(key, "yes") else: self.vpn_setting.delete_data_item(key) if self.connection.check_setting_finish(): Dispatcher.set_button("save", True) else: Dispatcher.set_button("save", False) def click_mppe_callback(self, widget, key): active = widget.get_active() if active and key != "name": self.vpn_setting.set_data_item(key, "yes") #self.set_group_active(False) self.set_group_sensitive(False) self.mppe_group_set_sensitive(True) self.init_ui() else: #self.set_group_active(True) self.set_group_sensitive(True) self.vpn_setting.delete_data_item(key) self.mppe_group_set_active(False) self.mppe_group_set_sensitive(False) self.init_ui() if self.init_lock: if self.connection.check_setting_finish(): Dispatcher.set_button("save", True) else: Dispatcher.set_button("save", False) if self.auth_lock(): self.require_mppe_label.set_sensitive(False) self.require_mppe.set_sensitive(False) return def mppe_group_set_sensitive(self, boolean): self.require_mppe_128_label.set_sensitive(boolean) self.mppe_stateful_label.set_sensitive(boolean) self.require_mppe_128.set_sensitive(boolean) self.mppe_stateful.set_sensitive(boolean) def mppe_group_set_active(self, boolean): log.debug() self.require_mppe_128.set_active(boolean) self.mppe_stateful.set_active(boolean) def confirm_button_cb(self, widget): self.module_frame.send_message("change_crumb", 2) nm_module.slider._slide_to_page("vpn", "none") def auth_lock(self): if self.refuse_mschap.get_active() or self.refuse_mschapv2.get_active( ): return False else: return True def set_group_active(self, boolean): self.refuse_eap.set_active(boolean) self.refuse_pap.set_active(boolean) self.refuse_chap.set_active(boolean) def set_group_sensitive(self, boolean): self.refuse_eap.set_sensitive(boolean) self.refuse_pap.set_sensitive(boolean) self.refuse_chap.set_sensitive(boolean) self.refuse_eap_label.set_sensitive(boolean) self.refuse_pap_label.set_sensitive(boolean) self.refuse_chap_label.set_sensitive(boolean)
class PPPConf(gtk.VBox): ENTRY = 0 OFFBUTTON = 1 TABLE_WIDTH = 150 def __init__(self, settings_obj=None): gtk.VBox.__init__(self) #self.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) #Dispatcher.set_button = set_button_callback #self.module_frame = module_frame # 新增settings_obj变量,用于访问shared_methods.Settings对象 self.settings_obj = settings_obj self.method_title = TitleBar(None, _("Configure Method"), width=self.TABLE_WIDTH, has_separator=False) self.refuse_eap_label = Label(_("EAP"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.refuse_pap_label = Label(_("PAP"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.refuse_chap_label = Label(_("CHAP"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.refuse_mschap_label = Label(_("MSCHAP"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.refuse_mschapv2_label = Label(_("MSCHAP v2"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.refuse_eap = SwitchButton() self.refuse_pap = SwitchButton() self.refuse_chap = SwitchButton() self.refuse_mschap = SwitchButton() self.refuse_mschapv2 = SwitchButton() self.method_table = gtk.Table(23, 3, False) # visible settings self.compression_title = TitleBar(None, _("Compression"), width=self.TABLE_WIDTH, has_separator=False) self.echo_title = TitleBar(None, _("Echo"), width=self.TABLE_WIDTH, has_separator=False) #compressio))n = Label(_("Compression"), text_size=TITLE_FONT_SIZE) self.require_mppe_label = Label(_("Use point-to-point encryption(mppe)"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.require_mppe_128_label = Label(_("Require 128-bit encryption"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.mppe_stateful_label = Label(_("Use stateful MPPE"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.nobsdcomp_label = Label(_("Allow BSD data Compression"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.nodeflate_label = Label(_("Allow Deflate data compression"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.no_vj_comp_label = Label(_("Use TCP header compression"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) #echo = Label("Echo", text_size=TITLE_FONT_SIZE) self.ppp_echo_label = Label(_("Send PPP echo packets"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.nopcomp_label = Label(_("Use protocal field compression negotiation"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.noaccomp_label = Label(_("Use Address/Control compression"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.require_mppe = SwitchButton() self.require_mppe_128 = SwitchButton() self.mppe_stateful = SwitchButton() self.nobsdcomp = SwitchButton() self.nodeflate = SwitchButton() self.no_vj_comp = SwitchButton() self.nopcomp = SwitchButton() self.noaccomp = SwitchButton() self.ppp_echo = SwitchButton() self.ip_sec_enable = SwitchButton() ## Settings for IPSec self.ipsec_title = TitleBar(None, _("IPSec Setting"), width=self.TABLE_WIDTH, has_separator=False) self.ip_sec_enable_label = Label(_("Enable IPSec tunnel to l2tp host"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.group_name_label = Label(_("Group Name:"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.gateway_id_label = Label(_("Gateway ID:"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.pre_shared_key_label = Label(_("Pre_Shared_key"), text_size=CONTENT_FONT_SIZE, enable_select=False, enable_double_click=False) self.group_name = InputEntry() self.group_name.set_size(self.TABLE_WIDTH, 22) self.gateway_id = InputEntry() self.gateway_id.set_size(self.TABLE_WIDTH, 22) self.pre_shared_key = PasswordEntry() self.pre_shared_key.set_text = self.pre_shared_key.entry.set_text self.pre_shared_key.set_size(self.TABLE_WIDTH, 22) methods_list = ["refuse_eap", "refuse_eap_label", "refuse_pap", "refuse_pap_label", "refuse_chap", "refuse_chap_label", "refuse_mschap", "refuse_mschap_label", "refuse_mschapv2", "refuse_mschapv2_label"] compression_list = ["require_mppe_label", "require_mppe", "require_mppe_128_label", "require_mppe_128", "mppe_stateful_label", "mppe_stateful", "nobsdcomp_label", "nobsdcomp", "nodeflate_label", "nodeflate", "no_vj_comp_label", "no_vj_comp", "nopcomp_label", "nopcomp", "noaccomp_label", "noaccomp"] echo_list = ["ppp_echo_label","ppp_echo"] ip_sec_list = ["ip_sec_enable_label", "ip_sec_enable", "group_name_label", "group_name", "gateway_id_label", "gateway_id", "pre_shared_key_label", "pre_shared_key"] for name in (compression_list+echo_list+methods_list + ip_sec_list): widget = getattr(self, name) if not name.endswith("label"): align = style.wrap_with_align(widget, align="left") else: align = style.wrap_with_align(widget, width=210) setattr(self, name + "_align", align) #vbox = gtk.VBox() table_align = gtk.Alignment(0, 0, 0, 0) table_align.add(self.method_table) style.set_table(self.method_table) self.pack_start(table_align, False, False) self.method_table.set_row_spacing(5, 20) self.method_table.set_row_spacing(15, 20) self.method_table.set_row_spacing(18, 20) Dispatcher.connect("vpn-type-change", lambda w,c:self.refresh(c)) #align = style.set_box_with_align(vbox, "text") #self.add_with_viewport(align) #style.draw_background_color(align) #confirm_button = Button("Confirm") #confirm_button.connect("clicked", self.confirm_button_cb) #button_aligns = gtk.Alignment(0.5 , 1, 0, 0) #button_aligns.add(confirm_button) #self.add(button_aligns) #self.require_mppe_128.set_sensitive(False) #self.mppe_stateful.set_sensitive(False) ##self.refresh() def init_signal(self): self.refuse_eap.connect("toggled", self.check_button_cb, "refuse-eap") self.refuse_pap.connect("toggled", self.check_button_cb, "refuse-pap") self.refuse_chap.connect("toggled", self.check_button_cb, "refuse-chap") self.refuse_mschap.connect("toggled", self.check_button_cb, "refuse-mschap") self.refuse_mschapv2.connect("toggled", self.check_button_cb, "refuse-mschapv2") self.require_mppe.connect("toggled", self.click_mppe_callback, "require-mppe") self.require_mppe_128.connect("toggled", self.check_button_cb, "require-mppe-128") self.mppe_stateful.connect("toggled", self.check_button_cb,"mppe-stateful") self.nobsdcomp.connect("toggled", self.check_button_cb, "nobsdcomp") self.nodeflate.connect("toggled", self.check_button_cb, "nodeflate") self.no_vj_comp.connect("toggled", self.check_button_cb, "no-vj-comp") self.ppp_echo.connect("toggled", self.check_button_cb, "echo") self.nopcomp.connect("toggled", self.check_button_cb, "nopcomp") self.noaccomp.connect("toggled", self.check_button_cb, "noaccomp") self.ip_sec_enable.connect("toggled", self.enable_ipsec_cb) #self.group_name.entry.connect("focus-out-event", self.entry_focus_out_cb, "ipsec-group-name") #self.gateway_id.entry.connect("focus-out-event", self.entry_focus_out_cb, "ipsec-gataway-id") #self.pre_shared_key.entry.connect("focus-out-event", self.entry_focus_out_cb, "ipsec-psk") self.group_name.entry.connect("changed", self.entry_changed_cb, "ipsec-group-name") self.gateway_id.entry.connect("changed", self.entry_changed_cb, "ipsec-gateway-id") self.pre_shared_key.entry.connect("changed", self.entry_changed_cb, "ipsec-psk") def init_ui(self): self.service_type = self.vpn_setting.service_type.split(".")[-1] def table_attach(widget_name, row, padding=0): label = getattr(self, widget_name + "_label_align") widget = getattr(self, widget_name + "_align") self.method_table.attach(label, 0, 2, row, row + 1) self.method_table.attach(widget, 2, 3, row, row + 1, xpadding=padding) #print self.service_type container_remove_all(self.method_table) self.method_table.attach(self.method_title, 0, 3, 0, 1) table_attach( "refuse_eap", 1) table_attach( "refuse_pap", 2 ) table_attach( "refuse_chap", 3) table_attach( "refuse_mschap", 4 ) table_attach( "refuse_mschapv2", 5) self.method_table.attach( self.compression_title, 0, 3, 6 ,7) table_attach("require_mppe", 8) if self.require_mppe.get_active(): table_attach("require_mppe_128", 9) table_attach("mppe_stateful", 10) table_attach("nobsdcomp", 11) table_attach("nodeflate", 12) table_attach("no_vj_comp", 13) self.method_table.attach(self.echo_title, 0, 3, 16, 17) table_attach("ppp_echo", 18) if self.service_type == "l2tp": #print "this is l2tp" table_attach("nopcomp", 14) table_attach("noaccomp", 15) self.method_table.attach(self.ipsec_title, 0, 3, 19, 20) table_attach("ip_sec_enable", 20) if self.ip_sec_enable.get_active(): table_attach("group_name", 21) table_attach("gateway_id", 22) table_attach("pre_shared_key", 23) self.method_table.show_all() def refresh(self, connection): self.connection = connection self.vpn_setting = self.connection.get_setting("vpn") #========================= # retreieve settings self.service_type = self.vpn_setting.service_type.split(".")[-1] #print ">>",self.vpn_setting.data refuse_eap = self.vpn_setting.get_data_item("refuse-eap") refuse_pap = self.vpn_setting.get_data_item("refuse-pap") refuse_chap = self.vpn_setting.get_data_item("refuse-chap") refuse_mschap = self.vpn_setting.get_data_item("refuse-mschap") refuse_mschapv2 = self.vpn_setting.get_data_item("refuse-mschapv2") require_mppe = self.vpn_setting.get_data_item("require-mppe") require_mppe_128 = self.vpn_setting.get_data_item("require-mppe-128") mppe_stateful = self.vpn_setting.get_data_item("mppe-stateful") nobsdcomp = self.vpn_setting.get_data_item("nobsdcomp") nodeflate = self.vpn_setting.get_data_item("nodeflate") no_vj_comp = self.vpn_setting.get_data_item("no-vj-comp") lcp_echo_failure = self.vpn_setting.get_data_item("lcp-echo-failure") lcp_echo_interval = self.vpn_setting.get_data_item("lcp-echo-interval") self.refuse_mschap.set_active(refuse_mschap == None) self.refuse_mschapv2.set_active(refuse_mschapv2 == None) self.require_mppe.set_active(require_mppe != None) self.refuse_eap.set_active(refuse_eap == None) self.refuse_pap.set_active(refuse_pap == None) self.refuse_chap.set_active(refuse_chap == None) self.require_mppe_128.set_active(require_mppe_128 != None) if self.require_mppe_128.get_active() or self.mppe_stateful.get_active(): self.require_mppe.set_active(True) self.mppe_stateful.set_active(mppe_stateful != None) self.nobsdcomp.set_active(nobsdcomp == None) self.nodeflate.set_active(nodeflate == None) self.no_vj_comp.set_active(no_vj_comp == None) if self.service_type == "l2tp": nopcomp = self.vpn_setting.get_data_item("nopcomp") noaccomp = self.vpn_setting.get_data_item("noaccomp") ipsec_enabled = self.vpn_setting.get_data_item("ipsec-enabled") self.nopcomp.set_active(nopcomp == None) self.noaccomp.set_active(noaccomp == None) if ipsec_enabled: self.ip_sec_enable.set_active(True) ipsec_group_name = self.vpn_setting.get_data_item("ipsec-group-name") ipsec_gateway_id = self.vpn_setting.get_data_item("ipsec-gateway-id") ipsec_psk = self.vpn_setting.get_data_item("ipsec-psk") self.group_name.set_text(ipsec_group_name) self.gateway_id.set_text(ipsec_gateway_id) self.pre_shared_key.set_text(ipsec_psk) else: self.ip_sec_enable.set_active(False) if lcp_echo_failure == None and lcp_echo_interval == None: self.ppp_echo.set_active(False) else: self.ppp_echo.set_active(True) self.init_signal() self.init_lock = False self.require_mppe.emit("toggled") self.init_lock = True self.init_ui() #================================== # Connect signal def enable_ipsec_cb(self, widget): active = widget.get_active() if active: self.vpn_setting.set_data_item("ipsec-enabled", "yes") self.group_name.set_sensitive(True) self.gateway_id.set_sensitive(True) self.pre_shared_key.set_sensitive(True) ipsec_group_name = self.vpn_setting.get_data_item("ipsec-group-name") ipsec_gateway_id = self.vpn_setting.get_data_item("ipsec-gateway-id") ipsec_psk = self.vpn_setting.get_data_item("ipsec-psk") #print ipsec_group_name self.group_name.set_text(ipsec_group_name) self.gateway_id.set_text(ipsec_gateway_id) self.pre_shared_key.set_text(ipsec_psk) self.init_ui() else: self.vpn_setting.delete_data_item("ipsec-enabled") self.group_name.set_text("") self.gateway_id.set_text("") self.pre_shared_key.set_text("") self.group_name.set_sensitive(False) self.gateway_id.set_sensitive(False) self.pre_shared_key.set_sensitive(False) self.init_ui() def entry_focus_out_cb(self, widget, event, key): text = widget.get_text() if text and key != "name": self.vpn_setting.set_data_item(key, text) else: self.vpn_setting.delete_data_item(key) def entry_changed_cb(self, widget, string, key): if string == "": #print key,"entry is empty" self.vpn_setting.delete_data_item(key) elif key != "name": self.vpn_setting.set_data_item(key, string) if self.connection.check_setting_finish(): Dispatcher.set_button("save", True) else: Dispatcher.set_button("save", False) def check_button_cb(self, widget, key): auth_lock = self.auth_lock() active = widget.get_active() if key.startswith("refuse"): if active: self.vpn_setting.delete_data_item(key) else: self.vpn_setting.set_data_item(key, "yes") if auth_lock: self.require_mppe_label.set_sensitive(False) self.require_mppe.set_sensitive(False) self.set_group_sensitive(True) else: self.require_mppe_label.set_sensitive(True) self.require_mppe.set_sensitive(True) elif key.startswith("no"): if active: self.vpn_setting.delete_data_item(key) else: self.vpn_setting.set_data_item(key, "yes") elif key == "echo": if active: self.vpn_setting.set_data_item("lcp-echo-failure", "5") self.vpn_setting.set_data_item("lcp-echo-interval", "30") else: self.vpn_setting.delete_data_item("lcp-echo-failure") self.vpn_setting.delete_data_item("lcp-echo-interval") elif key.startswith("ipsec"): if active: self.vpn_setting.set_data_item(key, "yes") else: self.vpn_setting.delete_data_item(key) elif key.startswith("require") or key.startswith("mppe"): if active: self.vpn_setting.set_data_item(key, "yes") else: self.vpn_setting.delete_data_item(key) if self.connection.check_setting_finish(): Dispatcher.set_button("save", True) else: Dispatcher.set_button("save", False) def click_mppe_callback(self, widget, key): active = widget.get_active() if active and key != "name": self.vpn_setting.set_data_item(key, "yes") #self.set_group_active(False) self.set_group_sensitive(False) self.mppe_group_set_sensitive(True) self.init_ui() else: #self.set_group_active(True) self.set_group_sensitive(True) self.vpn_setting.delete_data_item(key) self.mppe_group_set_active(False) self.mppe_group_set_sensitive(False) self.init_ui() if self.init_lock: if self.connection.check_setting_finish(): Dispatcher.set_button("save", True) else: Dispatcher.set_button("save", False) if self.auth_lock(): self.require_mppe_label.set_sensitive(False) self.require_mppe.set_sensitive(False) return def mppe_group_set_sensitive(self, boolean): self.require_mppe_128_label.set_sensitive(boolean) self.mppe_stateful_label.set_sensitive(boolean) self.require_mppe_128.set_sensitive(boolean) self.mppe_stateful.set_sensitive(boolean) def mppe_group_set_active(self, boolean): log.debug() self.require_mppe_128.set_active(boolean) self.mppe_stateful.set_active(boolean) def confirm_button_cb(self, widget): self.module_frame.send_message("change_crumb", 2) nm_module.slider._slide_to_page("vpn", "none") def auth_lock(self): if self.refuse_mschap.get_active() or self.refuse_mschapv2.get_active(): return False else: return True def set_group_active(self, boolean): self.refuse_eap.set_active(boolean) self.refuse_pap.set_active(boolean) self.refuse_chap.set_active(boolean) def set_group_sensitive(self, boolean): self.refuse_eap.set_sensitive(boolean) self.refuse_pap.set_sensitive(boolean) self.refuse_chap.set_sensitive(boolean) self.refuse_eap_label.set_sensitive(boolean) self.refuse_pap_label.set_sensitive(boolean) self.refuse_chap_label.set_sensitive(boolean)
class MirrorsBox(BaseBox): def __init__(self): BaseBox.__init__(self) self.current_mirror_item = None self.select_best_mirror_button_texts = { "normal": _("Select the best mirror"), "wait": _("Waiting"), "success": _("Successfully") } self.main_box.pack_start(self.create_mirror_select_table(), True, True) self.main_box.pack_start(self.create_source_update_frequency_table(), False, True) self.mirror_test_obj = None global_event.register_event("mirror-test-finished", self.finish_mirror_test) global_event.register_event("cancel-mirror-test", self.cancel_mirror_test) global_event.register_event("mirror-backend-changed", self.mirror_changed_handler) def create_source_update_frequency_table(self): main_table = gtk.Table(3, 2) main_table.set_row_spacings(CONTENT_ROW_SPACING) dir_title_label = Label(_("Refresh package lists")) # auto update check button self.is_auto_update_button = CheckButton(label_text=_('Upgrade automatically')) self.is_auto_update_button.connect('released', self.change_auto_update) self.is_auto_update_button.set_active(utils.is_auto_update()) self.update_label = Label(_("Time interval: ")) self.update_spin = SpinBox(int(get_update_interval()), 0, 168, 1) self.update_spin.connect("value-changed", lambda w, v: set_update_interval(v)) self.hour_lablel = Label(_(" hour")) self.hour_lablel.set_size_request(50, 12) spin_hbox = gtk.HBox(spacing=3) spin_hbox.pack_start(self.update_label, False, False) spin_hbox.pack_start(self.update_spin, False, False) spin_hbox.pack_start(self.hour_lablel, False, False) main_table.attach(dir_title_label, 0, 2, 0, 1, yoptions=gtk.FILL) main_table.attach(create_separator_box(), 0, 2, 1, 2, yoptions=gtk.FILL) main_table.attach(self.is_auto_update_button, 0, 1, 2, 3, xoptions=gtk.FILL) main_table.attach(spin_hbox, 1, 2, 2, 3, xpadding=10, xoptions=gtk.FILL) return main_table def change_auto_update(self, widget, data=None): widget_active = widget.get_active() self.update_spin.set_sensitive(widget_active) self.update_label.set_sensitive(widget_active) self.hour_lablel.set_sensitive(widget_active) utils.set_auto_update(widget_active) daemon_running = is_dbus_name_exists(DSC_UPDATE_DAEMON_NAME) if widget_active and not daemon_running: dsc_daemon_path = os.path.join(get_parent_dir(__file__, 2), 'update_data/apt/dsc-daemon.py') subprocess.Popen(['python', dsc_daemon_path], stderr=subprocess.STDOUT, shell=False) elif not widget_active and daemon_running: session = dbus.SessionBus() dbus_obj = session.get_object(DSC_UPDATE_DAEMON_NAME, DSC_UPDATE_DAEMON_PATH) iface = dbus.Interface(dbus_obj, DSC_UPDATE_DAEMON_NAME) iface.quit() def select_best_mirror(self, widget): widget.set_label(self.select_best_mirror_button_texts["wait"]) widget.set_sensitive(False) global_event.emit("toggle-waiting-dialog", True) utils.ThreadMethod(self.change_to_nearest_mirror_thread, (widget, )).start() def cancel_mirror_test(self): if self.mirror_test_obj: self.mirror_test_obj.cancel() self.mirror_test_obj = None self.finish_mirror_test("") def change_to_nearest_mirror_thread(self, widget): best_mirror = get_best_mirror() global_event.emit("mirror-test-finished", best_mirror) def finish_mirror_test(self, mirror): for item in self.mirror_view.visible_items: if item.mirror == mirror: self.mirror_view.visible_item(item) self.select_best_mirror_button.set_sensitive(True) self.select_best_mirror_button.set_label(self.select_best_mirror_button_texts["normal"]) def create_mirror_select_table(self): main_table = gtk.Table(3, 2) main_table.set_row_spacings(CONTENT_ROW_SPACING) mirror_select_title = Label(_("Select mirror")) self.select_best_mirror_button = Button(self.select_best_mirror_button_texts["normal"]) self.select_best_mirror_button.connect("clicked", self.select_best_mirror) self.mirrors_dir = os.path.join(get_parent_dir(__file__, 2), 'mirrors') self.current_mirror_hostname = utils.get_current_mirror_hostname() self.mirror_items = self.get_mirror_items() self.mirror_view = TreeView(self.mirror_items, enable_drag_drop=False, enable_multiple_select=False, mask_bound_height=0, ) self.mirror_view.set_expand_column(1) self.mirror_view.set_size_request(-1, 280) self.mirror_view.draw_mask = self.mirror_treeview_draw_mask main_table.attach(mirror_select_title, 0, 1, 0, 1, yoptions=gtk.FILL) main_table.attach(self.select_best_mirror_button, 1, 2, 0, 1, xoptions=gtk.FILL) main_table.attach(create_separator_box(), 0, 2, 1, 2, xoptions=gtk.FILL) main_table.attach(self.mirror_view, 0, 2, 2, 3, xoptions=gtk.FILL) return main_table def mirror_changed_handler(self, mirror): item = None for i in self.mirror_view.visible_items: if i.mirror == mirror: item = i break if item: self.current_mirror_item = item for i in self.mirror_items: if i != item and i.radio_button.active == True: i.radio_button.active = False elif i == item: i.radio_button.active = True self.mirror_view.queue_draw() self.mirror_view.visible_item(item) def mirror_treeview_draw_mask(self, cr, x, y, w, h): cr.set_source_rgba(1, 1, 1, 0.5) cr.rectangle(x, y, w, h) cr.fill() def get_mirror_items(self): items = [] for m in all_mirrors: item = MirrorItem(m, self.mirror_clicked_callback) if m.hostname == self.current_mirror_hostname: item.radio_button.active = True self.current_mirror_item = item items.append(item) return items def mirror_clicked_callback(self, item): if item != self.current_mirror_item: global_event.emit('start-change-mirror', item.mirror)