From 411c08e7cfa9ddc5bf4930558f28f97ae91c92fa Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Tue, 27 May 2008 22:22:39 +0200 Subject: Don't set the pause.svg ... it's ugly ^^ --- portato/gui/windows/main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'portato/gui') diff --git a/portato/gui/windows/main.py b/portato/gui/windows/main.py index 88f95c4..da9ed96 100644 --- a/portato/gui/windows/main.py +++ b/portato/gui/windows/main.py @@ -1599,10 +1599,10 @@ class MainWindow (Window): self.emergePaused = cb.get_active() if not self.emergePaused: self.queue.continue_emerge() - self.tray.set_from_file(APP_ICON) + #self.tray.set_from_file(APP_ICON) else: self.queue.stop_emerge() - self.tray.set_from_file(os.path.join(ICON_DIR, "pausing.png")) + #self.tray.set_from_file(os.path.join(ICON_DIR, "pausing.png")) # block the handlers of the other buttons # so that calling "set_active" does not call this callback recursivly -- cgit v1.2.3-54-g00ecf From 91e0cff038076d1f79ac707cfc024a1d919a93a9 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Tue, 27 May 2008 22:35:50 +0200 Subject: Also have masked package being looked up in the updater. Though this is still misbehavior, as packages shouldn't be masked at this point of time --- portato/gui/updater.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'portato/gui') diff --git a/portato/gui/updater.py b/portato/gui/updater.py index f293fbc..44bc4e1 100644 --- a/portato/gui/updater.py +++ b/portato/gui/updater.py @@ -15,7 +15,7 @@ from __future__ import absolute_import from ..backend import system import threading, subprocess, time -from ..helper import debug, error +from ..helper import debug, warning, error class Updater (object): """ @@ -79,21 +79,26 @@ q """ self.stopEvent.set() - def find (self, pv): + def find (self, pv, masked = False): """ As qlop only returns 'package-version' we need to assign it to a cpv. This is done here. """ - pkgs = system.find_packages("=%s" % pv, only_cpv = True) + pkgs = system.find_packages("=%s" % pv, only_cpv = True, masked = masked) if len(pkgs) > 1: # ambigous - try to find the one which is also in the iterators for p in pkgs: if p in self.iterators: return p elif not pkgs: # nothing found =| - error(_("Trying to remove package '%s' from queue which does not exist in system."), pv) - return None + if not masked: + warning(_("No unmasked version of package '%s' found. Trying masked ones. This normally should not happen...")) + return self.find(pv, True) + + else: + error(_("Trying to remove package '%s' from queue which does not exist in system."), pv) + return None else: # only one choice =) return pkgs[0] -- cgit v1.2.3-54-g00ecf From d1f14baba03a3f7ec62f5e893d20d535096cf2a6 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Sat, 7 Jun 2008 16:57:24 +0200 Subject: Show CPV instead of CP in the package info --- portato/gui/windows/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'portato/gui') diff --git a/portato/gui/windows/main.py b/portato/gui/windows/main.py index da9ed96..f4b5f11 100644 --- a/portato/gui/windows/main.py +++ b/portato/gui/windows/main.py @@ -166,7 +166,7 @@ class PackageTable: pkg = self.actual_package() # name - self.nameLabel.set_markup("%s" % pkg.get_cp()) + self.nameLabel.set_markup("%s" % pkg.get_cpv()) # description desc = pkg.get_package_settings("DESCRIPTION") or _("") -- cgit v1.2.3-54-g00ecf From 299787a316e8fc690d3e74fb9c7f480abc2a01ec Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Sat, 7 Jun 2008 19:47:55 +0200 Subject: Moved version list out of the PackageTable into the normal MainWindow --- portato/gui/templates/MainWindow.glade | 195 ++++++++++--------- portato/gui/windows/main.py | 330 +++++++++++++++++---------------- 2 files changed, 266 insertions(+), 259 deletions(-) (limited to 'portato/gui') diff --git a/portato/gui/templates/MainWindow.glade b/portato/gui/templates/MainWindow.glade index 788a339..54a08c9 100644 --- a/portato/gui/templates/MainWindow.glade +++ b/portato/gui/templates/MainWindow.glade @@ -1,6 +1,6 @@ - + 2 @@ -46,8 +46,8 @@ Re_load Portage True - + True @@ -463,7 +463,6 @@ True True 1 - @@ -616,271 +615,271 @@ - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 0 - use flags - PANGO_ELLIPSIZE_END + label True 1 2 - 4 - 5 + 3 + 4 - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True 0 - <b>Use Flags:</b> + <b>License:</b> True True - 4 - 5 + 3 + 4 GTK_FILL 5 - + True - True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True - Testing - 0 - 0 - True - + <b>Installed, but not in portage anymore</b> + True - 7 - 8 - GTK_FILL + 2 + 5 + 6 - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 0 + True + <span foreground='red'><b>MISSING KEYWORD</b></span> + True - 1 2 - 8 - 9 + 5 + 6 - + True - True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True - Masked - 0 - 0 - True - + 5 + + + - 8 - 9 - GTK_FILL + 1 + 2 + 2 + 3 - + True - True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True - Installed 0 - 0 - True - + <b>Description:</b> + True + True - 6 - 7 GTK_FILL + 5 - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True 0 - <b>Homepage:</b> + <b>Overlay:</b> True True - 2 - 3 + 1 + 2 GTK_FILL 5 - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True 0 label - True + True 1 2 - 1 - 2 - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True 0 label - True + True 1 2 + 1 + 2 - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True 0 - <b>Overlay:</b> + <b>Homepage:</b> True True - 1 - 2 + 2 + 3 GTK_FILL 5 - + True + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + Installed 0 - <b>Description:</b> - True - True + 0 + True + + 6 + 7 GTK_FILL - 5 - + True + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 5 - - - + True + Masked + 0 + 0 + True + - 1 - 2 - 2 - 3 + 8 + 9 + GTK_FILL - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True - <span foreground='red'><b>MISSING KEYWORD</b></span> - True + 0 + 1 2 - 5 - 6 + 8 + 9 - + True + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True - <b>Installed, but not in portage anymore</b> - True + Testing + 0 + 0 + True + - 2 - 5 - 6 + 7 + 8 + GTK_FILL - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True 0 - <b>License:</b> + <b>Use Flags:</b> True True - 3 - 4 + 4 + 5 GTK_FILL 5 - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 0 - label + use flags + PANGO_ELLIPSIZE_END True 1 2 - 3 - 4 + 4 + 5 diff --git a/portato/gui/windows/main.py b/portato/gui/windows/main.py index f4b5f11..412ea1c 100644 --- a/portato/gui/windows/main.py +++ b/portato/gui/windows/main.py @@ -67,10 +67,6 @@ class PackageTable: # the notebook self.notebook = self.tree.get_widget("packageNotebook") - # the version combo - self.versionList = self.tree.get_widget("versionList") - self.build_version_list() - # chechboxes self.installedCheck = self.tree.get_widget("installedCheck") self.maskedCheck = self.tree.get_widget("maskedCheck") @@ -117,15 +113,13 @@ class PackageTable: self.icons["or"] = self.window.render_icon(gtk.STOCK_MEDIA_PAUSE, gtk.ICON_SIZE_MENU) self.icons["block"] = self.window.render_icon(gtk.STOCK_NO, gtk.ICON_SIZE_MENU) - def update (self, cp, queue = None, version = None, doEmerge = True, instantChange = False, type = None): + def update (self, pkg, queue = None, doEmerge = True, instantChange = False, type = None): """Updates the table to show the contents for the package. - @param cp: the selected package - @type cp: string (cp) + @param pkg: the selected package + @type pkg: Package @param queue: emerge-queue (if None the emerge-buttons are disabled) @type queue: EmergeQueue - @param version: if not None, specifies the version to select - @type version: string @param doEmerge: if False, the emerge buttons are disabled @type doEmerge: boolean @param instantChange: if True the changed keywords are updated instantly @@ -133,37 +127,25 @@ class PackageTable: @param type: the type of the queue this package is in; if None there is no queue :) @type type: string""" - self.cp = cp # category/package - self.version = version # version - if not None this is used + self.pkg = pkg self.queue = queue self.doEmerge = doEmerge self.instantChange = instantChange self.type = type - # packages and installed packages - if not self.doEmerge: - self.instPackages = self.packages = system.find_packages("=%s-%s" % (cp, version), masked = True) - else: - self.packages = system.sort_package_list(system.find_packages(cp, masked = True)) - self.instPackages = system.sort_package_list(system.find_installed_packages(cp, masked = True)) - - # version-combo-box - self.versionList.get_model().clear() - self.fill_version_list() - if not self.queue or not self.doEmerge: self.emergeBtn.set_sensitive(False) self.unmergeBtn.set_sensitive(False) # current status - self.cb_version_list_changed() + self._update_table() self.vb.show_all() def hide (self): self.vb.hide_all() def set_labels (self): - pkg = self.actual_package() + pkg = self.pkg # name self.nameLabel.set_markup("%s" % pkg.get_cpv()) @@ -275,7 +257,7 @@ class PackageTable: store.append(it, [get_icon(dep), dep.dep]) try: - deptree = self.actual_package().get_dependencies() + deptree = self.pkg.get_dependencies() except AssertionError: w = _("Can't display dependencies: This package has an unsupported dependency string.") error(w) @@ -285,7 +267,7 @@ class PackageTable: def fill_use_list(self): - pkg = self.actual_package() + pkg = self.pkg pkg_flags = pkg.get_iuse_flags() pkg_flags.sort() @@ -309,7 +291,7 @@ class PackageTable: enabled = use in euse installed = use in instuse - store.append(actual_exp_it, [enabled, installed, use, system.get_use_desc(use, self.cp)]) + store.append(actual_exp_it, [enabled, installed, use, system.get_use_desc(use, self.pkg.get_cp())]) def build_dep_list (self): store = gtk.TreeStore(gtk.gdk.Pixbuf, str) @@ -348,115 +330,27 @@ class PackageTable: self.useList.set_search_column(2) self.useList.set_enable_tree_lines(True) - def build_version_list (self): - store = gtk.ListStore(gtk.gdk.Pixbuf, str, str) - - # build view - self.versionList.set_model(store) - - col = gtk.TreeViewColumn(_("Versions")) - col.set_property("expand", True) - - self.slotcol = gtk.TreeViewColumn(_("Slot")) - self.slotcol.set_property("expand", True) - - # adding the pixbuf - cell = gtk.CellRendererPixbuf() - col.pack_start(cell, False) - col.add_attribute(cell, "pixbuf", 0) - - # adding the package name - cell = gtk.CellRendererText() - col.pack_start(cell, True) - col.add_attribute(cell, "text", 1) - - # adding the slot - cell = gtk.CellRendererText() - self.slotcol.pack_start(cell, True) - self.slotcol.add_attribute(cell, "text", 2) - - self.versionList.append_column(col) - self.versionList.append_column(self.slotcol) - - def fill_version_list (self): - - store = self.versionList.get_model() - - # this is here for performance reasons - # to not query the package with info, we do not need - if self.main.cfg.get_boolean("showSlots", "GUI"): - def get_slot(pkg): - return pkg.get_package_settings("SLOT") - - self.slotcol.set_visible(True) - - else: - def get_slot(*args): - return "" - - self.slotcol.set_visible(False) - - # append versions - for vers, inst, slot in ((x.get_version(), x.is_installed(), get_slot(x)) for x in self.packages): - if inst: - icon = self.main.instPixbuf - else: - icon = None - - store.append([icon, vers, slot]) - - pos = ((0,)) # default - - # activate the first one - try: - best_version = "" - if self.version: - best_version = self.version - else: - best_version = system.find_best_match(self.packages[0].get_cp(), only_installed = (self.instPackages != [])).get_version() - for i in range(len(self.packages)): - if self.packages[i].get_version() == best_version: - pos = (i,) - break - except AttributeError: # no package found - pass - - self.versionList.get_selection().select_path(pos) - self.versionList.scroll_to_cell(pos) - - def actual_package (self): - """Returns the actual selected package. - - @returns: the actual selected package - @rtype: backend.Package""" - - model, iter = self.versionList.get_selection().get_selected() - if iter: - return self.packages[model.get_path(iter)[0]] - else: - return self.packages[0] - def _update_keywords (self, emerge, update = False): if emerge: type = "install" if not self.type else self.type try: try: - self.queue.append(self.actual_package().get_cpv(), type = type, update = update) + self.queue.append(self.pkg.get_cpv(), type = type, update = update) except PackageNotFoundException, e: if unmask_dialog(e[0]) == gtk.RESPONSE_YES: - self.queue.append(self.actual_package().get_cpv(), type = type, unmask = True, update = update) + self.queue.append(self.pkg.get_cpv(), type = type, unmask = True, update = update) except BlockedException, e: blocked_dialog(e[0], e[1]) else: try: - self.queue.append(self.actual_package().get_cpv(), type = "uninstall") + self.queue.append(self.pkg.get_cpv(), type = "uninstall") except PackageNotFoundException, e: error(_("Package could not be found: %s"), e[0]) #masked_dialog(e[0]) - def cb_version_list_changed (self, *args): + def _update_table (self, *args): - pkg = self.actual_package() + pkg = self.pkg # set the views for v in (self.ebuildView, self.changelogView, self.filesView): @@ -530,7 +424,7 @@ class PackageTable: if self.doEmerge: # set emerge-button-label - if not self.actual_package().is_installed(): + if not pkg.is_installed(): self.unmergeBtn.set_sensitive(False) else: self.unmergeBtn.set_sensitive(True) @@ -546,12 +440,10 @@ class PackageTable: def cb_package_revert_clicked (self, button): """Callback for pressed revert-button.""" - self.actual_package().remove_new_use_flags() - self.actual_package().remove_new_masked() - self.actual_package().remove_new_testing() - self.versionList.get_model().clear() - self.fill_version_list() - self.cb_version_list_changed() + self.pkg.remove_new_use_flags() + self.pkg.remove_new_masked() + self.pkg.remove_new_testing() + self._update_table() if self.instantChange: self._update_keywords(True, update = True) return True @@ -573,21 +465,21 @@ class PackageTable: status = button.get_active() # end of recursion :) - if self.actual_package().is_testing(use_keywords = False) == status: + if self.pkg.is_testing(use_keywords = False) == status: return False # if the package is not testing - don't allow to set it as such - if not self.actual_package().is_testing(use_keywords = False): + if not self.pkg.is_testing(use_keywords = False): button.set_active(False) return True # re-set to testing status - if not self.actual_package().is_testing(use_keywords = True): - self.actual_package().set_testing(False) + if not self.pkg.is_testing(use_keywords = True): + self.pkg.set_testing(False) button.set_label(_("Testing")) button.set_active(True) else: # disable testing - self.actual_package().set_testing(True) + self.pkg.set_testing(True) button.set_label("(%s)" % _("Testing")) button.get_child().set_use_markup(True) button.set_active(True) @@ -600,7 +492,7 @@ class PackageTable: def cb_masked_toggled (self, button): """Callback for toggled masking-checkbox.""" status = button.get_active() - pkg = self.actual_package() + pkg = self.pkg if pkg.is_masked(use_changed = False) == status and not pkg.is_locally_masked(): return False @@ -637,7 +529,7 @@ class PackageTable: def cb_use_flag_toggled (self, cell, path, store): """Callback for a toggled use-flag button.""" flag = store[path][2] - pkg = self.actual_package() + pkg = self.pkg if pkg.use_expanded(flag): # ignore expanded flags return False @@ -733,12 +625,17 @@ class MainWindow (Window): self.hpaned = self.tree.get_widget("hpaned") self.hpaned.set_position(int(self.window.get_size()[0]/1.5)) - # cat and pkg list + # lists + self.selCatName = "" + self.selCP = "" + self.selCPV = "" self.sortPkgListByName = True self.catList = self.tree.get_widget("catList") self.pkgList = self.tree.get_widget("pkgList") + self.versionList = self.tree.get_widget("versionList") self.build_cat_list() self.build_pkg_list() + self.build_version_list() # search entry self.searchEntry = self.tree.get_widget("searchEntry") @@ -821,8 +718,25 @@ class MainWindow (Window): self.window.show_all() - def show_package (self, *args, **kwargs): - self.packageTable.update(*args, **kwargs) + def show_package (self, pkg = None, cpv = None, cp = None, version = None, **kwargs): + p = None + + if pkg: + p = pkg + elif cpv: + p = system.find_packages("="+cpv, masked = True)[0] + elif cp: + if version: + p = system.find_packages("=%s-%s" % (cp, version), masked = True)[0] + + else: + best = system.find_best_match(cp) + if best: + p = best + else: + p = system.find_packages(cp)[0] + + self.packageTable.update(p, **kwargs) def build_terminal (self): """ @@ -861,23 +775,28 @@ class MainWindow (Window): """ store = gtk.ListStore(str) + self.fill_cat_store(store) self.catList.set_model(store) cell = gtk.CellRendererText() col = gtk.TreeViewColumn(_("Categories"), cell, text = 0) self.catList.append_column(col) - self.fill_cat_store(store) self.catList.get_selection().connect("changed", self.cb_cat_list_selection) - def fill_cat_store (self, store): + def fill_cat_store (self, store = None): """ Fills the category store with data. - + @param store: the store to fill @type store: gtk.ListStore """ + if store is None: + store = self.catList.get_model() + + store.clear() + cats = self.db.get_categories(installed = not self.showAll) for p in cats: @@ -895,7 +814,7 @@ class MainWindow (Window): """ store = gtk.ListStore(gtk.gdk.Pixbuf, str, str) - self.fill_pkg_store(store,name) + self.fill_pkg_store(store, name) # build view self.pkgList.set_model(store) @@ -918,7 +837,7 @@ class MainWindow (Window): self.pkgList.get_selection().connect("changed", self.cb_pkg_list_selection) - def fill_pkg_store (self, store, name = None): + def fill_pkg_store (self, store = None, name = None): """ Fills a given ListStore with the packages in a category. @@ -927,6 +846,10 @@ class MainWindow (Window): @param name: the name of the category @type name: string """ + + if store is None: + store = self.pkgList.get_model() + store.clear() if name: for cat, pkg, is_inst in self.db.get_cat(name, self.sortPkgListByName): @@ -938,19 +861,96 @@ class MainWindow (Window): icon = None store.append([icon, pkg, cat]) + def build_version_list (self): + store = gtk.ListStore(gtk.gdk.Pixbuf, str, str) + + # build view + self.versionList.set_model(store) + + col = gtk.TreeViewColumn(_("Versions")) + col.set_property("expand", True) + + self.slotcol = gtk.TreeViewColumn(_("Slot")) + self.slotcol.set_property("expand", True) + + # adding the pixbuf + cell = gtk.CellRendererPixbuf() + col.pack_start(cell, False) + col.add_attribute(cell, "pixbuf", 0) + + # adding the package name + cell = gtk.CellRendererText() + col.pack_start(cell, True) + col.add_attribute(cell, "text", 1) + + # adding the slot + cell = gtk.CellRendererText() + self.slotcol.pack_start(cell, True) + self.slotcol.add_attribute(cell, "text", 2) + + self.versionList.append_column(col) + self.versionList.append_column(self.slotcol) + + self.versionList.get_selection().connect("changed", self.cb_vers_list_selection) + + def fill_version_list (self, cp, version = None): + + store = self.versionList.get_model() + store.clear() + + # this is here for performance reasons + # to not query the package with info, we do not need + if self.cfg.get_boolean("showSlots", "GUI"): + def get_slot(pkg): + return pkg.get_package_settings("SLOT") + + self.slotcol.set_visible(True) + + else: + def get_slot(*args): + return "" + + self.slotcol.set_visible(False) + + packages = system.sort_package_list(system.find_packages(cp, masked=True)) + + # append versions + for vers, inst, slot in ((x.get_version(), x.is_installed(), get_slot(x)) for x in packages): + if inst: + icon = self.instPixbuf + else: + icon = None + + store.append([icon, vers, slot]) + + pos = ((0,)) # default + + # activate the first one + try: + best_version = "" + if version: + best_version = version + else: + best_version = system.find_best_match(packages[0].get_cp()).get_version() + for i, p in enumerate(packages): + if p.get_version() == best_version: + pos = (i,) + break + except AttributeError: # no package found + pass + + self.versionList.get_selection().select_path(pos) + self.versionList.scroll_to_cell(pos) + def refresh_stores (self): """ Refreshes the category and package stores. """ - store = self.catList.get_model() - store.clear() - self.fill_cat_store(store) + self.fill_cat_store() - store = self.pkgList.get_model() - store.clear() - try: - self.fill_pkg_store(store, self.selCatName) - except AttributeError: # no selCatName -> so no category selected --> ignore + if self.selCatName: + self.fill_pkg_store(name = self.selCatName) + else: # no selCatName -> so no category selected --> ignore debug("No category selected --> should be no harm.") def load_session(self, sessionEx = None): @@ -1107,7 +1107,7 @@ class MainWindow (Window): debug("Unexpected number of %s returned after search: %d", what, len(pathes)) break - self.show_package(cp, self.queue, version = version) + self.show_package(cp = cp, version = version, queue = self.queue) def set_uri_hook (self, browser): """ @@ -1183,25 +1183,35 @@ class MainWindow (Window): store, it = selection.get_selected() if it: self.selCatName = store.get_value(it, 0) - self.pkgList.get_model().clear() - self.fill_pkg_store(self.pkgList.get_model(), self.selCatName) + self.fill_pkg_store(name = self.selCatName) return True def cb_pkg_list_selection (self, selection): """ Callback for a package-list selection. - Updates the package info. + Updates the version list. """ store, it = selection.get_selected() if it: - cp = "%s/%s" % (store.get_value(it, 2), store.get_value(it, 1)) - self.show_package(cp, self.queue) + self.selCP = "%s/%s" % (store.get_value(it, 2), store.get_value(it, 1)) + self.fill_version_list(self.selCP) return True def cb_pkg_list_header_clicked(self, col): self.sortPkgListByName = not self.sortPkgListByName - self.pkgList.get_model().clear() - self.fill_pkg_store(self.pkgList.get_model(), self.selCatName) + self.fill_pkg_store(name = self.selCatName) + return True + + def cb_vers_list_selection (self, selection): + """ + Callback for a package-list selection. + Updates the version list. + """ + store, it = selection.get_selected() + if it: + self.selCPV = "%s-%s" % (self.selCP, store.get_value(it, 1)) + self.show_package(cpv = self.selCPV, queue = self.queue) + return True def cb_queue_row_activated (self, view, path, *args): @@ -1211,8 +1221,6 @@ class MainWindow (Window): iterator = store.get_original().get_iter(path) if store.iter_has_parent(iterator): package = store.get_value(iterator, store.get_cpv_column()) - cat, name, vers, rev = system.split_cpv(package) - if rev != "r0": vers = vers+"-"+rev if store.is_in_emerge(iterator): type = "install" @@ -1221,7 +1229,7 @@ class MainWindow (Window): elif store.is_in_update(iterator): type = "update" - self.show_package(cat+"/"+name, queue = self.queue, version = vers, instantChange = True, doEmerge = False, type = type) + self.show_package(cpv = package, queue = self.queue, instantChange = True, doEmerge = False, type = type) return True def cb_queue_tooltip_queried (self, view, x, y, is_keyboard, tooltip): -- cgit v1.2.3-54-g00ecf From 5f9e42aa2ecac5c718496c95bc631830b92ae4ef Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Sun, 8 Jun 2008 00:12:17 +0200 Subject: Make the console title length changeable by the user --- doc/Changelog | 1 + etc/portato.cfg | 3 ++ portato/gui/templates/PreferenceWindow.glade | 67 +++++++++++++++++++++------- portato/gui/windows/main.py | 3 +- portato/gui/windows/preference.py | 6 +++ 5 files changed, 63 insertions(+), 17 deletions(-) (limited to 'portato/gui') diff --git a/doc/Changelog b/doc/Changelog index a34d73c..ad0454f 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,4 +1,5 @@ next: +- make max. title length of the console changeable by the user - added shortcut for "Reload Portage" - increased the maximum scrollback lines - now only use external "shm" package diff --git a/etc/portato.cfg b/etc/portato.cfg index 07e6bdb..90cbace 100644 --- a/etc/portato.cfg +++ b/etc/portato.cfg @@ -78,6 +78,9 @@ showslots = true ; sets the font of the console - string values consolefont = Monospace 11 +; controls the maximum length of the console title - integer value +titlelength = 60 + ; sets the position of the tabs of the two notebooks ; allowed positions: ; - 1 : top diff --git a/portato/gui/templates/PreferenceWindow.glade b/portato/gui/templates/PreferenceWindow.glade index 4cc7dce..fcdc4ec 100644 --- a/portato/gui/templates/PreferenceWindow.glade +++ b/portato/gui/templates/PreferenceWindow.glade @@ -1,6 +1,6 @@ - + 5 @@ -561,31 +561,66 @@ 12 5 - + True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 5 - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 0 - Console Font + 5 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + Console Font + True + + + + + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + Chose a console font + True + True + False + + + 1 + + - + True - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 0 - Chose a console font - True - True - False + + + True + 0 + Maximum length of the console title + True + + + + + True + True + 0 0 300 1 10 10 + True + True + + + 1 + + + 4 1 diff --git a/portato/gui/windows/main.py b/portato/gui/windows/main.py index 412ea1c..4eac88b 100644 --- a/portato/gui/windows/main.py +++ b/portato/gui/windows/main.py @@ -1166,7 +1166,8 @@ class MainWindow (Window): else: title = ("%s (%s)") % (_("Console"), title) - if (len(title) > 60): title = "%s..." % title[:57] + tlength = int(self.cfg.get("titlelength", "GUI")) + if (len(title) > tlength): title = "%s..." % title[:tlength-3] self.sysNotebook.set_tab_label_text(self.termHB, title) return False diff --git a/portato/gui/windows/preference.py b/portato/gui/windows/preference.py index 991e7b3..54db879 100644 --- a/portato/gui/windows/preference.py +++ b/portato/gui/windows/preference.py @@ -106,6 +106,10 @@ class PreferenceWindow (AbstractDialog): self.consoleFontBtn = self.tree.get_widget("consoleFontBtn") self.consoleFontBtn.set_font_name(self.cfg.get("consolefont", section = "GUI")) + # the console title length spin button + self.titleLengthSpinBtn = self.tree.get_widget("titleLengthSpinBtn") + self.titleLengthSpinBtn.set_value(int(self.cfg.get("titlelength", section = "GUI"))) + # the comboboxes self.systemTabCombo = self.tree.get_widget("systemTabCombo") self.pkgTabCombo = self.tree.get_widget("packageTabCombo") @@ -140,6 +144,8 @@ class PreferenceWindow (AbstractDialog): self.cfg.set("consolefont", font, section = "GUI") self.console_fn(font) + self.cfg.set("titlelength", self.titleLengthSpinBtn.get_value(), section = "GUI") + pkgPos = self.pkgTabCombo.get_active()+1 sysPos = self.systemTabCombo.get_active()+1 -- cgit v1.2.3-54-g00ecf From 484cef45413af0eadcc8f312a0df66de83ff4ba9 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Sun, 8 Jun 2008 00:59:22 +0200 Subject: Porthole like display in the cat list --- doc/TODO | 1 - portato/gui/windows/main.py | 43 +++++++++++++++++++++++++++++++++++++++---- 2 files changed, 39 insertions(+), 5 deletions(-) (limited to 'portato/gui') diff --git a/doc/TODO b/doc/TODO index 343de72..1d648bf 100644 --- a/doc/TODO +++ b/doc/TODO @@ -37,7 +37,6 @@ Main Point: user preferences: - show reverse dependencies - reload package table when emerge is finished - show which package has a dependency that causes a block -- make the max length of the console title a user setting [quote] I would like to be able to see at a glance: diff --git a/portato/gui/windows/main.py b/portato/gui/windows/main.py index 4eac88b..5444f81 100644 --- a/portato/gui/windows/main.py +++ b/portato/gui/windows/main.py @@ -19,6 +19,7 @@ import gobject # other import os.path import itertools as itt +from collections import defaultdict # our backend stuff from ...backend import flags, system # must be the first to avoid circular deps @@ -774,7 +775,11 @@ class MainWindow (Window): Builds the category list. """ - store = gtk.ListStore(str) + if False: + store = gtk.ListStore(str) + else: + store = gtk.TreeStore(str) + self.fill_cat_store(store) self.catList.set_model(store) @@ -799,8 +804,27 @@ class MainWindow (Window): cats = self.db.get_categories(installed = not self.showAll) - for p in cats: - store.append([p]) + if False: + for p in cats: + store.append([p]) + else: + splitCats = defaultdict(list) + for c in cats: + try: + pre, post = c.split("-", 1) + except ValueError: # no "-" in cat name -- do not split + debug("Category '%s' can't be split up. Should be no harm.", c) + splitCats["not-split"].append(c) + else: + splitCats[pre].append(post) + + for sc in splitCats: + if sc == "not-split": + it = None # append not splitted stuff to root + else: + it = store.append(None, [sc]) + for cat in splitCats[sc]: + store.append(it, [cat]) # sort them alphabetically store.set_sort_column_id(0, gtk.SORT_ASCENDING) @@ -1183,7 +1207,18 @@ class MainWindow (Window): # get the selected category store, it = selection.get_selected() if it: - self.selCatName = store.get_value(it, 0) + if False: + self.selCatName = store.get_value(it, 0) + else: + parent = store.iter_parent(it) + if parent is None: + if store.iter_has_child(it): # this is a split up selector -> do nothing + return True + else: + self.selCatName = store.get_value(it, 0) # this is a non-split up top + else: + self.selCatName = ("%s-%s" % (store.get_value(parent, 0), store.get_value(it, 0))) + self.fill_pkg_store(name = self.selCatName) return True -- cgit v1.2.3-54-g00ecf From 4b9873e84d0fdbab128ce974edcf4cf2169e9b89 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Sun, 8 Jun 2008 01:33:35 +0200 Subject: Make selection work with the other cat layout --- portato/gui/windows/main.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'portato/gui') diff --git a/portato/gui/windows/main.py b/portato/gui/windows/main.py index 5444f81..1cda7bd 100644 --- a/portato/gui/windows/main.py +++ b/portato/gui/windows/main.py @@ -1036,7 +1036,25 @@ class MainWindow (Window): for cname, path in ((x[col], x.path) for x in list.get_model()): if cname == name: pos = path + break + + if pos == "0" and isinstance(list.get_model(), gtk.TreeStore): # try the new split up + try: + pre, post = name.split("-", 1) + except ValueError: # nothing to split + pass + else: + for row in list.get_model(): + if row[col] == pre: # found first part + pos = row.path + list.expand_row(pos, False) + for cname, path in ((x[col], x.path) for x in row.iterchildren()): + if cname == post: # found second + pos = ":".join(map(str,path)) + break + break + debug("Selecting path '%s'.", pos) list.get_selection().select_path(pos) list.scroll_to_cell(pos) -- cgit v1.2.3-54-g00ecf From 64aae5f99b69042f0e23398c71bcdb1fec78fce9 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Sun, 8 Jun 2008 01:57:02 +0200 Subject: Make the new behavior configurable --- etc/portato.cfg | 16 ++++++++----- portato/gui/templates/PreferenceWindow.glade | 34 ++++++++++++++++++++++------ portato/gui/windows/main.py | 17 +++++++------- portato/gui/windows/preference.py | 12 +++++++--- 4 files changed, 54 insertions(+), 25 deletions(-) (limited to 'portato/gui') diff --git a/etc/portato.cfg b/etc/portato.cfg index 90cbace..ca20fd9 100644 --- a/etc/portato.cfg +++ b/etc/portato.cfg @@ -53,16 +53,16 @@ useperversion = False # [GUI] -; show emerge progress in window title - boolean values +; show emerge progress in window title - boolean value updatetitle = on -; show emerge process in console title - boolean values +; show emerge process in console title - boolean value updateconsole = on -; show the systray icon?- boolean values +; show the systray icon?- boolean value showsystray = true -; control whether to completely hide on minimization - boolean values +; control whether to completely hide on minimization - boolean value hideonminimize = true ; the browser to use - string value @@ -70,17 +70,21 @@ browserCmd = firefox ; search the packages while you are typing ; disable this if you own a slow machine +; - boolean value searchontype = true -; show slots in the version list +; show slots in the version list - boolean value showslots = true -; sets the font of the console - string values +; sets the font of the console - string value consolefont = Monospace 11 ; controls the maximum length of the console title - integer value titlelength = 60 +; collapse categories with the same prefix - boolean value +collapsecats = true + ; sets the position of the tabs of the two notebooks ; allowed positions: ; - 1 : top diff --git a/portato/gui/templates/PreferenceWindow.glade b/portato/gui/templates/PreferenceWindow.glade index fcdc4ec..6dbf17a 100644 --- a/portato/gui/templates/PreferenceWindow.glade +++ b/portato/gui/templates/PreferenceWindow.glade @@ -1,6 +1,6 @@ - + 5 @@ -749,13 +749,33 @@ 12 5 - + True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - Show slots in the version list - 0 - True + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Show slots in the version list + 0 + True + + + + + True + True + True + Organize the categories in a tree. Thereby collapse categories with the same prefix: +As an example: <i>app-admin</i>, <i>app-emacs</i>, and <i>app-vim</i> would be collapsed into <i><b>app</b></i> as root and <i>admin</i>, <i>emacs</i>, and <i>vim</i> as children. + Collapse categories with same prefix + 0 + True + + + 1 + + diff --git a/portato/gui/windows/main.py b/portato/gui/windows/main.py index 1cda7bd..8a2f170 100644 --- a/portato/gui/windows/main.py +++ b/portato/gui/windows/main.py @@ -775,10 +775,7 @@ class MainWindow (Window): Builds the category list. """ - if False: - store = gtk.ListStore(str) - else: - store = gtk.TreeStore(str) + store = gtk.TreeStore(str) self.fill_cat_store(store) @@ -804,9 +801,9 @@ class MainWindow (Window): cats = self.db.get_categories(installed = not self.showAll) - if False: + if not self.cfg.get_boolean("collapseCats", "GUI"): for p in cats: - store.append([p]) + store.append(None, [p]) else: splitCats = defaultdict(list) for c in cats: @@ -1038,7 +1035,9 @@ class MainWindow (Window): pos = path break - if pos == "0" and isinstance(list.get_model(), gtk.TreeStore): # try the new split up + if self.cfg.get_boolean("collapseCats", "GUI") and \ + pos == "0" and isinstance(list.get_model(), gtk.TreeStore): # try the new split up + try: pre, post = name.split("-", 1) except ValueError: # nothing to split @@ -1225,7 +1224,7 @@ class MainWindow (Window): # get the selected category store, it = selection.get_selected() if it: - if False: + if not self.cfg.get_boolean("collapseCats", "GUI"): self.selCatName = store.get_value(it, 0) else: parent = store.iter_parent(it) @@ -1532,7 +1531,7 @@ class MainWindow (Window): """ User wants to open preferences. """ - PreferenceWindow(self.window, self.cfg, self.console.set_font_from_string, self.set_uri_hook, self.set_notebook_tabpos) + PreferenceWindow(self.window, self.cfg, self.console.set_font_from_string, self.set_uri_hook, self.set_notebook_tabpos, self.fill_cat_store) return True def cb_about_clicked (self, *args): diff --git a/portato/gui/windows/preference.py b/portato/gui/windows/preference.py index 54db879..d35666d 100644 --- a/portato/gui/windows/preference.py +++ b/portato/gui/windows/preference.py @@ -24,6 +24,7 @@ class PreferenceWindow (AbstractDialog): # all checkboxes in the window # widget name -> option name checkboxes = { + "collapseCatCheck" : ("collapseCats", "GUI"), "consoleUpdateCheck" : ("updateConsole", "GUI"), "debugCheck" : "debug", "deepCheck" : "deep", @@ -56,7 +57,7 @@ class PreferenceWindow (AbstractDialog): 4 : gtk.POS_RIGHT } - def __init__ (self, parent, cfg, console_fn, linkbtn_fn, tabpos_fn): + def __init__ (self, parent, cfg, console_fn, linkbtn_fn, tabpos_fn, catmodel_fn): """Constructor. @param parent: parent window @@ -68,7 +69,9 @@ class PreferenceWindow (AbstractDialog): @param linkbtn_fn: function to call to set the linkbutton behavior @type linkbtn_fn: function(string) @param tabpos_fn: function to call to set the tabposition of the notebooks - @type tabpos_fn: function(gtk.ComboBox,int)""" + @type tabpos_fn: function(gtk.ComboBox,int) + @param catmodel_fn: function to call to set the model of the cat list (collapsed/not collapsed) + @type catmodel_fn: function()""" AbstractDialog.__init__(self, parent) @@ -79,6 +82,7 @@ class PreferenceWindow (AbstractDialog): self.console_fn = console_fn self.linkbtn_fn = linkbtn_fn self.tabpos_fn = tabpos_fn + self.catmodel_fn = catmodel_fn # set the bg-color of the hint hintEB = self.tree.get_widget("hintEB") @@ -144,7 +148,7 @@ class PreferenceWindow (AbstractDialog): self.cfg.set("consolefont", font, section = "GUI") self.console_fn(font) - self.cfg.set("titlelength", self.titleLengthSpinBtn.get_value(), section = "GUI") + self.cfg.set("titlelength", str(self.titleLengthSpinBtn.get_value_as_int()), section = "GUI") pkgPos = self.pkgTabCombo.get_active()+1 sysPos = self.systemTabCombo.get_active()+1 @@ -156,6 +160,8 @@ class PreferenceWindow (AbstractDialog): self.linkbtn_fn(self.cfg.get("browserCmd", section="GUI")) + self.catmodel_fn() + def cb_ok_clicked(self, button): """Saves, writes to config-file and closes the window.""" self._save() -- cgit v1.2.3-54-g00ecf From d8c7397b41420892474704dd3fa77eaeb5d23d12 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Sun, 8 Jun 2008 02:09:46 +0200 Subject: Updated docs and german translation --- doc/Changelog | 1 + doc/TODO | 1 - i18n/de.po | 701 ++++++++++++++------------- i18n/messages.pot | 627 ++++++++++++------------ portato/gui/templates/PreferenceWindow.glade | 4 +- 5 files changed, 697 insertions(+), 637 deletions(-) (limited to 'portato/gui') diff --git a/doc/Changelog b/doc/Changelog index ad0454f..3c95fe8 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,4 +1,5 @@ next: +- allowed collapsed categories -- similar to porthole - make max. title length of the console changeable by the user - added shortcut for "Reload Portage" - increased the maximum scrollback lines diff --git a/doc/TODO b/doc/TODO index 1d648bf..0f59b20 100644 --- a/doc/TODO +++ b/doc/TODO @@ -31,7 +31,6 @@ Main Point: user preferences: - rotating systray icon - if a package has been merged, but there are still dependencies to be merged - move the dependencies up the tree (Updater) -- use alternative way of displaying categories (tree-like - see Porthole) - move GUI prefs out of the system config - make oneshot better - show reverse dependencies diff --git a/i18n/de.po b/i18n/de.po index 98cec0c..4a454bd 100644 --- a/i18n/de.po +++ b/i18n/de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Portato\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2008-04-09 01:21+0100\n" +"PO-Revision-Date: 2008-06-08 02:09+0100\n" "Last-Translator: René 'Necoro' Neumann \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -13,22 +13,50 @@ msgstr "" "X-Poedit-SourceCharset: utf-8\n" #: portato/gui/templates/popups.glade:12 -#: portato/gui/templates/MainWindow.glade:190 -#: portato/gui/templates/MainWindow.glade:282 +#: portato/gui/templates/MainWindow.glade:192 +#: portato/gui/templates/MainWindow.glade:284 msgid "Emerge _Paused" msgstr "Emerge _angehalten" #: portato/gui/templates/popups.glade:19 -#: portato/gui/templates/MainWindow.glade:198 -#: portato/gui/templates/MainWindow.glade:264 +#: portato/gui/templates/MainWindow.glade:200 +#: portato/gui/templates/MainWindow.glade:266 msgid "_Kill Emerge" msgstr "_Kill Emerge" #: portato/gui/templates/popups.glade:37 -#: portato/gui/templates/MainWindow.glade:68 +#: portato/gui/templates/MainWindow.glade:70 msgid "gtk-quit" msgstr "" +#: portato/gui/templates/UpdateWindow.glade:7 +msgid "Updatable Packages" +msgstr "Pakete mit Updates" + +#: portato/gui/templates/UpdateWindow.glade:49 +msgid "_Close" +msgstr "_Schließen" + +#: portato/gui/templates/UpdateWindow.glade:61 +msgid "Select _All" +msgstr "_Alles auswählen" + +#: portato/gui/templates/UpdateWindow.glade:76 +msgid "_Install Selected" +msgstr "_Installiere ausgewählte" + +#: portato/gui/templates/AboutWindow.glade:8 +msgid "About Portato" +msgstr "Portato" + +#: portato/gui/templates/AboutWindow.glade:18 +msgid "" +"This software is licensed under the terms of the GPLv2.\n" +"Copyright (C) 2006-2008 René 'Necoro' Neumann " +msgstr "" +"This software is licensed under the terms of the GPLv2.\n" +"Copyright (C) 2006-2008 René 'Necoro' Neumann " + #: portato/gui/templates/PreferenceWindow.glade:7 msgid "Preferences" msgstr "Einstellungen" @@ -113,7 +141,7 @@ msgid "Use Flag and Keyword Options" msgstr "Use-Flag- und Keyword-Optionen" #: portato/gui/templates/PreferenceWindow.glade:427 -#: portato/gui/templates/MainWindow.glade:892 +#: portato/gui/templates/MainWindow.glade:895 msgid "General" msgstr "Allgemein" @@ -133,53 +161,77 @@ msgstr "Zeige den Emerge Prozess im Konsolentitel" msgid "Hide on minimization (only if systray is enabled)" msgstr "Minimiere zu Systray" +#: portato/gui/templates/PreferenceWindow.glade:520 +msgid "" +"Update the package list with the current search results while you are typing.\n" +"Note: Will slow down the typing process." +msgstr "" +"Aktualisiert die Paketliste mit den Suchergebnissen während du tippst.\n" +"Achtung: Dies verlangsamt die Reaktion auf das Tippen." + #: portato/gui/templates/PreferenceWindow.glade:522 msgid "Search while typing" msgstr "Suche währen des Tippens" -#: portato/gui/templates/PreferenceWindow.glade:573 +#: portato/gui/templates/PreferenceWindow.glade:576 msgid "Console Font" msgstr "Schriftart in Konsole" -#: portato/gui/templates/PreferenceWindow.glade:583 +#: portato/gui/templates/PreferenceWindow.glade:587 msgid "Chose a console font" msgstr "Wähle eine Schriftart" -#: portato/gui/templates/PreferenceWindow.glade:600 +#: portato/gui/templates/PreferenceWindow.glade:605 +msgid "Maximum length of the console title" +msgstr "Maximale Länge des Konsolentitels" + +#: portato/gui/templates/PreferenceWindow.glade:635 msgid "Console Options" msgstr "Konsolen Optionen" -#: portato/gui/templates/PreferenceWindow.glade:640 +#: portato/gui/templates/PreferenceWindow.glade:675 msgid "Package Tabs" msgstr "Pakettabs" -#: portato/gui/templates/PreferenceWindow.glade:665 +#: portato/gui/templates/PreferenceWindow.glade:700 msgid "System Tabs" msgstr "Systemtabs" -#: portato/gui/templates/PreferenceWindow.glade:691 +#: portato/gui/templates/PreferenceWindow.glade:726 msgid "Tab Options" msgstr "Tab Optionen" -#: portato/gui/templates/PreferenceWindow.glade:721 +#: portato/gui/templates/PreferenceWindow.glade:759 msgid "Show slots in the version list" msgstr "Zeige die Slots in der Versionsliste" -#: portato/gui/templates/PreferenceWindow.glade:732 +#: portato/gui/templates/PreferenceWindow.glade:769 +msgid "" +"Organize the categories in a tree. Thereby collapse categories with the same prefix:\n" +"As an example: app-admin, app-emacs, and app-vim would be collapsed into app as root and admin, emacs, and vim as children." +msgstr "" +"Verwalte die Kategorien in einem Baum. Dabei werden Kategorien mit einem gleich Präfix zusammengefasst:\n" +"Als Beispiel: app-admin, app-emacs und app-vim würden zusammengefasst in app als Wurzel and admin, emacs und vim als Kindelemente." + +#: portato/gui/templates/PreferenceWindow.glade:771 +msgid "Collapse categories with same prefix" +msgstr "Fasse Kategorien mit gleichem Präfix zusammen" + +#: portato/gui/templates/PreferenceWindow.glade:787 msgid "Package Options" msgstr "Paket Optionen" -#: portato/gui/templates/PreferenceWindow.glade:756 +#: portato/gui/templates/PreferenceWindow.glade:811 msgid "Visual" msgstr "Oberfläche" -#: portato/gui/templates/PreferenceWindow.glade:774 +#: portato/gui/templates/PreferenceWindow.glade:829 #: portato/gui/templates/PluginWindow.glade:47 #: portato/gui/templates/SearchWindow.glade:48 msgid "gtk-cancel" msgstr "" -#: portato/gui/templates/PreferenceWindow.glade:783 +#: portato/gui/templates/PreferenceWindow.glade:838 #: portato/gui/templates/PluginWindow.glade:59 msgid "gtk-apply" msgstr "" @@ -188,34 +240,6 @@ msgstr "" msgid "Plugins" msgstr "Plugins" -#: portato/gui/templates/UpdateWindow.glade:7 -msgid "Updateble Packages" -msgstr "Pakete mit Updates" - -#: portato/gui/templates/UpdateWindow.glade:49 -msgid "_Close" -msgstr "_Schließen" - -#: portato/gui/templates/UpdateWindow.glade:61 -msgid "Select _All" -msgstr "_Alles auswählen" - -#: portato/gui/templates/UpdateWindow.glade:76 -msgid "_Install Selected" -msgstr "_Installiere ausgewählte" - -#: portato/gui/templates/AboutWindow.glade:8 -msgid "About Portato" -msgstr "Portato" - -#: portato/gui/templates/AboutWindow.glade:18 -msgid "" -"This software is licensed under the terms of the GPLv2.\n" -"Copyright (C) 2006-2007 René 'Necoro' Neumann " -msgstr "" -"This software is licensed under the terms of the GPLv2.\n" -"Copyright (C) 2006-2007 René 'Necoro' Neumann " - #: portato/gui/templates/SearchWindow.glade:8 msgid "Search Results" msgstr "Ergebnisse" @@ -240,267 +264,223 @@ msgstr "_Einstellungen" msgid "Re_load Portage" msgstr "Aktua_lisiere Portage-Cache" -#: portato/gui/templates/MainWindow.glade:81 +#: portato/gui/templates/MainWindow.glade:83 msgid "_Emerge" msgstr "_Emerge" -#: portato/gui/templates/MainWindow.glade:89 +#: portato/gui/templates/MainWindow.glade:91 msgid "_Install" msgstr "_Installieren" -#: portato/gui/templates/MainWindow.glade:105 +#: portato/gui/templates/MainWindow.glade:107 msgid "_Uninstall" msgstr "_Deinstallieren" -#: portato/gui/templates/MainWindow.glade:121 -#: portato/gui/templates/MainWindow.glade:1111 +#: portato/gui/templates/MainWindow.glade:123 +#: portato/gui/templates/MainWindow.glade:1114 msgid "Update _World" msgstr "Update _World" -#: portato/gui/templates/MainWindow.glade:130 +#: portato/gui/templates/MainWindow.glade:132 msgid "Show Updatable P_ackages" msgstr "Zeige Pakete mit _Updates" -#: portato/gui/templates/MainWindow.glade:139 +#: portato/gui/templates/MainWindow.glade:141 msgid "Show _Only Installed Packages" msgstr "_Zeige nur installierte Pakete" -#: portato/gui/templates/MainWindow.glade:153 +#: portato/gui/templates/MainWindow.glade:155 msgid "_Sync" msgstr "_Sync" -#: portato/gui/templates/MainWindow.glade:169 +#: portato/gui/templates/MainWindow.glade:171 msgid "Save _Flags" msgstr "Speichere _Flags" -#: portato/gui/templates/MainWindow.glade:221 -#: portato/gui/templates/MainWindow.glade:1167 -#: portato/gui/windows/main.py:852 +#: portato/gui/templates/MainWindow.glade:223 +#: portato/gui/templates/MainWindow.glade:1170 +#: portato/gui/windows/main.py:767 msgid "Queue" msgstr "Queue" -#: portato/gui/templates/MainWindow.glade:228 +#: portato/gui/templates/MainWindow.glade:230 msgid "Oneshot" msgstr "Oneshot" -#: portato/gui/templates/MainWindow.glade:240 -#: portato/gui/templates/MainWindow.glade:1192 -#: portato/gui/windows/main.py:1165 -#: portato/gui/windows/main.py:1167 +#: portato/gui/templates/MainWindow.glade:242 +#: portato/gui/templates/MainWindow.glade:1195 +#: portato/gui/windows/main.py:1206 +#: portato/gui/windows/main.py:1208 msgid "Console" msgstr "Konsole" -#: portato/gui/templates/MainWindow.glade:247 +#: portato/gui/templates/MainWindow.glade:249 msgid "_Copy" msgstr "_Kopieren" -#: portato/gui/templates/MainWindow.glade:293 +#: portato/gui/templates/MainWindow.glade:295 msgid "Plu_gins" msgstr "Plu_gins" -#: portato/gui/templates/MainWindow.glade:305 +#: portato/gui/templates/MainWindow.glade:307 msgid "_?" msgstr "_?" -#: portato/gui/templates/MainWindow.glade:313 +#: portato/gui/templates/MainWindow.glade:315 msgid "_About" msgstr "_Über" -#: portato/gui/templates/MainWindow.glade:331 +#: portato/gui/templates/MainWindow.glade:333 msgid "_Plugins" msgstr "_Plugins" -#: portato/gui/templates/MainWindow.glade:373 +#: portato/gui/templates/MainWindow.glade:375 msgid "gtk-delete" msgstr "" -#: portato/gui/templates/MainWindow.glade:387 +#: portato/gui/templates/MainWindow.glade:389 msgid "gtk-find" msgstr "" -#: portato/gui/templates/MainWindow.glade:504 -#: portato/gui/templates/MainWindow.glade:744 -#: portato/gui/templates/MainWindow.glade:760 -#: portato/gui/templates/MainWindow.glade:872 +#: portato/gui/templates/MainWindow.glade:505 +#: portato/gui/templates/MainWindow.glade:623 +#: portato/gui/templates/MainWindow.glade:736 +#: portato/gui/templates/MainWindow.glade:751 msgid "label" msgstr "" -#: portato/gui/templates/MainWindow.glade:513 +#: portato/gui/templates/MainWindow.glade:516 msgid "Install onto system" msgstr "Füge zum System hinzu" -#: portato/gui/templates/MainWindow.glade:536 +#: portato/gui/templates/MainWindow.glade:539 msgid "Uninstall from system" msgstr "Lösche vom System" -#: portato/gui/templates/MainWindow.glade:638 -msgid "Use Flags:" -msgstr "Use Flags:" +#: portato/gui/templates/MainWindow.glade:639 +msgid "License:" +msgstr "Lizenz:" #: portato/gui/templates/MainWindow.glade:656 -#: portato/gui/windows/main.py:524 -#: portato/gui/windows/main.py:527 -#: portato/gui/windows/main.py:587 -#: portato/gui/windows/main.py:591 -msgid "Testing" -msgstr "Testing" - -#: portato/gui/templates/MainWindow.glade:689 -#: portato/gui/windows/main.py:507 -#: portato/gui/windows/main.py:510 -#: portato/gui/windows/main.py:513 -#: portato/gui/windows/main.py:614 -#: portato/gui/windows/main.py:618 -#: portato/gui/windows/main.py:625 -#: portato/gui/windows/main.py:629 -msgid "Masked" -msgstr "Masked" +msgid "Installed, but not in portage anymore" +msgstr "Installiert, aber nicht mehr im Portage-Tree vorhanden" -#: portato/gui/templates/MainWindow.glade:708 -#: portato/gui/windows/main.py:344 -msgid "Installed" -msgstr "Installiert" +#: portato/gui/templates/MainWindow.glade:671 +msgid "MISSING KEYWORD" +msgstr "FEHLENDES KEYWORD" -#: portato/gui/templates/MainWindow.glade:726 -msgid "Homepage:" -msgstr "Homepage:" +#: portato/gui/templates/MainWindow.glade:703 +msgid "Description:" +msgstr "Beschreibung:" -#: portato/gui/templates/MainWindow.glade:775 +#: portato/gui/templates/MainWindow.glade:719 msgid "Overlay:" msgstr "Overlay:" -#: portato/gui/templates/MainWindow.glade:792 -msgid "Description:" -msgstr "Beschreibung:" +#: portato/gui/templates/MainWindow.glade:767 +msgid "Homepage:" +msgstr "Homepage:" -#: portato/gui/templates/MainWindow.glade:824 -msgid "MISSING KEYWORD" -msgstr "FEHLENDES KEYWORD" +#: portato/gui/templates/MainWindow.glade:785 +#: portato/gui/windows/main.py:327 +msgid "Installed" +msgstr "Installiert" -#: portato/gui/templates/MainWindow.glade:839 -msgid "Installed, but not in portage anymore" -msgstr "Installiert, aber nicht mehr im Portage-Tree vorhanden" +#: portato/gui/templates/MainWindow.glade:804 +#: portato/gui/windows/main.py:402 +#: portato/gui/windows/main.py:405 +#: portato/gui/windows/main.py:408 +#: portato/gui/windows/main.py:507 +#: portato/gui/windows/main.py:511 +#: portato/gui/windows/main.py:518 +#: portato/gui/windows/main.py:522 +msgid "Masked" +msgstr "Masked" -#: portato/gui/templates/MainWindow.glade:854 -msgid "License:" -msgstr "Lizenz:" +#: portato/gui/templates/MainWindow.glade:837 +#: portato/gui/windows/main.py:419 +#: portato/gui/windows/main.py:422 +#: portato/gui/windows/main.py:480 +#: portato/gui/windows/main.py:484 +msgid "Testing" +msgstr "Testing" + +#: portato/gui/templates/MainWindow.glade:856 +msgid "Use Flags:" +msgstr "Use Flags:" -#: portato/gui/templates/MainWindow.glade:923 +#: portato/gui/templates/MainWindow.glade:926 msgid "Use List" msgstr "Use-Flag-Liste" -#: portato/gui/templates/MainWindow.glade:957 +#: portato/gui/templates/MainWindow.glade:960 msgid "Dependencies" msgstr "Abhängigkeiten" -#: portato/gui/templates/MainWindow.glade:984 +#: portato/gui/templates/MainWindow.glade:987 msgid "Ebuild" msgstr "Ebuild" -#: portato/gui/templates/MainWindow.glade:1011 +#: portato/gui/templates/MainWindow.glade:1014 msgid "Changelog" msgstr "Changelog" -#: portato/gui/templates/MainWindow.glade:1038 +#: portato/gui/templates/MainWindow.glade:1041 msgid "Files" msgstr "Dateien" -#: portato/gui/templates/MainWindow.glade:1076 +#: portato/gui/templates/MainWindow.glade:1079 msgid "Execute the current selected queue" msgstr "Führe die aktuell gewählte Queue aus" -#: portato/gui/templates/MainWindow.glade:1095 +#: portato/gui/templates/MainWindow.glade:1098 msgid "E_xecute" msgstr "_Ausführen" -#: portato/gui/templates/MainWindow.glade:1110 +#: portato/gui/templates/MainWindow.glade:1113 msgid "Calculate the packages which will be installed during an \"update world\"" msgstr "Berechnet die Pakete, welche während eines \"update world\" installiert werden würden" -#: portato/gui/templates/MainWindow.glade:1123 +#: portato/gui/templates/MainWindow.glade:1126 msgid "Remove the selected package from the queue" msgstr "Löscht das gewählte Paket aus der Queue" -#: portato/gui/templates/MainWindow.glade:1124 +#: portato/gui/templates/MainWindow.glade:1127 msgid "_Remove" msgstr "_Löschen" -#: portato/gui/templates/MainWindow.glade:1226 +#: portato/gui/templates/MainWindow.glade:1230 msgid "Log" msgstr "Log" -#: portato/config_parser.py:271 -#, python-format -msgid "Unrecognized line in configuration: %s" -msgstr "Unbekannte Zeile in Konfiguration: %s" - -#: portato/plugins/notify.py:11 -msgid "Notify called while process is still running!" -msgstr "\"Notify\" aufgerufen, während Emerge noch lief." +#: portato.py:40 +msgid "validates the given plugin xml instead of launching Portato" +msgstr "Validiert die gegebene Plugin-XML. Startet nicht Portato." -#: portato/plugins/notify.py:15 -msgid "Emerge finished!" -msgstr "Emerge-Prozess erfolgreich beendet!" +#: portato.py:43 +msgid "do not fork off as root" +msgstr "erzeuge keinen Root-Prozess" -#: portato/plugins/notify.py:19 -msgid "Emerge failed!" -msgstr "Emerge fehlgeschlagen!" +#: portato.py:43 +msgid "-L is deprecated" +msgstr "-L ist veraltet" -#: portato/plugins/notify.py:20 +#: portato.py:53 #, python-format -msgid "Error Code: %d" -msgstr "Fehler-Code: %d" - -#: portato/plugins/resume_loop.py:30 -msgid "Resume-loop called while process is still running!" -msgstr "\"Resume-Loop\" aufgerufen, während Emerge noch lief. Bug!" - -#: portato/plugins/etc_proposals.py:25 -msgid "Cannot start etc-proposals. Not root!" -msgstr "Kann etc-proposals nicht starten. Nur root kann das!" - -#: portato/plistener.py:89 -msgid "Listener has not been started." -msgstr "Listener wurde nicht gestartet." - -#: portato/gui/exception_handling.py:45 -msgid "A programming error has been detected during the execution of this program." -msgstr "Ein Fehler ist aufgetreten." - -#: portato/gui/exception_handling.py:46 -msgid "Bug Detected" -msgstr "Fehler aufgetreten" - -#: portato/gui/exception_handling.py:47 -msgid "It probably isn't fatal, but should be reported to the developers nonetheless." -msgstr "Dies ist möglicherweise nicht kritisch, sollte aber trotzdem an die Entwickler weitergeleitet werden." - -#: portato/gui/exception_handling.py:49 -msgid "Show Details" -msgstr "Details" +msgid "Validation failed. XML syntax error: %s." +msgstr "Validierung fehlgeschlagen. XML Syntax Fehler: %s." -#: portato/gui/exception_handling.py:72 -#: portato/gui/exception_handling.py:135 -#, python-format -msgid "" -"Exception in thread \"%(thread)s\":\n" -"%(trace)s" -msgstr "" -"Exception im Thread \"%(thread)s\":\n" -"%(trace)s" +#: portato.py:56 +msgid "Validation failed. Does not comply with schema." +msgstr "Validierung gegen das Schema fehlgeschlagen." -#: portato/gui/exception_handling.py:88 -msgid "Save traceback..." -msgstr "Speichere Traceback..." +#: portato.py:59 +msgid "Validation succeeded." +msgstr "Validierung erfolgreich." -#: portato/gui/exception_handling.py:137 -#, python-format -msgid "" -"Exception:\n" -"%s" -msgstr "" -"Exception:\n" -"%s" +#: portato.py:65 +msgid "Starting Portato" +msgstr "Starte Portato" #: portato/gui/wrapper.py:59 msgid "oneshot" @@ -544,11 +524,6 @@ msgstr "Deinstallieren" msgid "Update" msgstr "Update" -#: portato/gui/updater.py:95 -#, python-format -msgid "Trying to remove package '%s' from queue which does not exist in system." -msgstr "Das Paket '%s' sollte aus der Queue entfernt werden, aber es befindet sich nicht im System." - #: portato/gui/dialogs.py:17 msgid "" "There are some packages in the emerge queue and/or an emerge process is running.\n" @@ -604,8 +579,85 @@ msgstr "" msgid "Do you really want to clear the whole queue?" msgstr "Wirklich die gesamte Queue löschen?" +#: portato/gui/views.py:70 +msgid "Package is not installed" +msgstr "Paket ist nicht installiert" + +#: portato/gui/views.py:87 +#, python-format +msgid "No %(old)s language file installed. Falling back to %(new)s." +msgstr "Keine \"%(old)s\" Syntaxdatei gefunden. Benutze \"%(new)s\"-Syntax." + +#: portato/gui/views.py:96 +#, python-format +msgid "No %(old)s language file installed. Disable highlighting." +msgstr "Keine \"%(old)s\" Syntaxdatei gefunden. Deaktiviere Hervorhebung." + +#: portato/gui/views.py:115 +#: portato/gui/windows/main.py:670 +#, python-format +msgid "Error: %s" +msgstr "Fehler: %s" + +#: portato/gui/updater.py:96 +#, python-format +msgid "No unmasked version of package '%s' found. Trying masked ones. This normally should not happen..." +msgstr "Keine demaskierte Version vom Paket '%s' gefunden. Versuche die maskierten. Eigentlich sollte das nicht passieren..." + +#: portato/gui/updater.py:100 +#, python-format +msgid "Trying to remove package '%s' from queue which does not exist in system." +msgstr "Das Paket '%s' sollte aus der Queue entfernt werden, aber es befindet sich nicht im System." + +#: portato/gui/exception_handling.py:51 +msgid "A programming error has been detected during the execution of this program." +msgstr "Ein Fehler ist aufgetreten." + +#: portato/gui/exception_handling.py:52 +msgid "Bug Detected" +msgstr "Fehler aufgetreten" + +#: portato/gui/exception_handling.py:53 +msgid "It probably isn't fatal, but should be reported to the developers nonetheless." +msgstr "Dies ist möglicherweise nicht kritisch, sollte aber trotzdem an die Entwickler weitergeleitet werden." + +#: portato/gui/exception_handling.py:55 +msgid "Show Details" +msgstr "Details" + +#: portato/gui/exception_handling.py:78 +#: portato/gui/exception_handling.py:142 +#, python-format +msgid "" +"Exception in thread \"%(thread)s\":\n" +"%(trace)s" +msgstr "" +"Exception im Thread \"%(thread)s\":\n" +"%(trace)s" + +#: portato/gui/exception_handling.py:94 +msgid "Save traceback..." +msgstr "Speichere Traceback..." + +#: portato/gui/exception_handling.py:144 +#, python-format +msgid "" +"Exception:\n" +"%s" +msgstr "" +"Exception:\n" +"%s" + +#: portato/gui/__init__.py:21 +msgid "Loading Backend" +msgstr "Lade Backend" + +#: portato/gui/windows/search.py:57 +msgid "Results" +msgstr "Ergebnisse" + #: portato/gui/windows/update.py:47 -#: portato/gui/windows/main.py:343 +#: portato/gui/windows/main.py:326 #: portato/gui/windows/plugin.py:24 msgid "Enabled" msgstr "Aktiviert" @@ -614,132 +666,142 @@ msgstr "Aktiviert" msgid "Package" msgstr "Paket" -#: portato/gui/windows/splash.py:36 +#: portato/gui/windows/splash.py:35 #, python-format msgid "... is starting up: %s" msgstr "... startet: %s" -#: portato/gui/windows/main.py:172 +#: portato/gui/windows/preference.py:124 +msgid "Top" +msgstr "Oben" + +#: portato/gui/windows/preference.py:124 +msgid "Bottom" +msgstr "Unten" + +#: portato/gui/windows/preference.py:124 +msgid "Left" +msgstr "Links" + +#: portato/gui/windows/preference.py:124 +msgid "Right" +msgstr "Rechts" + +#: portato/gui/windows/main.py:155 msgid "" msgstr "" -#: portato/gui/windows/main.py:198 +#: portato/gui/windows/main.py:181 msgid "The first homepage part does not start with 'http' or 'ftp'." msgstr "Der erste Teil der Homepage startet nicht mit 'http' oder 'ftp'." -#: portato/gui/windows/main.py:202 +#: portato/gui/windows/main.py:185 msgid "Blank inside homepage." msgstr "Leerzeichen innerhalb der Homepage-URL." -#: portato/gui/windows/main.py:243 +#: portato/gui/windows/main.py:226 #, python-format msgid "If '%s' is disabled" msgstr "Wenn '%s' deaktiviert ist" -#: portato/gui/windows/main.py:245 +#: portato/gui/windows/main.py:228 #, python-format msgid "If '%s' is enabled" msgstr "Wenn '%s' aktiviert ist" -#: portato/gui/windows/main.py:253 +#: portato/gui/windows/main.py:236 msgid "One of the following" msgstr "Eins der folgenden" -#: portato/gui/windows/main.py:257 +#: portato/gui/windows/main.py:240 msgid "All of the following" msgstr "Alle folgenden" -#: portato/gui/windows/main.py:280 +#: portato/gui/windows/main.py:263 msgid "Can't display dependencies: This package has an unsupported dependency string." msgstr "Kann Abhängigkeiten nicht anzeigen: Format der Abhängigkeiten des Pakets wird nicht unterstützt." -#: portato/gui/windows/main.py:304 +#: portato/gui/windows/main.py:287 msgid "This is an expanded use flag and cannot be selected" msgstr "Dies ist ein \"Expanded Use Flag\" und kann daher nicht ausgewählt werden." -#: portato/gui/windows/main.py:345 +#: portato/gui/windows/main.py:328 msgid "Flag" msgstr "Flag" -#: portato/gui/windows/main.py:346 +#: portato/gui/windows/main.py:329 msgid "Description" msgstr "Beschreibung" -#: portato/gui/windows/main.py:357 -msgid "Versions" -msgstr "Versionen" - -#: portato/gui/windows/main.py:360 -msgid "Slot" -msgstr "Slot" - -#: portato/gui/windows/main.py:454 +#: portato/gui/windows/main.py:349 #, python-format msgid "Package could not be found: %s" msgstr "Paket konnte nicht gefunden werden: %s" -#: portato/gui/windows/main.py:516 -#: portato/gui/windows/main.py:616 +#: portato/gui/windows/main.py:411 +#: portato/gui/windows/main.py:509 msgid "Masked by user" msgstr "Vom Benutzer maskiert" -#: portato/gui/windows/main.py:699 +#: portato/gui/windows/main.py:592 msgid "Loading Config" msgstr "Lade Konfiguration" -#: portato/gui/windows/main.py:711 +#: portato/gui/windows/main.py:604 msgid "Creating Database" msgstr "Erstelle Datenbank" -#: portato/gui/windows/main.py:716 +#: portato/gui/windows/main.py:609 msgid "Loading Plugins" msgstr "Lade Plugins" -#: portato/gui/windows/main.py:729 +#: portato/gui/windows/main.py:622 msgid "Building frontend" msgstr "Erstelle Oberfläche" -#: portato/gui/windows/main.py:772 -#: portato/gui/views.py:115 -#, python-format -msgid "Error: %s" -msgstr "Fehler: %s" - -#: portato/gui/windows/main.py:811 +#: portato/gui/windows/main.py:709 msgid "Restoring Session" msgstr "Lade Session" -#: portato/gui/windows/main.py:820 +#: portato/gui/windows/main.py:718 msgid "Finishing startup" msgstr "Erledige letzte Handgriffe :)" -#: portato/gui/windows/main.py:855 +#: portato/gui/windows/main.py:770 msgid "Options" msgstr "Optionen" -#: portato/gui/windows/main.py:867 +#: portato/gui/windows/main.py:784 msgid "Categories" msgstr "Kategorien" -#: portato/gui/windows/main.py:903 +#: portato/gui/windows/main.py:843 msgid "Packages" msgstr "Pakete" -#: portato/gui/windows/main.py:971 +#: portato/gui/windows/main.py:891 +msgid "Versions" +msgstr "Versionen" + +#: portato/gui/windows/main.py:894 +msgid "Slot" +msgstr "Slot" + +#: portato/gui/windows/main.py:992 #, python-format msgid "Translating session from version %d to %d." msgstr "Upgrade Session von Version %d auf Version %d." -#: portato/gui/windows/main.py:974 +#: portato/gui/windows/main.py:995 #, python-format msgid "Cannot translate session from version %d to %d." msgstr "Kann Session nicht von Version %d nach %d upgraden." -#: portato/gui/windows/main.py:1296 +#: portato/gui/windows/main.py:1358 msgid "use flags" msgstr "Use Flags" -#: portato/gui/windows/main.py:1307 +#: portato/gui/windows/main.py:1369 msgid "masking keywords" msgstr "Masking Keywords" @@ -767,26 +829,6 @@ msgstr "Entwickler" msgid "Status" msgstr "Status" -#: portato/gui/windows/search.py:57 -msgid "Results" -msgstr "Ergebnisse" - -#: portato/gui/windows/preference.py:116 -msgid "Top" -msgstr "Oben" - -#: portato/gui/windows/preference.py:116 -msgid "Bottom" -msgstr "Unten" - -#: portato/gui/windows/preference.py:116 -msgid "Left" -msgstr "Links" - -#: portato/gui/windows/preference.py:116 -msgid "Right" -msgstr "Rechts" - #: portato/gui/session.py:21 msgid "Version mismatch." msgstr "Versionen stimmen nicht überein." @@ -818,132 +860,119 @@ msgstr "Catched KeyError => %s scheint keine valide Kategorie zu sein. Hast du m msgid "Error while compiling search expression: '%s'." msgstr "Fehler beim erstellen des Suchausdrucks: '%s'." -#: portato/gui/views.py:70 -msgid "Package is not installed" -msgstr "Paket ist nicht installiert" +#: portato/backend/flags.py:527 +#, python-format +msgid "Conflicting values for masking status: %s" +msgstr "Konflikt beim Masking-Status: %s" -#: portato/gui/views.py:87 +#: portato/backend/portage/system.py:343 #, python-format -msgid "No %(old)s language file installed. Falling back to %(new)s." -msgstr "Keine \"%(old)s\" Syntaxdatei gefunden. Benutze \"%(new)s\"-Syntax." +msgid "No best match for %s. It seems not to be in the tree anymore." +msgstr "Es konnte kein bester Treffer für das Paket %s gefunden werden. Es scheint sich nicht mehr im Tree zu befinden." -#: portato/gui/views.py:96 +#: portato/backend/portage/system.py:413 #, python-format -msgid "No %(old)s language file installed. Disable highlighting." -msgstr "Keine \"%(old)s\" Syntaxdatei gefunden. Deaktiviere Hervorhebung." +msgid "Found a not installed dependency: %s." +msgstr "Nicht installierte Abhängigkeit gefunden: %s" -#: portato/gui/__init__.py:22 -msgid "Loading Backend" -msgstr "Lade Backend" +#: portato/backend/portage/system.py:455 +#, python-format +msgid "Bug? No best match could be found for '%(package)s'. Needed by: '%(cpv)s'." +msgstr "Es konnte kein bester Treffer für das Paket '%(package)s' ermittelt werden (gebraucht von '%(cpv)s'). Bug?" -#: portato/backend/catapult/package.py:99 -#: portato/backend/portage/package.py:132 +#: portato/backend/portage/package.py:131 +#: portato/backend/catapult/package.py:98 #, python-format msgid "BUG in flags.new_masking_status. It returns '%s'" msgstr "BUG in flags.new_masking_status. Es gibt '%s' zurück." -#: portato/backend/flags.py:528 -#, python-format -msgid "Conflicting values for masking status: %s" -msgstr "Konflikt beim Masking-Status: %s" +#: portato/helper.py:76 +msgid "Invalid dependency string" +msgstr "Ungültiger Dependency-String." -#: portato/backend/portage/system.py:333 +#: portato/session.py:47 #, python-format -msgid "No best match for %s. It seems not to be in the tree anymore." -msgstr "Es konnte kein bester Treffer für das Paket %s gefunden werden. Es scheint sich nicht mehr im Tree zu befinden." +msgid "Loading session from '%s'." +msgstr "Lade Session von '%s'." + +#: portato/plistener.py:88 +msgid "Listener has not been started." +msgstr "Listener wurde nicht gestartet." + +#: portato/plugins/etc_proposals.py:24 +msgid "Cannot start etc-proposals. Not root!" +msgstr "Kann etc-proposals nicht starten. Nur root kann das!" + +#: portato/plugins/resume_loop.py:29 +msgid "Resume-loop called while process is still running!" +msgstr "\"Resume-Loop\" aufgerufen, während Emerge noch lief. Bug!" + +#: portato/plugins/notify.py:10 +msgid "Notify called while process is still running!" +msgstr "\"Notify\" aufgerufen, während Emerge noch lief." -#: portato/backend/portage/system.py:403 +#: portato/plugins/notify.py:14 +msgid "Emerge finished!" +msgstr "Emerge-Prozess erfolgreich beendet!" + +#: portato/plugins/notify.py:18 +msgid "Emerge failed!" +msgstr "Emerge fehlgeschlagen!" + +#: portato/plugins/notify.py:19 #, python-format -msgid "Found a not installed dependency: %s." -msgstr "Nicht installierte Abhängigkeit gefunden: %s" +msgid "Error Code: %d" +msgstr "Fehler-Code: %d" -#: portato/backend/portage/system.py:445 +#: portato/config_parser.py:270 #, python-format -msgid "Bug? No best match could be found for '%(package)s'. Needed by: '%(cpv)s'." -msgstr "Es konnte kein bester Treffer für das Paket '%(package)s' ermittelt werden (gebraucht von '%(cpv)s'). Bug?" +msgid "Unrecognized line in configuration: %s" +msgstr "Unbekannte Zeile in Konfiguration: %s" -#: portato/plugin.py:298 -#: portato/plugin.py:304 -#: portato/plugin.py:309 +#: portato/plugin.py:297 +#: portato/plugin.py:303 +#: portato/plugin.py:308 #, python-format msgid "%s cannot be imported." msgstr "%s kann nicht importiert werden." -#: portato/plugin.py:336 +#: portato/plugin.py:335 #, python-format msgid "Accessing hook '%(hook)s' of plugin '%(plugin)s' (before)." msgstr "Aufruf des Hooks '%(hook)s' vom Plugin '%(plugin)s'. (before)" -#: portato/plugin.py:340 +#: portato/plugin.py:339 #, python-format msgid "Overriding hook '%(hook)s' with plugin '%(plugin)s'." msgstr "Überschreibe den Hook '%(hook)s' mit Plugin '%(plugin)s'." -#: portato/plugin.py:347 +#: portato/plugin.py:346 #, python-format msgid "Accessing hook '%(hook)s' of plugin '%(plugin)s' (after)." msgstr "Aufruf des Hooks '%(hook)s' vom Plugin '%(plugin)s'. (after)" -#: portato/plugin.py:367 +#: portato/plugin.py:366 #, python-format msgid "Loading plugin '%s' failed. Invalid XML syntax." msgstr "Laden des Plugins '%s\" fehlgeschlagen: XML-Syntax-Fehler." -#: portato/plugin.py:370 +#: portato/plugin.py:369 #, python-format msgid "Loading plugin '%s' failed. Plugin does not comply with schema." msgstr "Laden des Plugins '%s\" fehlgeschlagen. Plugin erfüllt nicht das XML-Schema." -#: portato/plugin.py:398 +#: portato/plugin.py:397 #, python-format msgid "Plugin '%s' loaded." msgstr "Plugin '%s' geladen." -#: portato/plugin.py:401 +#: portato/plugin.py:400 #, python-format msgid "Loading plugin '%(plugin)s' failed: Could not import %(import)s" msgstr "Laden des Plugins '%(plugin)s\" fehlgeschlagen. Import von '%(import)s' nicht möglich." -#: portato/plugin.py:466 +#: portato/plugin.py:465 #, python-format msgid "For hook '%(hook)s' an override is already defined by plugin '%(plugin)s'!" msgstr "Das Plugin '%(plugin)s' definiert bereits einen \"Override\" fürr den Hook '%(hook)s'!" -#: portato/session.py:47 -#, python-format -msgid "Loading session from '%s'." -msgstr "Lade Session von '%s'." - -#: portato/helper.py:77 -msgid "Invalid dependency string" -msgstr "Ungültiger Dependency-String." - -#: portato.py:42 -msgid "validates the given plugin xml instead of launching Portato" -msgstr "Validiert die gegebene Plugin-XML. Startet nicht Portato." - -#: portato.py:45 -msgid "do not fork off as root" -msgstr "erzeuge keinen Root-Prozess" - -#: portato.py:45 -msgid "-L is deprecated" -msgstr "-L ist veraltet" - -#: portato.py:55 -#, python-format -msgid "Validation failed. XML syntax error: %s." -msgstr "Validierung fehlgeschlagen. XML Syntax Fehler: %s." - -#: portato.py:58 -msgid "Validation failed. Does not comply with schema." -msgstr "Validierung gegen das Schema fehlgeschlagen." - -#: portato.py:61 -msgid "Validation succeeded." -msgstr "Validierung erfolgreich." - -#: portato.py:67 -msgid "Starting Portato" -msgstr "Starte Portato" - diff --git a/i18n/messages.pot b/i18n/messages.pot index 0bf4561..ff0bf5d 100644 --- a/i18n/messages.pot +++ b/i18n/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-04-09 00:53+0200\n" +"POT-Creation-Date: 2008-06-08 02:05+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,22 +17,48 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: portato/gui/templates/popups.glade:12 -#: portato/gui/templates/MainWindow.glade:190 -#: portato/gui/templates/MainWindow.glade:282 +#: portato/gui/templates/MainWindow.glade:192 +#: portato/gui/templates/MainWindow.glade:284 msgid "Emerge _Paused" msgstr "" #: portato/gui/templates/popups.glade:19 -#: portato/gui/templates/MainWindow.glade:198 -#: portato/gui/templates/MainWindow.glade:264 +#: portato/gui/templates/MainWindow.glade:200 +#: portato/gui/templates/MainWindow.glade:266 msgid "_Kill Emerge" msgstr "" #: portato/gui/templates/popups.glade:37 -#: portato/gui/templates/MainWindow.glade:68 +#: portato/gui/templates/MainWindow.glade:70 msgid "gtk-quit" msgstr "" +#: portato/gui/templates/UpdateWindow.glade:7 +msgid "Updatable Packages" +msgstr "" + +#: portato/gui/templates/UpdateWindow.glade:49 +msgid "_Close" +msgstr "" + +#: portato/gui/templates/UpdateWindow.glade:61 +msgid "Select _All" +msgstr "" + +#: portato/gui/templates/UpdateWindow.glade:76 +msgid "_Install Selected" +msgstr "" + +#: portato/gui/templates/AboutWindow.glade:8 +msgid "About Portato" +msgstr "" + +#: portato/gui/templates/AboutWindow.glade:18 +msgid "" +"This software is licensed under the terms of the GPLv2.\n" +"Copyright (C) 2006-2008 René 'Necoro' Neumann " +msgstr "" + #: portato/gui/templates/PreferenceWindow.glade:7 msgid "Preferences" msgstr "" @@ -112,7 +138,7 @@ msgid "Use Flag and Keyword Options" msgstr "" #: portato/gui/templates/PreferenceWindow.glade:427 -#: portato/gui/templates/MainWindow.glade:892 +#: portato/gui/templates/MainWindow.glade:895 msgid "General" msgstr "" @@ -132,53 +158,77 @@ msgstr "" msgid "Hide on minimization (only if systray is enabled)" msgstr "" +#: portato/gui/templates/PreferenceWindow.glade:520 +msgid "" +"Update the package list with the current search results while you are " +"typing.\n" +"Note: Will slow down the typing process." +msgstr "" + #: portato/gui/templates/PreferenceWindow.glade:522 msgid "Search while typing" msgstr "" -#: portato/gui/templates/PreferenceWindow.glade:573 +#: portato/gui/templates/PreferenceWindow.glade:576 msgid "Console Font" msgstr "" -#: portato/gui/templates/PreferenceWindow.glade:583 +#: portato/gui/templates/PreferenceWindow.glade:587 msgid "Chose a console font" msgstr "" -#: portato/gui/templates/PreferenceWindow.glade:600 +#: portato/gui/templates/PreferenceWindow.glade:605 +msgid "Maximum length of the console title" +msgstr "" + +#: portato/gui/templates/PreferenceWindow.glade:635 msgid "Console Options" msgstr "" -#: portato/gui/templates/PreferenceWindow.glade:640 +#: portato/gui/templates/PreferenceWindow.glade:675 msgid "Package Tabs" msgstr "" -#: portato/gui/templates/PreferenceWindow.glade:665 +#: portato/gui/templates/PreferenceWindow.glade:700 msgid "System Tabs" msgstr "" -#: portato/gui/templates/PreferenceWindow.glade:691 +#: portato/gui/templates/PreferenceWindow.glade:726 msgid "Tab Options" msgstr "" -#: portato/gui/templates/PreferenceWindow.glade:721 +#: portato/gui/templates/PreferenceWindow.glade:759 msgid "Show slots in the version list" msgstr "" -#: portato/gui/templates/PreferenceWindow.glade:732 +#: portato/gui/templates/PreferenceWindow.glade:769 +msgid "" +"Organize the categories in a tree. Thereby collapse categories with the same " +"prefix:\n" +"As an example: app-admin, app-emacs, and app-vim would " +"be collapsed into app as root and admin, emacs, " +"and vim as children." +msgstr "" + +#: portato/gui/templates/PreferenceWindow.glade:771 +msgid "Collapse categories with same prefix" +msgstr "" + +#: portato/gui/templates/PreferenceWindow.glade:787 msgid "Package Options" msgstr "" -#: portato/gui/templates/PreferenceWindow.glade:756 +#: portato/gui/templates/PreferenceWindow.glade:811 msgid "Visual" msgstr "" -#: portato/gui/templates/PreferenceWindow.glade:774 +#: portato/gui/templates/PreferenceWindow.glade:829 #: portato/gui/templates/PluginWindow.glade:47 #: portato/gui/templates/SearchWindow.glade:48 msgid "gtk-cancel" msgstr "" -#: portato/gui/templates/PreferenceWindow.glade:783 +#: portato/gui/templates/PreferenceWindow.glade:838 #: portato/gui/templates/PluginWindow.glade:59 msgid "gtk-apply" msgstr "" @@ -187,32 +237,6 @@ msgstr "" msgid "Plugins" msgstr "" -#: portato/gui/templates/UpdateWindow.glade:7 -msgid "Updateble Packages" -msgstr "" - -#: portato/gui/templates/UpdateWindow.glade:49 -msgid "_Close" -msgstr "" - -#: portato/gui/templates/UpdateWindow.glade:61 -msgid "Select _All" -msgstr "" - -#: portato/gui/templates/UpdateWindow.glade:76 -msgid "_Install Selected" -msgstr "" - -#: portato/gui/templates/AboutWindow.glade:8 -msgid "About Portato" -msgstr "" - -#: portato/gui/templates/AboutWindow.glade:18 -msgid "" -"This software is licensed under the terms of the GPLv2.\n" -"Copyright (C) 2006-2007 René 'Necoro' Neumann " -msgstr "" - #: portato/gui/templates/SearchWindow.glade:8 msgid "Search Results" msgstr "" @@ -237,256 +261,214 @@ msgstr "" msgid "Re_load Portage" msgstr "" -#: portato/gui/templates/MainWindow.glade:81 +#: portato/gui/templates/MainWindow.glade:83 msgid "_Emerge" msgstr "" -#: portato/gui/templates/MainWindow.glade:89 +#: portato/gui/templates/MainWindow.glade:91 msgid "_Install" msgstr "" -#: portato/gui/templates/MainWindow.glade:105 +#: portato/gui/templates/MainWindow.glade:107 msgid "_Uninstall" msgstr "" -#: portato/gui/templates/MainWindow.glade:121 -#: portato/gui/templates/MainWindow.glade:1111 +#: portato/gui/templates/MainWindow.glade:123 +#: portato/gui/templates/MainWindow.glade:1114 msgid "Update _World" msgstr "" -#: portato/gui/templates/MainWindow.glade:130 +#: portato/gui/templates/MainWindow.glade:132 msgid "Show Updatable P_ackages" msgstr "" -#: portato/gui/templates/MainWindow.glade:139 +#: portato/gui/templates/MainWindow.glade:141 msgid "Show _Only Installed Packages" msgstr "" -#: portato/gui/templates/MainWindow.glade:153 +#: portato/gui/templates/MainWindow.glade:155 msgid "_Sync" msgstr "" -#: portato/gui/templates/MainWindow.glade:169 +#: portato/gui/templates/MainWindow.glade:171 msgid "Save _Flags" msgstr "" -#: portato/gui/templates/MainWindow.glade:221 -#: portato/gui/templates/MainWindow.glade:1167 portato/gui/windows/main.py:852 +#: portato/gui/templates/MainWindow.glade:223 +#: portato/gui/templates/MainWindow.glade:1170 portato/gui/windows/main.py:767 msgid "Queue" msgstr "" -#: portato/gui/templates/MainWindow.glade:228 +#: portato/gui/templates/MainWindow.glade:230 msgid "Oneshot" msgstr "" -#: portato/gui/templates/MainWindow.glade:240 -#: portato/gui/templates/MainWindow.glade:1192 -#: portato/gui/windows/main.py:1165 portato/gui/windows/main.py:1167 +#: portato/gui/templates/MainWindow.glade:242 +#: portato/gui/templates/MainWindow.glade:1195 +#: portato/gui/windows/main.py:1206 portato/gui/windows/main.py:1208 msgid "Console" msgstr "" -#: portato/gui/templates/MainWindow.glade:247 +#: portato/gui/templates/MainWindow.glade:249 msgid "_Copy" msgstr "" -#: portato/gui/templates/MainWindow.glade:293 +#: portato/gui/templates/MainWindow.glade:295 msgid "Plu_gins" msgstr "" -#: portato/gui/templates/MainWindow.glade:305 +#: portato/gui/templates/MainWindow.glade:307 msgid "_?" msgstr "" -#: portato/gui/templates/MainWindow.glade:313 +#: portato/gui/templates/MainWindow.glade:315 msgid "_About" msgstr "" -#: portato/gui/templates/MainWindow.glade:331 +#: portato/gui/templates/MainWindow.glade:333 msgid "_Plugins" msgstr "" -#: portato/gui/templates/MainWindow.glade:373 +#: portato/gui/templates/MainWindow.glade:375 msgid "gtk-delete" msgstr "" -#: portato/gui/templates/MainWindow.glade:387 +#: portato/gui/templates/MainWindow.glade:389 msgid "gtk-find" msgstr "" -#: portato/gui/templates/MainWindow.glade:504 -#: portato/gui/templates/MainWindow.glade:744 -#: portato/gui/templates/MainWindow.glade:760 -#: portato/gui/templates/MainWindow.glade:872 +#: portato/gui/templates/MainWindow.glade:505 +#: portato/gui/templates/MainWindow.glade:623 +#: portato/gui/templates/MainWindow.glade:736 +#: portato/gui/templates/MainWindow.glade:751 msgid "label" msgstr "" -#: portato/gui/templates/MainWindow.glade:513 +#: portato/gui/templates/MainWindow.glade:516 msgid "Install onto system" msgstr "" -#: portato/gui/templates/MainWindow.glade:536 +#: portato/gui/templates/MainWindow.glade:539 msgid "Uninstall from system" msgstr "" -#: portato/gui/templates/MainWindow.glade:638 -msgid "Use Flags:" +#: portato/gui/templates/MainWindow.glade:639 +msgid "License:" msgstr "" -#: portato/gui/templates/MainWindow.glade:656 portato/gui/windows/main.py:524 -#: portato/gui/windows/main.py:527 portato/gui/windows/main.py:587 -#: portato/gui/windows/main.py:591 -msgid "Testing" +#: portato/gui/templates/MainWindow.glade:656 +msgid "Installed, but not in portage anymore" msgstr "" -#: portato/gui/templates/MainWindow.glade:689 portato/gui/windows/main.py:507 -#: portato/gui/windows/main.py:510 portato/gui/windows/main.py:513 -#: portato/gui/windows/main.py:614 portato/gui/windows/main.py:618 -#: portato/gui/windows/main.py:625 portato/gui/windows/main.py:629 -msgid "Masked" +#: portato/gui/templates/MainWindow.glade:671 +msgid "MISSING KEYWORD" msgstr "" -#: portato/gui/templates/MainWindow.glade:708 portato/gui/windows/main.py:344 -msgid "Installed" +#: portato/gui/templates/MainWindow.glade:703 +msgid "Description:" msgstr "" -#: portato/gui/templates/MainWindow.glade:726 -msgid "Homepage:" +#: portato/gui/templates/MainWindow.glade:719 +msgid "Overlay:" msgstr "" -#: portato/gui/templates/MainWindow.glade:775 -msgid "Overlay:" +#: portato/gui/templates/MainWindow.glade:767 +msgid "Homepage:" msgstr "" -#: portato/gui/templates/MainWindow.glade:792 -msgid "Description:" +#: portato/gui/templates/MainWindow.glade:785 portato/gui/windows/main.py:327 +msgid "Installed" msgstr "" -#: portato/gui/templates/MainWindow.glade:824 -msgid "MISSING KEYWORD" +#: portato/gui/templates/MainWindow.glade:804 portato/gui/windows/main.py:402 +#: portato/gui/windows/main.py:405 portato/gui/windows/main.py:408 +#: portato/gui/windows/main.py:507 portato/gui/windows/main.py:511 +#: portato/gui/windows/main.py:518 portato/gui/windows/main.py:522 +msgid "Masked" msgstr "" -#: portato/gui/templates/MainWindow.glade:839 -msgid "Installed, but not in portage anymore" +#: portato/gui/templates/MainWindow.glade:837 portato/gui/windows/main.py:419 +#: portato/gui/windows/main.py:422 portato/gui/windows/main.py:480 +#: portato/gui/windows/main.py:484 +msgid "Testing" msgstr "" -#: portato/gui/templates/MainWindow.glade:854 -msgid "License:" +#: portato/gui/templates/MainWindow.glade:856 +msgid "Use Flags:" msgstr "" -#: portato/gui/templates/MainWindow.glade:923 +#: portato/gui/templates/MainWindow.glade:926 msgid "Use List" msgstr "" -#: portato/gui/templates/MainWindow.glade:957 +#: portato/gui/templates/MainWindow.glade:960 msgid "Dependencies" msgstr "" -#: portato/gui/templates/MainWindow.glade:984 +#: portato/gui/templates/MainWindow.glade:987 msgid "Ebuild" msgstr "" -#: portato/gui/templates/MainWindow.glade:1011 +#: portato/gui/templates/MainWindow.glade:1014 msgid "Changelog" msgstr "" -#: portato/gui/templates/MainWindow.glade:1038 +#: portato/gui/templates/MainWindow.glade:1041 msgid "Files" msgstr "" -#: portato/gui/templates/MainWindow.glade:1076 +#: portato/gui/templates/MainWindow.glade:1079 msgid "Execute the current selected queue" msgstr "" -#: portato/gui/templates/MainWindow.glade:1095 +#: portato/gui/templates/MainWindow.glade:1098 msgid "E_xecute" msgstr "" -#: portato/gui/templates/MainWindow.glade:1110 +#: portato/gui/templates/MainWindow.glade:1113 msgid "" "Calculate the packages which will be installed during an \"update world\"" msgstr "" -#: portato/gui/templates/MainWindow.glade:1123 +#: portato/gui/templates/MainWindow.glade:1126 msgid "Remove the selected package from the queue" msgstr "" -#: portato/gui/templates/MainWindow.glade:1124 +#: portato/gui/templates/MainWindow.glade:1127 msgid "_Remove" msgstr "" -#: portato/gui/templates/MainWindow.glade:1226 +#: portato/gui/templates/MainWindow.glade:1230 msgid "Log" msgstr "" -#: portato/config_parser.py:271 -#, python-format -msgid "Unrecognized line in configuration: %s" -msgstr "" - -#: portato/plugins/notify.py:11 -msgid "Notify called while process is still running!" +#: portato.py:40 +msgid "validates the given plugin xml instead of launching Portato" msgstr "" -#: portato/plugins/notify.py:15 -msgid "Emerge finished!" +#: portato.py:43 +msgid "do not fork off as root" msgstr "" -#: portato/plugins/notify.py:19 -msgid "Emerge failed!" +#: portato.py:43 +msgid "-L is deprecated" msgstr "" -#: portato/plugins/notify.py:20 +#: portato.py:53 #, python-format -msgid "Error Code: %d" -msgstr "" - -#: portato/plugins/resume_loop.py:30 -msgid "Resume-loop called while process is still running!" -msgstr "" - -#: portato/plugins/etc_proposals.py:25 -msgid "Cannot start etc-proposals. Not root!" -msgstr "" - -#: portato/plistener.py:89 -msgid "Listener has not been started." -msgstr "" - -#: portato/gui/exception_handling.py:45 -msgid "" -"A programming error has been detected during the execution of this program." -msgstr "" - -#: portato/gui/exception_handling.py:46 -msgid "Bug Detected" -msgstr "" - -#: portato/gui/exception_handling.py:47 -msgid "" -"It probably isn't fatal, but should be reported to the developers " -"nonetheless." -msgstr "" - -#: portato/gui/exception_handling.py:49 -msgid "Show Details" +msgid "Validation failed. XML syntax error: %s." msgstr "" -#: portato/gui/exception_handling.py:72 portato/gui/exception_handling.py:135 -#, python-format -msgid "" -"Exception in thread \"%(thread)s\":\n" -"%(trace)s" +#: portato.py:56 +msgid "Validation failed. Does not comply with schema." msgstr "" -#: portato/gui/exception_handling.py:88 -msgid "Save traceback..." +#: portato.py:59 +msgid "Validation succeeded." msgstr "" -#: portato/gui/exception_handling.py:137 -#, python-format -msgid "" -"Exception:\n" -"%s" +#: portato.py:65 +msgid "Starting Portato" msgstr "" #: portato/gui/wrapper.py:59 @@ -531,12 +513,6 @@ msgstr "" msgid "Update" msgstr "" -#: portato/gui/updater.py:95 -#, python-format -msgid "" -"Trying to remove package '%s' from queue which does not exist in system." -msgstr "" - #: portato/gui/dialogs.py:17 msgid "" "There are some packages in the emerge queue and/or an emerge process is " @@ -587,7 +563,84 @@ msgstr "" msgid "Do you really want to clear the whole queue?" msgstr "" -#: portato/gui/windows/update.py:47 portato/gui/windows/main.py:343 +#: portato/gui/views.py:70 +msgid "Package is not installed" +msgstr "" + +#: portato/gui/views.py:87 +#, python-format +msgid "No %(old)s language file installed. Falling back to %(new)s." +msgstr "" + +#: portato/gui/views.py:96 +#, python-format +msgid "No %(old)s language file installed. Disable highlighting." +msgstr "" + +#: portato/gui/views.py:115 portato/gui/windows/main.py:670 +#, python-format +msgid "Error: %s" +msgstr "" + +#: portato/gui/updater.py:96 +#, python-format +msgid "" +"No unmasked version of package '%s' found. Trying masked ones. This normally " +"should not happen..." +msgstr "" + +#: portato/gui/updater.py:100 +#, python-format +msgid "" +"Trying to remove package '%s' from queue which does not exist in system." +msgstr "" + +#: portato/gui/exception_handling.py:51 +msgid "" +"A programming error has been detected during the execution of this program." +msgstr "" + +#: portato/gui/exception_handling.py:52 +msgid "Bug Detected" +msgstr "" + +#: portato/gui/exception_handling.py:53 +msgid "" +"It probably isn't fatal, but should be reported to the developers " +"nonetheless." +msgstr "" + +#: portato/gui/exception_handling.py:55 +msgid "Show Details" +msgstr "" + +#: portato/gui/exception_handling.py:78 portato/gui/exception_handling.py:142 +#, python-format +msgid "" +"Exception in thread \"%(thread)s\":\n" +"%(trace)s" +msgstr "" + +#: portato/gui/exception_handling.py:94 +msgid "Save traceback..." +msgstr "" + +#: portato/gui/exception_handling.py:144 +#, python-format +msgid "" +"Exception:\n" +"%s" +msgstr "" + +#: portato/gui/__init__.py:21 +msgid "Loading Backend" +msgstr "" + +#: portato/gui/windows/search.py:57 +msgid "Results" +msgstr "" + +#: portato/gui/windows/update.py:47 portato/gui/windows/main.py:326 #: portato/gui/windows/plugin.py:24 msgid "Enabled" msgstr "" @@ -596,132 +649,143 @@ msgstr "" msgid "Package" msgstr "" -#: portato/gui/windows/splash.py:36 +#: portato/gui/windows/splash.py:35 #, python-format msgid "... is starting up: %s" msgstr "" -#: portato/gui/windows/main.py:172 +#: portato/gui/windows/preference.py:124 +msgid "Top" +msgstr "" + +#: portato/gui/windows/preference.py:124 +msgid "Bottom" +msgstr "" + +#: portato/gui/windows/preference.py:124 +msgid "Left" +msgstr "" + +#: portato/gui/windows/preference.py:124 +msgid "Right" +msgstr "" + +#: portato/gui/windows/main.py:155 msgid "" msgstr "" -#: portato/gui/windows/main.py:198 +#: portato/gui/windows/main.py:181 msgid "The first homepage part does not start with 'http' or 'ftp'." msgstr "" -#: portato/gui/windows/main.py:202 +#: portato/gui/windows/main.py:185 msgid "Blank inside homepage." msgstr "" -#: portato/gui/windows/main.py:243 +#: portato/gui/windows/main.py:226 #, python-format msgid "If '%s' is disabled" msgstr "" -#: portato/gui/windows/main.py:245 +#: portato/gui/windows/main.py:228 #, python-format msgid "If '%s' is enabled" msgstr "" -#: portato/gui/windows/main.py:253 +#: portato/gui/windows/main.py:236 msgid "One of the following" msgstr "" -#: portato/gui/windows/main.py:257 +#: portato/gui/windows/main.py:240 msgid "All of the following" msgstr "" -#: portato/gui/windows/main.py:280 +#: portato/gui/windows/main.py:263 msgid "" "Can't display dependencies: This package has an unsupported dependency " "string." msgstr "" -#: portato/gui/windows/main.py:304 +#: portato/gui/windows/main.py:287 msgid "This is an expanded use flag and cannot be selected" msgstr "" -#: portato/gui/windows/main.py:345 +#: portato/gui/windows/main.py:328 msgid "Flag" msgstr "" -#: portato/gui/windows/main.py:346 +#: portato/gui/windows/main.py:329 msgid "Description" msgstr "" -#: portato/gui/windows/main.py:357 -msgid "Versions" -msgstr "" - -#: portato/gui/windows/main.py:360 -msgid "Slot" -msgstr "" - -#: portato/gui/windows/main.py:454 +#: portato/gui/windows/main.py:349 #, python-format msgid "Package could not be found: %s" msgstr "" -#: portato/gui/windows/main.py:516 portato/gui/windows/main.py:616 +#: portato/gui/windows/main.py:411 portato/gui/windows/main.py:509 msgid "Masked by user" msgstr "" -#: portato/gui/windows/main.py:699 +#: portato/gui/windows/main.py:592 msgid "Loading Config" msgstr "" -#: portato/gui/windows/main.py:711 +#: portato/gui/windows/main.py:604 msgid "Creating Database" msgstr "" -#: portato/gui/windows/main.py:716 +#: portato/gui/windows/main.py:609 msgid "Loading Plugins" msgstr "" -#: portato/gui/windows/main.py:729 +#: portato/gui/windows/main.py:622 msgid "Building frontend" msgstr "" -#: portato/gui/windows/main.py:772 portato/gui/views.py:115 -#, python-format -msgid "Error: %s" -msgstr "" - -#: portato/gui/windows/main.py:811 +#: portato/gui/windows/main.py:709 msgid "Restoring Session" msgstr "" -#: portato/gui/windows/main.py:820 +#: portato/gui/windows/main.py:718 msgid "Finishing startup" msgstr "" -#: portato/gui/windows/main.py:855 +#: portato/gui/windows/main.py:770 msgid "Options" msgstr "" -#: portato/gui/windows/main.py:867 +#: portato/gui/windows/main.py:784 msgid "Categories" msgstr "" -#: portato/gui/windows/main.py:903 +#: portato/gui/windows/main.py:843 msgid "Packages" msgstr "" -#: portato/gui/windows/main.py:971 +#: portato/gui/windows/main.py:891 +msgid "Versions" +msgstr "" + +#: portato/gui/windows/main.py:894 +msgid "Slot" +msgstr "" + +#: portato/gui/windows/main.py:992 #, python-format msgid "Translating session from version %d to %d." msgstr "" -#: portato/gui/windows/main.py:974 +#: portato/gui/windows/main.py:995 #, python-format msgid "Cannot translate session from version %d to %d." msgstr "" -#: portato/gui/windows/main.py:1296 +#: portato/gui/windows/main.py:1358 msgid "use flags" msgstr "" -#: portato/gui/windows/main.py:1307 +#: portato/gui/windows/main.py:1369 msgid "masking keywords" msgstr "" @@ -749,26 +813,6 @@ msgstr "" msgid "Status" msgstr "" -#: portato/gui/windows/search.py:57 -msgid "Results" -msgstr "" - -#: portato/gui/windows/preference.py:116 -msgid "Top" -msgstr "" - -#: portato/gui/windows/preference.py:116 -msgid "Bottom" -msgstr "" - -#: portato/gui/windows/preference.py:116 -msgid "Left" -msgstr "" - -#: portato/gui/windows/preference.py:116 -msgid "Right" -msgstr "" - #: portato/gui/session.py:21 msgid "Version mismatch." msgstr "" @@ -802,131 +846,118 @@ msgstr "" msgid "Error while compiling search expression: '%s'." msgstr "" -#: portato/gui/views.py:70 -msgid "Package is not installed" +#: portato/backend/flags.py:527 +#, python-format +msgid "Conflicting values for masking status: %s" msgstr "" -#: portato/gui/views.py:87 +#: portato/backend/portage/system.py:343 #, python-format -msgid "No %(old)s language file installed. Falling back to %(new)s." +msgid "No best match for %s. It seems not to be in the tree anymore." msgstr "" -#: portato/gui/views.py:96 +#: portato/backend/portage/system.py:413 #, python-format -msgid "No %(old)s language file installed. Disable highlighting." +msgid "Found a not installed dependency: %s." msgstr "" -#: portato/gui/__init__.py:22 -msgid "Loading Backend" +#: portato/backend/portage/system.py:455 +#, python-format +msgid "" +"Bug? No best match could be found for '%(package)s'. Needed by: '%(cpv)s'." msgstr "" -#: portato/backend/catapult/package.py:99 -#: portato/backend/portage/package.py:132 +#: portato/backend/portage/package.py:131 +#: portato/backend/catapult/package.py:98 #, python-format msgid "BUG in flags.new_masking_status. It returns '%s'" msgstr "" -#: portato/backend/flags.py:528 -#, python-format -msgid "Conflicting values for masking status: %s" +#: portato/helper.py:76 +msgid "Invalid dependency string" msgstr "" -#: portato/backend/portage/system.py:333 +#: portato/session.py:47 #, python-format -msgid "No best match for %s. It seems not to be in the tree anymore." +msgid "Loading session from '%s'." +msgstr "" + +#: portato/plistener.py:88 +msgid "Listener has not been started." +msgstr "" + +#: portato/plugins/etc_proposals.py:24 +msgid "Cannot start etc-proposals. Not root!" +msgstr "" + +#: portato/plugins/resume_loop.py:29 +msgid "Resume-loop called while process is still running!" +msgstr "" + +#: portato/plugins/notify.py:10 +msgid "Notify called while process is still running!" +msgstr "" + +#: portato/plugins/notify.py:14 +msgid "Emerge finished!" msgstr "" -#: portato/backend/portage/system.py:403 +#: portato/plugins/notify.py:18 +msgid "Emerge failed!" +msgstr "" + +#: portato/plugins/notify.py:19 #, python-format -msgid "Found a not installed dependency: %s." +msgid "Error Code: %d" msgstr "" -#: portato/backend/portage/system.py:445 +#: portato/config_parser.py:270 #, python-format -msgid "" -"Bug? No best match could be found for '%(package)s'. Needed by: '%(cpv)s'." +msgid "Unrecognized line in configuration: %s" msgstr "" -#: portato/plugin.py:298 portato/plugin.py:304 portato/plugin.py:309 +#: portato/plugin.py:297 portato/plugin.py:303 portato/plugin.py:308 #, python-format msgid "%s cannot be imported." msgstr "" -#: portato/plugin.py:336 +#: portato/plugin.py:335 #, python-format msgid "Accessing hook '%(hook)s' of plugin '%(plugin)s' (before)." msgstr "" -#: portato/plugin.py:340 +#: portato/plugin.py:339 #, python-format msgid "Overriding hook '%(hook)s' with plugin '%(plugin)s'." msgstr "" -#: portato/plugin.py:347 +#: portato/plugin.py:346 #, python-format msgid "Accessing hook '%(hook)s' of plugin '%(plugin)s' (after)." msgstr "" -#: portato/plugin.py:367 +#: portato/plugin.py:366 #, python-format msgid "Loading plugin '%s' failed. Invalid XML syntax." msgstr "" -#: portato/plugin.py:370 +#: portato/plugin.py:369 #, python-format msgid "Loading plugin '%s' failed. Plugin does not comply with schema." msgstr "" -#: portato/plugin.py:398 +#: portato/plugin.py:397 #, python-format msgid "Plugin '%s' loaded." msgstr "" -#: portato/plugin.py:401 +#: portato/plugin.py:400 #, python-format msgid "Loading plugin '%(plugin)s' failed: Could not import %(import)s" msgstr "" -#: portato/plugin.py:466 +#: portato/plugin.py:465 #, python-format msgid "" "For hook '%(hook)s' an override is already defined by plugin '%(plugin)s'!" msgstr "" - -#: portato/session.py:47 -#, python-format -msgid "Loading session from '%s'." -msgstr "" - -#: portato/helper.py:77 -msgid "Invalid dependency string" -msgstr "" - -#: portato.py:42 -msgid "validates the given plugin xml instead of launching Portato" -msgstr "" - -#: portato.py:45 -msgid "do not fork off as root" -msgstr "" - -#: portato.py:45 -msgid "-L is deprecated" -msgstr "" - -#: portato.py:55 -#, python-format -msgid "Validation failed. XML syntax error: %s." -msgstr "" - -#: portato.py:58 -msgid "Validation failed. Does not comply with schema." -msgstr "" - -#: portato.py:61 -msgid "Validation succeeded." -msgstr "" - -#: portato.py:67 -msgid "Starting Portato" -msgstr "" diff --git a/portato/gui/templates/PreferenceWindow.glade b/portato/gui/templates/PreferenceWindow.glade index 6dbf17a..3dc556b 100644 --- a/portato/gui/templates/PreferenceWindow.glade +++ b/portato/gui/templates/PreferenceWindow.glade @@ -517,7 +517,7 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True - Update the package list with the current search results while you are typing. + Update the package list with the current search results while you are typing. <b>Note</b>: Will slow down the typing process. Search while typing 0.47999998927116394 @@ -766,7 +766,7 @@ True True True - Organize the categories in a tree. Thereby collapse categories with the same prefix: + Organize the categories in a tree. Thereby collapse categories with the same prefix: As an example: <i>app-admin</i>, <i>app-emacs</i>, and <i>app-vim</i> would be collapsed into <i><b>app</b></i> as root and <i>admin</i>, <i>emacs</i>, and <i>vim</i> as children. Collapse categories with same prefix 0 -- cgit v1.2.3-54-g00ecf From ee446ef74d1a1a63ce0fdc0b7076a3150e63352f Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Sun, 8 Jun 2008 18:24:44 +0200 Subject: Make blocks way more intelligent --- doc/AUTHORS | 3 +- portato/backend/portage/package.py | 33 ++++++----- portato/gui/queue.py | 116 +++++++++++++++++++++++++++---------- 3 files changed, 107 insertions(+), 45 deletions(-) (limited to 'portato/gui') diff --git a/doc/AUTHORS b/doc/AUTHORS index cdb99ab..5901f92 100644 --- a/doc/AUTHORS +++ b/doc/AUTHORS @@ -3,7 +3,8 @@ Main author: René 'Necoro' Neumann Application icon: P4r4D0X (after an idea by wolfden) Shipped with code from: - - Philip Semanchuk (shm module) + - Nicola Larosa & Michael Foord (portato.odict) + see: http://www.voidspace.org.uk/python/odict.html Many thanks to the Porthole team which often inspired me or gave me hints. (And sometimes I even copied files ^^ ;)) diff --git a/portato/backend/portage/package.py b/portato/backend/portage/package.py index 424945e..b07dc93 100644 --- a/portato/backend/portage/package.py +++ b/portato/backend/portage/package.py @@ -202,7 +202,7 @@ class PortagePackage (Package): return [d for d in deps if d[0] != "!"] - def get_dep_packages (self, depvar = ["RDEPEND", "PDEPEND", "DEPEND"], with_criterions = False): + def get_dep_packages (self, depvar = ["RDEPEND", "PDEPEND", "DEPEND"], with_criterions = False, return_blocks = False): dep_pkgs = [] # the package list # change the useflags, because we have internally changed some, but not made them visible for portage @@ -234,30 +234,37 @@ class PortagePackage (Package): for dep in deps: if dep[0] == '!': # blocking sth - dep = dep[1:] - blocked = system.find_installed_packages(dep) - if blocked: - if blocked[0].get_slot_cp() != self.get_slot_cp(): # blocks in the same slot are harmless - raise BlockedException, (self.get_cpv(), blocked[0].get_cpv()) + blocked = system.find_installed_packages(dep[1:]) + if len(blocked) == 1: # only exact one match allowed to be harmless + if blocked[0].get_slot_cp() == self.get_slot_cp(): # blocks in the same slot are harmless + continue + + if return_blocks: + if with_criterions: + dep_pkgs.append((dep, dep)) + else: + dep_pkgs.append(dep) + else: + raise BlockedException, (self.get_cpv(), blocked[0].get_cpv()) + continue # finished with the blocking one -> next pkg = system.find_best_match(dep) if not pkg: # try to find masked ones - list = system.find_packages(dep, masked = True) - if not list: + pkgs = system.find_packages(dep, masked = True) + if not pkgs: raise PackageNotFoundException, dep - list = system.sort_package_list(list) - list.reverse() + pkgs = system.sort_package_list(pkgs) + pkgs.reverse() done = False - for i in range(len(list)): - p = list[i] + for p in pkgs: if not p.is_masked(): dep_pkgs.append(create_dep_pkgs_data(dep, p)) done = True break if not done: - dep_pkgs.append(create_dep_pkgs_data(dep, list[0])) + dep_pkgs.append(create_dep_pkgs_data(dep, pkgs[0])) else: dep_pkgs.append(create_dep_pkgs_data(dep, pkg)) diff --git a/portato/gui/queue.py b/portato/gui/queue.py index eb0a43e..be43e3a 100644 --- a/portato/gui/queue.py +++ b/portato/gui/queue.py @@ -15,13 +15,16 @@ from __future__ import absolute_import # some stuff needed import os, pty import signal, threading, time +import itertools as itt from subprocess import Popen # some backend things from .. import backend, plugin from ..backend import flags, system -from ..helper import debug, info, send_signal_to_group, unique_array +from ..backend.exceptions import BlockedException +from ..helper import debug, info, warning, send_signal_to_group, unique_array, flatten from ..waiting_queue import WaitingQueue +from ..odict import OrderedDict from .updater import Updater # the wrapper @@ -55,6 +58,7 @@ class EmergeQueue: # dictionaries with data about the packages in the queue self.iters = {"install" : {}, "uninstall" : {}, "update" : {}} # iterator in the tree self.deps = {"install" : {}, "update" : {}} # all the deps of the package + self.blocks = {"install" : OrderedDict(), "update" : OrderedDict()} # member vars self.tree = tree @@ -189,20 +193,21 @@ class EmergeQueue: # add iter subIt = self.tree.append(it, self.tree.build_append_value(cpv, oneshot = oneshot, update = update, downgrade = downgrade, version = uVersion, useChange = changedUse)) - self.iters[type].update({cpv: subIt}) + self.iters[type][cpv] = subIt # get dependencies - deps = pkg.get_dep_packages() # this might raise a BlockedException - self.deps[type].update({cpv : deps}) + deps = pkg.get_dep_packages(return_blocks = True) + self.deps[type][cpv] = deps - # recursive call for d in deps: - try: + if d[0] == "!": # block + dep = d[1:] + if not dep in self.blocks[type]: + self.blocks[type][dep] = set() + + self.blocks[type][dep].add(cpv) + else: # recursive call self.update_tree(subIt, d, unmask, type = type) - except backend.BlockedException, e: # BlockedException occured -> delete current tree and re-raise exception - debug("Something blocked: %s", e[0]) - self.remove_with_children(subIt) - raise def append (self, cpv, type = "install", update = False, forceUpdate = False, unmask = False, oneshot = False): """Appends a cpv either to the merge queue or to the unmerge-queue. @@ -226,7 +231,7 @@ class EmergeQueue: if type in ("install", "update"): # emerge if update: pkg = self._get_pkg_from_cpv(cpv, unmask) - deps = pkg.get_dep_packages() + deps = pkg.get_dep_packages(return_blocks = True) if not forceUpdate and cpv in self.deps[type] and deps == self.deps[type][cpv]: return # nothing changed - return @@ -248,6 +253,51 @@ class EmergeQueue: self.update_tree(self.tree.get_emerge_it(), cpv, unmask, type = type, oneshot = oneshot) elif type == "update" and self.tree: self.update_tree(self.tree.get_update_it(), cpv, unmask, type = type, oneshot = oneshot) + + # handle blocks + if self.blocks[type]: + # check whether anything blocks something in the queue + for block in self.blocks[type]: + for c in self.iters[type]: + if system.cpv_matches(c, block): + blocked = ", ".join(self.blocks[type][block]) + warning("'%s' is blocked by: %s", c, blocked) + self.remove_with_children(self.iters[type][c], False) + raise BlockedException(c, blocked) + + # + # check whether we block a version that we are going to replace nevertheless + # + + # get the blocks that block an installed package + inst = [] + for block in self.blocks[type]: + pkgs = system.find_installed_packages(block) + if pkgs: + inst.append((pkgs, block)) + + # the slot-cp's of the packages in the queue + slots = {} + for c in self.iters[type]: + slots[system.new_package(c).get_slot_cp()] = cpv + + # check the installed blocks against the slot-cp's + for pkgs, block in inst[:]: + done = False + for pkg in pkgs: + done = False + if pkg.get_slot_cp() in slots: + debug("Block '%s' can be ignored, because the blocking package is going to be replaced with '%s'.", block, slots[pkg.get_slot_cp()]) + done = True + if done: + inst.remove((pkgs,block)) + + if inst: # there is still something left to block + for pkgs, block in inst: + blocked = ", ".join(self.blocks[type][block]) + warning("'%s' blocks the installation of: %s", pkgs[0].get_cpv(), blocked) + self.remove_with_children(self.iters[type][cpv], False) + raise BlockedException(blocked, pkgs[0].get_cpv()) else: # unmerge self.unmergequeue.append(cpv) @@ -544,15 +594,32 @@ class EmergeQueue: @type it: Iterator @param removeNewFlags: True if new flags should be removed; False otherwise. Default: True. @type removeNewFlags: boolean""" + + def __remove (type, cpv): + del self.iters[type][cpv] + try: + del self.deps[type][cpv] + except KeyError: # this seems to be removed due to a BlockedException - so no deps here atm ;) + debug("Catched KeyError => %s seems not to be in self.deps. Should be no harm in normal cases.", cpv) + + for key in self.blocks[type].keys(): + if cpv in self.blocks[type][key]: + self.blocks[type][key].remove(cpv) + + if not self.blocks[type][key]: # list is empty -> remove the whole key + del self.blocks[type][key] + + if removeNewFlags: # remove the changed flags + flags.remove_new_use_flags(cpv) + flags.remove_new_masked(cpv) + flags.remove_new_testing(cpv) if self.tree.iter_has_parent(it): cpv = self.tree.get_value(it, self.tree.get_cpv_column()) if self.tree.is_in_emerge(it): # Emerge - del self.iters["install"][cpv] - try: - del self.deps["install"][cpv] - except KeyError: # this seems to be removed due to a BlockedException - so no deps here atm ;) - debug("Catched KeyError => %s seems not to be in self.deps. Should be no harm in normal cases.", cpv) + + __remove("install", cpv) + try: self.mergequeue.remove(cpv) except ValueError: # this is a dependency - ignore @@ -560,27 +627,14 @@ class EmergeQueue: self.oneshotmerge.remove(cpv) except ValueError: debug("Catched ValueError => %s seems not to be in merge-queue. Should be no harm.", cpv) - - if removeNewFlags: # remove the changed flags - flags.remove_new_use_flags(cpv) - flags.remove_new_masked(cpv) - flags.remove_new_testing(cpv) elif self.tree.is_in_unmerge(it): # in Unmerge del self.iters["uninstall"][cpv] self.unmergequeue.remove(cpv) elif self.tree.is_in_update(it): - del self.iters["update"][cpv] - try: - del self.deps["update"][cpv] - except KeyError: # this seems to be removed due to a BlockedException - so no deps here atm ;) - debug("Catched KeyError => %s seems not to be in self.deps. Should be no harm in normal cases.", cpv) - - if removeNewFlags: # remove the changed flags - flags.remove_new_use_flags(cpv) - flags.remove_new_masked(cpv) - flags.remove_new_testing(cpv) + __remove("update", cpv) + self.tree.remove(it) -- cgit v1.2.3-54-g00ecf From a7a285b83f934a5d7f2bd34824b4650c3c0835d4 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Mon, 9 Jun 2008 20:39:22 +0200 Subject: Fixed error message --- doc/TODO | 3 --- portato/gui/updater.py | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) (limited to 'portato/gui') diff --git a/doc/TODO b/doc/TODO index 0f59b20..d79f383 100644 --- a/doc/TODO +++ b/doc/TODO @@ -15,14 +15,11 @@ Backend: - rewrite flags handling -- do not alert a block, if a package blocks a version of one package which is updated to a new one not being blocked anymore - also check installed packages if they block the current one - make sure, a package being removed from the queue is not needed as a dependency by another package - binary package support -- move resume_loop and shutdown plugins into main code - GUI: ==== diff --git a/portato/gui/updater.py b/portato/gui/updater.py index 44bc4e1..ba46ffd 100644 --- a/portato/gui/updater.py +++ b/portato/gui/updater.py @@ -93,7 +93,7 @@ q return p elif not pkgs: # nothing found =| if not masked: - warning(_("No unmasked version of package '%s' found. Trying masked ones. This normally should not happen...")) + warning(_("No unmasked version of package '%s' found. Trying masked ones. This normally should not happen..."), pv) return self.find(pv, True) else: -- cgit v1.2.3-54-g00ecf From 7a12f4c4031c85e4301d09ea5aa86e55103bb5e1 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Mon, 9 Jun 2008 20:50:53 +0200 Subject: Fixed 'kill' in the systray popup --- portato/gui/templates/popups.glade | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'portato/gui') diff --git a/portato/gui/templates/popups.glade b/portato/gui/templates/popups.glade index 270449b..63169c3 100644 --- a/portato/gui/templates/popups.glade +++ b/portato/gui/templates/popups.glade @@ -1,6 +1,6 @@ - + True @@ -18,7 +18,7 @@ True _Kill Emerge True - + True -- cgit v1.2.3-54-g00ecf From 772b3bb14fc3103d774e4e0d907a6c4670ed03f3 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Tue, 10 Jun 2008 01:17:56 +0200 Subject: Allowed default for session; load 'app-portage/portato' as default for selections :) --- portato/gui/windows/main.py | 15 +++++++++------ portato/session.py | 13 +++++++++---- 2 files changed, 18 insertions(+), 10 deletions(-) (limited to 'portato/gui') diff --git a/portato/gui/windows/main.py b/portato/gui/windows/main.py index 8a2f170..0d40968 100644 --- a/portato/gui/windows/main.py +++ b/portato/gui/windows/main.py @@ -702,9 +702,6 @@ class MainWindow (Window): self.queueTree = GtkTree(self.queueList.get_model()) self.queue = EmergeQueue(console = self.console, tree = self.queueTree, db = self.db, title_update = self.title_update, threadClass = GtkThread) - self.catList.get_selection().select_path(1) - self.pkgList.get_selection().select_path(0) - # session splash(_("Restoring Session")) try: @@ -1107,13 +1104,19 @@ class MainWindow (Window): elif version > SESSION_VERSION: raise NewSessionException(version, SESSION_VERSION) + def _add (value): + if len(value) == 4: + self.session.add_handler(value[:3], default = value[3]) + else: + self.session.add_handler(value) + # set the simple ones :) - map(self.session.add_handler,[ + map(_add,[ ([("gtksessionversion", "session")], load_session_version, lambda: SESSION_VERSION), ([("width", "window"), ("height", "window")], lambda w,h: self.window.resize(int(w), int(h)), self.window.get_size), ([("vpanedpos", "window"), ("hpanedpos", "window")], load_paned, save_paned), - ([("catsel", "window")], load_selection(self.catList, 0), save_cat_selection), - ([("pkgsel", "window")], load_selection(self.pkgList, 1), save_pkg_selection) + ([("catsel", "window")], load_selection(self.catList, 0), save_cat_selection, ["app-portage"]), + ([("pkgsel", "window")], load_selection(self.pkgList, 1), save_pkg_selection, ["portato"]) #([("merge", "queue"), ("unmerge", "queue"), ("oneshot", "queue")], load_queue, save_queue), ]) diff --git a/portato/session.py b/portato/session.py index 6abd899..e03f663 100644 --- a/portato/session.py +++ b/portato/session.py @@ -54,20 +54,20 @@ class Session (object): # add version check self.add_handler(([("version", "session")], self.check_version, lambda: self.VERSION)) - def add_handler (self, (options, load_fn, save_fn)): + def add_handler (self, (options, load_fn, save_fn), default = None): """ Adds a handler to this session. A handler is a three-tuple consisting of: - a list of (key,section) values - a function getting number of option arguments and applying them to the program - a function returning the number of option return values - getting them out of the program """ - self._handlers.append((options, load_fn, save_fn)) + self._handlers.append((options, load_fn, save_fn, default)) def load (self): """ Loads and applies all values of the session. """ - for options, lfn, sfn in self._handlers: + for options, lfn, sfn, default in self._handlers: try: loaded = [self._cfg.get(*x) for x in options] except KeyError: # does not exist -> ignore @@ -75,13 +75,18 @@ class Session (object): else: debug("Loading %s with values %s.", options, loaded) lfn(*loaded) + return + + if default: + debug("Loading %s with defaults %s.", options, default) + lfn(*default) def save (self): """ Saves all options into the file. """ - for options, lfn, sfn in self._handlers: + for options, lfn, sfn, default in self._handlers: vals = sfn() # map into list if necessairy -- cgit v1.2.3-54-g00ecf