Exemplo n.º 1
0
 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()
Exemplo n.º 2
0
 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 )
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
    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()
Exemplo n.º 9
0
    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()
Exemplo n.º 10
0
    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()