def build_use_flag_widget(self, use_flags, ebuild): """ Create a table layout and populate it with checkbox widgets representing the available use flags """ debug.dprint("ADVEMERGE: build_use_flag_widget()") UseFlagFrame = self.wtree.get_object("frameUseFlags") #button_make_conf = self.wtree.get_object("button_make_conf") #button_package_use = self.wtree.get_object("button_package_use") # If frame has any children, remove them child = UseFlagFrame.get_child() if child != None: UseFlagFrame.remove(child) # If no use flags, hide the frame if not use_flags: UseFlagFrame.hide() self.btnMakeConf.hide() self.btnPkgUse.hide() else: UseFlagFrame.show() if self.is_root or utils.can_gksu(): self.btnPkgUse.show() if config.Prefs.advemerge.show_make_conf_button: self.btnMakeConf.show() else: self.btnMakeConf.hide() # Build table to hold checkboxes uflag_widget = UseFlagWidget(use_flags, ebuild, self.window) uflag_widget.connect('grab-focus', self.on_toggled) UseFlagFrame.add(uflag_widget) uflag_widget.show()
def notebook_changed(self, widget, pointer, index): """Catch when the user changes the notebook""" package = self.package debug.dprint("PackageNotebook notebook_changed(); self.summary.ebuild " +self.summary.ebuild + " self.loaded_version['deps'] : " + str(self.loaded_version["deps"])) if index == 1: if self.loaded_version["deps"] != self.summary.ebuild or not self.loaded["deps"]: debug.dprint("PackageNotebook notebook_changed(); fill the deps view!") self.deps_view.fill_depends_tree(self.deps_view, package, self.summary.ebuild) self.loaded["deps"] = True self.loaded_version["deps"] = self.summary.ebuild elif index == 2: if not self.loaded["changelog"]: # fill in the change log #load_textfile(self.changelog, package, "changelog") self.changelog.update(self.summary.ebuild, True) self.loaded["changelog"] = True elif index == 3: debug.dprint("PackageNotebook notebook_changed(); load installed files for: " + str(self.summary.ebuild)) if not self.loaded["installed"] or self.loaded_version["installed"] != self.summary.ebuild: # load list of installed files load_installed_files(self.installed_window, self.installed_files, package, self.summary.ebuild ) self.loaded["installed"] = True self.loaded_version["installed"] = self.summary.ebuild elif index == 4: debug.dprint("PackageNotebook notebook_changed(); self.summary.ebuild = " + str(self.summary.ebuild)) if not self.loaded["ebuild"] or self.loaded_version["ebuild"] != self.summary.ebuild: #load_textfile(self.ebuild, package, "best_ebuild") #load_textfile(self.ebuild, package, "version_ebuild", self.summary.ebuild) self.ebuild.update(self.summary.ebuild, True) self.loaded["ebuild"] = True self.loaded_version["ebuild"] = self.summary.ebuild elif index == 5: debug.dprint("PackageNotebook notebook_changed(); self.summary.ebuild = " + str(self.summary.ebuild)) child = self.use_flag_page.child if not child is None: debug.dprint("PackageNotebook: removing use_view_widget") self.use_flag_page.remove(child) frame = gtk.VBox() ebuild = self.summary.ebuild props = self.summary.package.get_properties(ebuild) use_flags = props.get_use_flags() self.use_flag_view = UseFlagWidget(use_flags, ebuild) self.use_flag_view.show() frame.pack_start(self.use_flag_view) if utils.is_root() or utils.can_gksu(): button = gtk.Button("Save USE Flags") button.connect('clicked', self.save_use_flags_clicked) button.set_size_request(100,50) button.show() frame.pack_end(button,expand=False,fill=False); frame.show() self.use_flag_page.add_with_viewport(frame) self.use_flag_page.show() else: for i in self.plugin_package_tabs: #Search through the plugins dictionary and select the correct one. if self.plugin_package_tabs[i][2] == index: self.plugin_package_tabs[i][0]( package )
def _clicked(self, treeview, *args): """ Handles treeview clicks """ debug.dprint("VIEWS: Package view _clicked() signal caught") # get the selection package = utils.get_treeview_selection(treeview, MODEL_ITEM["package"]) #debug.dprint("VIEWS: package = %s" % package.full_name) if (not package and not self.toggle) or package.full_name == _("None"): self.mainwindow_callback("package changed", { 'package': None, 'caller': 'VIEWS: Package view _clicked()' }) return False if self.toggle != None: # for upgrade view iter = self.get_model().get_iter(self.toggle) check = self.view_model[MODEL_NAMES[self.current_view]].get_value( iter, MODEL_ITEM["checkbox"]) check = not check self.view_model[MODEL_NAMES[self.current_view]].set_value( iter, MODEL_ITEM["checkbox"], check) package.is_checked = check #~ if self.view_model[MODEL_NAMES[self.current_view]].get_value(iter, MODEL_ITEM["package"]) == None: #~ #debug.dprint("VIEWS: _clicked(): Toggling all upgradable deps") #~ # package == None for "Upgradable Dependencies" row #~ # so select or deselect all deps #~ iter = self.view_model[MODEL_NAMES[self.current_view]].iter_children(iter) #~ while iter: #~ self.view_model[MODEL_NAMES[self.current_view]].set_value(iter, MODEL_ITEM["checkbox"], check) #~ iter = self.view_model[MODEL_NAMES[self.current_view]].iter_next(iter) self.dopopup = False # don't popup menu if clicked on checkbox self.toggle = None return True # we've got it sorted else: self.mainwindow_callback("package changed", { 'package': package, 'caller': 'VIEWS: Package view _clicked()' }) self._last_selected = package.full_name #pop up menu if was rmb-click if self.dopopup: if utils.is_root(): if package.get_best_ebuild() != package.get_latest_ebuild( ): # i.e. no ~arch keyword self.popup_menuitems["add-keyword"].show() else: self.popup_menuitems["add-keyword"].hide() installed = package.get_installed() havebest = False if installed: self.popup_menuitems["unmerge"].show() if package.get_best_ebuild() in installed: havebest = True else: self.popup_menuitems["unmerge"].hide() if havebest: self.popup_menuitems["emerge"].hide() self.popup_menuitems["pretend-emerge"].hide() else: self.popup_menuitems["emerge"].show() self.popup_menuitems["pretend-emerge"].show() self.popup_menuitems["sudo-emerge"].hide() self.popup_menuitems["sudo-unmerge"].hide() else: self.popup_menuitems["emerge"].hide() self.popup_menuitems["unmerge"].hide() if utils.can_gksu() and \ (package.get_best_ebuild() != package.get_latest_ebuild()): self.popup_menuitems["add-keyword"].show() else: self.popup_menuitems["add-keyword"].hide() installed = package.get_installed() havebest = False if installed and utils.can_sudo(): self.popup_menuitems["sudo-unmerge"].show() if package.get_best_ebuild() in installed: havebest = True else: self.popup_menuitems["sudo-unmerge"].hide() if havebest: self.popup_menuitems["sudo-emerge"].hide() self.popup_menuitems["pretend-emerge"].hide() else: if utils.can_sudo(): self.popup_menuitems["sudo-emerge"].show() else: self.popup_menuitems["sudo-emerge"].hide() self.popup_menuitems["pretend-emerge"].show() self.popup_menu.popup(None, None, None, None, self.event.button, self.event.time) self.dopopup = False self.event = None return True
def do_table_popup(self, eventbox, event): self.selected_ebuild = eventbox.ebuild self.selected_arch = eventbox.arch # inteligently show/hide keywords submenu archs self.do_keyword_menuitems(eventbox.ebuild) # moved these from is_root bit as we can sudo them now if utils.is_root() or utils.can_gksu(): if '~' in eventbox.text: self.popup_menuitems["add-keyword"].show() self.popup_menuitems["add-ebuild-keyword"].show() else: self.popup_menuitems["add-keyword"].hide() self.popup_menuitems["add-ebuild-keyword"].hide() if '(+)' in eventbox.text: self.popup_menuitems["remove-keyword"].show() # get the config entry and convert it to string for easier searching config_entry = str( db.userconfigs.get_atom('KEYWORDS', None, eventbox.ebuild)) debug.dprint("SUMMARY: do_table_popup(); ebuild = %s, in config_entry = %s : %s" \ %(eventbox.ebuild, config_entry, str(eventbox.ebuild in config_entry))) if eventbox.ebuild in config_entry: self.popup_menuitems["remove-keyword-ebuild"].show() else: self.popup_menuitems["remove-keyword-ebuild"].hide() else: self.popup_menuitems["remove-keyword"].hide() self.popup_menuitems["remove-keyword-ebuild"].hide() if 'M' in eventbox.text: self.popup_menuitems["package-unmask"].show() else: self.popup_menuitems["package-unmask"].hide() if '[' in eventbox.text: self.popup_menuitems["un-package-unmask"].show() self.popup_menuitems["package-mask"].hide() else: self.popup_menuitems["un-package-unmask"].hide() self.popup_menuitems["package-mask"].show() else: self.popup_menuitems["add-keyword"].hide() self.popup_menuitems["add-ebuild-keyword"].hide() self.popup_menuitems["remove-keyword"].hide() self.popup_menuitems["remove-keyword-ebuild"].hide() self.popup_menuitems["package-unmask"].hide() self.popup_menuitems["un-package-unmask"].hide() if utils.is_root(): #if '~' in eventbox.text: # self.popup_menuitems["add-keyword"].show() #else: self.popup_menuitems["add-keyword"].hide() #if '(+)' in eventbox.text: # self.popup_menuitems["remove-keyword"].show() #else: self.popup_menuitems["remove-keyword"].hide() #if 'M' in eventbox.text: # self.popup_menuitems["package-unmask"].show() #else: self.popup_menuitems["package-unmask"].hide() #if '[' in eventbox.text: # self.popup_menuitems["un-package-unmask"].show() #else: self.popup_menuitems["un-package-unmask"].hide() if eventbox.ebuild in self.installed: self.popup_menuitems["unmerge"].show() self.popup_menuitems["emerge"].hide() self.popup_menuitems["pretend-emerge"].hide() else: self.popup_menuitems["unmerge"].hide() self.popup_menuitems["emerge"].show() self.popup_menuitems["pretend-emerge"].show() self.popup_menuitems["sudo-emerge"].hide() self.popup_menuitems["sudo-unmerge"].hide() else: self.popup_menuitems["emerge"].hide() self.popup_menuitems["unmerge"].hide() #self.popup_menuitems["add-keyword"].hide() #self.popup_menuitems["remove-keyword"].hide() #self.popup_menuitems["package-unmask"].hide() #self.popup_menuitems["un-package-unmask"].hide() if eventbox.ebuild in self.installed: if utils.can_sudo(): self.popup_menuitems["sudo-unmerge"].show() else: self.popup_menuitems["sudo-unmerge"].hide() self.popup_menuitems["sudo-emerge"].hide() self.popup_menuitems["pretend-emerge"].hide() else: self.popup_menuitems["sudo-unmerge"].hide() if utils.can_sudo(): self.popup_menuitems["sudo-emerge"].show() else: self.popup_menuitems["sudo-emerge"].hide() self.popup_menuitems["pretend-emerge"].show() self.popup_menu.popup(None, None, None, event.button, event.time) # de-select the table cell. Would be nice to leave it selected, # but it doesn't get de-selected when the menu is closed. eventbox.emit("leave-notify-event", gtk.gdk.Event(gtk.gdk.LEAVE_NOTIFY)) return True
def _clicked(self, treeview, *args): """ Handle treeview clicks """ name, package = self.get_selected() # has the selection really changed? if name != self._last_selected: debug.dprint("DependsView: dependency change detected") # then call the callback if it exists! if self._depend_changed: self._last_selected = name self._depend_changed(package) # save current selection as last selected self._last_selected = name #pop up menu if was rmb-click and have a valid package if self.dopopup and package: if utils.is_root(): if package.get_best_ebuild() != package.get_latest_ebuild( ): # i.e. no ~arch keyword self.popup_menuitems["add-keyword"].show() else: self.popup_menuitems["add-keyword"].hide() installed = package.get_installed() havebest = False if installed: #self.popup_menuitems["unmerge"].show() if package.get_best_ebuild() in installed: havebest = True else: pass #self.popup_menuitems["unmerge"].hide() if havebest: self.popup_menuitems["emerge --oneshot"].hide() self.popup_menuitems["pretend-emerge"].hide() else: self.popup_menuitems["emerge --oneshot"].show() self.popup_menuitems["pretend-emerge"].show() self.popup_menuitems["sudo-emerge --oneshot"].hide() #self.popup_menuitems["sudo-unmerge"].hide() else: self.popup_menuitems["emerge --oneshot"].hide() #self.popup_menuitems["unmerge"].hide() if utils.can_gksu() and \ (package.get_best_ebuild() != package.get_latest_ebuild()): self.popup_menuitems["add-keyword"].show() else: self.popup_menuitems["add-keyword"].hide() installed = package.get_installed() havebest = False if installed and utils.can_sudo(): #self.popup_menuitems["sudo-unmerge"].show() if package.get_best_ebuild() in installed: havebest = True else: pass #self.popup_menuitems["sudo-unmerge"].hide() if havebest: self.popup_menuitems["sudo-emerge --oneshot"].hide() self.popup_menuitems["pretend-emerge"].hide() else: if utils.can_sudo(): self.popup_menuitems["sudo-emerge --oneshot"].show() else: self.popup_menuitems["sudo-emerge --oneshot"].hide() self.popup_menuitems["pretend-emerge"].show() self.popup_menu.popup(None, None, None, self.event.button, self.event.time) self.dopopup = False self.event = None return True
def __init__(self, New_prefs=None): # establish path & name of user prefs file home = get_user_home_dir() self.__PFILE = home + "/.porthole/prefs.xml" # check if directory exists, if not create it if not os.access(home + "/.porthole", os.F_OK): debug.dprint( "PREFERENCES: ~/.porthole does not exist, creating...") os.mkdir(home + "/.porthole") # open prefs file if we have access to the file # or simply create an empty XML doc if os.access(self.__PFILE, os.F_OK): debug.dprint("PREFERENCES: loading preferences from file: %s..." % self.__PFILE) dom = XMLManager(self.__PFILE) else: dom = XMLManager(None) dom.name = 'portholeprefs' dom.version = version # Load user preferences from XML file. If the node doesn't exist, # set pref to default value. The beauty of this is: older versions # of the prefs files are still compatible and even if the user has # no prefs file, it still works! preflist = {} preflist['main'] = [ \ ['width', 200], ['height', 350], ['xpos', False], ['ypos', False], ['hpane', 180], ['vpane', 125], ['maximized', False], ['search_desc', False], ['show_nag_dialog', True] ] preflist['process'] = [ \ ['width', 300], ['height', 350], ['width_verbose', 500] ] preflist['terminal'] = [ \ ['width', 300], ['height', 350], ['width_verbose', 500], ['all_tabs_use_custom_colors', False], ['font', None] ] history = [ "", "emerge ", "ACCEPT_KEYWORDS='~x86' emerge ", "USE=' ' emerge ", "ACCEPT_KEYWORDS='~x86' USE=' ' emerge ", "emerge --help" ] # default_history = length of the history items to always remain # at the start of the popdown history list & set above when history is set # history_length = Default value for maximum nuber of retained history items preflist['run_dialog'] = [ \ ['width', 400], ['height', 120], ['history', history], ['default_history', len(history)], ['history_length', 10] ] for window_name in list(preflist.keys()): setattr(self, window_name, OptionsClass()) # construct self.main etc. for pref_name, default_value in preflist[window_name]: try: value = dom.getitem('/'.join( ['/window', window_name, pref_name])) # (e.g. '/window/main/width') except XMLManagerError: value = default_value setattr(getattr(self, window_name), pref_name, value) # set self.main.width etc # Formatting tags for the terminal window tabs. # Note: normal font weight = 400 (Pango.Weight.NORMAL), # bold = 700 (Pango.Weight.BOLD) # Note: all colors are in hex for future color editor; # '' means use default color. self.TAG_DICT = {} taglist = [ \ ['default','','',400], ['caution','','#c040b0',400], # [name, default forecolor, backcolor, fontweight] ['command','#ffffff','#000080',700], ['emerge','','#90ee90',700], ['error','#faf0e6','#ff0000',700], ['info','','#b0ffff',400], ['linenumber','#0000ff','',700], ['note','#8b008b','',400], ['warning','','#eeee80',400], # the following tags are for emerge's output formatting ['bold','','',700], ['light','','',300], ['fg_black','black','',None], ['fg_red','darkred','',None], ['fg_green','darkgreen','',None], ['fg_yellow','brown','',None], ['fg_blue','darkblue','',None], ['fg_magenta','magenta','',None], ['fg_cyan','blue','',None], ['fg_white','yellow','',None], ['bg_black','','black',None], ['bg_red','','darkred',None], ['bg_green','','darkgreen',None], ['bg_yellow','','brown',None], ['bg_blue','','darkblue',None], ['bg_magenta','','magenta',None], ['bg_cyan','','blue',None], ['bg_white','','white',None], ] for tag_name, forecolor, backcolor, fontweight in taglist: try: fc = dom.getitem(''.join( ['/window/terminal/tag/', tag_name, '/forecolor'])) except XMLManagerError: fc = forecolor try: bc = dom.getitem(''.join( ['/window/terminal/tag/', tag_name, '/backcolor'])) except XMLManagerError: bc = backcolor try: fw = dom.getitem(''.join( ['/window/terminal/tag/', tag_name, '/fontweight'])) except XMLManagerError: fw = fontweight self.TAG_DICT[tag_name] = [fc, bc, fw] emergeoptions = [ 'pretend', 'fetch', 'verbose', 'update', 'nospinner', 'noreplace', 'oneshot' ] # 'search_descriptions'] self.emerge = EmergeOptions() for option in emergeoptions: try: setattr(self.emerge, option, dom.getitem(''.join(['/emerge/options/', option]))) except XMLManagerError: pass # defaults set in EmergeOptions class advemergeoptions = [ ['showuseflags', True], ['showkeywords', True], ['show_make_conf_button', False], ] self.advemerge = OptionsClass() for option, default in advemergeoptions: try: value = dom.getitem(''.join(['/advemerge/', option])) except XMLManagerError: value = default setattr(self.advemerge, option, value) viewoptions = [ \ ['downgradable_fg', '#FA0000'], ['upgradable_fg', '#0000FF'], ['normal_fg','#000000'], ['normal_bg','#FFFFFF'] ] self.views = OptionsClass() for option, default in viewoptions: try: value = dom.getitem(''.join(['/views/', option])) except XMLManagerError: value = default setattr(self.views, option, value) summaryoptions = [ \ ['showtable', True], ['showkeywords', True], ['showinstalled', True], ['showavailable', True], ['showlongdesc', True], ['showuseflags', True], ['showlicense', True], ['showurl', True], ['ebuilds_top', True], ] self.summary = OptionsClass() for option, default in summaryoptions: try: value = dom.getitem(''.join(['/summary/', option])) except XMLManagerError: value = default setattr(self.summary, option, value) # Misc. variables # probably depricated variables, was used for progressbar calc try: self.database_size = dom.getitem('/database/size') except XMLManagerError: self.database_size = 7000 #~ try: #~ self.dbtime = dom.getitem('/database/dbtime') #~ #debug.dprint("PREFS: __init__(); self.dbtime =") #~ #debug.dprint(self.dbtime) #~ except XMLManagerError: #~ self.dbtime = 50 #~ try: #~ self.dbtotals = dom.getitem('/database/dbtotals') #~ except XMLManagerError: #~ self.dbtotals = [] self.plugins = OptionsClass() globaloptions = [ \ ['LANG', 'en'], ['enable_archlist', False], ##['enable_all_keywords', False], ["archlist", ["alpha", "amd64", "arm", "hppa", "ia64", "mips", "ppc", "ppc64", "s390", "sparc", "x86"]], ["Sync", "emerge --sync"], ["Sync_label", _("Sync")], # use the form " [sync-command, sync-label], # note: this is now hard-coded below #["Sync_methods", [['emerge sync', _('Sync')], # ['emerge-webrsync', _('WebRsync')], # ['#user defined', _('Unknown Sync')]]], ['custom_browser_command', 'firefox %s'], ['use_custom_browser', False], ['su', 'gksudo -g'] # -g tells gksu not to steal mouse / keyboard focus. Panics sometimes otherwise. ] self.globals = OptionsClass() for option, default in globaloptions: try: value = dom.getitem(''.join(['/globals/', option])) if type(value) in (bytes, str): # remove xml indent padding value = value.strip() if value == "emerge sync": # upgrade from depricated action 'sync' value = default except XMLManagerError: value = default debug.dprint("PREFERENCES: DEFAULT VALUE: %s = %s" % (option, str(value))) setattr(self.globals, option, value) debug.dprint( "PREFERENCES: PortholePreferences; setting globals.%s = %s" % (option, str(value))) # create a keyworded archlist self.globals.keyworded_archlist = [] for arch in self.globals.archlist: self.globals.keyworded_archlist.append('~' + arch) if can_gksu(self.globals.su.split(' ')[0]) == False: # If the current su option is not valid, try some others. if can_gksu('gksudo'): self.globals.su = 'gksudo -g' elif can_gksu('gksu'): self.globals.su = 'gksu -g' elif can_gksu('gnomesu'): self.globals.su = 'gnomesu' elif can_gksu('kdesu'): self.globals.su = 'kdesu' self.globals.Sync_methods = [['emerge --sync', _('Sync')], ['emerge-webrsync', _('WebRsync')]] # fix sync_label if translation changed for method in self.globals.Sync_methods: if method[0] == self.globals.Sync: self.globals.Sync_label = method[1] if New_prefs: for option, value in New_prefs: setattr(self, option, value) debug.dprint("PREFERENCES: PortholePreferences; DATA_PATH = " + self.DATA_PATH) if self.DATA_PATH == '/usr/share/porthole/': # installed version running # find our installed location import sys self.PACKAGE_DIR = sys.path[0] debug.dprint("PREFERENCES: PortholePreferences; PACKAGE_DIR = " + self.PACKAGE_DIR) # set the correct path to the AUTHORS file self.AUTHORS = self.DATA_PATH + "AUTHORS" self.TRANSLATORS = self.DATA_PATH + "TRANSLATORS" else: self.PACKAGE_DIR = self.DATA_PATH # running a checkout, set it up one directory. go 2 since the data_path ends in a '/' self.AUTHORS = '/'.join((self.DATA_PATH.split('/'))[:-2] + ["AUTHORS"]) self.TRANSLATORS = '/'.join((self.DATA_PATH.split('/'))[:-2] + ["TRANSLATORS"]) debug.dprint("PREFERENCES: PortholePreferences; AUTHORS = " + self.AUTHORS) self.PLUGIN_DIR = self.PACKAGE_DIR + '/plugins/' # could add more dirs later debug.dprint("PREFERENCES: PortholePreferences; PLUGIN_DIR = " + self.PLUGIN_DIR) self.plugins = OptionsClass() try: option = "active_list" value = dom.getitem(''.join(['/plugins/', option])) except XMLManagerError: value = [] setattr(self.plugins, option, value) debug.dprint( "PREFERENCES: PortholePreferences; setting plugins.%s = %s" % (option, str(value))) # All prefs now loaded or defaulted del dom # no longer needed, release memory
def _clicked(self, treeview, *args): """ Handles treeview clicks """ debug.dprint("VIEWS: Package view _clicked() signal caught") # get the selection package = utils.get_treeview_selection(treeview, 2) #debug.dprint("VIEWS: package = %s" % package.full_name) #pop up menu if was rmb-click if self.dopopup: if utils.utils.is_root(): if package.get_best_ebuild() != package.get_latest_ebuild( ): # i.e. no ~arch keyword self.popup_menuitems["add-keyword"].show() else: self.popup_menuitems["add-keyword"].hide() installed = package.get_installed() havebest = False if installed: self.popup_menuitems["unmerge"].show() if package.get_best_ebuild() in installed: havebest = True else: self.popup_menuitems["unmerge"].hide() if havebest: self.popup_menuitems["emerge"].hide() self.popup_menuitems["pretend-emerge"].hide() else: self.popup_menuitems["emerge"].show() self.popup_menuitems["pretend-emerge"].show() self.popup_menuitems["sudo-emerge"].hide() self.popup_menuitems["sudo-unmerge"].hide() else: self.popup_menuitems["emerge"].hide() self.popup_menuitems["unmerge"].hide() if utils.can_gksu() and \ (package.get_best_ebuild() != package.get_latest_ebuild()): self.popup_menuitems["add-keyword"].show() else: self.popup_menuitems["add-keyword"].hide() installed = package.get_installed() havebest = False if installed and utils.can_sudo(): self.popup_menuitems["sudo-unmerge"].show() if package.get_best_ebuild() in installed: havebest = True else: self.popup_menuitems["sudo-unmerge"].hide() if havebest: self.popup_menuitems["sudo-emerge"].hide() self.popup_menuitems["pretend-emerge"].hide() else: if utils.can_sudo(): self.popup_menuitems["sudo-emerge"].show() else: self.popup_menuitems["sudo-emerge"].hide() self.popup_menuitems["pretend-emerge"].show() self.popup_menu.popup(None, None, None, self.event.button, self.event.time) self.dopopup = False self.event = None return True
def build_keywords_widget(self, keywords): """ Create a table layout and populate it with checkbox widgets representing the available keywords """ KeywordsFrame = self.wtree.get_object("frameKeywords") # If frame has any children, remove them child = KeywordsFrame.get_child() if child != None: KeywordsFrame.remove(child) # Build table to hold radiobuttons size = len(keywords) + 1 # Add one for None button maxcol = 5 maxrow = size / maxcol - 1 if maxrow < 1: maxrow = 1 table = Gtk.Table(maxrow, maxcol - 1, True) KeywordsFrame.add(table) self.kwList = [] # Iterate through keywords, create # checkboxes and attach to table col = 0 row = 0 button = Gtk.RadioButton(label=_('None')) self.kwList.append([button, None]) rbGroup = button table.attach(button, col, col + 1, row, row + 1) button.show() col += 1 button_added = False clickable_button = False for keyword in keywords: if keyword[0] == '~' and (keyword[1:] == self.arch) or \ (config.Prefs.globals.enable_archlist and ((keyword[1:] in config.Prefs.globals.archlist) or (keyword in config.Prefs.globals.archlist))): button2 = Gtk.RadioButton.new_with_label_from_widget( rbGroup, label=keyword) self.kwList.append([button2, keyword]) table.attach(button2, col, col + 1, row, row + 1) # connect to on_toggled so we can show changes button2.connect("toggled", self.on_toggled) button2.show() button_added = True clickable_button = True if keyword[1:] == self.arch and self.current_verInfo["stable"]: # i.e. package has been keyword unmasked already button2.set_active(True) else: #if (keyword == self.arch) label = Gtk.Label(label=keyword) label.set_alignment(.05, .5) label.set_use_underline(False) table.attach(label, col, col + 1, row, row + 1) label.show() button_added = True # Increment col & row counters if button_added: col += 1 if col > maxcol: col = 0 row += 1 if clickable_button: # Display the entire table table.show() KeywordsFrame.show() if self.is_root or utils.can_gksu(): self.btnPkgKeywords.show() else: KeywordsFrame.hide() self.btnPkgKeywords.hide()
def __init__(self, package, setup_command, re_init_portage): """ Initialize Advanced Emerge Dialog window """ # Preserve passed parameters self.package = package self.setup_command = setup_command self.re_init_portage = re_init_portage self.arch = backends.portage_lib.get_arch() self.system_use_flags = backends.portage_lib.settings.SystemUseFlags self.emerge_unmerge = "emerge" self.is_root = utils.is_root() self.package_use_flags = db.userconfigs.get_user_config( 'USE', package.full_name) self.current_verInfo = None # Parse glade file self.gladefile = config.Prefs.DATA_PATH + "glade/advemerge.glade" self.wtree = Gtk.Builder() self.wtree.add_from_file(self.gladefile) self.wtree.set_translation_domain(config.Prefs.APP) # register callbacks callbacks = { "on_ok_clicked": self.ok_clicked, "on_help_clicked": self.help_clicked, "on_cancel_clicked": self.cancel_clicked, #"on_cbAsk_clicked": self.Ask_clicked, "on_cbOnlyDeps_clicked": (self.set_one_of, 'cbOnlyDeps', 'cbNoDeps'), "on_cbNoDeps_clicked": (self.set_one_of, 'cbNoDeps', 'cbOnlyDeps'), "on_cbQuiet_clicked": (self.set_one_of, 'cbQuiet', 'cbVerbose'), "on_cbVerbose_clicked": (self.set_one_of, 'cbVerbose', 'cbQuiet'), "on_cbBuildPkg_clicked": (self.set_one_of, 'cbBuildPkg', 'cbBuildPkgOnly'), "on_cbBuildPkgOnly_clicked": (self.set_one_of, 'cbBuildPkgOnly', 'cbBuildPkg'), "on_cbUsePkg_clicked": (self.set_one_of, 'cbUsePkg', 'cbUsePkgOnly'), "on_cbUsePkgOnly_clicked": (self.set_one_of, 'cbUsePkgOnly', 'cbUsePkg'), "on_cmbVersion_changed": self.version_changed, "on_cmbEmerge_changed": self.emerge_changed, "on_btnPkgUse_clicked": self.on_package_use_commit, "on_btnMakeConf_clicked": self.on_make_conf_commit, "on_btnPkgKeywords_clicked": self.on_package_keywords_commit, "on_cbColorY_clicked": (self.set_one_of, 'cbColorY', 'cbColorN'), "on_cbColorN_clicked": (self.set_one_of, 'cbColorN', 'cbColorY'), "on_cbColumns_clicked": (self.set_all, 'cbColumns', 'cbPretend'), 'on_cbWithBDepsY_clicked': (self.set_one_of, 'cbWithBDepsY', 'cbWithBDepsN'), 'on_cbWithBDepsN_clicked': (self.set_one_of, 'cbWithBDepsN', 'cbWithBDepsY'), 'on_cbGetBinPkg_clicked': (self.set_one_of, 'cbGetBinPkg', 'cbGetBinPkgOnly'), 'on_cbGetBinPkgOnly_clicked': (self.set_one_of, 'cbGetBinPkgOnly', 'cbGetBinPkg'), "on_toggled": self.on_toggled } self.wtree.connect_signals(callbacks) self.window = self.wtree.get_object("adv_emerge_dialog") self.use_flags_frame = self.wtree.get_object("frameUseFlags") self.keywords_frame = self.wtree.get_object("frameKeywords") self.window.set_title( _("Advanced Emerge Settings for %s") % package.full_name) self.command_textview = self.wtree.get_object("command_textview") self.command_buffer = self.command_textview.get_buffer() style = self.keywords_frame.get_style().copy() # Fixme needs porting ??? # <<<<<<< ours # #self.bgcolor = style.bg[Gtk.StateType.NORMAL] # self.bgcolor = style.bg[Gladeui.PropertyState.NORMAL] # #self.command_textview.modify_base(Gtk.StateType.NORMAL, self.bgcolor) # self.command_textview.modify_base(Gladeui.PropertyState.NORMAL, self.bgcolor) # ======= # self.bgcolor = style.bg[Gladeui.PropertyState.NORMAL] # self.command_textview.modify_base(Gladeui.PropertyState.NORMAL, self.bgcolor) # >>>>>>> theirs self.btnMakeConf = self.wtree.get_object("btnMakeConf") self.btnPkgUse = self.wtree.get_object("btnPkgUse") self.btnPkgKeywords = self.wtree.get_object("btnPkgKeywords") if not self.is_root and not utils.can_gksu(): debug.dprint("ADVEMERGE: self.is_root = %s, utils.can_gksu = %s" % (self.is_root, utils.can_gksu)) self.btnMakeConf.hide() self.btnPkgUse.hide() self.btnPkgKeywords.hide() # Connect option toggles to on_toggled for checkbutton in self.wtree.get_object("table2").get_children(): if isinstance(checkbutton, Gtk.CheckButton): checkbutton.connect("toggled", self.on_toggled) #else: # debug.dprint("ADVEMERGE: table2 has child not of type Gtk.CheckButton") # debug.dprint(checkbutton) if not config.Prefs.advemerge.showuseflags: self.use_flags_frame.hide() if not config.Prefs.advemerge.showkeywords: self.keywords_frame.hide() # Make tool tips available #self.tooltips = Gtk.Tooltips() # Build version combo list self.get_versions() # Build a formatted combo list from the versioninfo list self.comboList = Gtk.ListStore(str) index = 0 for x in range(len(self.verList)): ver = self.verList[x] info = ver["number"] slot = ver["slot"] if slot != '0': info += ''.join([' [', _('Slot:%s') % slot, ']']) if not ver["available"]: info += _(' {unavailable}') elif not ver["stable"]: info += _(' (unstable)') if ver["hard_masked"]: info += _(' [MASKED]') if ver["best"]: if ver["best_downgrades"]: info += _(' (recommended) (downgrade)') else: info += _(' (recommended)') index = x if ver["installed"]: info += _(' [installed]') self.comboList.append([info]) # Build version combobox self.combobox = self.wtree.get_object("cmbVersion") self.combobox.set_model(self.comboList) cell = Gtk.CellRendererText() self.combobox.pack_start(cell, True) self.combobox.add_attribute(cell, 'text', 0) self.combobox.set_active( index) # select "recommended" ebuild by default # emerge / unmerge combobox: self.emerge_combolist = Gtk.ListStore(str) iter = self.emerge_combolist.append(["emerge"]) self.emerge_combolist.append(["unmerge"]) self.emerge_combobox = self.wtree.get_object("cmbEmerge") self.emerge_combobox.set_model(self.emerge_combolist) cell = Gtk.CellRendererText() self.emerge_combobox.pack_start(cell, True) self.emerge_combobox.add_attribute(cell, 'text', 0) self.emerge_combobox.set_active_iter(iter) # Set any emerge options the user wants defaulted if config.Prefs.emerge.pretend: self.wtree.get_object("cbPretend").set_active(True) if config.Prefs.emerge.verbose: self.wtree.get_object("cbVerbose").set_active(True) ## this now just references --update, which is probably not the desired behaviour. ## perhaps the current version should be indicated somewhere in the dialog #if config.Prefs.emerge.upgradeonly: # self.wtree.get_object("cbUpgradeOnly").set_active(True) if config.Prefs.emerge.fetch: self.wtree.get_object("cbFetchOnly").set_active(True) if config.Prefs.emerge.nospinner: self.wtree.get_object("cbNoSpinner").set_active(True) # show command in command_label self.display_emerge_command()
def build_use_flag_widget(self, use_flags, ebuild): """ Create a table layout and populate it with checkbox widgets representing the available use flags """ debug.dprint("ADVEMERGE: build_use_flag_widget()") UseFlagFrame = self.wtree.get_widget("frameUseFlags") button_make_conf = self.wtree.get_widget("button_make_conf") button_package_use = self.wtree.get_widget("button_package_use") # If frame has any children, remove them child = UseFlagFrame.child if child != None: UseFlagFrame.remove(child) # If no use flags, hide the frame if not use_flags: UseFlagFrame.hide() self.btnMakeConf.hide() self.btnPkgUse.hide() else: UseFlagFrame.show() if self.is_root or utils.can_gksu(): self.btnPkgUse.show() if config.Prefs.advemerge.show_make_conf_button: self.btnMakeConf.show() else: self.btnMakeConf.hide() # Build table to hold checkboxes size = 30 maxcol = 3 # = number of columns - 1 = index of last column maxrow = (size - 1) / (maxcol + 1) # = number of rows - 1 # resize the table if it's taller than it is wide table = gtk.Table(maxrow + 1, maxcol + 1, True) if maxrow + 1 >= 6: # perhaps have this number configurable? # perhaps add window based on size (in pixels) of table somehow... scrolledwindow = gtk.ScrolledWindow() scrolledwindow.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) UseFlagFrame.add(scrolledwindow) scrolledwindow.add_with_viewport(table) scrolledwindow.set_size_request(1, 100) # min height of 100 pixels scrolledwindow.show() else: UseFlagFrame.add(table) self.ufList = [] # Iterate through use flags collection, create checkboxes # and attach to table col = 0 row = 0 ebuild_use_flags = get_reduced_flags(ebuild) for flag in use_flags: flag_active = False myflag = abs_flag(flag) if myflag in ebuild_use_flags: flag_active = True button = gtk.CheckButton(flag) button.set_use_underline(False) button.set_active(flag_active) self.ufList.append([button, flag]) # Add tooltip, attach button to table and show it off # Use lower case flag, since that is how it is stored # in the UseFlagDict. In case flag doesn't exist # we'll trap the error button.set_has_tooltip(True) try: button.set_tooltip_text( portage_lib.settings.UseFlagDict[flag.lower()][2]) except KeyError: button.set_tooltip_text(_('Unsupported use flag')) table.attach(button, col, col + 1, row, row + 1) # connect to on_toggled so we can show changes button.connect("toggled", self.on_toggled) button.show() # Increment col & row counters col += 1 if col > maxcol: col = 0 row += 1 # Display the entire table table.show()