Update contactview to show photo, name and then the set of icons
[hermes] / package / src / org / maemo / hermes / gui / contactview.py
index 7c7def3..d9c50e5 100644 (file)
@@ -1,4 +1,4 @@
-import gtk
+import gtk, glib
 import hildon
 import gobject
 import evolution
@@ -18,7 +18,33 @@ class ContactView(hildon.PannableArea):
         
         hildon.PannableArea.__init__(self)
         self.contacts = contacts
-        self.treestore = gtk.ListStore(str, gtk.gdk.Pixbuf, gobject.TYPE_PYOBJECT)
+        
+        columns = [gtk.gdk.Pixbuf,         # 0. Photo
+                   str,                    # 1. Name
+                   # ...                   # x. Services
+                   # gobject.TYPE_PYOBJECT # y. Actual contact
+                  ]
+
+        # -- Work out which services need to be shown...
+        #
+        icons    = {}
+        services = set([])
+        for contact in self.contacts:
+            services |= contact.get_mapped_to()
+
+        for service in sorted(services):
+            columns.append(gtk.gdk.Pixbuf)
+            try:
+                icons[service] = gtk.gdk.pixbuf_new_from_file('/opt/hermes/share/account-%s.png' % (service))
+            except glib.GError, e:
+                icons[service] = None
+                
+        columns.append(gobject.TYPE_PYOBJECT)
+        self.treestore = gtk.ListStore(*tuple(columns))
+        self._contact_index = len(columns) -1
+
+        # -- Build the tree model...
+        #
         for contact in self.contacts:
             if not contact.get_name():
                 continue
@@ -38,22 +64,30 @@ class ContactView(hildon.PannableArea):
             if pixbuf:
                 size = min(pixbuf.get_width(), pixbuf.get_height())
                 pixbuf = pixbuf.subpixbuf(0, 0, size, size).scale_simple(48, 48, gtk.gdk.INTERP_BILINEAR)
-            self.treestore.append(row = [contact.get_name(), pixbuf, contact])
+                
+            row = [pixbuf, contact.get_name(), ]
+            for service in services:
+                row.append(service in contact.get_mapped_to() and icons[service] or None)
+                
+            row.append(contact)
+            self.treestore.append(row)
         
         self.treeview = gtk.TreeView(self.treestore)
-        tvcolumn = gtk.TreeViewColumn('Name', gtk.CellRendererText(), text = 0)
-        self.treeview.append_column(tvcolumn)
-        
-        cell = gtk.CellRendererPixbuf()
-        cell.set_property('xalign', 1.0)
-        tvcolumn = gtk.TreeViewColumn('Picture', cell, pixbuf = 1)
+        self.treeview.append_column(gtk.TreeViewColumn('Picture', gtk.CellRendererPixbuf(), pixbuf = 0))
+
+        tvcolumn = gtk.TreeViewColumn('Name', gtk.CellRendererText(), text = 1)
+        tvcolumn.set_expand(True)
         self.treeview.append_column(tvcolumn)
+
+        i = 2
+        for service in services:
+            self.treeview.append_column(gtk.TreeViewColumn('Service', gtk.CellRendererPixbuf(), pixbuf = i))
+            i = i + 1
         
-        self.treeview.set_search_column(0)
         self.treeview.connect('row-activated', self._activated)
         self.add(self.treeview)
-        self.set_size_request(600, 380)
-      
+        self.set_size_request_policy(hildon.SIZE_REQUEST_CHILDREN)
+
       
     # -----------------------------------------------------------------------
     def _activated(self, treeview, path, column):
@@ -61,7 +95,7 @@ class ContactView(hildon.PannableArea):
            selected."""
         
         iter    = treeview.get_model().get_iter(path)
-        contact = treeview.get_model().get_value(iter, 2)
+        contact = treeview.get_model().get_value(iter, self._contact_index)
         self.emit('contact-activated', contact)