diff options
-rw-r--r-- | portato/backend/flags.py | 2 | ||||
-rw-r--r-- | portato/backend/package.py | 10 | ||||
-rw-r--r-- | portato/gui/gtk/windows.py | 42 | ||||
-rw-r--r-- | portato/gui/gui_helper.py | 14 |
4 files changed, 41 insertions, 27 deletions
diff --git a/portato/backend/flags.py b/portato/backend/flags.py index d1187c9..a7ba125 100644 --- a/portato/backend/flags.py +++ b/portato/backend/flags.py @@ -542,7 +542,7 @@ def set_testing (pkg, enable): if (enable and line != "-1") or (not enable and line == "-1"): newTesting[cpv].remove((file, line)) - if (enable and not pkg.is_testing(allowed=True)) or (not enable and pkg.is_testing(allowed=True)): + if (enable and not pkg.is_testing(use_keywords=True)) or (not enable and pkg.is_testing(use_keywords=True)): return if not enable: diff --git a/portato/backend/package.py b/portato/backend/package.py index 92194d5..6ba47fe 100644 --- a/portato/backend/package.py +++ b/portato/backend/package.py @@ -82,23 +82,23 @@ class Package: return True return False - def is_testing(self, allowed = False): + def is_testing(self, use_keywords = False): """Checks whether a package is marked as testing. - @param allowed: Controls whether possible keywords are taken into account or not. - @type allowed: boolean + @param use_keywords: Controls whether possible keywords are taken into account or not. + @type use_keywords: boolean @returns: True if the package is marked as testing; else False. @rtype: boolean""" testArch = "~" + self.get_settings("ARCH") - if not allowed: # keywords are NOT taken into account + if not use_keywords: # keywords are NOT taken into account if testArch in self.get_env_var("KEYWORDS").split(): return True return False else: # keywords are taken into account status = flags.new_testing_status(self.get_cpv()) - if status == None: # we haven't changed it in any way + if status is None: # we haven't changed it in any way if self._status and testArch+" keyword" in self._status: return True return False diff --git a/portato/gui/gtk/windows.py b/portato/gui/gtk/windows.py index 6eb6dde..a872f3a 100644 --- a/portato/gui/gtk/windows.py +++ b/portato/gui/gtk/windows.py @@ -505,7 +505,7 @@ class PackageTable: self.maskedCheck.hide() self.testingCheck.hide() self.emergeBtn.set_sensitive(False) - else: + else: # normal package self.missingLabel.hide() self.notInSysLabel.hide() self.installedCheck.show() @@ -515,12 +515,12 @@ class PackageTable: self.emergeBtn.set_sensitive(True) self.installedCheck.set_active(pkg.is_installed()) self.maskedCheck.set_active(pkg.is_masked()) - if pkg.is_testing(allowed = False) and not pkg.is_testing(allowed=True): + if pkg.is_testing(use_keywords = False) and not pkg.is_testing(use_keywords = True): self.testingCheck.set_label("<i>(Testing)</i>") self.testingCheck.get_child().set_use_markup(True) else: self.testingCheck.set_label("Testing") - self.testingCheck.set_active(pkg.is_testing(allowed = False)) + self.testingCheck.set_active(pkg.is_testing(use_keywords = False)) if self.doEmerge: # set emerge-button-label @@ -577,16 +577,16 @@ class PackageTable: """Callback for toggled testing-checkbox.""" status = button.get_active() - if self.actual_package().is_testing(allowed = False) == status: + if self.actual_package().is_testing(use_keywords = False) == status: return False - if not self.actual_package().is_testing(allowed = True): + if not self.actual_package().is_testing(use_keywords = True): self.actual_package().set_testing(False) button.set_label("Testing") button.set_active(True) else: self.actual_package().set_testing(True) - if self.actual_package().is_testing(allowed=False): + if self.actual_package().is_testing(use_keywords=False): button.set_label("<i>(Testing)</i>") button.get_child().set_use_markup(True) button.set_active(True) @@ -626,7 +626,7 @@ class MainWindow (Window): PKG_PAGE = 0 QUEUE_PAGE = 1 CONSOLE_PAGE = 2 - + def __init__ (self): """Build up window""" @@ -640,6 +640,9 @@ class MainWindow (Window): # booleans self.doUpdate = False self.packageInit = True + + # installed pixbuf + self.instPixbuf = self.window.render_icon(gtk.STOCK_YES, gtk.ICON_SIZE_MENU) # package db self.db = Database() @@ -743,13 +746,24 @@ class MainWindow (Window): @param name: name of the selected catetegory @type name: string""" - store = gtk.ListStore(str) + store = gtk.ListStore(str, gtk.gdk.Pixbuf) self.fill_pkg_store(store,name) # build view self.pkgList.set_model(store) + + col = gtk.TreeViewColumn("Packages") + + # adding the pixbuf + cell = gtk.CellRendererPixbuf() + col.pack_start(cell, False) + col.add_attribute(cell, "pixbuf", 1) + + # adding the package name cell = gtk.CellRendererText() - col = gtk.TreeViewColumn("Packages", cell, text = 0) + col.pack_start(cell, True) + col.add_attribute(cell, "text", 0) + self.pkgList.append_column(col) def fill_pkg_store (self, store, name = None): @@ -763,8 +777,12 @@ class MainWindow (Window): @rtype: gtk.ListStore""" if name: - for p in self.db.get_cat(name): - store.append([p]) + for pkg, is_inst in self.db.get_cat(name): + if is_inst: + icon = self.instPixbuf + else: + icon = None + store.append([pkg, icon]) return store def jump_to (self, cp): @@ -778,7 +796,6 @@ class MainWindow (Window): gobject.idle_add(self.notebook.set_tab_label_text, self.termHB, title) - def cb_cat_list_selection (self, view): """Callback for a category-list selection. Updates the package list with the packages in the category.""" # get the selected category @@ -796,7 +813,6 @@ class MainWindow (Window): store, it = sel.get_selected() if it: package = store.get_value(it, 0) - if package[-1] == '*': package = package[:-1] self.show_package(self.selCatName+"/"+package, self.queue) return True diff --git a/portato/gui/gui_helper.py b/portato/gui/gui_helper.py index 7808298..be42b52 100644 --- a/portato/gui/gui_helper.py +++ b/portato/gui/gui_helper.py @@ -213,21 +213,19 @@ class Database: list = p.split("/") cat = list[0] pkg = list[1] - if p in installed: - pkg += "*" if not cat in self._db: self._db[cat] = [] - self._db[cat].append(pkg) + self._db[cat].append((pkg, p in installed)) for key in self._db: # sort alphabetically - self._db[key].sort(cmp=cmp, key=str.lower) + self._db[key].sort(cmp=cmp, key=lambda x: str.lower(x[0])) def get_cat (self, cat): """Returns the packages in the category. @param cat: category to return the packages from @type cat: string - @return: list of packages or [] - @rtype: string[]""" + @return: list of tuples: (name, is_installed) or [] + @rtype: (string, boolean)[]""" try: return self._db[cat] @@ -297,7 +295,7 @@ class EmergeQueue: # for the beginning: let us create a package object - but it is not guaranteed, that it actually exists in portage pkg = backend.Package(cpv) - masked = not (pkg.is_masked() or pkg.is_testing(allowed=True)) # we are setting this to True in case we have unmasked it already, but portage does not know this + masked = not (pkg.is_masked() or pkg.is_testing(use_keywords=True)) # we are setting this to True in case we have unmasked it already, but portage does not know this # and now try to find it in portage pkg = backend.find_packages("="+cpv, masked = masked) @@ -307,7 +305,7 @@ class EmergeQueue: elif unmask: # no pkg returned, but we are allowed to unmask it pkg = backend.find_packages("="+cpv, masked = True)[0] - if pkg.is_testing(allowed = True): + if pkg.is_testing(use_keywords = True): pkg.set_testing(True) if pkg.is_masked(): pkg.set_masked() |