import gtk
import hildon
+from ctypes import *
class ContactView(hildon.PannableArea):
"""Widget which shows a list of contacts in a pannable area.
self.contacts = contacts
self.treestore = gtk.ListStore(str, gtk.gdk.Pixbuf)
for contact in self.contacts:
- self.treestore.append(row = [contact.get_name(), contact.get_photo(48)])
+ if not contact.get_name():
+ continue
+
+ photo = contact.get_property('photo')
+ pi = cast(c_void_p(hash(photo)), POINTER(EContactPhoto))
+ pixbuf = None
+ if pi.contents.data.uri.startswith("image/"):
+ data = string_at(pi.contents.data.inlined.data, pi.contents.data.inlined.length)
+ pixbuf_loader = gtk.gdk.PixbufLoader()
+ pixbuf_loader.write(data)
+ pixbuf_loader.close()
+ pixbuf = pixbuf_loader.get_pixbuf()
+ elif pi.contents.data.uri.startswith("file://"):
+ filename = pi.contents.data.uri[7:]
+ pixbuf = gtk.gdk.pixbuf_new_from_file(filename)
+
+ 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])
self.treeview = gtk.TreeView(self.treestore)
tvcolumn = gtk.TreeViewColumn('Name', gtk.CellRendererText(), text = 0)
self.add(self.treeview)
self.set_size_request(600, 380)
+
+class EContactPhoto_inlined(Structure):
+ _fields_ = [('mime_type', c_char_p),
+ ('length', c_uint),
+ ('data', c_void_p)]
+
+class EContactPhoto_data(Union):
+ _fields_ = [('inlined', EContactPhoto_inlined),
+ ('uri', c_char_p)]
+
+class EContactPhoto(Structure):
+ _fields_ = [('type', c_int),
+ ('data', EContactPhoto_data)]
+
+
self.app = hildon.Program()
self.window = hildon.Window()
gtk.set_application_name('Hermes')
- self.osso_context = osso.Context('org.maemo.hermes', '0.0.3', False)
+ self.osso_context = osso.Context('org.maemo.hermes', '0.0.4', False)
self.app.add_window(self.window)
self.window.connect("delete-event", gtk.main_quit)