home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / lib / python2.4 / site-packages / AppInstall / DialogNewlyInstalled.py < prev    next >
Encoding:
Python Source  |  2006-08-28  |  4.7 KB  |  131 lines

  1. # (c) 2005 Canonical, GPL
  2.  
  3. import pygtk
  4. pygtk.require('2.0')
  5. from SimpleGladeApp import SimpleGladeApp
  6.  
  7. import gtk
  8. import gobject
  9. import os
  10.  
  11. from gettext import gettext as _
  12.  
  13. from Util import *
  14.  
  15. class DialogNewlyInstalled(SimpleGladeApp):
  16.     def __init__(self, datadir, parent, to_add, cache):
  17.         SimpleGladeApp.__init__(self,
  18.                                 path=datadir+"/gnome-app-install.glade",
  19.                                 root="dialog_newly_installed",
  20.                                 domain="gnome-app-install")
  21.                                 
  22.         self.store = gtk.ListStore(gobject.TYPE_STRING,
  23.                                    gobject.TYPE_PYOBJECT)
  24.         for elm in to_add:
  25.             if cache.has_key(elm.pkgname) and cache[elm.pkgname].isInstalled \
  26.                and elm.execCmd:
  27.                 self.store.append([elm.name,elm])                    
  28.         self.treeview_newly_installed.set_model(self.store)
  29.         self.dialog_newly_installed.set_transient_for(parent)
  30.         self.init_treeview(self.treeview_newly_installed)
  31.  
  32.     def run(self):
  33.         if len(self.store):
  34.             return self.dialog_newly_installed.run()
  35.  
  36.     def init_treeview(self, view):
  37.         def package_view_func(cell_layout, renderer, model, iter):
  38.             (name, item) = model.get(iter, 0, 1)
  39.             menupath = "</b> > <b>".join(item.menupath)
  40.             menupath = "<b>" + menupath + "</b>"
  41.             renderer.set_property("markup",
  42.                                   "%s\n<small>%s %s</small>" % \
  43.                                   (item.name, _("Menu:"), menupath))
  44.         def icon_cell_func(column, cell, model, iter):
  45.             item = model.get_value(iter, 1)
  46.             if item.iconname != None:
  47.                 icon = item.icontheme._getIcon(item.iconname, 24)
  48.                 cell.set_property("pixbuf", icon)
  49.             else:
  50.                 cell.set_property("pixbuf", None)
  51.             cell.set_property("visible", True)
  52.         view.set_search_column(COL_NAME)
  53.         view.get_selection().set_mode(gtk.SELECTION_NONE)
  54.         column = gtk.TreeViewColumn("")
  55.         render = gtk.CellRendererPixbuf()
  56.         column.pack_start(render, False)
  57.         column.set_cell_data_func (render, icon_cell_func)
  58.         render = gtk.CellRendererText()
  59.         render.set_property("xpad", 4)
  60.         column.pack_start(render, True)
  61.         column.add_attribute(render, "markup", COL_NAME)
  62.         column.set_cell_data_func (render, package_view_func)
  63.         view.append_column(column)
  64.  
  65.  
  66.     def on_treeview_newly_installed_row_activated(self, treeview_packages,
  67.                                                   path, view_column):
  68.         if os.getuid() == 0:
  69.             return False
  70.         treeiter = self.store.get_iter(path)
  71.         (name, item) = self.store[treeiter]
  72.         cmd_parts = []
  73.         command = item.execCmd
  74.         terminal = item.needsTerminal
  75.         if command == "": return
  76.         for part in command.split():
  77.             while True:
  78.                 # two consecutive '%' characters represent an actual '%'
  79.                 if len(part) >= 2 and part[:2] == '%%':
  80.                     cmd_parts.append('%')
  81.                     part = part[2:]
  82.                     continue
  83.                 # we're running the command without any options, so strip out placeholders
  84.                 if part[0] == '%': break
  85.                 # if the last part was an actual '%', we don't want to join it with a space, so do it by hand
  86.                 if cmd_parts[-1:] == '%':
  87.                     part = '%' + part
  88.                     cmd_parts[-1:] = part
  89.                     break
  90.                 cmd_parts.append(part)
  91.                 break
  92.         
  93.         if terminal:
  94.             command = " ".join(cmd_parts)
  95.             command = "gnome-terminal --command=\"" + command + "\""
  96.             cmd_parts = command.split()
  97.         
  98.         # run program
  99.         os.spawnvp(os.P_NOWAIT, cmd_parts[0], cmd_parts)
  100.  
  101.     def hide(self):
  102.         self.dialog_newly_installed.hide()
  103.         
  104.  
  105. if __name__ == "__main__":
  106.     from Menu import ApplicationMenu
  107.     cache = apt.Cache()
  108.     datadir = "/usr/share/gnome-app-install/"
  109.     progress = apt.progress.OpTextProgress()
  110.     to_add = []
  111.     
  112.     treeview_categories = gtk.TreeView()
  113.     treeview_packages = gtk.TreeView()
  114.  
  115.     menu = ApplicationMenu(datadir, cache,
  116.                            treeview_categories,
  117.                            treeview_packages,
  118.                            progress)
  119.     
  120.  
  121.     to_add = set()
  122.     for (type, name, item) in menu.store:
  123.         for (type,name,item) in item.real_applications_store:
  124.             to_add.add(item)
  125.     print to_add
  126.     dia = DialogNewlyInstalled(datadir, None,
  127.                                to_add,
  128.                                cache)
  129.     dia.run()
  130.     dia.hide()
  131.