diff options
-rw-r--r-- | doc/AUTHORS | 1 | ||||
-rw-r--r-- | etc/portato.cfg | 3 | ||||
-rw-r--r-- | portato/backend/__init__.py | 2 | ||||
-rw-r--r-- | portato/gui/gtk/TreeViewTooltips.py | 423 | ||||
-rw-r--r-- | portato/gui/gtk/usetips.py | 101 | ||||
-rw-r--r-- | portato/gui/gtk/windows.py | 73 | ||||
-rw-r--r-- | portato/gui/templates/portato.glade | 431 |
7 files changed, 278 insertions, 756 deletions
diff --git a/doc/AUTHORS b/doc/AUTHORS index 1e10cb5..cdb99ab 100644 --- a/doc/AUTHORS +++ b/doc/AUTHORS @@ -3,7 +3,6 @@ Main author: René 'Necoro' Neumann <necoro@necoro.net> Application icon: P4r4D0X (after an idea by wolfden) Shipped with code from: - - Daniel J. Popowich <dpopowich AT astro dot umass dot edu> (TreeViewTooltips) - Philip Semanchuk (shm module) Many thanks to the Porthole team which often inspired me or gave me hints. diff --git a/etc/portato.cfg b/etc/portato.cfg index d479d97..25b9f89 100644 --- a/etc/portato.cfg +++ b/etc/portato.cfg @@ -70,9 +70,6 @@ browserCmd = firefox # [Gtk] -; control whether usetips are shown for a package in the Queue - boolean values -showusetips = on - ; sets the font of the console - string values consolefont = Monospace 11 diff --git a/portato/backend/__init__.py b/portato/backend/__init__.py index 26585c6..003feb7 100644 --- a/portato/backend/__init__.py +++ b/portato/backend/__init__.py @@ -57,8 +57,6 @@ def load_system (): if SYSTEM == "portage": debug("Setting Portage System") - from traceback import print_stack - print_stack() from .portage import PortageSystem _sys = PortageSystem () elif SYSTEM == "catapult": diff --git a/portato/gui/gtk/TreeViewTooltips.py b/portato/gui/gtk/TreeViewTooltips.py deleted file mode 100644 index 120d4df..0000000 --- a/portato/gui/gtk/TreeViewTooltips.py +++ /dev/null @@ -1,423 +0,0 @@ -# Copyright (c) 2006, Daniel J. Popowich -# -# Permission is hereby granted, free of charge, to any person -# obtaining a copy of this software and associated documentation files -# (the "Software"), to deal in the Software without restriction, -# including without limitation the rights to use, copy, modify, merge, -# publish, distribute, sublicense, and/or sell copies of the Software, -# and to permit persons to whom the Software is furnished to do so, -# subject to the following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -# -# Send bug reports and contributions to: -# -# dpopowich AT astro dot umass dot edu -# - -''' -TreeViewTooltips.py - -Provides TreeViewTooltips, a class which presents tooltips for cells, -columns and rows in a gtk.TreeView. - ------------------------------------------------------------- - This file includes a demo. Just execute the file: - - python TreeViewTooltips.py ------------------------------------------------------------- - -To use, first subclass TreeViewTooltips and implement the get_tooltip() -method; see below. Then add any number of gtk.TreeVew widgets to a -TreeViewTooltips instance by calling the add_view() method. Overview -of the steps: - - # 1. subclass TreeViewTooltips - class MyTooltips(TreeViewTooltips): - - # 2. overriding get_tooltip() - def get_tooltip(...): - ... - - # 3. create an instance - mytips = MyTooltips() - - # 4. Build up your gtk.TreeView. - myview = gtk.TreeView() - ...# create columns, set the model, etc. - - # 5. Add the view to the tooltips - mytips.add_view(myview) - -How it works: the add_view() method connects the TreeView to the -"motion-notify" event with the callback set to a private method. -Whenever the mouse moves across the TreeView the callback will call -get_tooltip() with the following arguments: - - get_tooltip(view, column, path) - -where, - - view: the gtk.TreeView instance. - column: the gtk.TreeViewColumn instance that the mouse is - currently over. - path: the path to the row that the mouse is currently over. - -Based on whether or not column and path are checked for specific -values, get_tooltip can return tooltips for a cell, column, row or the -whole view: - - Column Checked Path Checked Tooltip For... - Y Y cell - Y N column - N Y row - N N view - -get_tooltip() should return None if no tooltip should be displayed. -Otherwise the return value will be coerced to a string (with the str() -builtin) and stripped; if non-empty, the result will be displayed as -the tooltip. By default, the tooltip popup window will be displayed -centered and just below the pointer and will remain shown until the -pointer leaves the cell (or column, or row, or view, depending on how -get_tooltip() is implemented). - -''' - - -import pygtk -pygtk.require('2.0') - -import gtk -import gtk.gdk -import gobject - -if gtk.gtk_version < (2, 8): - import warnings - - msg = ('''This module was developed and tested with version 2.8.18 of gtk. You are using version %d.%d.%d. Your milage may vary.''' - % gtk.gtk_version) - warnings.warn(msg) - - -# major, minor, patch -version = 1, 0, 0 - -class TreeViewTooltips: - - def __init__(self): - - ''' - Initialize the tooltip. After initialization there are two - attributes available for advanced control: - - window: the popup window that holds the tooltip text, an - instance of gtk.Window. - label: a gtk.Label that is packed into the window. The - tooltip text is set in the label with the - set_label() method, so the text can be plain or - markup text. - - Be default, the tooltip is enabled. See the enabled/disabled - methods. - ''' - - # create the window - self.window = window = gtk.Window(gtk.WINDOW_POPUP) - window.set_name('gtk-tooltips') - window.set_resizable(False) - window.set_border_width(4) - window.set_app_paintable(True) - window.connect("expose-event", self.__on_expose_event) - - - # create the label - self.label = label = gtk.Label() - label.set_line_wrap(True) - label.set_alignment(0.5, 0.5) - label.set_use_markup(True) - label.show() - window.add(label) - - # by default, the tooltip is enabled - self.__enabled = True - # saves the current cell - self.__save = None - # the timer id for the next tooltip to be shown - self.__next = None - # flag on whether the tooltip window is shown - self.__shown = False - - def enable(self): - 'Enable the tooltip' - - self.__enabled = True - - def disable(self): - 'Disable the tooltip' - - self.__enabled = False - - def __show(self, tooltip, x, y): - - '''show the tooltip popup with the text/markup given by - tooltip. - - tooltip: the text/markup for the tooltip. - x, y: the coord. (root window based) of the pointer. - ''' - - window = self.window - - # set label - self.label.set_label(tooltip) - # resize window - w, h = window.size_request() - # move the window - window.move(*self.location(x,y,w,h)) - # show it - window.show() - self.__shown = True - - def __hide(self): - 'hide the tooltip' - - self.__queue_next() - self.window.hide() - self.__shown = False - - def __leave_handler(self, view, event): - 'when the pointer leaves the view, hide the tooltip' - - self.__hide() - - def __motion_handler(self, view, event): - 'As the pointer moves across the view, show a tooltip.' - - path = view.get_path_at_pos(int(event.x), int(event.y)) - - if self.__enabled and path: - path, col, x, y = path - tooltip = self.get_tooltip(view, col, path) - if tooltip is not None: - tooltip = str(tooltip).strip() - if tooltip: - self.__queue_next((path, col), tooltip, - int(event.x_root), - int(event.y_root)) - return - - self.__hide() - - def __queue_next(self, *args): - - 'queue next request to show a tooltip' - - # if args is non-empty it means a request was made to show a - # tooltip. if empty, no request is being made, but any - # pending requests should be cancelled anyway. - - cell = None - - # if called with args, break them out - if args: - cell, tooltip, x, y = args - - # if it's the same cell as previously shown, just return - if self.__save == cell: - return - - # if we have something queued up, cancel it - if self.__next: - gobject.source_remove(self.__next) - self.__next = None - - # if there was a request... - if cell: - # if the tooltip is already shown, show the new one - # immediately - if self.__shown: - self.__show(tooltip, x, y) - # else queue it up in 1/2 second - else: - self.__next = gobject.timeout_add(500, self.__show, - tooltip, x, y) - - # save this cell - self.__save = cell - - - def __on_expose_event(self, window, event): - - # this magic is required so the window appears with a 1-pixel - # black border (default gtk Style). This code is a - # transliteration of the C implementation of gtk.Tooltips. - w, h = window.size_request() - window.style.paint_flat_box(window.window, gtk.STATE_NORMAL, - gtk.SHADOW_OUT, None, window, - 'tooltip', 0, 0, w, h) - - def location(self, x, y, w, h): - - '''Given the x,y coordinates of the pointer and the width and - height (w,h) demensions of the tooltip window, return the x, y - coordinates of the tooltip window. - - The default location is to center the window on the pointer - and 4 pixels below it. - ''' - - return x - w/2, y + 4 - - def add_view(self, view): - - 'add a gtk.TreeView to the tooltip' - - assert isinstance(view, gtk.TreeView), \ - ('This handler should only be connected to ' - 'instances of gtk.TreeView') - - view.connect("motion-notify-event", self.__motion_handler) - view.connect("leave-notify-event", self.__leave_handler) - - def get_tooltip(self, view, column, path): - 'See the module doc string for a description of this method' - - raise NotImplementedError, 'Subclass must implement get_tooltip()' - - -if __name__ == '__main__': - - ############################################################ - # DEMO - ############################################################ - - # First, subclass TreeViewTooltips - - class DemoTips(TreeViewTooltips): - - def __init__(self, customer_column): - # customer_column is an instance of gtk.TreeViewColumn and - # is being used in the gtk.TreeView to show customer names. - self.cust_col = customer_column - - # call base class init - TreeViewTooltips.__init__(self) - - def get_tooltip(self, view, column, path): - - # we have a two column view: customer, phone; we'll make - # tooltips cell-based for the customer column, but generic - # column-based for the phone column. - - # customer - if column is self.cust_col: - - # By checking both column and path we have a - # cell-based tooltip. - model = view.get_model() - customer = model[path][2] - return '<big>%s %s</big>\n<i>%s</i>' % (customer.fname, - customer.lname, - customer.notes) - # phone - else: - return ('<big><u>Generic Column Tooltip</u></big>\n' - 'Unless otherwise noted, all\narea codes are 888') - - def XX_location(self, x, y, w, h): - # rename me to "location" so I override the base class - # method. This will demonstrate being able to change - # where the tooltip window popups, relative to the - # pointer. - - # this will place the tooltip above and to the right - return x + 10, y - (h + 10) - - # Here's our customer - class Customer: - - def __init__(self, fname, lname, phone, notes): - self.fname = fname - self.lname = lname - self.phone = phone - self.notes = notes - - # create a bunch of customers - customers = [] - for fname, lname, phone, notes in [ - ('Joe', 'Schmoe', '555-1212', 'Likes to Morris dance.'), - ('Jane', 'Doe', '555-2323', - 'Wonders what the hell\nMorris dancing is.'), - ('Phred', 'Phantastic', '900-555-1212', 'Dreams of Betty.'), - ('Betty', 'Boop', '555-3434', 'Dreams in b&w.'), - ('Red Sox', 'Fan', '555-4545', - "Still livin' 2004!\nEspecially after 2006.")]: - customers.append(Customer(fname, lname, phone, notes)) - - # Build our model and view - model = gtk.ListStore(str, str, object) - for c in customers: - model.append(['%s %s' % (c.fname, c.lname), c.phone, c]) - - view = gtk.TreeView(model) - view.get_selection().set_mode(gtk.SELECTION_NONE) - - # two columns, name and phone - cell = gtk.CellRendererText() - cell.set_property('xpad', 20) - namecol = gtk.TreeViewColumn('Customer Name', cell, text=0) - namecol.set_min_width(200) - view.append_column(namecol) - - cell = gtk.CellRendererText() - phonecol = gtk.TreeViewColumn('Phone', cell, text=1) - view.append_column(phonecol) - - # finally, connect the tooltip, specifying the name column as the - # column we want the tooltip to popup over. - tips = DemoTips(namecol) - tips.add_view(view) - - # We're going to demonstrate enable/disable. First we need a - # callback function to connect to the toggled signal. - def toggle(button): - if button.get_active(): - tips.disable() - else: - tips.enable() - - # create a checkbutton and connect our handler - check = gtk.CheckButton('Check to disable view tooltips') - check.connect('toggled', toggle) - - # a standard gtk.Tooltips to compare to - tt = gtk.Tooltips() - tt.set_tip(check, ('This is a standard gtk tooltip.\n' - 'Compare me to the tooltips above.')) - - # create a VBox to pack the view and checkbutton - vbox = gtk.VBox() - vbox.pack_start(view) - vbox.pack_start(check, False) - vbox.show_all() - - # pack the vbox into a simple dialog and run it - dialog = gtk.Dialog('TreeViewTooltips Demo') - close = dialog.add_button(gtk.STOCK_CLOSE, gtk.RESPONSE_NONE) - - # add a tooltip for the close button - tt.set_tip(close, 'Click to end the demo.') - - dialog.set_default_size(400,400) - dialog.vbox.pack_start(vbox) - dialog.run() diff --git a/portato/gui/gtk/usetips.py b/portato/gui/gtk/usetips.py deleted file mode 100644 index 69e9f9a..0000000 --- a/portato/gui/gtk/usetips.py +++ /dev/null @@ -1,101 +0,0 @@ -# -*- coding: utf-8 -*- -# -# File: portato/gui/gtk/usetips.py -# This file is part of the Portato-Project, a graphical portage-frontend. -# -# Copyright (C) 2007 René 'Necoro' Neumann -# This is free software. You may redistribute copies of it under the terms of -# the GNU General Public License version 2. -# There is NO WARRANTY, to the extent permitted by law. -# -# Written by René 'Necoro' Neumann <necoro@necoro.net> - -from __future__ import absolute_import - -from ...backend import system -from ...backend.flags import invert_use_flag - -from .TreeViewTooltips import TreeViewTooltips - -class UseTips (TreeViewTooltips): - """This class handles the display of the so called use-tips, - i.e. the tooltips showing the actual use-flags.""" - - def __init__ (self, colno, cfg = None): - """Constructor. - - @param colno: the number of the column to check - @type colno: int - @param cfg: a config to look in, whether we should show the tips or not - @type cfg: Config""" - - self.colno = colno - self.cfg = cfg - - TreeViewTooltips.__init__(self) - - def get_tooltip(self, view, column, path): - - # check config - if self.cfg is not None: - if not self.cfg.get_boolean("useTips", "GTK"): - return None - - store = view.get_model() - it = store.get_iter(path) - - if store.iter_parent(it) is not None: - return self.__get_flags(store.get_value(it, self.colno)) - else: # top items - ignore them - return None - - def __get_flags(self, cpv): - pkg = system.new_package(cpv) - enabled = [] - disabled = [] - expanded = set() - - pkg_flags = pkg.get_iuse_flags() - if not pkg_flags: # no flags - stop here - return None - - pkg_flags.sort() - actual = pkg.get_actual_use_flags() - - if pkg.is_installed(): - installed = pkg.get_installed_use_flags() - else: - inst = system.find_installed_packages(pkg.get_slot_cp()) - if inst: - installed = inst[0].get_installed_use_flags() - else: - installed = [] - - for use in pkg_flags: - exp = pkg.use_expanded(use) - if exp: - expanded.add(exp) - - else: - useStr = use - if installed and ((use in actual) != (use in installed)): - useStr += " %" - if use in actual: - enabled.append(useStr) - else: - disabled.append(useStr) - - string = "" - - if enabled: - string = "<b>+%s</b>" % ("\n+".join(enabled),) - if len(disabled) > 0: - string = string + "\n" - - if disabled: - string = string+"<i>- %s</i>" % ("\n- ".join(disabled),) - - if expanded: - string = string+"\n\n"+"\n".join(expanded) - - return string diff --git a/portato/gui/gtk/windows.py b/portato/gui/gtk/windows.py index ff3c4d1..3c684ad 100644 --- a/portato/gui/gtk/windows.py +++ b/portato/gui/gtk/windows.py @@ -33,7 +33,6 @@ from ...backend.exceptions import PackageNotFoundException, BlockedException from ..gui_helper import Database, Config, EmergeQueue from .basic import Window, AbstractDialog, Popup from .wrapper import GtkTree, GtkConsole -from .usetips import UseTips from .exception_handling import GtkThread from .dialogs import (blocked_dialog, changed_flags_dialog, io_ex_dialog, nothing_found_dialog, queue_not_empty_dialog, remove_deps_dialog, @@ -256,8 +255,7 @@ class PreferenceWindow (AbstractDialog): "systrayCheck" : ("systray", "GUI"), "testPerVersionCheck" : "testingPerVersion", "titleUpdateCheck" : ("updateTitle", "GUI"), - "usePerVersionCheck" : "usePerVersion", - "useTipsCheck" : ("useTips", "GTK") + "usePerVersionCheck" : "usePerVersion" } # all edits in the window @@ -607,7 +605,7 @@ class PackageTable: if self.version: best_version = self.version else: - best_version = system.find_best_match(self.packages[0].get_cp(), (self.instPackages != [])).get_version() + 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,)) @@ -943,7 +941,6 @@ class MainWindow (Window): self.build_pkg_list() # queue list - self.useTips = UseTips(0, self.cfg) self.queueList = self.tree.get_widget("queueList") self.build_queue_list() @@ -1018,8 +1015,6 @@ class MainWindow (Window): col = gtk.TreeViewColumn(_("Options"), cell, markup = 1) self.queueList.append_column(col) - self.useTips.add_view(self.queueList) - def build_cat_list (self): """Builds the category list.""" @@ -1167,6 +1162,70 @@ class MainWindow (Window): if rev != "r0": vers = vers+"-"+rev self.show_package(cat+"/"+name, queue = self.queue, version = vers, instantChange = True, doEmerge = False) return True + + def cb_queue_tooltip_queried (self, view, x, y, is_keyboard, tooltip): + store = self.queueList.get_model() + path = self.queueList.get_path_at_pos(x,y) + + if path is None: + return False + + it = store.get_iter(path[0]) + + if store.iter_parent(it) is None: + return False # do not show tooltips for the root entries + + pkg = system.new_package(store.get_value(it, 0)) + + enabled = [] + disabled = [] + expanded = set() + + pkg_flags = pkg.get_iuse_flags() + if not pkg_flags: # no flags - stop here + return None + + pkg_flags.sort() + actual = pkg.get_actual_use_flags() + + if pkg.is_installed(): + installed = pkg.get_installed_use_flags() + else: + inst = system.find_installed_packages(pkg.get_slot_cp()) + if inst: + installed = inst[0].get_installed_use_flags() + else: + installed = [] + + for use in pkg_flags: + exp = pkg.use_expanded(use) + if exp: + expanded.add(exp) + + else: + useStr = use + if installed and ((use in actual) != (use in installed)): + useStr += " %" + if use in actual: + enabled.append(useStr) + else: + disabled.append(useStr) + + string = "" + + if enabled: + string = "<b>+%s</b>" % ("\n+".join(enabled),) + if len(disabled) > 0: + string = string + "\n" + + if disabled: + string = string+"<i>- %s</i>" % ("\n- ".join(disabled),) + + if expanded: + string = string+"\n\n"+"\n".join(expanded) + + tooltip.set_markup(string) + return string != "" def cb_emerge_clicked (self, action): """Do emerge.""" diff --git a/portato/gui/templates/portato.glade b/portato/gui/templates/portato.glade index ed33a7e..d6f5537 100644 --- a/portato/gui/templates/portato.glade +++ b/portato/gui/templates/portato.glade @@ -467,54 +467,109 @@ <property name="n_rows">5</property> <property name="n_columns">3</property> <child> - <widget class="GtkHBox" id="checkHB"> + <widget class="GtkHBox" id="pkgLinkBox"> <property name="visible">True</property> - <property name="spacing">1</property> - <property name="homogeneous">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="GtkCheckButton" id="installedCheck"> - <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"/> - </widget> - <packing> - <property name="fill">False</property> - </packing> + <placeholder/> </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="GtkCheckButton" id="maskedCheck"> + <widget class="GtkScrolledWindow" id="versionListScroll"> <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="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> </widget> <packing> - <property name="fill">False</property> - <property name="position">1</property> + <property name="expand">False</property> </packing> </child> <child> - <widget class="GtkCheckButton" id="testingCheck"> + <widget class="GtkScrolledWindow" id="useListScroll"> <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">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> </widget> <packing> - <property name="fill">False</property> - <property name="position">2</property> + <property name="position">1</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> + </packing> + </child> + <child> + <widget class="GtkLabel" id="missingLabel"> + <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> + </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> @@ -653,90 +708,51 @@ </packing> </child> <child> - <widget class="GtkLabel" id="missingLabel"> - <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> - </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="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> - </packing> - </child> - <child> - <widget class="GtkHBox" id="hbox2"> + <widget class="GtkHBox" id="checkHB"> <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> + <property name="spacing">1</property> + <property name="homogeneous">True</property> <child> - <widget class="GtkScrolledWindow" id="versionListScroll"> + <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="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="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"/> </widget> <packing> - <property name="expand">False</property> + <property name="fill">False</property> </packing> </child> <child> - <widget class="GtkScrolledWindow" id="useListScroll"> + <widget class="GtkCheckButton" id="maskedCheck"> <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="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"/> </widget> <packing> + <property name="fill">False</property> <property name="position">1</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="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> + <child> + <widget class="GtkCheckButton" id="testingCheck"> + <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"/> + </widget> + <packing> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> </widget> <packing> <property name="right_attach">3</property> @@ -745,22 +761,6 @@ <property name="y_options">GTK_FILL</property> </packing> </child> - <child> - <widget class="GtkHBox" id="pkgLinkBox"> - <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> - <placeholder/> - </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> </widget> <packing> <property name="tab_fill">False</property> @@ -788,9 +788,11 @@ <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> @@ -1280,188 +1282,188 @@ <placeholder/> </child> <child> - <widget class="GtkLabel" id="maskLabel"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="xpad">5</property> - <property name="label" translatable="yes"><u><i>Masking Keywords</i></u></property> - <property name="use_markup">True</property> - <property name="single_line_mode">True</property> - </widget> - <packing> - <property name="top_attach">7</property> - <property name="bottom_attach">8</property> - <property name="y_padding">5</property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="testLabel"> + <widget class="GtkEntry" id="useFileEdit"> <property name="visible">True</property> - <property name="xalign">0</property> - <property name="xpad">5</property> - <property name="label" translatable="yes"><u><i>Testing Keywords</i></u></property> - <property name="use_markup">True</property> - <property name="single_line_mode">True</property> </widget> <packing> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> - <property name="y_padding">5</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> </packing> </child> <child> - <widget class="GtkLabel" id="useLabel"> + <widget class="GtkLabel" id="useEditLabel"> <property name="visible">True</property> <property name="xalign">0</property> - <property name="xpad">5</property> - <property name="label" translatable="yes"><u><i>Use-Flags</i></u></property> - <property name="use_markup">True</property> + <property name="label" translatable="yes">File name to use, if package.use is a directory: </property> <property name="single_line_mode">True</property> </widget> <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="y_padding">6</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> </packing> </child> <child> - <widget class="GtkEventBox" id="hintEB"> + <widget class="GtkCheckButton" id="usePerVersionCheck"> <property name="visible">True</property> - <child> - <widget class="GtkFrame" id="hintFrame"> - <property name="visible">True</property> - <property name="shadow_type">GTK_SHADOW_OUT</property> - <child> - <widget class="GtkLabel" id="hintLabel"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><u>You may use the following placeholders:</u> - -<i>$(cat)</i>: category -<i>$(pkg)</i>: package name -<i>$(cat-1)/$(cat-2)</i>: first/second part of the category</property> - <property name="use_markup">True</property> - </widget> - </child> - <child> - <placeholder/> - <packing> - <property name="type">label_item</property> - </packing> - </child> - </widget> - </child> + <property name="label" translatable="yes">Add only exact version to package.use</property> + <property name="response_id">0</property> + <property name="draw_indicator">True</property> </widget> <packing> <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> </packing> </child> <child> - <widget class="GtkCheckButton" id="maskPerVersionCheck"> + <widget class="GtkCheckButton" id="testPerVersionCheck"> <property name="visible">True</property> - <property name="label" translatable="yes">Add only exact version to package.mask/package.unmask</property> + <property name="label" translatable="yes">Add only exact version to package.keywords</property> <property name="response_id">0</property> <property name="draw_indicator">True</property> </widget> <packing> <property name="right_attach">2</property> - <property name="top_attach">8</property> - <property name="bottom_attach">9</property> + <property name="top_attach">5</property> + <property name="bottom_attach">6</property> </packing> </child> <child> - <widget class="GtkLabel" id="maskEditLabel"> + <widget class="GtkLabel" id="testEditLabel"> <property name="visible">True</property> <property name="xalign">0</property> - <property name="label" translatable="yes">File name to use, if package.mask/package.unmask is a directory: </property> + <property name="label" translatable="yes">File name to use, if package.keywords is a directory: </property> <property name="single_line_mode">True</property> </widget> <packing> - <property name="top_attach">9</property> - <property name="bottom_attach">10</property> + <property name="top_attach">6</property> + <property name="bottom_attach">7</property> </packing> </child> <child> - <widget class="GtkEntry" id="maskFileEdit"> + <widget class="GtkEntry" id="testFileEdit"> <property name="visible">True</property> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> - <property name="top_attach">9</property> - <property name="bottom_attach">10</property> + <property name="top_attach">6</property> + <property name="bottom_attach">7</property> </packing> </child> <child> - <widget class="GtkEntry" id="testFileEdit"> + <widget class="GtkEntry" id="maskFileEdit"> <property name="visible">True</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="top_attach">9</property> + <property name="bottom_attach">10</property> </packing> </child> <child> - <widget class="GtkLabel" id="testEditLabel"> + <widget class="GtkLabel" id="maskEditLabel"> <property name="visible">True</property> <property name="xalign">0</property> - <property name="label" translatable="yes">File name to use, if package.keywords is a directory: </property> + <property name="label" translatable="yes">File name to use, if package.mask/package.unmask is a directory: </property> <property name="single_line_mode">True</property> </widget> <packing> - <property name="top_attach">6</property> - <property name="bottom_attach">7</property> + <property name="top_attach">9</property> + <property name="bottom_attach">10</property> </packing> </child> <child> - <widget class="GtkCheckButton" id="testPerVersionCheck"> + <widget class="GtkCheckButton" id="maskPerVersionCheck"> <property name="visible">True</property> - <property name="label" translatable="yes">Add only exact version to package.keywords</property> + <property name="label" translatable="yes">Add only exact version to package.mask/package.unmask</property> <property name="response_id">0</property> <property name="draw_indicator">True</property> </widget> <packing> <property name="right_attach">2</property> - <property name="top_attach">5</property> - <property name="bottom_attach">6</property> + <property name="top_attach">8</property> + <property name="bottom_attach">9</property> </packing> </child> <child> - <widget class="GtkCheckButton" id="usePerVersionCheck"> + <widget class="GtkEventBox" id="hintEB"> <property name="visible">True</property> - <property name="label" translatable="yes">Add only exact version to package.use</property> - <property name="response_id">0</property> - <property name="draw_indicator">True</property> + <child> + <widget class="GtkFrame" id="hintFrame"> + <property name="visible">True</property> + <property name="shadow_type">GTK_SHADOW_OUT</property> + <child> + <widget class="GtkLabel" id="hintLabel"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><u>You may use the following placeholders:</u> + +<i>$(cat)</i>: category +<i>$(pkg)</i>: package name +<i>$(cat-1)/$(cat-2)</i>: first/second part of the category</property> + <property name="use_markup">True</property> + </widget> + </child> + <child> + <placeholder/> + <packing> + <property name="type">label_item</property> + </packing> + </child> + </widget> + </child> </widget> <packing> <property name="right_attach">2</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> </packing> </child> <child> - <widget class="GtkLabel" id="useEditLabel"> + <widget class="GtkLabel" id="useLabel"> <property name="visible">True</property> <property name="xalign">0</property> - <property name="label" translatable="yes">File name to use, if package.use is a directory: </property> + <property name="xpad">5</property> + <property name="label" translatable="yes"><u><i>Use-Flags</i></u></property> + <property name="use_markup">True</property> <property name="single_line_mode">True</property> </widget> <packing> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_padding">6</property> </packing> </child> <child> - <widget class="GtkEntry" id="useFileEdit"> + <widget class="GtkLabel" id="testLabel"> <property name="visible">True</property> + <property name="xalign">0</property> + <property name="xpad">5</property> + <property name="label" translatable="yes"><u><i>Testing Keywords</i></u></property> + <property name="use_markup">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">3</property> - <property name="bottom_attach">4</property> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="y_padding">5</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="maskLabel"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="xpad">5</property> + <property name="label" translatable="yes"><u><i>Masking Keywords</i></u></property> + <property name="use_markup">True</property> + <property name="single_line_mode">True</property> + </widget> + <packing> + <property name="top_attach">7</property> + <property name="bottom_attach">8</property> + <property name="y_padding">5</property> </packing> </child> </widget> @@ -1521,16 +1523,7 @@ </packing> </child> <child> - <widget class="GtkCheckButton" id="useTipsCheck"> - <property name="visible">True</property> - <property name="label" translatable="yes">Turn Use-Tips on</property> - <property name="response_id">0</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="expand">False</property> - <property name="position">1</property> - </packing> + <placeholder/> </child> <child> <widget class="GtkCheckButton" id="systrayCheck"> |