r3464 - in trunk/src/target/OM-2007.2/applications/openmoko-messages2: . src
chris at sita.openmoko.org
chris at sita.openmoko.org
Wed Nov 21 16:18:01 CET 2007
Author: chris
Date: 2007-11-21 16:17:58 +0100 (Wed, 21 Nov 2007)
New Revision: 3464
Modified:
trunk/src/target/OM-2007.2/applications/openmoko-messages2/
trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog
trunk/src/target/OM-2007.2/applications/openmoko-messages2/Makefile.am
trunk/src/target/OM-2007.2/applications/openmoko-messages2/configure.ac
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.c
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.h
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.c
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms.h
Log:
* configure.ac:
* Makefile.am:
Remove libhito
* src/sms.h:
* src/sms-contacts.[ch]:
Replace libhito code with ebook code, implement showing of contact
avatars.
* src/sms-notes.c:
Update due to new ebook code
Property changes on: trunk/src/target/OM-2007.2/applications/openmoko-messages2
___________________________________________________________________
Name: svn:externals
- libhito http://svn.o-hand.com/repos/contacts/branches/hito/libhito
Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog 2007-11-21 13:18:47 UTC (rev 3463)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog 2007-11-21 15:17:58 UTC (rev 3464)
@@ -1,3 +1,17 @@
+2007-11-21 Chris Lord <chris at openedhand.com>
+
+ * configure.ac:
+ * Makefile.am:
+ Remove libhito
+
+ * src/sms.h:
+ * src/sms-contacts.[ch]:
+ Replace libhito code with ebook code, implement showing of contact
+ avatars.
+
+ * src/sms-notes.c:
+ Update due to new ebook code
+
2007-11-20 Chris Lord <chris at openedhand.com>
* configure.ac:
Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/Makefile.am
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/Makefile.am 2007-11-21 13:18:47 UTC (rev 3463)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/Makefile.am 2007-11-21 15:17:58 UTC (rev 3464)
@@ -1 +1 @@
-SUBDIRS=libhito src
+SUBDIRS=src
Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/configure.ac
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/configure.ac 2007-11-21 13:18:47 UTC (rev 3463)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/configure.ac 2007-11-21 15:17:58 UTC (rev 3464)
@@ -10,10 +10,14 @@
AC_STDC_HEADERS
AC_PROG_LIBTOOL
-PKG_CHECK_MODULES(CONTACTS, glib-2.0 glib-2.0 gtk+-2.0 libebook-1.2)
+PKG_CHECK_MODULES(EBOOK, libebook-1.2)
+PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.6.0)
+PKG_CHECK_MODULES(MOKOUI, libmokoui2 >= 0.3)
+PKG_CHECK_MODULES(JANA, libjana libjana-ecal libjana-gtk)
+PKG_CHECK_MODULES(DBUS, dbus-glib-1)
old_cflags=$CFLAGS
-CFLAGS=$CONTACTS_CFLAGS
+CFLAGS=$EBOOK_CFLAGS
AC_CHECK_TYPE(EContactPhotoType, [], [], [#include <libebook/e-book.h>])
CFLAGS=$old_cflags
@@ -21,15 +25,8 @@
AC_DEFINE(HAVE_PHOTO_TYPE, 1, [Defined if EContactPhotoType exists])
fi
-PKG_CHECK_MODULES(EBOOK, libebook-1.2)
-PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.6.0)
-PKG_CHECK_MODULES(MOKOUI, libmokoui2 >= 0.3)
-PKG_CHECK_MODULES(JANA, libjana libjana-ecal libjana-gtk)
-PKG_CHECK_MODULES(DBUS, dbus-glib-1)
-
AC_OUTPUT([
Makefile
-libhito/Makefile
src/Makefile
])
Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.c 2007-11-21 13:18:47 UTC (rev 3463)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.c 2007-11-21 15:17:58 UTC (rev 3464)
@@ -20,46 +20,145 @@
#include "sms-contacts.h"
#include <libmokoui2/moko-finger-scroll.h>
#include <libmokoui2/moko-search-bar.h>
-#include <libhito/hito-contact-store.h>
-#include <libhito/hito-group-store.h>
-#include <libhito/hito-all-group.h>
-#include <libhito/hito-group-combo.h>
-#include <libebook/e-book.h>
+#include <config.h>
-static void sms_contacts_data_func (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- SmsData *data)
+/* Following two functions taken from pimlico Contacts */
+static void
+contact_photo_size (GdkPixbufLoader * loader, gint width, gint height,
+ gpointer user_data)
{
- EContact *contact = NULL;
+ /* Max height of GTK_ICON_SIZE_DIALOG */
+ gint iconwidth, iconheight;
+ gtk_icon_size_lookup (GTK_ICON_SIZE_DIALOG, &iconwidth, &iconheight);
- gtk_tree_model_get (model, iter, COLUMN_CONTACT, &contact, -1);
- if (!contact) return;
+ gdk_pixbuf_loader_set_size (loader,
+ width / ((gdouble) height /
+ iconheight), iconheight);
+}
+
+GdkPixbuf *
+contacts_load_photo (EContact *contact)
+{
+ EContactPhoto *photo;
+ GdkPixbuf *pixbuf = NULL;
- g_object_set (cell,
- "author", e_contact_get_const (contact, E_CONTACT_FULL_NAME),
- "body", "0 sent, 0 received", NULL);
+ /* Retrieve contact picture and resize */
+ photo = e_contact_get (contact, E_CONTACT_PHOTO);
+ if (photo) {
+ GdkPixbufLoader *loader = gdk_pixbuf_loader_new ();
+ if (loader) {
+ g_signal_connect (G_OBJECT (loader),
+ "size-prepared",
+ G_CALLBACK (contact_photo_size),
+ NULL);
+#if HAVE_PHOTO_TYPE
+ switch (photo->type) {
+ case E_CONTACT_PHOTO_TYPE_INLINED :
+ gdk_pixbuf_loader_write (loader,
+ photo->data.inlined.data,
+ photo->data.inlined.length, NULL);
+ break;
+ case E_CONTACT_PHOTO_TYPE_URI :
+ default :
+ g_warning ("Cannot handle URI photos yet");
+ g_object_unref (loader);
+ loader = NULL;
+ break;
+ }
+#else
+ gdk_pixbuf_loader_write (loader, (const guchar *)
+ photo->data, photo->length, NULL);
+#endif
+ if (loader) {
+ gdk_pixbuf_loader_close (loader, NULL);
+ pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
+ if (pixbuf) g_object_ref (pixbuf);
+ g_object_unref (loader);
+ }
+ }
+ e_contact_photo_free (photo);
+ }
- g_object_unref (contact);
+ return pixbuf;
}
+static void
+contacts_store (SmsData *data, GtkTreeIter *iter, EContact *contact)
+{
+ GdkPixbuf *photo = contacts_load_photo (contact);
+ gtk_list_store_set ((GtkListStore *)data->contacts_store, iter,
+ COL_UID, e_contact_get_const (contact, E_CONTACT_UID),
+ COL_NAME, e_contact_get_const (contact, E_CONTACT_FULL_NAME),
+ COL_ICON, photo, -1);
+ if (photo) g_object_unref (photo);
+}
+
+static void
+contacts_added_cb (EBookView *ebookview, GList *contacts, SmsData *data)
+{
+ for (; contacts; contacts = contacts->next) {
+ GtkTreeIter *iter;
+ EContact *contact = (EContact *)contacts->data;
+
+ if (!contact) continue;
+
+ iter = g_slice_new (GtkTreeIter);
+ gtk_list_store_append ((GtkListStore *)data->contacts_store,
+ iter);
+ contacts_store (data, iter, contact);
+ g_hash_table_insert (data->contacts,
+ e_contact_get (contact, E_CONTACT_UID), iter);
+ }
+}
+
+static void
+contacts_changed_cb (EBookView *ebookview, GList *contacts, SmsData *data)
+{
+ for (; contacts; contacts = contacts->next) {
+ GtkTreeIter *iter;
+ const gchar *uid;
+
+ EContact *contact = (EContact *)contacts->data;
+
+ if (!contact) continue;
+
+ uid = e_contact_get_const (contact, E_CONTACT_UID);
+ iter = g_hash_table_lookup (data->contacts, uid);
+ if (iter) contacts_store (data, iter, contact);
+ }
+}
+
+static void
+contacts_removed_cb (EBookView *ebookview, GList *uids, SmsData *data)
+{
+ for (; uids; uids = uids->next) {
+ GtkTreeIter *iter = g_hash_table_lookup (
+ data->contacts, uids->data);
+
+ if (!iter) continue;
+
+ gtk_list_store_remove ((GtkListStore *)
+ data->contacts_store, iter);
+ g_hash_table_remove (data->contacts, uids->data);
+ }
+}
+
+static void
+free_iter_slice (GtkTreeIter *iter)
+{
+ g_slice_free (GtkTreeIter, iter);
+}
+
GtkWidget *
sms_contacts_page_new (SmsData *data)
{
EBookQuery *qrys[(E_CONTACT_LAST_PHONE_ID-E_CONTACT_FIRST_PHONE_ID)+1];
GtkWidget *searchbar, *scroll, *vbox;
GtkCellRenderer *renderer;
- GtkTreeModel *group_store;
EBookQuery *tel_query;
EBookView *view;
- EBook *book;
gint i;
- /* Temporary, just for testing */
- GdkPixbuf *pixbuf = gtk_icon_theme_load_icon (
- gtk_icon_theme_get_default (), "stock_person", 48, 0, NULL);
-
GError *error = NULL;
/* Create query for all contacts with telephone numbers */
@@ -77,14 +176,14 @@
/* Create/retrieve and open system address book */
/* TODO: async opening? */
- if (!(book = e_book_new_system_addressbook (&error))) {
+ if (!(data->ebook = e_book_new_system_addressbook (&error))) {
g_warning ("Error retrieving system addressbook: %s",
error->message);
g_error_free (error);
return gtk_label_new ("Error, see console output");
}
- if (!e_book_open (book, FALSE, &error)) {
+ if (!e_book_open (data->ebook, FALSE, &error)) {
g_warning ("Error opening system addressbook: %s",
error->message);
g_error_free (error);
@@ -92,47 +191,57 @@
}
/* Get view on telephone number query */
- if (!(e_book_get_book_view (book, tel_query, NULL, 0, &view, &error))) {
+ if (!(e_book_get_book_view (data->ebook, tel_query,
+ NULL, 0, &view, &error))) {
g_warning ("Error retrieving addressbook view: %s",
error->message);
g_error_free (error);
return gtk_label_new ("Error, see console output");
}
+ /* Get icon to use when no contact photo exists */
+ data->no_photo = gtk_icon_theme_load_icon (
+ gtk_icon_theme_get_default (), "stock_person", 48, 0, NULL);
+
/* Create contacts model */
- data->contacts_store = hito_contact_store_new (view);
+ data->contacts_store = gtk_list_store_new (COL_LAST,
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, GDK_TYPE_PIXBUF);
+ data->contacts = g_hash_table_new_full (g_str_hash, g_str_equal,
+ (GDestroyNotify)g_free, (GDestroyNotify)free_iter_slice);
/* Create filter */
- data->contacts_filter = hito_contact_model_filter_new (
- HITO_CONTACT_STORE (data->contacts_store));
+ data->contacts_filter = gtk_tree_model_filter_new (
+ data->contacts_store, NULL);
/* Create groups model */
- group_store = hito_group_store_new ();
- hito_group_store_add_group (HITO_GROUP_STORE (group_store),
- hito_all_group_new ());
- hito_group_store_set_view (HITO_GROUP_STORE (group_store), view);
+ data->contacts_combo = gtk_combo_box_new_text ();
/* Create search box */
- searchbar = moko_search_bar_new_with_combo (GTK_COMBO_BOX (
- hito_group_combo_new (HITO_GROUP_STORE (group_store))));
+ searchbar = moko_search_bar_new_with_combo (
+ GTK_COMBO_BOX (data->contacts_combo));
- /* Create cell renderer and tree view */
+ /* Create tree view */
data->contacts_treeview = gtk_tree_view_new_with_model (
data->contacts_filter);
gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (
data->contacts_treeview), TRUE);
gtk_tree_view_set_headers_visible (
GTK_TREE_VIEW (data->contacts_treeview), FALSE);
+
+ /* Create renderer and column */
+ /* Slight abuse of the note cell renderer I suppose... */
renderer = jana_gtk_cell_renderer_note_new ();
- g_signal_connect (data->contacts_treeview, "size-allocate",
- G_CALLBACK (jana_gtk_utils_treeview_resize), renderer);
g_object_set (G_OBJECT (renderer), "show_created", FALSE,
- "show_recipient", FALSE, "icon", pixbuf, NULL);
- gtk_tree_view_insert_column_with_data_func (
+ "show_recipient", FALSE, NULL);
+
+ gtk_tree_view_insert_column_with_attributes (
GTK_TREE_VIEW (data->contacts_treeview),
- 0, NULL, renderer, (GtkTreeCellDataFunc)sms_contacts_data_func,
- data, NULL);
+ 0, NULL, renderer, "author", COL_NAME,
+ "body", COL_DETAIL, "icon", COL_ICON, NULL);
+ g_signal_connect (data->contacts_treeview, "size-allocate",
+ G_CALLBACK (jana_gtk_utils_treeview_resize), renderer);
+
/* Pack treeview into a finger-scroll */
scroll = moko_finger_scroll_new ();
gtk_container_add (GTK_CONTAINER (scroll), data->contacts_treeview);
@@ -144,6 +253,12 @@
gtk_widget_show_all (vbox);
/* Start book view */
+ g_signal_connect (view, "contacts-added",
+ G_CALLBACK (contacts_added_cb), data);
+ g_signal_connect (view, "contacts-changed",
+ G_CALLBACK (contacts_changed_cb), data);
+ g_signal_connect (view, "contacts-removed",
+ G_CALLBACK (contacts_removed_cb), data);
e_book_view_start (view);
return vbox;
Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.h 2007-11-21 13:18:47 UTC (rev 3463)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.h 2007-11-21 15:17:58 UTC (rev 3464)
@@ -22,6 +22,14 @@
#include "sms.h"
+enum {
+ COL_UID,
+ COL_NAME,
+ COL_DETAIL,
+ COL_ICON,
+ COL_LAST
+};
+
GtkWidget *sms_contacts_page_new (SmsData *data);
#endif
Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.c 2007-11-21 13:18:47 UTC (rev 3463)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.c 2007-11-21 15:17:58 UTC (rev 3464)
@@ -18,10 +18,10 @@
*/
#include "sms-notes.h"
+#include "sms-contacts.h"
#include <libjana-ecal/jana-ecal.h>
#include <libmokoui2/moko-finger-scroll.h>
#include <libmokoui2/moko-search-bar.h>
-#include <libhito/hito-contact-store.h>
#include <libebook/e-book.h>
static GdkColor alt_color;
@@ -33,16 +33,27 @@
{
GtkTreeSelection *selection;
GtkTreeModel *model;
+ EContact *contact;
GtkTreeIter iter;
- EContact *contact = NULL;
+ gchar *uid;
+ GError *error = NULL;
+
selection = gtk_tree_view_get_selection (
GTK_TREE_VIEW (data->contacts_treeview));
if (!gtk_tree_selection_get_selected (selection, &model, &iter))
return NULL;
- gtk_tree_model_get (model, &iter, COLUMN_CONTACT, &contact, -1);
+ gtk_tree_model_get (model, &iter, COL_UID, &uid, -1);
+ if (!e_book_get_contact (data->ebook, uid, &contact, &error)) {
+ g_warning ("Error retrieving contact: %s", error->message);
+ g_error_free (error);
+ contact = NULL;
+ }
+
+ g_free (uid);
+
return contact;
}
Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms.h 2007-11-21 13:18:47 UTC (rev 3463)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms.h 2007-11-21 15:17:58 UTC (rev 3464)
@@ -25,24 +25,32 @@
#include <libjana-gtk/jana-gtk.h>
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-bindings.h>
+#include <libebook/e-book.h>
typedef struct {
JanaStore *notes;
JanaStoreView *notes_view;
+ GtkTreeModel *note_store;
+ GtkTreeModel *note_filter;
+
+ EBook *ebook;
GtkTreeModel *contacts_store;
GtkTreeModel *contacts_filter;
- GtkTreeModel *note_store;
- GtkTreeModel *note_filter;
+ GHashTable *contacts;
GtkWidget *window;
GtkWidget *notebook;
GtkToolItem *new_button;
GtkToolItem *delete_all_button;
GtkToolItem *delete_button;
- GtkWidget *contacts_treeview;
+
GtkWidget *notes_combo;
GtkWidget *sms_hbox;
GtkWidget *sms_textview;
+
+ GtkWidget *contacts_treeview;
+ GtkWidget *contacts_combo;
+ GdkPixbuf *no_photo;
gulong delete_all_handler;
gulong delete_handler;
More information about the commitlog
mailing list