def __init__(self): super(PackageView, self).__init__() model = self.__create_model() self.set_model(model) self.__check_list = [] self.__packageworker = PackageWorker() self.__add_column() self.mode = 'package' self.update_package_model() self.selection = self.get_selection() self.set_sensitive(False)
def __init__(self): TweakPage.__init__(self, _('Add/Remove Applications'), _('A simple but more effecient method for finding and installing popular packages than the default Add/Remove.')) update_apt_cache(True) self.to_add = [] self.to_rm = [] self.packageWorker = PackageWorker() vbox = gtk.VBox(False, 8) self.pack_start(vbox) hbox = gtk.HBox(False, 0) vbox.pack_start(hbox, False, False, 0) combobox = self.create_category() combobox.set_active(0) combobox.connect('changed', self.on_category_changed) hbox.pack_end(combobox, False, False, 0) sw = gtk.ScrolledWindow() sw.set_shadow_type(gtk.SHADOW_ETCHED_IN) sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) vbox.pack_start(sw) # create tree view treeview = self.create_treeview() treeview.set_rules_hint(True) treeview.set_search_column(COLUMN_NAME) sw.add(treeview) # button hbox = gtk.HBox(False, 0) vbox.pack_end(hbox, False ,False, 0) self.button = gtk.Button(stock = gtk.STOCK_APPLY) self.button.connect('clicked', self.on_apply_clicked) self.button.set_sensitive(False) hbox.pack_end(self.button, False, False, 0) self.show_all()
class Installer(TweakPage): def __init__(self): TweakPage.__init__(self, _('Add/Remove Applications'), _('A simple but more effecient method for finding and installing popular packages than the default Add/Remove.')) update_apt_cache(True) self.to_add = [] self.to_rm = [] self.packageWorker = PackageWorker() vbox = gtk.VBox(False, 8) self.pack_start(vbox) hbox = gtk.HBox(False, 0) vbox.pack_start(hbox, False, False, 0) combobox = self.create_category() combobox.set_active(0) combobox.connect('changed', self.on_category_changed) hbox.pack_end(combobox, False, False, 0) sw = gtk.ScrolledWindow() sw.set_shadow_type(gtk.SHADOW_ETCHED_IN) sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) vbox.pack_start(sw) # create tree view treeview = self.create_treeview() treeview.set_rules_hint(True) treeview.set_search_column(COLUMN_NAME) sw.add(treeview) # button hbox = gtk.HBox(False, 0) vbox.pack_end(hbox, False ,False, 0) self.button = gtk.Button(stock = gtk.STOCK_APPLY) self.button.connect('clicked', self.on_apply_clicked) self.button.set_sensitive(False) hbox.pack_end(self.button, False, False, 0) self.show_all() def create_category(self): liststore = gtk.ListStore(gtk.gdk.Pixbuf, gobject.TYPE_STRING) iter = liststore.append() liststore.set(iter, 0, gtk.gdk.pixbuf_new_from_file(os.path.join(DATA_DIR, 'appcates', 'all.png')), 1, _('All Categories')) for item in CATES_DATA: iter = liststore.append() liststore.set(iter, 0, gtk.gdk.pixbuf_new_from_file(os.path.join(DATA_DIR, 'appcates', item[1])), 1, item[0]) combobox = gtk.ComboBox(liststore) textcell = gtk.CellRendererText() pixbufcell = gtk.CellRendererPixbuf() combobox.pack_start(pixbufcell, False) combobox.pack_start(textcell, True) combobox.add_attribute(pixbufcell, 'pixbuf', 0) combobox.add_attribute(textcell, 'text', 1) return combobox def on_category_changed(self, widget, data = None): index = widget.get_active() if index: liststore = widget.get_model() iter = liststore.get_iter(index) self.filter = liststore.get_value(iter, 1) else: self.filter = None self.update_model() def update_model(self): self.model.clear() icon = gtk.icon_theme_get_default() for item in data: appname = item[0] category = item[-1][0] try: iconpath = get_app_logo(appname) pixbuf = gtk.gdk.pixbuf_new_from_file(iconpath) except gobject.GError: pixbuf = icon.load_icon(gtk.STOCK_MISSING_IMAGE, 32, 0) try: package = PackageInfo(appname) is_installed = package.check_installed() disname = package.get_name() desc = get_app_describ(appname) except KeyError: continue if self.filter == None: if appname in self.to_add or appname in self.to_rm: self.model.append((not is_installed, pixbuf, appname, desc, '<span foreground="#ffcc00"><b>%s</b>\n%s</span>' % (disname, desc), category)) else: self.model.append((is_installed, pixbuf, appname, desc, '<b>%s</b>\n%s' % (disname, desc), category)) else: if self.filter == category: if appname in self.to_add or appname in self.to_rm: self.model.append((not is_installed, pixbuf, appname, desc, '<span foreground="#ffcc00"><b>%s</b>\n%s</span>' % (disname, desc), category)) else: self.model.append((is_installed, pixbuf, appname, desc, '<b>%s</b>\n%s' % (disname, desc), category)) def deep_update(self): update_apt_cache() self.update_model() def on_install_toggled(self, cell, path): iter = self.model.get_iter((int(path),)) is_installed = self.model.get_value(iter, COLUMN_INSTALLED) appname = self.model.get_value(iter, COLUMN_NAME) disname = PackageInfo(appname).get_name() desc = self.model.get_value(iter, COLUMN_DESC) display = self.model.get_value(iter, COLUMN_DISPLAY) is_installed = not is_installed if is_installed: if appname in self.to_rm: self.to_rm.remove(appname) self.model.set(iter, COLUMN_DISPLAY, '<b>%s</b>\n%s' % (disname, desc)) else: self.to_add.append(appname) self.model.set(iter, COLUMN_DISPLAY, '<span foreground="#ffcc00"><b>%s</b>\n%s</span>' % (disname, desc)) else: if appname in self.to_add: self.to_add.remove(appname) self.model.set(iter, COLUMN_DISPLAY, '<b>%s</b>\n%s' % (disname, desc)) else: self.to_rm.append(appname) self.model.set(iter, COLUMN_DISPLAY, '<span foreground="#ffcc00"><b>%s</b>\n%s</span>' % (disname, desc)) self.model.set(iter, COLUMN_INSTALLED, is_installed) self.colleague_changed() def create_treeview(self): self.model = gtk.ListStore( gobject.TYPE_BOOLEAN, gtk.gdk.Pixbuf, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING) treeview = gtk.TreeView() # column for is_installed toggles renderer = gtk.CellRendererToggle() renderer.connect('toggled', self.on_install_toggled) column = gtk.TreeViewColumn(' ', renderer, active = COLUMN_INSTALLED) column.set_sort_column_id(COLUMN_INSTALLED) treeview.append_column(column) # column for application column = gtk.TreeViewColumn('Applications') column.set_sort_column_id(COLUMN_NAME) column.set_spacing(5) renderer = gtk.CellRendererPixbuf() column.pack_start(renderer, False) column.set_attributes(renderer, pixbuf = COLUMN_ICON) renderer = gtk.CellRendererText() renderer.set_property('ellipsize', pango.ELLIPSIZE_END) column.pack_start(renderer, True) column.add_attribute(renderer, 'markup', COLUMN_DISPLAY) treeview.append_column(column) self.filter = None self.update_model() treeview.set_model(self.model) return treeview def on_apply_clicked(self, widget, data = None): self.packageWorker.perform_action(widget.get_toplevel(), self.to_add, self.to_rm) done = True update_apt_cache() for pkg in self.to_add: if not PackageInfo(pkg).check_installed(): done = False break for pkg in self.to_rm: if PackageInfo(pkg).check_installed(): done = False break if done: self.button.set_sensitive(False) InfoDialog(_('Update Successful!')).launch() else: InfoDialog(_('Update Failed!')).launch() self.to_add = [] self.to_rm = [] self.update_model() def colleague_changed(self): if self.to_add or self.to_rm: self.button.set_sensitive(True) else: self.button.set_sensitive(False)
class PackageView(gtk.TreeView): __gsignals__ = { 'checked': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_BOOLEAN,)), 'cleaned': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()) } def __init__(self): super(PackageView, self).__init__() model = self.__create_model() self.set_model(model) self.__check_list = [] self.__packageworker = PackageWorker() self.__add_column() self.mode = 'package' self.update_package_model() self.selection = self.get_selection() self.set_sensitive(False) def __create_model(self): model = gtk.ListStore( gobject.TYPE_BOOLEAN, gtk.gdk.Pixbuf, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING) return model def __add_column(self): renderer = gtk.CellRendererToggle() renderer.connect('toggled', self.on_package_toggled) column = gtk.TreeViewColumn(' ', renderer, active = COLUMN_CHECK) column.set_sort_column_id(COLUMN_CHECK) self.append_column(column) self.__column = gtk.TreeViewColumn(_('Package')) self.__column.set_sort_column_id(COLUMN_NAME) self.__column.set_spacing(5) renderer = gtk.CellRendererPixbuf() self.__column.pack_start(renderer, False) self.__column.set_attributes(renderer, pixbuf = COLUMN_ICON) renderer = gtk.CellRendererText() self.__column.pack_start(renderer, True) self.__column.set_attributes(renderer, markup = COLUMN_DISPLAY) self.append_column(self.__column) def get_list(self): return self.__check_list def update_package_model(self): model = self.get_model() model.clear() self.mode = 'package' icon = get_icon_with_name('deb', 24) list = self.__packageworker.list_autoremovable() self.total_num = len(list) self.__column.set_title(_('Packages')) for pkg in list: desc = self.__packageworker.get_pkgsummary(pkg) model.append(( False, icon, pkg, desc, '<b>%s</b>\n%s' % (pkg, desc) )) def update_kernel_model(self): model = self.get_model() model.clear() self.mode = 'kernel' icon = get_icon_with_name('deb', 24) list = self.__packageworker.list_unneeded_kerenl() self.total_num = len(list) self.__column.set_title(_('Packages')) for pkg in list: desc = self.__packageworker.get_pkgsummary(pkg) model.append(( False, icon, pkg, desc, '<b>%s</b>\n%s' % (pkg, desc) )) def update_cache_model(self): model = self.get_model() model.clear() self.mode = 'cache' cache_dir = '/var/cache/apt/archives' icon = get_icon_with_name('deb', 24) list = map(lambda file: '%s/%s' % (cache_dir, file), filter(lambda x:x.endswith('deb'), os.listdir(cache_dir))) self.total_num = len(list) self.__column.set_title(_('Package Cache')) for pkg in list: size = str(os.path.getsize(pkg)) model.append(( False, icon, pkg, size, _('<b>%s</b>\nTake %s of disk space') % (os.path.basename(pkg), filesizeformat(size)) )) def update_config_model(self): model = self.get_model() model.clear() self.mode = 'config' # command = "dpkg -l |awk '/^rc/ {print $2}'" icon = get_icon_with_name('text', 24) list = [] for line in os.popen('dpkg -l'): try: temp_list = line.split() status, pkg = temp_list[0], temp_list[1] if status == 'rc': des = temp_list[3:] pkg = AbsPkg(pkg, ' '.join(temp_list[3:])) list.append(pkg) except: pass self.total_num = len(list) self.__column.set_title(_('Package Config')) for pkg in list: model.append(( False, icon, pkg.name, 0, '<b>%s</b>\n%s' % (pkg.name, pkg.des), )) def on_package_toggled(self, cell, path): model = self.get_model() iter = model.get_iter(path) check = model.get_value(iter, COLUMN_CHECK) model.set(iter, COLUMN_CHECK, not check) if not check: self.__check_list.append(model.get_value(iter, COLUMN_NAME)) else: self.__check_list.remove(model.get_value(iter, COLUMN_NAME)) if len(self.__check_list) == self.total_num: self.emit('checked', True) else: self.emit('checked', False) self.set_column_title() def set_column_title(self): if self.mode == 'package' or self.mode == 'kernel': n = len(self.__check_list) self.__column.set_title( gettext.ngettext('%d package selected to remove' % n, '%d packages selected to remove' % n, n)) elif self.mode == 'cache': self.compute_cache_size() self.__column.set_title(_('%s of space will be freed') % filesizeformat(self.size)) def compute_cache_size(self): self.size = 0 model = self.get_model() model.foreach(self.__cache_foreach) def __cache_foreach(self, model, path, iter): cache = model.get_value(iter, COLUMN_NAME) if cache in self.__check_list: size = model.get_value(iter, COLUMN_DESC) self.size = self.size + int(size) def select_all(self, check = True): self.__check_list = [] model = self.get_model() model.foreach(self.__select_foreach, check) self.emit('checked', check) self.set_column_title() def __select_foreach(self, model, path, iter, check): model.set(iter, COLUMN_CHECK, check) if check: self.__check_list.append(model.get_value(iter, COLUMN_NAME)) def clean_selected_package(self): state = self.__packageworker.perform_action(self.get_toplevel(), [],self.__check_list) if state == 0: self.show_success_dialog() else: self.show_failed_dialog() update_apt_cache() if self.mode == 'package': self.update_package_model() else: self.update_kernel_model() self.__check_list = [] self.emit('cleaned') def clean_selected_cache(self): model = self.get_model() dialog = CleanCacheDailog(self.get_toplevel(), self.get_list()) if dialog.run() == gtk.RESPONSE_REJECT: dialog.destroy() dialog.user_action = True self.show_usercancel_dialog() if not dialog.user_action: if dialog.error == False: self.show_success_dialog() else: self.show_failed_dialog() self.update_cache_model() self.emit('cleaned') def clean_selected_config(self): model = self.get_model() dialog = CleanConfigDialog(self.get_toplevel(), self.get_list()) if dialog.run() == gtk.RESPONSE_REJECT: dialog.destroy() dialog.user_action = True self.show_usercancel_dialog() else: self.show_success_dialog() update_apt_cache() self.update_config_model() self.emit('cleaned') def show_usercancel_dialog(self): InfoDialog(_('Canceled by user!')).launch() def show_success_dialog(self): InfoDialog(_('Clean up Successful!')).launch() def show_failed_dialog(self): ErrorDialog(_('Clean up Failed!')).launch()
def __init__(self): TweakPage.__init__(self) button = WidgetFactory.create("GconfCheckButton", label = _('Show advanced permissions in the Nautilus "File Properties" window'), key = "show_advanced_permissions") box = ListPack(_("File Browser"), (button, )) self.pack_start(box, False, False, 0) boxes = [] hbox1 = gtk.HBox(False, 5) label = gtk.Label(_('Default thumbnail icon size (pixels)')) hbox1.pack_start(label, False, False, 0) boxes.append(hbox1) button = WidgetFactory.create('GconfSpinButton', key = 'thumbnail_size', min = 16, max = 512, step = 16) hbox1.pack_end(button, False, False, 0) button = WidgetFactory.create('GconfSpinButton', key = 'maximum_size', min = -1, max = 512, step = 1) if button: hbox2 = gtk.HBox(False, 5) label = gtk.Label(_('Maximum size of the thumbnail cache (megabytes)')) hbox2.pack_start(label, False, False, 0) hbox2.pack_end(button, False, False, 0) boxes.append(hbox2) button = WidgetFactory.create('GconfSpinButton', key = 'maximum_age', min = -1, max = 180, step = 1) if button: hbox3 = gtk.HBox(False, 5) label = gtk.Label(_('Maximum age for the thumbnail in the cache (days)')) hbox3.pack_start(label, False, False, 0) hbox3.pack_end(button, False, False, 0) boxes.append(hbox3) hbox4 = gtk.HBox(False, 5) button = gtk.Button(stock = gtk.STOCK_CLEAR) self.set_clean_button_label(button) button.connect('clicked', self.on_clean_thumbnails_clicked) hbox4.pack_end(button, False, False, 0) boxes.append(hbox4) box = ListPack(_('Thumbnails Settings'), boxes) self.pack_start(box, False, False, 0) if not DISABLE: update_apt_cache(True) self.packageWorker = PackageWorker() self.nautilus_terminal = AptCheckButton(_('Nautilus with Open Terminal'), 'nautilus-open-terminal') self.nautilus_terminal.connect('toggled', self.colleague_changed) self.nautilus_root = AptCheckButton(_('Nautilus with Root Privileges'), 'nautilus-gksu') self.nautilus_root.connect('toggled', self.colleague_changed) self.nautilus_wallpaper = AptCheckButton(_('Nautilus with Wallpaper'), 'nautilus-wallpaper') self.nautilus_wallpaper.connect('toggled', self.colleague_changed) box = ListPack(_("Nautilus Extensions"), ( self.nautilus_terminal, self.nautilus_root, self.nautilus_wallpaper, )) self.button = gtk.Button(stock = gtk.STOCK_APPLY) self.button.connect("clicked", self.on_apply_clicked, box) self.button.set_sensitive(False) hbox = gtk.HBox(False, 0) hbox.pack_end(self.button, False, False, 0) box.vbox.pack_start(hbox, False, False, 0) self.pack_start(box, False, False, 0)
class Nautilus(TweakPage): """Nautilus Settings""" def __init__(self): TweakPage.__init__(self) button = WidgetFactory.create("GconfCheckButton", label = _('Show advanced permissions in the Nautilus "File Properties" window'), key = "show_advanced_permissions") box = ListPack(_("File Browser"), (button, )) self.pack_start(box, False, False, 0) boxes = [] hbox1 = gtk.HBox(False, 5) label = gtk.Label(_('Default thumbnail icon size (pixels)')) hbox1.pack_start(label, False, False, 0) boxes.append(hbox1) button = WidgetFactory.create('GconfSpinButton', key = 'thumbnail_size', min = 16, max = 512, step = 16) hbox1.pack_end(button, False, False, 0) button = WidgetFactory.create('GconfSpinButton', key = 'maximum_size', min = -1, max = 512, step = 1) if button: hbox2 = gtk.HBox(False, 5) label = gtk.Label(_('Maximum size of the thumbnail cache (megabytes)')) hbox2.pack_start(label, False, False, 0) hbox2.pack_end(button, False, False, 0) boxes.append(hbox2) button = WidgetFactory.create('GconfSpinButton', key = 'maximum_age', min = -1, max = 180, step = 1) if button: hbox3 = gtk.HBox(False, 5) label = gtk.Label(_('Maximum age for the thumbnail in the cache (days)')) hbox3.pack_start(label, False, False, 0) hbox3.pack_end(button, False, False, 0) boxes.append(hbox3) hbox4 = gtk.HBox(False, 5) button = gtk.Button(stock = gtk.STOCK_CLEAR) self.set_clean_button_label(button) button.connect('clicked', self.on_clean_thumbnails_clicked) hbox4.pack_end(button, False, False, 0) boxes.append(hbox4) box = ListPack(_('Thumbnails Settings'), boxes) self.pack_start(box, False, False, 0) if not DISABLE: update_apt_cache(True) self.packageWorker = PackageWorker() self.nautilus_terminal = AptCheckButton(_('Nautilus with Open Terminal'), 'nautilus-open-terminal') self.nautilus_terminal.connect('toggled', self.colleague_changed) self.nautilus_root = AptCheckButton(_('Nautilus with Root Privileges'), 'nautilus-gksu') self.nautilus_root.connect('toggled', self.colleague_changed) self.nautilus_wallpaper = AptCheckButton(_('Nautilus with Wallpaper'), 'nautilus-wallpaper') self.nautilus_wallpaper.connect('toggled', self.colleague_changed) box = ListPack(_("Nautilus Extensions"), ( self.nautilus_terminal, self.nautilus_root, self.nautilus_wallpaper, )) self.button = gtk.Button(stock = gtk.STOCK_APPLY) self.button.connect("clicked", self.on_apply_clicked, box) self.button.set_sensitive(False) hbox = gtk.HBox(False, 0) hbox.pack_end(self.button, False, False, 0) box.vbox.pack_start(hbox, False, False, 0) self.pack_start(box, False, False, 0) def set_clean_button_label(self, button): try: size = os.popen('du -bs ~/.thumbnails').read().split()[0] except: size = '0' button.set_sensitive(False) set_label_for_stock_button(button, _('Clean up the thumbnails cache (will free %s of disk space)') % filesizeformat(size)) def on_clean_thumbnails_clicked(self, widget): question = QuestionDialog(_('The thumbnails cache will be cleaned, Do you wish to continue?'), title = _('Warning')) if question.run() == gtk.RESPONSE_YES: question.destroy() dialog = CleanDialog(widget.get_toplevel()) dialog.run() InfoDialog(_('Clean up Successful!')).launch() self.set_clean_button_label(widget) else: question.destroy() def on_apply_clicked(self, widget, box): to_add = [] to_rm = [] for widget in box.items: if widget.get_active(): to_add.append(widget.pkgname) else: to_rm.append(widget.pkgname) state = self.packageWorker.perform_action(widget.get_toplevel(), to_add, to_rm) if state == 0: self.button.set_sensitive(False) InfoDialog(_("Update successful!")).launch() else: InfoDialog(_("Update failed!")).launch() update_apt_cache() def colleague_changed(self, widget): if self.nautilus_terminal.get_state() != self.nautilus_terminal.get_active() or\ self.nautilus_root.get_state() != self.nautilus_root.get_active() or\ self.nautilus_wallpaper.get_state() != self.nautilus_wallpaper.get_active(): self.button.set_sensitive(True) else: self.button.set_sensitive(False)
def create_interface(self): if module_check.has_apt(): update_apt_cache(True) self.packageWorker = PackageWorker() self.advanced_settings = AptCheckButton(_("Install Advanced Desktop Effects Settings Manager"), 'compizconfig-settings-manager') self.advanced_settings.connect('toggled', self.colleague_changed) self.simple_settings = AptCheckButton(_("Install Simple Desktop Effects Settings manager"), 'simple-ccsm') self.simple_settings.connect('toggled', self.colleague_changed) self.screenlets = AptCheckButton(_("Install Screenlets Widget Application"), 'screenlets') self.screenlets.connect('toggled', self.colleague_changed) if module_check.has_ccm() and module_check.has_right_compiz(): hbox = gtk.HBox(False, 0) hbox.pack_start(self.create_edge_setting(), True, False, 0) edge_setting = SinglePack('Edge Settings', hbox) self.pack_start(edge_setting, False, False, 0) self.snap = SnapWindow(_("Enable snapping windows"), self) self.wobbly_w = WobblyWindow(_("Enable wobbly windows"), self); box = ListPack(_("Window Effects"), (self.snap, self.wobbly_w)) self.pack_start(box, False, False, 0) button1 = OpacityMenu(_("Enable transparent menus")) self.wobbly_m = WobblyMenu(_("Enable wobbly menus"), self) box = ListPack(_("Menu Effects"), (button1, self.wobbly_m)) self.pack_start(box, False, False, 0) if module_check.has_apt(): update_apt_cache(True) box = ListPack(_("Useful Extensions"), ( self.simple_settings, self.screenlets, )) self.button = gtk.Button(stock = gtk.STOCK_APPLY) self.button.connect("clicked", self.on_apply_clicked, box) self.button.set_sensitive(False) hbox = gtk.HBox(False, 0) hbox.pack_end(self.button, False, False, 0) box.vbox.pack_start(hbox, False, False, 0) self.pack_start(box, False, False, 0) else: box = ListPack(_("Prerequisite Conditions"), ( self.advanced_settings, )) self.button = gtk.Button(stock = gtk.STOCK_APPLY) self.button.connect("clicked", self.on_apply_clicked, box) self.button.set_sensitive(False) hbox = gtk.HBox(False, 0) hbox.pack_end(self.button, False, False, 0) box.vbox.pack_start(hbox, False, False, 0) self.pack_start(box, False, False, 0)
class Compiz(TweakPage, CompizSetting): """Compiz Fusion tweak""" def __init__(self): TweakPage.__init__(self) self.create_interface() def create_interface(self): if module_check.has_apt(): update_apt_cache(True) self.packageWorker = PackageWorker() self.advanced_settings = AptCheckButton(_("Install Advanced Desktop Effects Settings Manager"), 'compizconfig-settings-manager') self.advanced_settings.connect('toggled', self.colleague_changed) self.simple_settings = AptCheckButton(_("Install Simple Desktop Effects Settings manager"), 'simple-ccsm') self.simple_settings.connect('toggled', self.colleague_changed) self.screenlets = AptCheckButton(_("Install Screenlets Widget Application"), 'screenlets') self.screenlets.connect('toggled', self.colleague_changed) if module_check.has_ccm() and module_check.has_right_compiz(): hbox = gtk.HBox(False, 0) hbox.pack_start(self.create_edge_setting(), True, False, 0) edge_setting = SinglePack('Edge Settings', hbox) self.pack_start(edge_setting, False, False, 0) self.snap = SnapWindow(_("Enable snapping windows"), self) self.wobbly_w = WobblyWindow(_("Enable wobbly windows"), self); box = ListPack(_("Window Effects"), (self.snap, self.wobbly_w)) self.pack_start(box, False, False, 0) button1 = OpacityMenu(_("Enable transparent menus")) self.wobbly_m = WobblyMenu(_("Enable wobbly menus"), self) box = ListPack(_("Menu Effects"), (button1, self.wobbly_m)) self.pack_start(box, False, False, 0) if module_check.has_apt(): update_apt_cache(True) box = ListPack(_("Useful Extensions"), ( self.simple_settings, self.screenlets, )) self.button = gtk.Button(stock = gtk.STOCK_APPLY) self.button.connect("clicked", self.on_apply_clicked, box) self.button.set_sensitive(False) hbox = gtk.HBox(False, 0) hbox.pack_end(self.button, False, False, 0) box.vbox.pack_start(hbox, False, False, 0) self.pack_start(box, False, False, 0) else: box = ListPack(_("Prerequisite Conditions"), ( self.advanced_settings, )) self.button = gtk.Button(stock = gtk.STOCK_APPLY) self.button.connect("clicked", self.on_apply_clicked, box) self.button.set_sensitive(False) hbox = gtk.HBox(False, 0) hbox.pack_end(self.button, False, False, 0) box.vbox.pack_start(hbox, False, False, 0) self.pack_start(box, False, False, 0) def combo_box_changed_cb(self, widget, edge): """If the previous setting is none, then select the add edge""" if widget.previous: self.change_edge(widget, edge) else: self.add_edge(widget, edge) def change_edge(self, widget, edge): previous = widget.previous plugin = self.context.Plugins[previous] setting = plugin.Display[plugins_settings[previous]] setting.Value = "" self.context.Write() self.add_edge(widget, edge) def add_edge(self, widget, edge): i = widget.get_active() if i == 4: widget.previous = None else: plugin = self.context.Plugins[plugins[i]] setting = plugin.Display[plugins_settings[plugins[i]]] setting.Value = edge self.context.Write() widget.previous = plugins[i] def create_edge_combo_box(self, edge): combobox = gtk.combo_box_new_text() combobox.append_text(_("Expo")) combobox.append_text(_("Show Windows")) combobox.append_text(_("Show Desktop")) combobox.append_text(_("Widget")) combobox.append_text("-") combobox.set_active(4) combobox.previous = None for k, v in plugins_settings.items(): plugin = self.context.Plugins[k] #TODO The plugin should be turned off when it is unused. if not plugin.Enabled: plugin.Enabled = True self.context.Write() setting = plugin.Display[v] if setting.Value == edge: combobox.previous = k combobox.set_active(plugins.index(k)) combobox.connect("changed", self.combo_box_changed_cb, edge) return combobox def create_edge_setting(self): hbox = gtk.HBox(False, 0) vbox = gtk.VBox(False, 0) hbox.pack_start(vbox, False, False, 0) combobox = self.create_edge_combo_box("TopLeft") vbox.pack_start(combobox, False, False, 0) combobox = self.create_edge_combo_box("BottomLeft") vbox.pack_end(combobox, False, False, 0) client = gconf.client_get_default() wallpaper = client.get_string("/desktop/gnome/background/picture_filename") system_wallpaper = os.path.join(DATA_DIR, "pixmaps/ubuntu-tweak.png") if wallpaper: try: pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(wallpaper, 160, 100) except gobject.GError: pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(system_wallpaper, 160, 100) else: pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(system_wallpaper, 160, 100) image = gtk.image_new_from_pixbuf(pixbuf) hbox.pack_start(image, False, False, 0) vbox = gtk.VBox(False, 0) hbox.pack_start(vbox, False, False, 0) combobox = self.create_edge_combo_box("TopRight") vbox.pack_start(combobox, False, False, 0) combobox = self.create_edge_combo_box("BottomRight") vbox.pack_end(combobox, False, False, 0) return hbox def on_apply_clicked(self, widget, box): to_add = [] to_rm = [] for widget in box.items: if widget.get_active(): to_add.append(widget.pkgname) else: to_rm.append(widget.pkgname) self.packageWorker.perform_action(widget.get_toplevel(), to_add, to_rm) self.button.set_sensitive(False) InfoDialog(_("Update successful!")).launch() update_apt_cache() CompizSetting.update_context() self.remove_all_children() self.create_interface() self.show_all() def colleague_changed(self, widget): if self.advanced_settings.get_state() != self.advanced_settings.get_active() or\ self.simple_settings.get_state() != self.simple_settings.get_active() or\ self.screenlets.get_state() != self.screenlets.get_active(): self.button.set_sensitive(True) else: self.button.set_sensitive(False)