Viewing file: GroupDetails.py (6.96 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
import gtk import gtk.glade import gettext import gobject import os import rpm import locale from rhpl.translate import _, N_, utf8, textdomain
from config import * from constants import * from size_string import size_string
textdomain(PROGNAME) SELECTION_STRING=_("A package group can have both standard and extra package members. Standard packages are always available when the package group is installed.") SELECTION_PACKAGE_STRING=_("Select the extra packages to be installed:")
class GroupDetails(object): COLUMN_SELECTED=0 COLUMN_VISIBLE=1 COLUMN_NAME=2 COLUMN_PACKAGE=3 MAX_LIST_WIDTH=550 def __init__ (self, comps, component, parent=None): self.comps = comps self.component = component self.parent = parent self.construct_dialog () self.hydrate_dialog ()
def select_package(self, selection): (model, iter) = selection.get_selected() if iter: package = model.get_value(iter, self.COLUMN_PACKAGE) if package: self.fullnameLabel.set_text(package.getName()) self.sizeLabel.set_markup (size_string (package.getSize())) return self.fullnameLabel.set_markup('<i>None</i>') self.sizeLabel.set_markup('<i>None</i>')
def construct_dialog (self): glade_file = "GroupDetails.glade" if not os.path.isfile(glade_file): glade_file = GLADEDIR + glade_file xml = gtk.glade.XML (glade_file, 'group_details_dialog', domain = PROGNAME)
self.dialog = xml.get_widget ('group_details_dialog') self.tree_view = xml.get_widget ('group_details_tree_view') self.swindow = xml.get_widget ('group_details_swindow') self.fullnameLabel = xml.get_widget('group_details_full_name_label') self.sizeLabel = xml.get_widget('group_details_size_label') self.intro_label = xml.get_widget ('group_details_intro_label') self.model = gtk.TreeStore (gobject.TYPE_BOOLEAN, gobject.TYPE_BOOLEAN, gobject.TYPE_STRING, gobject.TYPE_PYOBJECT) xml.get_widget ('group_details_image').set_from_file (RHCPIXMAPSDIR+'group-details-logo.png') self.tree_view.set_model (self.model) if self.parent: self.dialog.set_transient_for (self.parent) column = gtk.TreeViewColumn (None, None) renderer = gtk.CellRendererToggle() renderer.connect ('toggled', self.renderer_toggled) column.pack_start (renderer, False) column.add_attribute (renderer, 'active', self.COLUMN_SELECTED) column.add_attribute (renderer, 'visible', self.COLUMN_VISIBLE) renderer = gtk.CellRendererText() column.pack_start (renderer, True) column.add_attribute (renderer, 'markup', self.COLUMN_NAME) self.tree_view.append_column (column) selection = self.tree_view.get_selection() selection.connect("changed", self.select_package)
def hydrate_dialog (self): def getDescription(obj): basedesc = obj.getDescription()
if basedesc is not None: desc = basedesc.replace ("\n\n", "\x00") desc = desc.replace ("\n", " ") desc = desc.replace ("&", "&") desc = desc.replace ("\x00", "\n\n") desc = utf8(desc) else: desc = "" return "%s - %s" % (obj.name, desc)
name = self.component.name self.dialog.set_title (_("%s Package Details") % name)
sized = 0 req_height = -1 req_width = -1 packages = self.component.packageInfo(type = PKGTYPE_MANDATORY) mandatory_iter = None if len (packages) > 0: mandatory_iter = self.model.append (None) self.model.set (mandatory_iter, self.COLUMN_VISIBLE, False, self.COLUMN_NAME, _("<b>Standard Packages</b>"), self.COLUMN_PACKAGE, None) # Give the scrolled window a good height. req = self.tree_view.size_request () req_height = req[1]*12 sized = 1 for package in packages: pkg = self.comps.hdrlist[package] iter = self.model.append (mandatory_iter) pkgname = getDescription (pkg) self.model.set (iter, self.COLUMN_VISIBLE, False, self.COLUMN_NAME, pkgname, self.COLUMN_PACKAGE, pkg)
packages = self.component.packageInfo(type = PKGTYPE_OPTIONAL | PKGTYPE_DEFAULT) if packages == []: path = self.model.get_path (mandatory_iter) self.tree_view.expand_row (path, True) self.intro_label.set_text (SELECTION_STRING) else: self.intro_label.set_text (SELECTION_STRING + "\n\n" + SELECTION_PACKAGE_STRING)
if len (packages) > 0: optional_iter = self.model.append (None) self.model.set (optional_iter, self.COLUMN_VISIBLE, False, self.COLUMN_NAME, _("<b>Extra Packages</b>"), self.COLUMN_PACKAGE, None) if not sized: # Give the scrolled window a good height. req = self.tree_view.size_request () req_height = req[1]*12
for package in packages: if self.component.packages[package]["meta"] == 0: pkg = self.comps.hdrlist[package] else: pkg = self.comps.groups[package] pkgname = getDescription (pkg) iter = self.model.append (optional_iter) self.model.set (iter, self.COLUMN_SELECTED, pkg.isSelected(), self.COLUMN_VISIBLE, True, self.COLUMN_NAME, pkgname, self.COLUMN_PACKAGE, pkg)
path = self.model.get_path (optional_iter) self.tree_view.expand_row (path, False)
# Give the scrolled window a good width. req = self.tree_view.size_request () if req[0] > self.MAX_LIST_WIDTH: req_width = self.MAX_LIST_WIDTH self.swindow.set_policy (gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) else: self.swindow.set_policy (gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) self.swindow.set_size_request (req_width, req_height)
def run (self): self.dialog.run () self.dialog.destroy ()
def renderer_toggled (self, renderer, path): iter = self.model.get_iter_from_string (path) package = self.model.get_value (iter, self.COLUMN_PACKAGE) if package.isSelected(): self.component.unselectPackage(package.id) else: self.component.selectPackage(package.id) self.model.set (iter, self.COLUMN_SELECTED, package.isSelected())
|