diff options
-rw-r--r-- | doc/Changelog | 3 | ||||
-rw-r--r-- | doc/TODO | 1 | ||||
-rw-r--r-- | i18n/de.po | 327 | ||||
-rw-r--r-- | i18n/messages.pot | 294 | ||||
-rw-r--r-- | portato/backend/package.py | 9 | ||||
-rw-r--r-- | portato/backend/portage/package.py | 7 | ||||
-rw-r--r-- | portato/gui/gtk/views.py | 21 | ||||
-rw-r--r-- | portato/gui/gtk/windows.py | 207 | ||||
-rw-r--r-- | portato/gui/templates/portato.glade | 894 | ||||
-rw-r--r-- | 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) @@ -35,7 +35,6 @@ Main Point: user preferences: GTK: ---- - make oneshot better -- show installed files - show dependencies - reload package table when emerge is finished @@ -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 <necoro@necoro.net>\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 "<b>Installed, but not in portage anymore</b>" msgstr "<b>Installiert, aber nicht mehr im Portage-Tree vorhanden</b>" -#: portato/gui/templates/portato.glade:552 +#: portato/gui/templates/portato.glade:570 msgid "<span foreground='red'><b>MISSING KEYWORD</b></span>" msgstr "<span foreground='red'><b>FEHLENDES KEYWORD</b></span>" -#: 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 "<b>Description:</b>" +msgstr "<b>Beschreibung</b>" -#: 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 "<b>Overlay:</b>" +msgstr "<b>Overlay:</b>" -#: portato/gui/templates/portato.glade:659 -msgid "Re_vert" -msgstr "_Wiederherstellen" +#: portato/gui/templates/portato.glade:665 +msgid "<b>Homepage:</b>" +msgstr "<b>Homepage:</b>" -#: 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 "<b>General Options</b>" msgstr "<b>Allgemeine Optionen</b>" -#: portato/gui/templates/portato.glade:1268 +#: portato/gui/templates/portato.glade:1358 msgid "<b>Update World Options</b>" msgstr "<b>Optionen für \"update world\"</b>" -#: 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 "<b>Sync Options</b>" msgstr "<b>Sync Optionen</b>" -#: 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 "" "<u>You may use the following placeholders:</u>\n" "\n" @@ -298,64 +316,64 @@ msgstr "" "<i>$(pkg)</i>: Paketname\n" "<i>$(cat-1)/$(cat-2)</i>: erster/zweiter Teil der Kategorie" -#: portato/gui/templates/portato.glade:1499 +#: portato/gui/templates/portato.glade:1589 msgid "<u><i>Use-Flags</i></u>" msgstr "<u><i>Use-Flags</i></u>" -#: portato/gui/templates/portato.glade:1514 +#: portato/gui/templates/portato.glade:1604 msgid "<u><i>Testing Keywords</i></u>" msgstr "<u><i>Testing Keywords</i></u>" -#: portato/gui/templates/portato.glade:1529 +#: portato/gui/templates/portato.glade:1619 msgid "<u><i>Masking Keywords</i></u>" msgstr "<u><i>Masking Keywords</i></u>" -#: portato/gui/templates/portato.glade:1546 +#: portato/gui/templates/portato.glade:1636 msgid "<b>Use Flag and Keyword Options</b>" msgstr "<b>Use-Flag- und Keyword-Optionen</b>" -#: 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 <necoro@necoro.net>" @@ -363,63 +381,63 @@ msgstr "" "This software is licensed under the terms of the GPLv2.\n" "Copyright (C) 2006-2007 René 'Necoro' Neumann <necoro@necoro.net>" -#: 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 "<no description>" msgstr "<keine Beschreibung>" -#: 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 <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\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 "<b>Installed, but not in portage anymore</b>" +#: portato/gui/templates/portato.glade:464 +msgid "Add to Emerge Queue" msgstr "" -#: portato/gui/templates/portato.glade:552 -msgid "<span foreground='red'><b>MISSING KEYWORD</b></span>" +#: 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 "<b>Installed, but not in portage anymore</b>" msgstr "" -#: portato/gui/templates/portato.glade:623 -msgid "Add to _Unmerge Queue" +#: portato/gui/templates/portato.glade:570 +msgid "<span foreground='red'><b>MISSING KEYWORD</b></span>" msgstr "" -#: portato/gui/templates/portato.glade:659 -msgid "Re_vert" +#: portato/gui/templates/portato.glade:602 +msgid "<b>Description:</b>" msgstr "" -#: portato/gui/templates/portato.glade:690 portato/gui/gtk/windows.py:533 +#: portato/gui/templates/portato.glade:617 +msgid "<b>Overlay:</b>" +msgstr "" + +#: portato/gui/templates/portato.glade:665 +msgid "<b>Homepage:</b>" +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 "<b>General Options</b>" msgstr "" -#: portato/gui/templates/portato.glade:1268 +#: portato/gui/templates/portato.glade:1358 msgid "<b>Update World Options</b>" 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 "<b>Sync Options</b>" 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 "" "<u>You may use the following placeholders:</u>\n" "\n" @@ -289,128 +307,128 @@ msgid "" "<i>$(cat-1)/$(cat-2)</i>: first/second part of the category" msgstr "" -#: portato/gui/templates/portato.glade:1499 +#: portato/gui/templates/portato.glade:1589 msgid "<u><i>Use-Flags</i></u>" msgstr "" -#: portato/gui/templates/portato.glade:1514 +#: portato/gui/templates/portato.glade:1604 msgid "<u><i>Testing Keywords</i></u>" msgstr "" -#: portato/gui/templates/portato.glade:1529 +#: portato/gui/templates/portato.glade:1619 msgid "<u><i>Masking Keywords</i></u>" msgstr "" -#: portato/gui/templates/portato.glade:1546 +#: portato/gui/templates/portato.glade:1636 msgid "<b>Use Flag and Keyword Options</b>" 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 <necoro@necoro.net>" 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 "<no description>" 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<iterator> + """ + 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 = _("<no description>") - use_markup = False - else: - desc = "<b>"+desc+"</b>" - use_markup = True - name = "<i><u>"+self.actual_package().get_cp()+"</u></i>" + def set_labels (self): + pkg = self.actual_package() + + # name + self.nameLabel.set_markup("<b>%s</b>" % pkg.get_cp()) + + # description + desc = pkg.get_package_settings("DESCRIPTION") or _("<no description>") + self.descLabel.set_label(desc) + + # overlay if self.actual_package().is_overlay(): - name = "%s\n<i>(Overlay: %s)</i>" % (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("<i>(%s)</i>" % _("Masked")) self.maskedCheck.get_child().set_use_markup(True) @@ -670,9 +709,13 @@ class PackageTable: self.maskedCheck.set_label("<b>%s</b>" % _("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("<i>(%s)</i>" % _("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("<i>(%s)</i>" % _("Testing")) - button.get_child().set_use_markup(True) - button.set_active(True) + button.set_label("<i>(%s)</i>" % _("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("<b>%s</b>" % _("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 @@ </packing> </child> <child> - <widget class="GtkNotebook" id="notebook"> + <widget class="GtkHPaned" id="hpaned"> <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <child> - <widget class="GtkTable" id="PackageTable"> + <widget class="GtkVBox" id="packageVB"> <property name="visible">True</property> - <property name="n_rows">5</property> - <property name="n_columns">3</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <child> - <widget class="GtkHBox" id="pkgLinkBox"> + <widget class="GtkToolbar" id="packageTB"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="icon_size">GTK_ICON_SIZE_BUTTON</property> + <property name="icon_size_set">True</property> <child> - <placeholder/> + <widget class="GtkToolButton" id="pkgEmergeBtn"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Add to Emerge Queue</property> + <property name="stock_id">gtk-add</property> + <signal name="clicked" handler="cb_package_emerge_clicked"/> + </widget> + <packing> + <property name="expand">False</property> + </packing> </child> - </widget> - <packing> - <property name="right_attach">3</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">GTK_EXPAND</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="notInSysLabel"> - <property name="visible">True</property> - <property name="no_show_all">True</property> - <property name="label" translatable="yes"><b>Installed, but not in portage anymore</b></property> - <property name="use_markup">True</property> - </widget> - <packing> - <property name="right_attach">3</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="y_options">GTK_FILL</property> - </packing> - </child> - <child> - <widget class="GtkHBox" id="hbox2"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="spacing">5</property> <child> - <widget class="GtkScrolledWindow" id="versionListScroll"> + <widget class="GtkToolButton" id="pkgUnmergeBtn"> <property name="visible">True</property> - <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="hscrollbar_policy">GTK_POLICY_NEVER</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <child> - <widget class="GtkTreeView" id="versionList"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="headers_clickable">True</property> - <property name="show_expanders">False</property> - <signal name="cursor_changed" handler="cb_vers_list_changed"/> - </widget> - </child> + <property name="label" translatable="yes">Remove from Emerge Queue</property> + <property name="stock_id">gtk-remove</property> + <signal name="clicked" handler="cb_package_unmerge_clicked"/> </widget> <packing> <property name="expand">False</property> </packing> </child> <child> - <widget class="GtkScrolledWindow" id="useListScroll"> + <widget class="GtkToolButton" id="pkgRevertBtn"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <child> - <widget class="GtkTreeView" id="useList"> - <property name="visible">True</property> - </widget> - </child> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Revert changes</property> + <property name="stock_id">gtk-undo</property> + <signal name="clicked" handler="cb_package_revert_clicked"/> </widget> <packing> - <property name="position">1</property> + <property name="expand">False</property> </packing> </child> </widget> <packing> - <property name="right_attach">3</property> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="x_padding">5</property> - <property name="y_padding">5</property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="descLabel"> - <property name="visible">True</property> - <property name="justify">GTK_JUSTIFY_CENTER</property> - <property name="wrap">True</property> - </widget> - <packing> - <property name="right_attach">3</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - <property name="y_padding">10</property> + <property name="expand">False</property> </packing> </child> <child> - <widget class="GtkLabel" id="missingLabel"> + <widget class="GtkHBox" id="packageHB"> <property name="visible">True</property> - <property name="no_show_all">True</property> - <property name="label" translatable="yes"><span foreground='red'><b>MISSING KEYWORD</b></span></property> - <property name="use_markup">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="homogeneous">True</property> + <child> + <widget class="GtkLabel" id="nameLabel"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">label</property> + </widget> + </child> + <child> + <widget class="GtkComboBox" id="versionCombo"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + </widget> + <packing> + <property name="position">1</property> + </packing> + </child> </widget> <packing> - <property name="right_attach">3</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="y_options">GTK_FILL</property> + <property name="expand">False</property> + <property name="position">1</property> </packing> </child> <child> - <widget class="GtkHButtonBox" id="buttonBB"> + <widget class="GtkNotebook" id="packageNotebook"> <property name="visible">True</property> - <property name="border_width">5</property> - <property name="layout_style">GTK_BUTTONBOX_SPREAD</property> <child> - <widget class="GtkButton" id="pkgEmergeBtn"> + <widget class="GtkEventBox" id="generalEB"> <property name="visible">True</property> - <property name="tooltip" translatable="yes">Mark package for installation</property> - <property name="response_id">0</property> - <signal name="clicked" handler="cb_package_emerge_clicked"/> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <child> - <widget class="GtkHBox" id="hbox4"> + <widget class="GtkTable" id="generalTable"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="border_width">6</property> + <property name="n_rows">7</property> + <property name="n_columns">2</property> + <property name="column_spacing">5</property> + <property name="row_spacing">5</property> <child> - <widget class="GtkImage" id="image3"> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <widget class="GtkLabel" id="notInSysLabel"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="stock">gtk-add</property> + <property name="no_show_all">True</property> + <property name="label" translatable="yes"><b>Installed, but not in portage anymore</b></property> + <property name="use_markup">True</property> </widget> + <packing> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="y_options"></property> + </packing> </child> <child> - <widget class="GtkLabel" id="emergeBtnLabel"> + <widget class="GtkLabel" id="missingLabel"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="no_show_all">True</property> + <property name="label" translatable="yes"><span foreground='red'><b>MISSING KEYWORD</b></span></property> + <property name="use_markup">True</property> + </widget> + <packing> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkHBox" id="linkBox"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="spacing">5</property> + <child> + <placeholder/> + </child> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="descLabelLabel"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="xalign">0</property> - <property name="label" translatable="yes">Add to E_merge Queue</property> - <property name="use_underline">True</property> + <property name="label" translatable="yes"><b>Description:</b></property> + <property name="use_markup">True</property> <property name="single_line_mode">True</property> </widget> <packing> - <property name="position">1</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="overlayLabelLabel"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="no_show_all">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><b>Overlay:</b></property> + <property name="use_markup">True</property> + <property name="single_line_mode">True</property> + </widget> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="descLabel"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">label</property> + <property name="wrap">True</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="y_options"></property> </packing> </child> - </widget> - </child> - </widget> - </child> - <child> - <widget class="GtkButton" id="pkgUnmergeBtn"> - <property name="visible">True</property> - <property name="tooltip" translatable="yes">Mark package for deinstallation</property> - <property name="response_id">0</property> - <signal name="clicked" handler="cb_package_unmerge_clicked"/> - <child> - <widget class="GtkHBox" id="hbox5"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <child> - <widget class="GtkImage" id="image4"> + <widget class="GtkLabel" id="overlayLabel"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="stock">gtk-remove</property> + <property name="no_show_all">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">label</property> + <property name="selectable">True</property> + <property name="single_line_mode">True</property> </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options"></property> + </packing> </child> <child> - <widget class="GtkLabel" id="label9"> + <widget class="GtkLabel" id="homepageLinkLabel"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="xalign">0</property> - <property name="label" translatable="yes">Add to _Unmerge Queue</property> - <property name="use_underline">True</property> + <property name="label" translatable="yes"><b>Homepage:</b></property> + <property name="use_markup">True</property> <property name="single_line_mode">True</property> </widget> <packing> - <property name="position">1</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> </packing> </child> - </widget> - </child> - </widget> - <packing> - <property name="position">1</property> - </packing> - </child> - <child> - <widget class="GtkButton" id="pkgRevertBtn"> - <property name="visible">True</property> - <property name="response_id">0</property> - <signal name="clicked" handler="cb_package_revert_clicked"/> - <child> - <widget class="GtkHBox" id="hbox6"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <child> - <widget class="GtkImage" id="image5"> + <widget class="GtkCheckButton" id="installedCheck"> <property name="visible">True</property> + <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="stock">gtk-undo</property> + <property name="no_show_all">True</property> + <property name="label" translatable="yes">Installed</property> + <property name="xalign">0</property> + <property name="response_id">0</property> + <property name="draw_indicator">True</property> + <signal name="button_press_event" handler="cb_button_pressed"/> </widget> + <packing> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> </child> <child> - <widget class="GtkLabel" id="label8"> + <widget class="GtkCheckButton" id="maskedCheck"> <property name="visible">True</property> + <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="no_show_all">True</property> + <property name="label" translatable="yes">Masked</property> <property name="xalign">0</property> - <property name="label" translatable="yes">Re_vert</property> - <property name="use_underline">True</property> + <property name="response_id">0</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="cb_masked_toggled"/> </widget> <packing> - <property name="position">1</property> + <property name="top_attach">6</property> + <property name="bottom_attach">7</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="maskedLabel"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">6</property> + <property name="bottom_attach">7</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkCheckButton" id="testingCheck"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="no_show_all">True</property> + <property name="label" translatable="yes">Testing</property> + <property name="xalign">0</property> + <property name="response_id">0</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="cb_testing_toggled"/> + </widget> + <packing> + <property name="top_attach">5</property> + <property name="bottom_attach">6</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> </packing> </child> </widget> </child> </widget> + </child> + <child> + <widget class="GtkLabel" id="label"> + <property name="visible">True</property> + <property name="label" translatable="yes">_General</property> + <property name="use_underline">True</property> + </widget> <packing> - <property name="position">2</property> + <property name="type">tab</property> + <property name="tab_fill">False</property> </packing> </child> - </widget> - <packing> - <property name="right_attach">3</property> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkHBox" id="checkHB"> - <property name="visible">True</property> - <property name="spacing">1</property> - <property name="homogeneous">True</property> <child> - <widget class="GtkCheckButton" id="installedCheck"> + <widget class="GtkScrolledWindow" id="useListScroll"> <property name="visible">True</property> - <property name="no_show_all">True</property> - <property name="label" translatable="yes">Installed</property> - <property name="response_id">0</property> - <property name="draw_indicator">True</property> - <signal name="button_press_event" handler="cb_button_pressed"/> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <child> + <widget class="GtkTreeView" id="useList"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="headers_clickable">True</property> + </widget> + </child> </widget> <packing> - <property name="fill">False</property> + <property name="position">1</property> </packing> </child> <child> - <widget class="GtkCheckButton" id="maskedCheck"> + <widget class="GtkLabel" id="label20"> <property name="visible">True</property> - <property name="no_show_all">True</property> - <property name="label" translatable="yes">Masked</property> - <property name="response_id">0</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="cb_masked_toggled"/> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">U_se List</property> + <property name="use_underline">True</property> </widget> <packing> - <property name="fill">False</property> + <property name="type">tab</property> <property name="position">1</property> + <property name="tab_fill">False</property> </packing> </child> <child> - <widget class="GtkCheckButton" id="testingCheck"> + <widget class="GtkScrolledWindow" id="ebuildScroll"> <property name="visible">True</property> - <property name="no_show_all">True</property> - <property name="label" translatable="yes">Testing</property> - <property name="response_id">0</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="cb_testing_toggled"/> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <child> + <placeholder/> + </child> </widget> <packing> - <property name="fill">False</property> <property name="position">2</property> </packing> </child> + <child> + <widget class="GtkLabel" id="label16"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">E_build</property> + <property name="use_underline">True</property> + </widget> + <packing> + <property name="type">tab</property> + <property name="position">2</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <widget class="GtkScrolledWindow" id="changelogScroll"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <child> + <placeholder/> + </child> + </widget> + <packing> + <property name="position">3</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label14"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">C_hangelog</property> + <property name="use_underline">True</property> + </widget> + <packing> + <property name="type">tab</property> + <property name="position">3</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <widget class="GtkScrolledWindow" id="filesScroll"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <child> + <placeholder/> + </child> + </widget> + <packing> + <property name="position">4</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">F_iles</property> + <property name="use_underline">True</property> + </widget> + <packing> + <property name="type">tab</property> + <property name="position">4</property> + <property name="tab_fill">False</property> + </packing> + </child> </widget> <packing> - <property name="right_attach">3</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="y_options">GTK_FILL</property> + <property name="position">2</property> </packing> </child> </widget> <packing> - <property name="tab_fill">False</property> + <property name="resize">False</property> + <property name="shrink">True</property> </packing> </child> <child> - <widget class="GtkLabel" id="label"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Package</property> - <property name="use_underline">True</property> - </widget> - <packing> - <property name="type">tab</property> - <property name="tab_fill">False</property> - </packing> - </child> - <child> - <widget class="GtkScrolledWindow" id="ebuildScroll"> + <widget class="GtkNotebook" id="systemNotebook"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <child> - <placeholder/> - </child> - </widget> - <packing> - <property name="position">1</property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label16"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">E_build</property> - <property name="use_underline">True</property> - </widget> - <packing> - <property name="type">tab</property> - <property name="position">1</property> - <property name="tab_fill">False</property> - </packing> - </child> - <child> - <widget class="GtkScrolledWindow" id="changelogScroll"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <child> - <placeholder/> - </child> - </widget> - <packing> - <property name="position">2</property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label14"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">C_hangelog</property> - <property name="use_underline">True</property> - </widget> - <packing> - <property name="type">tab</property> - <property name="position">2</property> - <property name="tab_fill">False</property> - </packing> - </child> - <child> - <widget class="GtkVBox" id="queueVB"> - <property name="visible">True</property> - <child> - <widget class="GtkScrolledWindow" id="queueScroll"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <child> - <widget class="GtkTreeView" id="queueList"> - <property name="visible">True</property> - <property name="has_tooltip">True</property> - <property name="headers_visible">False</property> - <property name="enable_search">False</property> - <signal name="button_press_event" handler="cb_right_click"/> - <signal name="query_tooltip" handler="cb_queue_tooltip_queried"/> - <signal name="row_activated" handler="cb_row_activated"/> - </widget> - </child> - </widget> - </child> <child> - <widget class="GtkHButtonBox" id="queueBB"> + <widget class="GtkVBox" id="queueVB"> <property name="visible">True</property> - <property name="border_width">5</property> - <property name="homogeneous">True</property> - <property name="layout_style">GTK_BUTTONBOX_SPREAD</property> <child> - <widget class="GtkButton" id="emergeBtn"> + <widget class="GtkScrolledWindow" id="queueScroll"> <property name="visible">True</property> - <property name="tooltip" translatable="yes">Install all packages in the "Emerge Queue"</property> - <property name="response_id">0</property> - <signal name="clicked" handler="cb_emerge_clicked"/> + <property name="can_focus">False</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> <child> - <widget class="GtkHBox" id="hbox7"> + <widget class="GtkTreeView" id="queueList"> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <child> - <widget class="GtkImage" id="image6"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="stock">gtk-add</property> - </widget> - </child> - <child> - <widget class="GtkLabel" id="label12"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">E_merge</property> - <property name="use_underline">True</property> - <property name="single_line_mode">True</property> - </widget> - <packing> - <property name="position">1</property> - </packing> - </child> + <property name="has_tooltip">True</property> + <property name="headers_visible">False</property> + <property name="enable_search">False</property> + <signal name="button_press_event" handler="cb_right_click"/> + <signal name="query_tooltip" handler="cb_queue_tooltip_queried"/> + <signal name="row_activated" handler="cb_row_activated"/> </widget> </child> </widget> </child> <child> - <widget class="GtkButton" id="unmergeBtn"> + <widget class="GtkHButtonBox" id="queueBB"> <property name="visible">True</property> - <property name="tooltip" translatable="yes">Deinstall all packages in the "Unmerge Queue"</property> - <property name="response_id">0</property> - <signal name="clicked" handler="cb_unmerge_clicked"/> + <property name="border_width">5</property> + <property name="homogeneous">True</property> + <property name="layout_style">GTK_BUTTONBOX_SPREAD</property> <child> - <widget class="GtkHBox" id="hbox8"> + <widget class="GtkButton" id="emergeBtn"> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip" translatable="yes">Install all packages in the "Emerge Queue"</property> + <property name="response_id">0</property> + <signal name="clicked" handler="cb_emerge_clicked"/> <child> - <widget class="GtkImage" id="image7"> + <widget class="GtkHBox" id="hbox7"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="stock">gtk-remove</property> + <child> + <widget class="GtkImage" id="image6"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="stock">gtk-add</property> + </widget> + </child> + <child> + <widget class="GtkLabel" id="label12"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">E_merge</property> + <property name="use_underline">True</property> + <property name="single_line_mode">True</property> + </widget> + <packing> + <property name="position">1</property> + </packing> + </child> </widget> </child> + </widget> + </child> + <child> + <widget class="GtkButton" id="unmergeBtn"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">Deinstall all packages in the "Unmerge Queue"</property> + <property name="response_id">0</property> + <signal name="clicked" handler="cb_unmerge_clicked"/> <child> - <widget class="GtkLabel" id="label13"> + <widget class="GtkHBox" id="hbox8"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">_Unmerge</property> - <property name="use_underline">True</property> - <property name="single_line_mode">True</property> + <child> + <widget class="GtkImage" id="image7"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="stock">gtk-remove</property> + </widget> + </child> + <child> + <widget class="GtkLabel" id="label13"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">_Unmerge</property> + <property name="use_underline">True</property> + <property name="single_line_mode">True</property> + </widget> + <packing> + <property name="position">1</property> + </packing> + </child> </widget> - <packing> - <property name="position">1</property> - </packing> </child> </widget> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <widget class="GtkButton" id="updateBtn"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">Calculate the packages which will be installed during an "update world"</property> + <property name="label" translatable="yes">Update _World</property> + <property name="use_underline">True</property> + <property name="response_id">0</property> + <signal name="clicked" handler="cb_update_clicked"/> + </widget> + <packing> + <property name="position">2</property> + </packing> + </child> + <child> + <widget class="GtkButton" id="removeBtn"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">Remove the selected package from the queue</property> + <property name="label" translatable="yes">_Remove</property> + <property name="use_underline">True</property> + <property name="response_id">0</property> + <signal name="clicked" handler="cb_remove_clicked"/> + </widget> + <packing> + <property name="position">3</property> + </packing> </child> </widget> <packing> + <property name="expand">False</property> + <property name="fill">False</property> <property name="position">1</property> </packing> </child> + </widget> + </child> + <child> + <widget class="GtkLabel" id="label17"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">_Queue</property> + <property name="use_underline">True</property> + </widget> + <packing> + <property name="type">tab</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <widget class="GtkHBox" id="termHB"> + <property name="visible">True</property> <child> - <widget class="GtkButton" id="updateBtn"> - <property name="visible">True</property> - <property name="tooltip" translatable="yes">Calculate the packages which will be installed during an "update world"</property> - <property name="label" translatable="yes">Update _World</property> - <property name="use_underline">True</property> - <property name="response_id">0</property> - <signal name="clicked" handler="cb_update_clicked"/> - </widget> - <packing> - <property name="position">2</property> - </packing> + <placeholder/> </child> <child> - <widget class="GtkButton" id="removeBtn"> - <property name="visible">True</property> - <property name="tooltip" translatable="yes">Remove the selected package from the queue</property> - <property name="label" translatable="yes">_Remove</property> - <property name="use_underline">True</property> - <property name="response_id">0</property> - <signal name="clicked" handler="cb_remove_clicked"/> - </widget> - <packing> - <property name="position">3</property> - </packing> + <placeholder/> </child> </widget> <packing> - <property name="expand">False</property> - <property name="fill">False</property> <property name="position">1</property> </packing> </child> - </widget> - <packing> - <property name="position">3</property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label2"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Queue</property> - <property name="use_underline">True</property> - <property name="single_line_mode">True</property> - </widget> - <packing> - <property name="type">tab</property> - <property name="position">3</property> - <property name="tab_fill">False</property> - </packing> - </child> - <child> - <widget class="GtkHBox" id="termHB"> - <property name="visible">True</property> <child> - <placeholder/> + <widget class="GtkLabel" id="label18"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">_Console</property> + <property name="use_underline">True</property> + </widget> + <packing> + <property name="type">tab</property> + <property name="position">1</property> + <property name="tab_fill">False</property> + </packing> </child> <child> - <placeholder/> + <widget class="GtkScrolledWindow" id="logScroll"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <child> + <widget class="GtkTextView" id="logView"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="editable">False</property> + <property name="wrap_mode">GTK_WRAP_WORD</property> + <property name="cursor_visible">False</property> + </widget> + </child> + </widget> + <packing> + <property name="position">2</property> + </packing> </child> - </widget> - <packing> - <property name="position">4</property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label3"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Console</property> - <property name="use_underline">True</property> - <property name="single_line_mode">True</property> - </widget> - <packing> - <property name="type">tab</property> - <property name="position">4</property> - <property name="tab_fill">False</property> - </packing> - </child> - <child> - <widget class="GtkScrolledWindow" id="scrolledwindow3"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> <child> - <widget class="GtkTextView" id="logView"> + <widget class="GtkLabel" id="label19"> <property name="visible">True</property> - <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="editable">False</property> - <property name="wrap_mode">GTK_WRAP_WORD</property> - <property name="cursor_visible">False</property> + <property name="label" translatable="yes">L_og</property> + <property name="use_underline">True</property> </widget> + <packing> + <property name="type">tab</property> + <property name="position">2</property> + <property name="tab_fill">False</property> + </packing> </child> </widget> <packing> - <property name="position">5</property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label15"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">_Log</property> - <property name="use_underline">True</property> - </widget> - <packing> - <property name="type">tab</property> - <property name="position">5</property> - <property name="tab_fill">False</property> + <property name="resize">True</property> + <property name="shrink">True</property> </packing> </child> </widget> diff --git a/portato/session.py b/portato/session.py index 0a61181..026c7fc 100644 --- a/portato/session.py +++ b/portato/session.py @@ -28,6 +28,9 @@ class Session (object): want to define boolean values, use 0 and 1. This is future proof. """ + # the current session format version + VERSION = 1 + def __init__ (self, file): """ Initialize a session with a certain file inside L{SESSION_DIR.} @@ -47,6 +50,9 @@ class Session (object): if e.errno == 2: pass else: raise + # add version check + self.add_handler(([("version", "session")], self.check_version, lambda: self.VERSION)) + def add_handler (self, (options, load_fn, save_fn)): """ Adds a handler to this session. A handler is a three-tuple consisting of: @@ -87,3 +93,6 @@ class Session (object): self._cfg.add(option, str(value), section = section, with_blankline = False) self._cfg.write() + + def check_version (self, vers): + pass # do nothing atm |