r1522 - trunk/src/target/OM-2007/applications/openmoko-messages/src

alex_tang at sita.openmoko.org alex_tang at sita.openmoko.org
Wed Mar 28 07:58:13 CEST 2007


Author: alex_tang
Date: 2007-03-28 07:58:08 +0200 (Wed, 28 Mar 2007)
New Revision: 1522

Modified:
   trunk/src/target/OM-2007/applications/openmoko-messages/src/callbacks.c
   trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.c
   trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.h
Log:
Get selected contacts and set into sms send entry.


Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/callbacks.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/callbacks.c	2007-03-28 02:33:14 UTC (rev 1521)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/callbacks.c	2007-03-28 05:58:08 UTC (rev 1522)
@@ -590,6 +590,26 @@
 {
   g_debug("sms select contact done");
   GtkWidget* toEntry = (GtkWidget*)data;
-  gtk_entry_set_text (GTK_ENTRY(toEntry),SMS_CONTACT_WINDOW(widget)->nameList);
+  GList* contacts = SMS_CONTACT_WINDOW(widget)->selectedContacts;
+  g_debug ("start to add %d contacts to entry", g_list_length(contacts));
+  gchar* nameList = NULL;
+  gchar* name;
+  GList* nextContext = contacts;
+  EContact *contact;
+  for ( ; nextContext != NULL; nextContext = nextContext->next){
+    contact =  E_CONTACT (nextContext->data);
+    name = e_contact_get_const (contact, E_CONTACT_FULL_NAME);
+    if (nameList == NULL)
+      nameList = g_strdup (name);
+    else
+      nameList = g_strconcat (nameList,",",name,NULL);
+    g_debug(nameList);
+  }
+  if (strlen(gtk_entry_get_text (GTK_ENTRY(toEntry))) > 0)
+    gtk_entry_append_text (GTK_ENTRY(toEntry),g_strdup_printf(",%s",nameList));
+  else
+    gtk_entry_set_text (GTK_ENTRY(toEntry),nameList);
+  g_free(nameList);
+  g_free(name);
 }
 

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.c	2007-03-28 02:33:14 UTC (rev 1521)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.c	2007-03-28 05:58:08 UTC (rev 1522)
@@ -28,6 +28,7 @@
   GtkWidget* vbox;
   GtkWidget* buttonbox;
   GtkWidget* contacts_view;
+  SmsContactData* data;
 }SmsContactWindowPrivate;
 
 static gint sms_contact_signals[LAST_SIGNAL] = {0};
@@ -40,6 +41,8 @@
                                 GList* contacts, gpointer closure);
 static void contacts_view_cursor_changed(GtkTreeSelection* selection, SmsContactData* data);
 static void contact_select_done(void);
+gboolean get_selected_contact (GtkTreeModel* model, GtkTreePath* path, 
+                               GtkTreeIter* iter, gpointer data);
 
 static void
 sms_contact_window_dispose(GObject* object)
@@ -83,11 +86,11 @@
 static void updateContactsView (EBook* book, EBookStatus status, 
                                 GList* contacts, gpointer closure)
 {
-  g_debug("contacts has ");
   GtkTreeIter iter;
   SmsContactData* data = (SmsContactData*)closure;
   GtkListStore *contacts_liststore = data->contacts_liststore;
   GList* c = contacts;
+  data->contacts = contacts;
   g_debug ("list length %d", g_list_length(c));
 
   for (;c;c=c->next){
@@ -141,10 +144,10 @@
   SmsContactWindowPrivate* priv = SMS_CONTACT_WINDOW_GET_PRIVATE(self);
   priv->vbox = gtk_vbox_new(FALSE,0);
   SmsContactData* data = g_new0(SmsContactData,1);
+  priv->data = data;
   data->book = e_book_new_system_addressbook(NULL);
   if (!data->book)
     g_critical ("Could not load system addressbook");
-  self->nameList = g_strdup("tyh");
 
   /* Set the "select" window title */
   GtkWidget* titleLabel = gtk_label_new ("Select Contacts");
@@ -225,8 +228,48 @@
   return GTK_WIDGET (moko_navigation_list);
 }
 
+gboolean get_selected_contact (GtkTreeModel* model, GtkTreePath* path, 
+                               GtkTreeIter* iter, gpointer data)
+{
+  SmsContactWindow* self = (SmsContactWindow*)data;
+  SmsContactWindowPrivate* priv = SMS_CONTACT_WINDOW_GET_PRIVATE(self);
+  SmsContactData* contactData = priv->data;
+  g_debug ("select item contacts %d", g_list_length(contactData->contacts));
+
+  gchar* name;
+  gboolean selected;
+  gtk_tree_model_get (model, iter,
+                      CONTACT_SEL_COL, &selected,
+		      CONTACT_NAME_COL,&name,
+		      -1);
+  if (selected)
+    g_debug ("contact %s selected", name);
+  else {
+    g_debug ("contact %s not selected, remove from contacts list", name);
+    GList* contactListItem = contactData->contacts;
+    for ( ; contactListItem; contactListItem=contactListItem->next){
+      EContact* contact = E_CONTACT (contactListItem->data);
+      const gchar *contactName;
+      contactName = e_contact_get_const (contact, E_CONTACT_FULL_NAME);
+      if (!g_strcasecmp(name, contactName)) 
+        contactData->contacts = g_list_remove (contactData->contacts,
+	                                       contactListItem->data);
+    }
+  }
+
+  return FALSE;
+}
+
 static void sms_contact_window_close (SmsContactWindow* self)
 {
+  /* get selected items */
+  SmsContactWindowPrivate* priv = SMS_CONTACT_WINDOW_GET_PRIVATE(self);
+  GtkWidget* contactView = moko_navigation_list_get_tree_view(MOKO_NAVIGATION_LIST(priv->contacts_view));
+  GtkTreeModel* contactModel = gtk_tree_view_get_model (GTK_TREE_VIEW(contactView));
+  gtk_tree_model_foreach (contactModel, get_selected_contact, self);
+  self->selectedContacts = priv->data->contacts;
+
+  /* emit selection done signal */
   g_signal_emit (G_OBJECT(self),sms_contact_signals[CONTACT_SELECT_DONE_SIGNAL],0);
 
   /* Synthesize delete_event to close dialog. */

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.h	2007-03-28 02:33:14 UTC (rev 1521)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.h	2007-03-28 05:58:08 UTC (rev 1522)
@@ -55,7 +55,7 @@
 {
   MokoWindow parent;
   /* instance members */
-  gchar* nameList;
+  GList* selectedContacts;
 }SmsContactWindow;
 
 typedef struct
@@ -69,6 +69,7 @@
 {
   EBook* book;
   GtkListStore *contacts_liststore;
+  GList* contacts;
 }SmsContactData;
 
 G_END_DECLS





More information about the commitlog mailing list