From 8c5320ff7a2be84e3260ef614059ddc6223d7f30 Mon Sep 17 00:00:00 2001 From: Necoro <> Date: Mon, 14 Jan 2008 22:14:32 +0000 Subject: --- doc/Changelog | 3 +- doc/TODO | 1 - i18n/de.po | 327 +++++++------ i18n/messages.pot | 294 ++++++------ portato/backend/package.py | 9 + portato/backend/portage/package.py | 7 + portato/gui/gtk/views.py | 21 +- portato/gui/gtk/windows.py | 207 ++++++--- portato/gui/templates/portato.glade | 894 ++++++++++++++++++++---------------- portato/session.py | 9 + 10 files changed, 1014 insertions(+), 758 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 81e04ab..a2eb317 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,12 +1,13 @@ next: - added view for "installed only" - removed "--ebuild" mode -- added log, ebuild and changelog as tabs +- added log, ebuild, files, and changelog as tabs - saved preferences (aka sessions) - added scrollbars to the update window - handle new "use defaults" correctly - allowed the permanent change of a plugin status - added "ALL" category +- new design 0.8.6.2: - changed the pipe version and use shm instead (fixes issues with kdesu) diff --git a/doc/TODO b/doc/TODO index 1e50b4b..2afe155 100644 --- a/doc/TODO +++ b/doc/TODO @@ -35,7 +35,6 @@ Main Point: user preferences: GTK: ---- - make oneshot better -- show installed files - show dependencies - reload package table when emerge is finished diff --git a/i18n/de.po b/i18n/de.po index c24c85d..0316dee 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-01-14 17:13+0100\n" +"PO-Revision-Date: 2008-01-14 23:09+0100\n" "Last-Translator: René 'Necoro' Neumann \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -25,7 +25,7 @@ msgid "Re_load Portage" msgstr "Aktua_lisiere Portage-Cache" #: portato/gui/templates/portato.glade:68 -#: portato/gui/templates/portato.glade:1750 +#: portato/gui/templates/portato.glade:1840 msgid "gtk-quit" msgstr "" @@ -34,17 +34,17 @@ msgid "_Emerge" msgstr "_Emerge" #: portato/gui/templates/portato.glade:89 -#: portato/gui/templates/portato.glade:857 +#: portato/gui/templates/portato.glade:945 msgid "E_merge" msgstr "E_merge" #: portato/gui/templates/portato.glade:104 -#: portato/gui/templates/portato.glade:891 +#: portato/gui/templates/portato.glade:979 msgid "_Unmerge" msgstr "_Unmerge" #: portato/gui/templates/portato.glade:118 -#: portato/gui/templates/portato.glade:910 +#: portato/gui/templates/portato.glade:998 msgid "Update _World" msgstr "Update _World" @@ -66,18 +66,18 @@ msgstr "Speichere _Flags" #: portato/gui/templates/portato.glade:187 #: portato/gui/templates/portato.glade:279 -#: portato/gui/templates/portato.glade:1725 +#: portato/gui/templates/portato.glade:1815 msgid "Emerge _Paused" msgstr "Emerge _angehalten" #: portato/gui/templates/portato.glade:195 #: portato/gui/templates/portato.glade:261 -#: portato/gui/templates/portato.glade:1732 +#: portato/gui/templates/portato.glade:1822 msgid "_Kill Emerge" msgstr "_Kill Emerge" #: portato/gui/templates/portato.glade:218 -#: portato/gui/gtk/windows.py:967 +#: portato/gui/gtk/windows.py:1022 msgid "Queue" msgstr "Queue" @@ -86,7 +86,7 @@ msgid "Oneshot" msgstr "Oneshot" #: portato/gui/templates/portato.glade:237 -#: portato/gui/gtk/windows.py:1129 +#: portato/gui/gtk/windows.py:1182 msgid "Console" msgstr "Konsole" @@ -114,177 +114,195 @@ msgstr "_Plugins" msgid "gtk-find" msgstr "" -#: portato/gui/templates/portato.glade:473 +#: portato/gui/templates/portato.glade:464 +msgid "Add to Emerge Queue" +msgstr "Füge zur Emerge Queue hinzu" + +#: portato/gui/templates/portato.glade:476 +msgid "Remove from Emerge Queue" +msgstr "Entferne aus der Emerge Queue" + +#: portato/gui/templates/portato.glade:488 +msgid "Revert changes" +msgstr "Rückgängig" + +#: portato/gui/templates/portato.glade:510 +#: portato/gui/templates/portato.glade:633 +#: portato/gui/templates/portato.glade:648 +msgid "label" +msgstr "" + +#: portato/gui/templates/portato.glade:555 msgid "Installed, but not in portage anymore" msgstr "Installiert, aber nicht mehr im Portage-Tree vorhanden" -#: portato/gui/templates/portato.glade:552 +#: portato/gui/templates/portato.glade:570 msgid "MISSING KEYWORD" msgstr "FEHLENDES KEYWORD" -#: portato/gui/templates/portato.glade:570 -msgid "Mark package for installation" -msgstr "Merke das Paket zur Installation vor" - -#: portato/gui/templates/portato.glade:589 -msgid "Add to E_merge Queue" -msgstr "Füge zur E_merge Queue hinzu" - -#: portato/gui/templates/portato.glade:604 -msgid "Mark package for deinstallation" -msgstr "Merke das Paket zur Deinstallation vor" +#: portato/gui/templates/portato.glade:602 +msgid "Description:" +msgstr "Beschreibung" -#: portato/gui/templates/portato.glade:623 -msgid "Add to _Unmerge Queue" -msgstr "Füge zur _Unmerge Queue hinzu" +#: portato/gui/templates/portato.glade:617 +msgid "Overlay:" +msgstr "Overlay:" -#: portato/gui/templates/portato.glade:659 -msgid "Re_vert" -msgstr "_Wiederherstellen" +#: portato/gui/templates/portato.glade:665 +msgid "Homepage:" +msgstr "Homepage:" -#: portato/gui/templates/portato.glade:690 -#: portato/gui/gtk/windows.py:533 +#: portato/gui/templates/portato.glade:682 +#: portato/gui/gtk/windows.py:575 msgid "Installed" msgstr "Installiert" -#: portato/gui/templates/portato.glade:703 -#: portato/gui/gtk/windows.py:664 -#: portato/gui/gtk/windows.py:667 -#: portato/gui/gtk/windows.py:670 -#: portato/gui/gtk/windows.py:762 -#: portato/gui/gtk/windows.py:765 -#: portato/gui/gtk/windows.py:772 -#: portato/gui/gtk/windows.py:776 +#: portato/gui/templates/portato.glade:701 +#: portato/gui/gtk/windows.py:703 +#: portato/gui/gtk/windows.py:706 +#: portato/gui/gtk/windows.py:709 +#: portato/gui/gtk/windows.py:811 +#: portato/gui/gtk/windows.py:815 +#: portato/gui/gtk/windows.py:822 +#: portato/gui/gtk/windows.py:826 msgid "Masked" msgstr "Masked" -#: portato/gui/templates/portato.glade:717 -#: portato/gui/gtk/windows.py:677 -#: portato/gui/gtk/windows.py:680 -#: portato/gui/gtk/windows.py:734 -#: portato/gui/gtk/windows.py:739 +#: portato/gui/templates/portato.glade:734 +#: portato/gui/gtk/windows.py:720 +#: portato/gui/gtk/windows.py:723 +#: portato/gui/gtk/windows.py:784 +#: portato/gui/gtk/windows.py:788 msgid "Testing" msgstr "Testing" -#: portato/gui/templates/portato.glade:743 -msgid "_Package" -msgstr "_Paket" +#: portato/gui/templates/portato.glade:754 +msgid "_General" +msgstr "All_gemein" -#: portato/gui/templates/portato.glade:770 +#: portato/gui/templates/portato.glade:786 +msgid "U_se List" +msgstr "U_se-Flag-Liste" + +#: portato/gui/templates/portato.glade:814 msgid "E_build" msgstr "E_build" -#: portato/gui/templates/portato.glade:798 +#: portato/gui/templates/portato.glade:842 msgid "C_hangelog" msgstr "C_hangelog" -#: portato/gui/templates/portato.glade:838 +#: portato/gui/templates/portato.glade:870 +msgid "F_iles" +msgstr "Date_ien" + +#: portato/gui/templates/portato.glade:926 msgid "Install all packages in the \"Emerge Queue\"" msgstr "Installiere alle Pakete aus der \"Emerge Queue\"" -#: portato/gui/templates/portato.glade:872 +#: portato/gui/templates/portato.glade:960 msgid "Deinstall all packages in the \"Unmerge Queue\"" msgstr "Deinstalliere alle Pakete aus der \"Unmerge Queue\"" -#: portato/gui/templates/portato.glade:909 +#: portato/gui/templates/portato.glade:997 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/portato.glade:922 +#: portato/gui/templates/portato.glade:1010 msgid "Remove the selected package from the queue" msgstr "Löscht das gewählte Paket aus der Queue" -#: portato/gui/templates/portato.glade:923 +#: portato/gui/templates/portato.glade:1011 msgid "_Remove" msgstr "_Löschen" -#: portato/gui/templates/portato.glade:947 +#: portato/gui/templates/portato.glade:1033 msgid "_Queue" msgstr "_Queue" -#: portato/gui/templates/portato.glade:974 +#: portato/gui/templates/portato.glade:1059 msgid "_Console" msgstr "_Konsole" -#: portato/gui/templates/portato.glade:1010 -msgid "_Log" -msgstr "_Log" +#: portato/gui/templates/portato.glade:1094 +msgid "L_og" +msgstr "L_og" -#: portato/gui/templates/portato.glade:1039 +#: portato/gui/templates/portato.glade:1129 msgid "Portato - A Portage GUI" msgstr "Portato - A Portage GUI" -#: portato/gui/templates/portato.glade:1056 +#: portato/gui/templates/portato.glade:1146 msgid "Search Results" msgstr "Ergebnisse" -#: portato/gui/templates/portato.glade:1096 -#: portato/gui/templates/portato.glade:1691 -#: portato/gui/templates/portato.glade:1799 +#: portato/gui/templates/portato.glade:1186 +#: portato/gui/templates/portato.glade:1781 +#: portato/gui/templates/portato.glade:1889 msgid "gtk-cancel" msgstr "" -#: portato/gui/templates/portato.glade:1108 +#: portato/gui/templates/portato.glade:1198 msgid "gtk-jump-to" msgstr "" -#: portato/gui/templates/portato.glade:1123 +#: portato/gui/templates/portato.glade:1213 msgid "gtk-ok" msgstr "" -#: portato/gui/templates/portato.glade:1144 +#: portato/gui/templates/portato.glade:1234 msgid "Preferences" msgstr "Einstellungen" -#: portato/gui/templates/portato.glade:1179 +#: portato/gui/templates/portato.glade:1269 msgid "Debug" msgstr "Debug" -#: portato/gui/templates/portato.glade:1192 +#: portato/gui/templates/portato.glade:1282 msgid "Browser command: " msgstr "Browser-Befehl: " -#: portato/gui/templates/portato.glade:1218 +#: portato/gui/templates/portato.glade:1308 msgid "General Options" msgstr "Allgemeine Optionen" -#: portato/gui/templates/portato.glade:1268 +#: portato/gui/templates/portato.glade:1358 msgid "Update World Options" msgstr "Optionen für \"update world\"" -#: portato/gui/templates/portato.glade:1296 +#: portato/gui/templates/portato.glade:1386 msgid "Sync command: " msgstr "Sync-Befehl: " -#: portato/gui/templates/portato.glade:1317 +#: portato/gui/templates/portato.glade:1407 msgid "Sync Options" msgstr "Sync Optionen" -#: portato/gui/templates/portato.glade:1368 +#: portato/gui/templates/portato.glade:1458 msgid "File name to use, if package.use is a directory: " msgstr "Zu benutzender Dateiname, wenn package.use ein Verzeichnis ist:" -#: portato/gui/templates/portato.glade:1379 +#: portato/gui/templates/portato.glade:1469 msgid "Add only exact version to package.use" msgstr "Füge nur die exakte Paketversion zu package.keywords hinzu" -#: portato/gui/templates/portato.glade:1392 +#: portato/gui/templates/portato.glade:1482 msgid "Add only exact version to package.keywords" msgstr "Füge nur die exakte Paketversion zu package.keywords hinzu" -#: portato/gui/templates/portato.glade:1406 +#: portato/gui/templates/portato.glade:1496 msgid "File name to use, if package.keywords is a directory: " msgstr "Zu benutzender Dateiname, wenn package.keywords ein Verzeichnis ist:" -#: portato/gui/templates/portato.glade:1440 +#: portato/gui/templates/portato.glade:1530 msgid "File name to use, if package.mask/package.unmask is a directory: " msgstr "Zu benutzender Dateiname, wenn package.mask/package.unmask ein Verzeichnis ist:" -#: portato/gui/templates/portato.glade:1451 +#: portato/gui/templates/portato.glade:1541 msgid "Add only exact version to package.mask/package.unmask" msgstr "Füge nur die exakte Paketversion zu package.mask/package.unmask hinzu" -#: portato/gui/templates/portato.glade:1473 +#: portato/gui/templates/portato.glade:1563 msgid "" "You may use the following placeholders:\n" "\n" @@ -298,64 +316,64 @@ msgstr "" "$(pkg): Paketname\n" "$(cat-1)/$(cat-2): erster/zweiter Teil der Kategorie" -#: portato/gui/templates/portato.glade:1499 +#: portato/gui/templates/portato.glade:1589 msgid "Use-Flags" msgstr "Use-Flags" -#: portato/gui/templates/portato.glade:1514 +#: portato/gui/templates/portato.glade:1604 msgid "Testing Keywords" msgstr "Testing Keywords" -#: portato/gui/templates/portato.glade:1529 +#: portato/gui/templates/portato.glade:1619 msgid "Masking Keywords" msgstr "Masking Keywords" -#: portato/gui/templates/portato.glade:1546 +#: portato/gui/templates/portato.glade:1636 msgid "Use Flag and Keyword Options" msgstr "Use-Flag- und Keyword-Optionen" -#: portato/gui/templates/portato.glade:1564 +#: portato/gui/templates/portato.glade:1654 msgid "General" msgstr "Allgemein" -#: portato/gui/templates/portato.glade:1587 +#: portato/gui/templates/portato.glade:1677 msgid "Show emerge progress in title - similar to the console tab" msgstr "Zeige den Emerge Prozess im Fenstertitel (wie im Konsolen-Tab)" -#: portato/gui/templates/portato.glade:1603 +#: portato/gui/templates/portato.glade:1693 msgid "Enable systray" msgstr "Aktiviere Systray" -#: portato/gui/templates/portato.glade:1617 +#: portato/gui/templates/portato.glade:1707 msgid "Hide on minimization (only if systray is enabled)" msgstr "Minimiere zu Systray" -#: portato/gui/templates/portato.glade:1636 +#: portato/gui/templates/portato.glade:1726 msgid "Console Font" msgstr "Schriftart in Konsole" -#: portato/gui/templates/portato.glade:1646 +#: portato/gui/templates/portato.glade:1736 msgid "Chose a console font" msgstr "Wähle eine Schriftart" -#: portato/gui/templates/portato.glade:1673 +#: portato/gui/templates/portato.glade:1763 msgid "Visual" msgstr "Oberfläche" -#: portato/gui/templates/portato.glade:1700 -#: portato/gui/templates/portato.glade:1811 +#: portato/gui/templates/portato.glade:1790 +#: portato/gui/templates/portato.glade:1901 msgid "gtk-apply" msgstr "" -#: portato/gui/templates/portato.glade:1760 +#: portato/gui/templates/portato.glade:1850 msgid "Plugins" msgstr "Plugins" -#: portato/gui/templates/portato.glade:1832 +#: portato/gui/templates/portato.glade:1922 msgid "About Portato" msgstr "Portato" -#: portato/gui/templates/portato.glade:1841 +#: portato/gui/templates/portato.glade:1931 msgid "" "This software is licensed under the terms of the GPLv2.\n" "Copyright (C) 2006-2007 René 'Necoro' Neumann " @@ -363,63 +381,63 @@ msgstr "" "This software is licensed under the terms of the GPLv2.\n" "Copyright (C) 2006-2007 René 'Necoro' Neumann " -#: portato/gui/templates/portato.glade:1843 +#: portato/gui/templates/portato.glade:1933 msgid "A Portage GUI" msgstr "A Portage GUI" -#: portato/gui/templates/portato.glade:1933 +#: portato/gui/templates/portato.glade:2023 msgid "Updateble Packages" msgstr "Pakete mit Updates" -#: portato/gui/templates/portato.glade:1975 +#: portato/gui/templates/portato.glade:2065 msgid "_Close" msgstr "_Schließen" -#: portato/gui/templates/portato.glade:1987 +#: portato/gui/templates/portato.glade:2077 msgid "Select _All" msgstr "_Alles auswählen" -#: portato/gui/templates/portato.glade:2002 +#: portato/gui/templates/portato.glade:2092 msgid "_Install Selected" msgstr "_Installiere ausgewählte" -#: portato.py:47 +#: portato.py:42 msgid "runs pychecker (should only be used by developers)" msgstr "Startet \"pychecker\". (Nur Entwickler sollten dies brauchen)." -#: portato.py:50 +#: portato.py:45 #, python-format msgid "the frontend to use - possible values are: %s [default: %%default]" msgstr "Das zu benutzende Frontend. Möglichkeiten: %s [Default: %%default]" -#: portato.py:56 +#: portato.py:51 msgid "validates the given plugin xml instead of launching Portato" msgstr "Validiert die gegebene Plugin-XML. Startet nicht Portato." -#: portato.py:59 +#: portato.py:54 msgid "do not start listener" msgstr "Starte den Listener nicht." -#: portato.py:72 +#: portato.py:67 #, python-format msgid "Unknown frontend '%(frontend)s'. Correct frontends are: %(list)s" msgstr "Unbekanntest Frontend '%(frontend)s'. Erlaubte Frontends sind: %(list)s" -#: portato.py:80 +#: portato.py:75 #, python-format msgid "'%(frontend)s' should be installed, but cannot be imported. This is definitely a bug. (%(error)s)" msgstr "'%(frontend)s' sollte installiert sein, aber das Einbinden schlug fehl. Das ist definitiv ein Bug. (%(error)s)" -#: portato.py:88 +#: portato.py:83 #, python-format msgid "Validation failed. XML syntax error: %s." msgstr "Validierung fehlgeschlagen. XML Syntax Fehler: %s." -#: portato.py:91 +#: portato.py:86 msgid "Validation failed. Does not comply with schema." msgstr "Validierung gegen das Schema fehlgeschlagen." -#: portato.py:94 +#: portato.py:89 msgid "Validation succeeded." msgstr "Validierung erfolgreich." @@ -463,7 +481,7 @@ msgstr "Aktiviert (temporär)" #: portato/gui/gtk/windows.py:61 #: portato/gui/gtk/windows.py:149 -#: portato/gui/gtk/windows.py:532 +#: portato/gui/gtk/windows.py:574 msgid "Enabled" msgstr "Aktiviert" @@ -491,76 +509,108 @@ msgstr "Paket" msgid "Results" msgstr "Ergebnisse" -#: portato/gui/gtk/windows.py:478 +#: portato/gui/gtk/windows.py:496 msgid "" msgstr "" -#: portato/gui/gtk/windows.py:510 +#: portato/gui/gtk/windows.py:519 +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/gtk/windows.py:523 +msgid "Blank inside homepage." +msgstr "Leerzeichen innerhalb der Homepage-URL." + +#: portato/gui/gtk/windows.py:552 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/gtk/windows.py:534 +#: portato/gui/gtk/windows.py:576 msgid "Flag" msgstr "Flag" -#: portato/gui/gtk/windows.py:535 +#: portato/gui/gtk/windows.py:577 msgid "Description" msgstr "Beschreibung" -#: portato/gui/gtk/windows.py:614 +#: portato/gui/gtk/windows.py:655 #, python-format msgid "Package could not be found: %s" msgstr "Paket konnte nicht gefunden werden: %s" -#: portato/gui/gtk/windows.py:840 +#: portato/gui/gtk/windows.py:712 +#: portato/gui/gtk/windows.py:813 +msgid "Masked by user" +msgstr "Vom Benutzer maskiert" + +#: portato/gui/gtk/windows.py:888 msgid "Loading Config" msgstr "Lade Konfiguration" -#: portato/gui/gtk/windows.py:852 +#: portato/gui/gtk/windows.py:900 msgid "Creating Database" msgstr "Erstelle Datenbank" -#: portato/gui/gtk/windows.py:857 +#: portato/gui/gtk/windows.py:905 msgid "Loading Plugins" msgstr "Lade Plugins" -#: portato/gui/gtk/windows.py:870 +#: portato/gui/gtk/windows.py:918 msgid "Building frontend" msgstr "Erstelle Oberfläche" -#: portato/gui/gtk/windows.py:920 +#: portato/gui/gtk/windows.py:970 msgid "Restoring Session" -msgstr "Laden der Sitzung" +msgstr "Lade Session" -#: portato/gui/gtk/windows.py:923 +#: portato/gui/gtk/windows.py:973 msgid "Finishing startup" msgstr "Erledige letzte Handgriffe :)" -#: portato/gui/gtk/windows.py:970 +#: portato/gui/gtk/windows.py:1025 msgid "Options" msgstr "Optionen" -#: portato/gui/gtk/windows.py:980 +#: portato/gui/gtk/windows.py:1035 msgid "Categories" msgstr "Kategorien" -#: portato/gui/gtk/windows.py:1010 +#: portato/gui/gtk/windows.py:1062 msgid "Packages" msgstr "Pakete" -#: portato/gui/gtk/windows.py:1131 +#: portato/gui/gtk/windows.py:1184 #, python-format msgid "Console (%(title)s)" msgstr "Konsole (%(title)s)" -#: portato/gui/gtk/windows.py:1247 +#: portato/gui/gtk/windows.py:1300 msgid "use flags" msgstr "Use Flags" -#: portato/gui/gtk/windows.py:1254 +#: portato/gui/gtk/windows.py:1307 msgid "masking keywords" msgstr "Masking Keywords" +#: portato/gui/gtk/views.py:70 +msgid "Package is not installed" +msgstr "Paket ist nicht installiert" + +#: portato/gui/gtk/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/gtk/views.py:92 +#, python-format +msgid "No %(old)s language file installed. Disable highlighting." +msgstr "Keine \"%(old)s\" Syntaxdatei gefunden. Deaktiviere Hervorhebung." + +#: portato/gui/gtk/views.py:111 +#, python-format +msgid "Error: %s" +msgstr "Fehler: %s" + #: portato/gui/gtk/__init__.py:23 msgid "Loading Portage" msgstr "Lade Portage" @@ -677,22 +727,11 @@ msgstr "" "Exception:\n" "%s" -#: portato/gui/gtk/views.py:30 -#, 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/gtk/views.py:35 -#, python-format -msgid "No %(old)s language file installed. Disable highlighting." -msgstr "Keine \"%(old)s\" Syntaxdatei gefunden. Deaktiviere Hervorhebung." - -#: portato/gui/gtk/views.py:59 -#, python-format -msgid "Error: %s" -msgstr "Fehler: %s" +#: portato/gui/gui_helper.py:125 +msgid "ALL" +msgstr "ALLE" -#: portato/gui/gui_helper.py:180 +#: portato/gui/gui_helper.py:194 #, python-format msgid "Catched KeyError => %s seems not to be an available category. Have you played with rsync-excludes?" msgstr "Catched KeyError => %s scheint keine valide Kategorie zu sein. Hast du mit rsync-excludes gespielt?" @@ -775,7 +814,7 @@ msgstr "Konflikt beim Masking-Status: %s" msgid "Unrecognized line in configuration: %s" msgstr "Unbekannte Zeile in Konfiguration: %s" -#: portato/plistener.py:93 +#: portato/plistener.py:88 msgid "Listener has not been started." msgstr "Listener wurde nicht gestartet." diff --git a/i18n/messages.pot b/i18n/messages.pot index 38f4cbc..39bb760 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-01-14 17:10+0100\n" +"POT-Creation-Date: 2008-01-14 23:07+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -29,7 +29,7 @@ msgid "Re_load Portage" msgstr "" #: portato/gui/templates/portato.glade:68 -#: portato/gui/templates/portato.glade:1750 +#: portato/gui/templates/portato.glade:1840 msgid "gtk-quit" msgstr "" @@ -38,17 +38,17 @@ msgid "_Emerge" msgstr "" #: portato/gui/templates/portato.glade:89 -#: portato/gui/templates/portato.glade:857 +#: portato/gui/templates/portato.glade:945 msgid "E_merge" msgstr "" #: portato/gui/templates/portato.glade:104 -#: portato/gui/templates/portato.glade:891 +#: portato/gui/templates/portato.glade:979 msgid "_Unmerge" msgstr "" #: portato/gui/templates/portato.glade:118 -#: portato/gui/templates/portato.glade:910 +#: portato/gui/templates/portato.glade:998 msgid "Update _World" msgstr "" @@ -70,17 +70,17 @@ msgstr "" #: portato/gui/templates/portato.glade:187 #: portato/gui/templates/portato.glade:279 -#: portato/gui/templates/portato.glade:1725 +#: portato/gui/templates/portato.glade:1815 msgid "Emerge _Paused" msgstr "" #: portato/gui/templates/portato.glade:195 #: portato/gui/templates/portato.glade:261 -#: portato/gui/templates/portato.glade:1732 +#: portato/gui/templates/portato.glade:1822 msgid "_Kill Emerge" msgstr "" -#: portato/gui/templates/portato.glade:218 portato/gui/gtk/windows.py:967 +#: portato/gui/templates/portato.glade:218 portato/gui/gtk/windows.py:1022 msgid "Queue" msgstr "" @@ -88,7 +88,7 @@ msgstr "" msgid "Oneshot" msgstr "" -#: portato/gui/templates/portato.glade:237 portato/gui/gtk/windows.py:1129 +#: portato/gui/templates/portato.glade:237 portato/gui/gtk/windows.py:1182 msgid "Console" msgstr "" @@ -116,171 +116,189 @@ msgstr "" msgid "gtk-find" msgstr "" -#: portato/gui/templates/portato.glade:473 -msgid "Installed, but not in portage anymore" +#: portato/gui/templates/portato.glade:464 +msgid "Add to Emerge Queue" msgstr "" -#: portato/gui/templates/portato.glade:552 -msgid "MISSING KEYWORD" +#: portato/gui/templates/portato.glade:476 +msgid "Remove from Emerge Queue" msgstr "" -#: portato/gui/templates/portato.glade:570 -msgid "Mark package for installation" +#: portato/gui/templates/portato.glade:488 +msgid "Revert changes" msgstr "" -#: portato/gui/templates/portato.glade:589 -msgid "Add to E_merge Queue" +#: portato/gui/templates/portato.glade:510 +#: portato/gui/templates/portato.glade:633 +#: portato/gui/templates/portato.glade:648 +msgid "label" msgstr "" -#: portato/gui/templates/portato.glade:604 -msgid "Mark package for deinstallation" +#: portato/gui/templates/portato.glade:555 +msgid "Installed, but not in portage anymore" msgstr "" -#: portato/gui/templates/portato.glade:623 -msgid "Add to _Unmerge Queue" +#: portato/gui/templates/portato.glade:570 +msgid "MISSING KEYWORD" msgstr "" -#: portato/gui/templates/portato.glade:659 -msgid "Re_vert" +#: portato/gui/templates/portato.glade:602 +msgid "Description:" msgstr "" -#: portato/gui/templates/portato.glade:690 portato/gui/gtk/windows.py:533 +#: portato/gui/templates/portato.glade:617 +msgid "Overlay:" +msgstr "" + +#: portato/gui/templates/portato.glade:665 +msgid "Homepage:" +msgstr "" + +#: portato/gui/templates/portato.glade:682 portato/gui/gtk/windows.py:575 msgid "Installed" msgstr "" -#: portato/gui/templates/portato.glade:703 portato/gui/gtk/windows.py:664 -#: portato/gui/gtk/windows.py:667 portato/gui/gtk/windows.py:670 -#: portato/gui/gtk/windows.py:762 portato/gui/gtk/windows.py:765 -#: portato/gui/gtk/windows.py:772 portato/gui/gtk/windows.py:776 +#: portato/gui/templates/portato.glade:701 portato/gui/gtk/windows.py:703 +#: portato/gui/gtk/windows.py:706 portato/gui/gtk/windows.py:709 +#: portato/gui/gtk/windows.py:811 portato/gui/gtk/windows.py:815 +#: portato/gui/gtk/windows.py:822 portato/gui/gtk/windows.py:826 msgid "Masked" msgstr "" -#: portato/gui/templates/portato.glade:717 portato/gui/gtk/windows.py:677 -#: portato/gui/gtk/windows.py:680 portato/gui/gtk/windows.py:734 -#: portato/gui/gtk/windows.py:739 +#: portato/gui/templates/portato.glade:734 portato/gui/gtk/windows.py:720 +#: portato/gui/gtk/windows.py:723 portato/gui/gtk/windows.py:784 +#: portato/gui/gtk/windows.py:788 msgid "Testing" msgstr "" -#: portato/gui/templates/portato.glade:743 -msgid "_Package" +#: portato/gui/templates/portato.glade:754 +msgid "_General" msgstr "" -#: portato/gui/templates/portato.glade:770 +#: portato/gui/templates/portato.glade:786 +msgid "U_se List" +msgstr "" + +#: portato/gui/templates/portato.glade:814 msgid "E_build" msgstr "" -#: portato/gui/templates/portato.glade:798 +#: portato/gui/templates/portato.glade:842 msgid "C_hangelog" msgstr "" -#: portato/gui/templates/portato.glade:838 +#: portato/gui/templates/portato.glade:870 +msgid "F_iles" +msgstr "" + +#: portato/gui/templates/portato.glade:926 msgid "Install all packages in the \"Emerge Queue\"" msgstr "" -#: portato/gui/templates/portato.glade:872 +#: portato/gui/templates/portato.glade:960 msgid "Deinstall all packages in the \"Unmerge Queue\"" msgstr "" -#: portato/gui/templates/portato.glade:909 +#: portato/gui/templates/portato.glade:997 msgid "" "Calculate the packages which will be installed during an \"update world\"" msgstr "" -#: portato/gui/templates/portato.glade:922 +#: portato/gui/templates/portato.glade:1010 msgid "Remove the selected package from the queue" msgstr "" -#: portato/gui/templates/portato.glade:923 +#: portato/gui/templates/portato.glade:1011 msgid "_Remove" msgstr "" -#: portato/gui/templates/portato.glade:947 +#: portato/gui/templates/portato.glade:1033 msgid "_Queue" msgstr "" -#: portato/gui/templates/portato.glade:974 +#: portato/gui/templates/portato.glade:1059 msgid "_Console" msgstr "" -#: portato/gui/templates/portato.glade:1010 -msgid "_Log" +#: portato/gui/templates/portato.glade:1094 +msgid "L_og" msgstr "" -#: portato/gui/templates/portato.glade:1039 +#: portato/gui/templates/portato.glade:1129 msgid "Portato - A Portage GUI" msgstr "" -#: portato/gui/templates/portato.glade:1056 +#: portato/gui/templates/portato.glade:1146 msgid "Search Results" msgstr "" -#: portato/gui/templates/portato.glade:1096 -#: portato/gui/templates/portato.glade:1691 -#: portato/gui/templates/portato.glade:1799 +#: portato/gui/templates/portato.glade:1186 +#: portato/gui/templates/portato.glade:1781 +#: portato/gui/templates/portato.glade:1889 msgid "gtk-cancel" msgstr "" -#: portato/gui/templates/portato.glade:1108 +#: portato/gui/templates/portato.glade:1198 msgid "gtk-jump-to" msgstr "" -#: portato/gui/templates/portato.glade:1123 +#: portato/gui/templates/portato.glade:1213 msgid "gtk-ok" msgstr "" -#: portato/gui/templates/portato.glade:1144 +#: portato/gui/templates/portato.glade:1234 msgid "Preferences" msgstr "" -#: portato/gui/templates/portato.glade:1179 +#: portato/gui/templates/portato.glade:1269 msgid "Debug" msgstr "" -#: portato/gui/templates/portato.glade:1192 +#: portato/gui/templates/portato.glade:1282 msgid "Browser command: " msgstr "" -#: portato/gui/templates/portato.glade:1218 +#: portato/gui/templates/portato.glade:1308 msgid "General Options" msgstr "" -#: portato/gui/templates/portato.glade:1268 +#: portato/gui/templates/portato.glade:1358 msgid "Update World Options" msgstr "" -#: portato/gui/templates/portato.glade:1296 +#: portato/gui/templates/portato.glade:1386 msgid "Sync command: " msgstr "" -#: portato/gui/templates/portato.glade:1317 +#: portato/gui/templates/portato.glade:1407 msgid "Sync Options" msgstr "" -#: portato/gui/templates/portato.glade:1368 +#: portato/gui/templates/portato.glade:1458 msgid "File name to use, if package.use is a directory: " msgstr "" -#: portato/gui/templates/portato.glade:1379 +#: portato/gui/templates/portato.glade:1469 msgid "Add only exact version to package.use" msgstr "" -#: portato/gui/templates/portato.glade:1392 +#: portato/gui/templates/portato.glade:1482 msgid "Add only exact version to package.keywords" msgstr "" -#: portato/gui/templates/portato.glade:1406 +#: portato/gui/templates/portato.glade:1496 msgid "File name to use, if package.keywords is a directory: " msgstr "" -#: portato/gui/templates/portato.glade:1440 +#: portato/gui/templates/portato.glade:1530 msgid "File name to use, if package.mask/package.unmask is a directory: " msgstr "" -#: portato/gui/templates/portato.glade:1451 +#: portato/gui/templates/portato.glade:1541 msgid "Add only exact version to package.mask/package.unmask" msgstr "" -#: portato/gui/templates/portato.glade:1473 +#: portato/gui/templates/portato.glade:1563 msgid "" "You may use the following placeholders:\n" "\n" @@ -289,128 +307,128 @@ msgid "" "$(cat-1)/$(cat-2): first/second part of the category" msgstr "" -#: portato/gui/templates/portato.glade:1499 +#: portato/gui/templates/portato.glade:1589 msgid "Use-Flags" msgstr "" -#: portato/gui/templates/portato.glade:1514 +#: portato/gui/templates/portato.glade:1604 msgid "Testing Keywords" msgstr "" -#: portato/gui/templates/portato.glade:1529 +#: portato/gui/templates/portato.glade:1619 msgid "Masking Keywords" msgstr "" -#: portato/gui/templates/portato.glade:1546 +#: portato/gui/templates/portato.glade:1636 msgid "Use Flag and Keyword Options" msgstr "" -#: portato/gui/templates/portato.glade:1564 +#: portato/gui/templates/portato.glade:1654 msgid "General" msgstr "" -#: portato/gui/templates/portato.glade:1587 +#: portato/gui/templates/portato.glade:1677 msgid "Show emerge progress in title - similar to the console tab" msgstr "" -#: portato/gui/templates/portato.glade:1603 +#: portato/gui/templates/portato.glade:1693 msgid "Enable systray" msgstr "" -#: portato/gui/templates/portato.glade:1617 +#: portato/gui/templates/portato.glade:1707 msgid "Hide on minimization (only if systray is enabled)" msgstr "" -#: portato/gui/templates/portato.glade:1636 +#: portato/gui/templates/portato.glade:1726 msgid "Console Font" msgstr "" -#: portato/gui/templates/portato.glade:1646 +#: portato/gui/templates/portato.glade:1736 msgid "Chose a console font" msgstr "" -#: portato/gui/templates/portato.glade:1673 +#: portato/gui/templates/portato.glade:1763 msgid "Visual" msgstr "" -#: portato/gui/templates/portato.glade:1700 -#: portato/gui/templates/portato.glade:1811 +#: portato/gui/templates/portato.glade:1790 +#: portato/gui/templates/portato.glade:1901 msgid "gtk-apply" msgstr "" -#: portato/gui/templates/portato.glade:1760 +#: portato/gui/templates/portato.glade:1850 msgid "Plugins" msgstr "" -#: portato/gui/templates/portato.glade:1832 +#: portato/gui/templates/portato.glade:1922 msgid "About Portato" msgstr "" -#: portato/gui/templates/portato.glade:1841 +#: portato/gui/templates/portato.glade:1931 msgid "" "This software is licensed under the terms of the GPLv2.\n" "Copyright (C) 2006-2007 René 'Necoro' Neumann " msgstr "" -#: portato/gui/templates/portato.glade:1843 +#: portato/gui/templates/portato.glade:1933 msgid "A Portage GUI" msgstr "" -#: portato/gui/templates/portato.glade:1933 +#: portato/gui/templates/portato.glade:2023 msgid "Updateble Packages" msgstr "" -#: portato/gui/templates/portato.glade:1975 +#: portato/gui/templates/portato.glade:2065 msgid "_Close" msgstr "" -#: portato/gui/templates/portato.glade:1987 +#: portato/gui/templates/portato.glade:2077 msgid "Select _All" msgstr "" -#: portato/gui/templates/portato.glade:2002 +#: portato/gui/templates/portato.glade:2092 msgid "_Install Selected" msgstr "" -#: portato.py:47 +#: portato.py:42 msgid "runs pychecker (should only be used by developers)" msgstr "" -#: portato.py:50 +#: portato.py:45 #, python-format msgid "the frontend to use - possible values are: %s [default: %%default]" msgstr "" -#: portato.py:56 +#: portato.py:51 msgid "validates the given plugin xml instead of launching Portato" msgstr "" -#: portato.py:59 +#: portato.py:54 msgid "do not start listener" msgstr "" -#: portato.py:72 +#: portato.py:67 #, python-format msgid "Unknown frontend '%(frontend)s'. Correct frontends are: %(list)s" msgstr "" -#: portato.py:80 +#: portato.py:75 #, python-format msgid "" "'%(frontend)s' should be installed, but cannot be imported. This is " "definitely a bug. (%(error)s)" msgstr "" -#: portato.py:88 +#: portato.py:83 #, python-format msgid "Validation failed. XML syntax error: %s." msgstr "" -#: portato.py:91 +#: portato.py:86 msgid "Validation failed. Does not comply with schema." msgstr "" -#: portato.py:94 +#: portato.py:89 msgid "Validation succeeded." msgstr "" @@ -453,7 +471,7 @@ msgid "Temporarily enabled" msgstr "" #: portato/gui/gtk/windows.py:61 portato/gui/gtk/windows.py:149 -#: portato/gui/gtk/windows.py:532 +#: portato/gui/gtk/windows.py:574 msgid "Enabled" msgstr "" @@ -481,76 +499,107 @@ msgstr "" msgid "Results" msgstr "" -#: portato/gui/gtk/windows.py:478 +#: portato/gui/gtk/windows.py:496 msgid "" msgstr "" -#: portato/gui/gtk/windows.py:510 +#: portato/gui/gtk/windows.py:519 +msgid "The first homepage part does not start with 'http' or 'ftp'." +msgstr "" + +#: portato/gui/gtk/windows.py:523 +msgid "Blank inside homepage." +msgstr "" + +#: portato/gui/gtk/windows.py:552 msgid "This is an expanded use flag and cannot be selected" msgstr "" -#: portato/gui/gtk/windows.py:534 +#: portato/gui/gtk/windows.py:576 msgid "Flag" msgstr "" -#: portato/gui/gtk/windows.py:535 +#: portato/gui/gtk/windows.py:577 msgid "Description" msgstr "" -#: portato/gui/gtk/windows.py:614 +#: portato/gui/gtk/windows.py:655 #, python-format msgid "Package could not be found: %s" msgstr "" -#: portato/gui/gtk/windows.py:840 +#: portato/gui/gtk/windows.py:712 portato/gui/gtk/windows.py:813 +msgid "Masked by user" +msgstr "" + +#: portato/gui/gtk/windows.py:888 msgid "Loading Config" msgstr "" -#: portato/gui/gtk/windows.py:852 +#: portato/gui/gtk/windows.py:900 msgid "Creating Database" msgstr "" -#: portato/gui/gtk/windows.py:857 +#: portato/gui/gtk/windows.py:905 msgid "Loading Plugins" msgstr "" -#: portato/gui/gtk/windows.py:870 +#: portato/gui/gtk/windows.py:918 msgid "Building frontend" msgstr "" -#: portato/gui/gtk/windows.py:920 +#: portato/gui/gtk/windows.py:970 msgid "Restoring Session" msgstr "" -#: portato/gui/gtk/windows.py:923 +#: portato/gui/gtk/windows.py:973 msgid "Finishing startup" msgstr "" -#: portato/gui/gtk/windows.py:970 +#: portato/gui/gtk/windows.py:1025 msgid "Options" msgstr "" -#: portato/gui/gtk/windows.py:980 +#: portato/gui/gtk/windows.py:1035 msgid "Categories" msgstr "" -#: portato/gui/gtk/windows.py:1010 +#: portato/gui/gtk/windows.py:1062 msgid "Packages" msgstr "" -#: portato/gui/gtk/windows.py:1131 +#: portato/gui/gtk/windows.py:1184 #, python-format msgid "Console (%(title)s)" msgstr "" -#: portato/gui/gtk/windows.py:1247 +#: portato/gui/gtk/windows.py:1300 msgid "use flags" msgstr "" -#: portato/gui/gtk/windows.py:1254 +#: portato/gui/gtk/windows.py:1307 msgid "masking keywords" msgstr "" +#: portato/gui/gtk/views.py:70 +msgid "Package is not installed" +msgstr "" + +#: portato/gui/gtk/views.py:87 +#, python-format +msgid "No %(old)s language file installed. Falling back to %(new)s." +msgstr "" + +#: portato/gui/gtk/views.py:92 +#, python-format +msgid "No %(old)s language file installed. Disable highlighting." +msgstr "" + +#: portato/gui/gtk/views.py:111 +#, python-format +msgid "Error: %s" +msgstr "" + #: portato/gui/gtk/__init__.py:23 msgid "Loading Portage" msgstr "" @@ -663,22 +712,11 @@ msgid "" "%s" msgstr "" -#: portato/gui/gtk/views.py:30 -#, python-format -msgid "No %(old)s language file installed. Falling back to %(new)s." -msgstr "" - -#: portato/gui/gtk/views.py:35 -#, python-format -msgid "No %(old)s language file installed. Disable highlighting." -msgstr "" - -#: portato/gui/gtk/views.py:59 -#, python-format -msgid "Error: %s" +#: portato/gui/gui_helper.py:125 +msgid "ALL" msgstr "" -#: portato/gui/gui_helper.py:180 +#: portato/gui/gui_helper.py:194 #, python-format msgid "" "Catched KeyError => %s seems not to be an available category. Have you " @@ -763,6 +801,6 @@ msgstr "" msgid "Unrecognized line in configuration: %s" msgstr "" -#: portato/plistener.py:93 +#: portato/plistener.py:88 msgid "Listener has not been started." msgstr "" diff --git a/portato/backend/package.py b/portato/backend/package.py index 8df7dae..4f90765 100644 --- a/portato/backend/package.py +++ b/portato/backend/package.py @@ -330,6 +330,15 @@ class Package (_Package): raise NotImplementedError + def get_files (self): + """ + Returns an iterator over the installed files of a package. + If the package is not installed, the iterator should be "empty". + + @returns: the installed files + @rtype: string + """ + def get_package_settings(self, var, tree = None): """Returns a package specific setting, such as DESCRIPTION, SRC_URI, IUSE ... diff --git a/portato/backend/portage/package.py b/portato/backend/portage/package.py index 0c8e5f1..845cc0b 100644 --- a/portato/backend/portage/package.py +++ b/portato/backend/portage/package.py @@ -263,6 +263,13 @@ class PortagePackage (Package): def get_ebuild_path(self): return self._settings.porttree.dbapi.findname(self._cpv) + def get_files (self): + if self.is_installed(): + path = os.path.join(self.get_global_settings("ROOT"), portage.VDB_PATH, self.get_cpv(), "CONTENTS") + with open(path) as f: + for line in f: + yield line.split()[1].strip() + def get_package_settings(self, var, tree = None): if not tree: mytree = self._settings.vartree diff --git a/portato/gui/gtk/views.py b/portato/gui/gtk/views.py index a559aee..7c5af3d 100644 --- a/portato/gui/gtk/views.py +++ b/portato/gui/gtk/views.py @@ -17,6 +17,8 @@ import gtksourceview2 import gtk import logging +from gettext import lgettext as _ + class LazyView (object): def __init__ (self): self.connect("map", self.cb_mapped) @@ -24,13 +26,17 @@ class LazyView (object): self.pkg = None self.updated = False - def update (self, pkg): + def update (self, pkg, force = False): self.pkg = pkg self.updated = True + + if force: + self.cb_mapped() def cb_mapped (self, *args): if self.updated and self.pkg: - self.set_text("".join(self._get_content(self.pkg))) + self.set_text("".join(self._get_content())) + self.updated = False return False @@ -48,11 +54,14 @@ class ListView (gtk.TextView, LazyView): gtk.TextView.__init__(self) LazyView.__init__(self) + self.set_editable(False) + self.set_cursor_visible(False) + def set_text (self, text): self.get_buffer().set_text(text) def _get_content (self): - return self.content_fn() + return self.content_fn(self.pkg) class InstalledOnlyView (ListView): def _get_content (self): @@ -62,7 +71,7 @@ class InstalledOnlyView (ListView): else: return ListView._get_content(self) else: - return "" + return "Huh?" class HighlightView (gtksourceview2.View, LazyView): @@ -94,9 +103,9 @@ class HighlightView (gtksourceview2.View, LazyView): def set_text (self, text): self.get_buffer().set_text(text) - def _get_content (self, pkg): + def _get_content (self): try: - with open(self.get_fn(pkg)) as f: + with open(self.get_fn(self.pkg)) as f: return f.readlines() except IOError, e: return _("Error: %s") % e.strerror diff --git a/portato/gui/gtk/windows.py b/portato/gui/gtk/windows.py index 8c8ffe0..b49e701 100644 --- a/portato/gui/gtk/windows.py +++ b/portato/gui/gtk/windows.py @@ -34,7 +34,7 @@ from ..gui_helper import Database, Config, EmergeQueue from .basic import Window, AbstractDialog, Popup from .wrapper import GtkTree, GtkConsole from .exception_handling import GtkThread -from .views import LogView, HighlightView +from .views import LogView, HighlightView, InstalledOnlyView from .dialogs import (blocked_dialog, changed_flags_dialog, io_ex_dialog, nothing_found_dialog, queue_not_empty_dialog, remove_deps_dialog, remove_queue_dialog, unmask_dialog) @@ -400,36 +400,48 @@ class PackageTable: self.window = main.window self.tree.signal_autoconnect(self) - # the table - self.table = self.tree.get_widget("PackageTable") + # all the package data is in this one VB + self.vb = self.tree.get_widget("packageVB") + + # the notebook + self.notebook = self.tree.get_widget("packageNotebook") - # the version list - self.versList = self.tree.get_widget("versionList") - self.build_vers_list() + # the version combo + self.versionCombo = self.tree.get_widget("versionCombo") + self.build_version_combo() # chechboxes self.installedCheck = self.tree.get_widget("installedCheck") self.maskedCheck = self.tree.get_widget("maskedCheck") self.testingCheck = self.tree.get_widget("testingCheck") + self.maskedLabel = self.tree.get_widget("maskedLabel") # labels + generalEB = self.tree.get_widget("generalEB") + generalEB.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#FFFFFF")) + + self.nameLabel = self.tree.get_widget("nameLabel") self.descLabel = self.tree.get_widget("descLabel") + self.overlayLabel = self.tree.get_widget("overlayLabel") + self.overlayLL = self.tree.get_widget("overlayLabelLabel") + self.linkBox = self.tree.get_widget("linkBox") self.notInSysLabel = self.tree.get_widget("notInSysLabel") self.missingLabel = self.tree.get_widget("missingLabel") - # link - self.pkgLinkBox = self.tree.get_widget("pkgLinkBox") - # buttons self.emergeBtn = self.tree.get_widget("pkgEmergeBtn") self.unmergeBtn = self.tree.get_widget("pkgUnmergeBtn") - self.cancelBtn = self.tree.get_widget("pkgCancelBtn") - self.ebuildBtn = self.tree.get_widget("pkgEbuildBtn") + self.revertBtn = self.tree.get_widget("pkgRevertBtn") # useList self.useList = self.tree.get_widget("useList") self.build_use_list() + # views + self.ebuildView = self.tree.get_widget("ebuildScroll").get_child() + self.changelogView = self.tree.get_widget("changelogScroll").get_child() + self.filesView = self.tree.get_widget("filesScroll").get_child() + def update (self, cp, queue = None, version = None, doEmerge = True, instantChange = False): """Updates the table to show the contents for the package. @@ -458,36 +470,66 @@ class PackageTable: self.instPackages = system.sort_package_list(system.find_installed_packages(cp, masked = True)) # version-combo-box - self.versList.get_model().clear() - self.fill_vers_list() + self.versionCombo.handler_block(self.versionCombo.changeHandler) # block change handler, because it would be called several times + self.versionCombo.get_model().clear() + self.fill_version_combo() + self.versionCombo.handler_unblock(self.versionCombo.changeHandler) # unblock handler again if not self.queue or not self.doEmerge: self.emergeBtn.set_sensitive(False) self.unmergeBtn.set_sensitive(False) # current status - self.cb_vers_list_changed() - self.table.show_all() + self.cb_version_combo_changed() + self.vb.show_all() def hide (self): - self.table.hide_all() + self.vb.hide_all() - def set_desc_label (self): - desc = self.actual_package().get_package_settings("DESCRIPTION").replace("&","&") - if not desc: - desc = _("") - use_markup = False - else: - desc = ""+desc+"" - use_markup = True - name = ""+self.actual_package().get_cp()+"" + def set_labels (self): + pkg = self.actual_package() + + # name + self.nameLabel.set_markup("%s" % pkg.get_cp()) + + # description + desc = pkg.get_package_settings("DESCRIPTION") or _("") + self.descLabel.set_label(desc) + + # overlay if self.actual_package().is_overlay(): - name = "%s\n(Overlay: %s)" % (name, self.actual_package().get_overlay_path()) + self.overlayLabel.set_label(pkg.get_overlay_path()) + self.overlayLabel.show() + self.overlayLL.show() + else: + self.overlayLabel.hide() + self.overlayLL.hide() - desc = "%s\n\n%s" % (name, desc) + # link + for c in self.linkBox.get_children(): + self.linkBox.remove(c) + + text = pkg.get_package_settings("HOMEPAGE") + texts = text.split(" ") + ftexts = [] + + for t in texts: + if not t.startswith(("http:", "ftp:")): + if count == 0: + error(_("The first homepage part does not start with 'http' or 'ftp'.")) + ftexts.append(t) + continue + else: + info(_("Blank inside homepage.")) + ftexts[-1] += t + else: + ftexts.append(t) - self.descLabel.set_use_markup(use_markup) - self.descLabel.set_label(desc) + for t in ftexts: + link = gtk.LinkButton(t) + link.set_alignment(0.0, 0.5) + link.set_border_width(0) + self.linkBox.add(link) def fill_use_list(self): @@ -537,7 +579,7 @@ class PackageTable: self.useList.set_search_column(2) self.useList.set_enable_tree_lines(True) - def build_vers_list (self): + def build_version_combo (self): """Builds the package list. @param name: name of the selected catetegory @@ -546,24 +588,26 @@ class PackageTable: store = gtk.ListStore(gtk.gdk.Pixbuf, str) # build view - self.versList.set_model(store) - col = gtk.TreeViewColumn(("Versions")) + self.versionCombo.set_model(store) + col = gtk.TreeViewColumn("Versions") # adding the pixbuf cell = gtk.CellRendererPixbuf() - col.pack_start(cell, False) - col.add_attribute(cell, "pixbuf", 0) + self.versionCombo.pack_start(cell, False) + self.versionCombo.add_attribute(cell, "pixbuf", 0) # adding the package name cell = gtk.CellRendererText() - col.pack_start(cell, True) - col.add_attribute(cell, "text", 1) + self.versionCombo.pack_start(cell, True) + self.versionCombo.add_attribute(cell, "text", 1) - self.versList.append_column(col) + # connect + self.versionCombo.changeHandler = self.versionCombo.connect("changed", self.cb_version_combo_changed) + + def fill_version_combo (self): - def fill_vers_list (self): + store = self.versionCombo.get_model() - store = self.versList.get_model() # append versions for vers, inst in ((x.get_version(), x.is_installed()) for x in self.packages): if inst: @@ -572,8 +616,6 @@ class PackageTable: icon = None store.append([icon, vers]) - sel = self.versList.get_selection() - # activate the first one try: best_version = "" @@ -583,10 +625,10 @@ class PackageTable: 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: - sel.select_path((i,)) + self.versionCombo.set_active(i) break except AttributeError: # no package found - sel.select_path((0,)) + self.versionCombo.set_active(0) def actual_package (self): """Returns the actual selected package. @@ -594,8 +636,7 @@ class PackageTable: @returns: the actual selected package @rtype: backend.Package""" - model, iter = self.versList.get_selection().get_selected() - return self.packages[model.get_path(iter)[0]] + return self.packages[self.versionCombo.get_active()] def _update_keywords (self, emerge, update = False): if emerge: @@ -614,20 +655,16 @@ class PackageTable: error(_("Package could not be found: %s"), e[0]) #masked_dialog(e[0]) - def cb_vers_list_changed (self, *args): + def cb_version_combo_changed (self, *args): pkg = self.actual_package() - self.main.ebuildView.update(pkg) - self.main.ebuildView.get_parent().show_all() - self.main.changelogView.update(pkg) - self.main.changelogView.get_parent().show_all() - - self.set_desc_label() - for c in self.pkgLinkBox.get_children(): - self.pkgLinkBox.remove(c) + # set the views + for v in (self.ebuildView, self.changelogView, self.filesView): + v.update(pkg, force = self.notebook.get_nth_page(self.notebook.get_current_page()) == v.get_parent()) - self.pkgLinkBox.add(gtk.LinkButton(pkg.get_package_settings("HOMEPAGE"))) + # set the labels + self.set_labels() # set use list self.useList.get_model().clear() @@ -644,9 +681,10 @@ class PackageTable: else: # missing keyword self.missingLabel.show() self.notInSysLabel.hide() - +# self.installedCheck.hide() self.maskedCheck.hide() + self.maskedLabel.hide() self.testingCheck.hide() self.emergeBtn.set_sensitive(False) else: # normal package @@ -654,12 +692,13 @@ class PackageTable: self.notInSysLabel.hide() self.installedCheck.show() self.maskedCheck.show() + self.maskedLabel.show() self.testingCheck.show() if self.doEmerge: self.emergeBtn.set_sensitive(True) self.installedCheck.set_active(pkg.is_installed()) - gtk.Tooltips().set_tip(self.maskedCheck, pkg.get_masking_reason()) # this returns None if it is not masked =) + reason = pkg.get_masking_reason() or " " if pkg.is_masked(use_changed = False) and not pkg.is_masked(use_changed = True): self.maskedCheck.set_label("(%s)" % _("Masked")) self.maskedCheck.get_child().set_use_markup(True) @@ -670,9 +709,13 @@ class PackageTable: self.maskedCheck.set_label("%s" % _("Masked")) self.maskedCheck.get_child().set_use_markup(True) self.maskedCheck.set_active(True) + reason = _("Masked by user") else: self.maskedCheck.set_active(pkg.is_masked(use_changed = False)) + if reason: + self.maskedLabel.set_label(reason) + if pkg.is_testing(use_keywords = False) and not pkg.is_testing(use_keywords = True): self.testingCheck.set_label("(%s)" % _("Testing")) self.testingCheck.get_child().set_use_markup(True) @@ -688,7 +731,7 @@ class PackageTable: else: self.unmergeBtn.set_sensitive(True) - self.table.show_all() + self.vb.show_all() return True @@ -726,19 +769,25 @@ class PackageTable: """Callback for toggled testing-checkbox.""" status = button.get_active() + # end of recursion :) if self.actual_package().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): + 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) button.set_label(_("Testing")) button.set_active(True) - else: + else: # disable testing self.actual_package().set_testing(True) - if self.actual_package().is_testing(use_keywords=False): - button.set_label("(%s)" % _("Testing")) - button.get_child().set_use_markup(True) - button.set_active(True) + button.set_label("(%s)" % _("Testing")) + button.get_child().set_use_markup(True) + button.set_active(True) if self.instantChange: self._update_keywords(True, update = True) @@ -761,6 +810,7 @@ class PackageTable: if pkg.is_locally_masked(): button.set_label("%s" % _("Masked")) button.get_child().set_use_markup(True) + self.maskedLabel.set_label(_("Masked by user")) else: button.set_label(_("Masked")) @@ -774,6 +824,7 @@ class PackageTable: button.set_active(True) else: button.set_label(_("Masked")) + self.maskedLabel.set_label("") if self.instantChange: self._update_keywords(True, update = True) @@ -804,13 +855,10 @@ class MainWindow (Window): # NOTEBOOK PAGE CONSTANTS ( - PKG_PAGE, - EBUILD_PAGE, - CHANGELOG_PAGE, QUEUE_PAGE, CONSOLE_PAGE, LOG_PAGE - ) = range(6) + ) = range(3) def __init__ (self, splash = None): """Build up window""" @@ -871,6 +919,8 @@ class MainWindow (Window): # set vpaned position self.vpaned = self.tree.get_widget("vpaned") self.vpaned.set_position(int(self.window.get_size()[1]/2)) + self.hpaned = self.tree.get_widget("hpaned") + self.hpaned.set_position(int(self.window.get_size()[0]/2)) # cat and pkg list self.sortPkgListByName = True @@ -923,19 +973,25 @@ class MainWindow (Window): splash(_("Finishing startup")) # notebook - self.notebook = self.tree.get_widget("notebook") + self.notebook = self.tree.get_widget("systemNotebook") self.window.show_all() # the hidden stuff ebuildScroll = self.tree.get_widget("ebuildScroll") - self.ebuildView = HighlightView(lambda p: p.get_ebuild_path(), ["gentoo", "sh"]) - ebuildScroll.add(self.ebuildView) + ebuildScroll.add(HighlightView(lambda p: p.get_ebuild_path(), ["gentoo", "sh"])) ebuildScroll.hide_all() changelogScroll = self.tree.get_widget("changelogScroll") - self.changelogView = HighlightView(lambda p: os.path.join(p.get_package_path(), "ChangeLog"), ["changelog"]) - changelogScroll.add(self.changelogView) + changelogScroll.add(HighlightView(lambda p: os.path.join(p.get_package_path(), "ChangeLog"), ["changelog"])) changelogScroll.hide_all() + + def show_files (p): + for f in p.get_files(): + yield " %s\n" % f + + filesScroll = self.tree.get_widget("filesScroll") + filesScroll.add(InstalledOnlyView(show_files)) + filesScroll.hide_all() # table self.packageTable = PackageTable(self) @@ -943,7 +999,6 @@ class MainWindow (Window): def show_package (self, *args, **kwargs): self.packageTable.update(*args, **kwargs) - self.notebook.set_current_page(self.PKG_PAGE) def build_terminal (self): """Builds the terminal.""" @@ -1067,6 +1122,7 @@ class MainWindow (Window): map(self.session.add_handler,[ ([("width", "window"), ("height", "window")], lambda w,h: self.window.resize(int(w), int(h)), self.window.get_size), ([("vpanedpos", "window")], lambda p: self.vpaned.set_position(int(p)), self.vpaned.get_position), + ([("hpanedpos", "window")], lambda p: self.hpaned.set_position(int(p)), self.hpaned.get_position), ([("merge", "queue"), ("unmerge", "queue"), ("oneshot", "queue")], load_queue, save_queue) ]) @@ -1149,9 +1205,8 @@ class MainWindow (Window): sel = view.get_selection() store, it = sel.get_selected() if it: - package = store.get_value(it, 1) - cat = store.get_value(it, 2) - self.show_package(cat+"/"+package, self.queue) + cp = "%s/%s" % (store.get_value(it, 2), store.get_value(it, 1)) + self.show_package(cp, self.queue) return True def cb_pkg_list_header_clicked(self, col): diff --git a/portato/gui/templates/portato.glade b/portato/gui/templates/portato.glade index 64f4555..671032d 100644 --- a/portato/gui/templates/portato.glade +++ b/portato/gui/templates/portato.glade @@ -443,577 +443,667 @@ - + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - + True - 5 - 3 + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + GTK_ICON_SIZE_BUTTON + True - + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Add to Emerge Queue + gtk-add + + + + False + - - - 3 - 1 - 2 - GTK_EXPAND - - - - - - True - True - <b>Installed, but not in portage anymore</b> - True - - - 3 - 2 - 3 - GTK_FILL - - - - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 5 - + True - True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - GTK_POLICY_NEVER - GTK_POLICY_AUTOMATIC - - - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True - False - - - + Remove from Emerge Queue + gtk-remove + False - + True - False - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - - - True - - + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Revert changes + gtk-undo + - 1 + False