soylent r92 - trunk/src



Author: treitter
Date: Sat Mar  8 06:09:01 2008
New Revision: 92
URL: http://svn.gnome.org/viewvc/soylent?rev=92&view=rev

Log:
clean up the detail_add_person_add_mail_attrs() function and its caller

Modified:
   trunk/src/soylent-browser-person-view.c
   trunk/src/soylent-browser-person-view.h

Modified: trunk/src/soylent-browser-person-view.c
==============================================================================
--- trunk/src/soylent-browser-person-view.c	(original)
+++ trunk/src/soylent-browser-person-view.c	Sat Mar  8 06:09:01 2008
@@ -81,8 +81,8 @@
 static gboolean detail_add_person_add_attr (SoylentBrowser *browser,
                                             const gchar *attr_name,
                                             const gchar *param_val);
-static void detail_add_person_add_mail_attrs (SoylentBrowser *browser,
-                                              const gchar *param_val);
+static gboolean detail_add_person_add_mail_attrs (SoylentBrowser *browser,
+                                                  const gchar *param_val);
 
 /* Setup/update sections of the person view UI with latest data from e-d-s */
 static void soylent_browser_person_view_update (SoylentBrowser *browser,
@@ -688,7 +688,7 @@
 
   g_return_val_if_fail (browser != NULL, retval);
   /* FIXME: uncomment once SoylentBrowser is a GObject:
-  g_return_val_if_fail (SOYLENT_IS_BROWSER (user_data), NULL);
+  g_return_val_if_fail (SOYLENT_IS_BROWSER (browser), NULL);
    */
 
   wtree = soylent_browser_get_widget_tree (browser);
@@ -712,11 +712,13 @@
   return retval;
 }
 
-/* FIXME: make this boolean */
-/* Commit any new details to the person being edited */
-void
-commit_detail_add (GtkWidget *widget, gpointer user_data)
+/* Commit any new details to the person being edited
+ *
+ * Return TRUE for success, FALSE for any failure. */
+gboolean
+commit_detail_add (GtkWidget *btn_detail_add, gpointer user_data)
 {
+  gboolean retval = FALSE;
   SoylentBrowser *browser = NULL;
   GladeXML *wtree = NULL;
   GtkComboBox *cbox_domain = NULL; 
@@ -726,12 +728,16 @@
   gchar *param_val = NULL;
   SoylentPerson *person = NULL;
 
+  g_return_val_if_fail (user_data != NULL, retval);
+  /* FIXME: uncomment once SoylentBrowser is a GObject:
+  g_return_val_if_fail (SOYLENT_IS_BROWSER (user_data), NULL);
+   */
+
   browser = (SoylentBrowser*) user_data;
   wtree = soylent_browser_get_widget_tree (browser);
 
   cbox_domain = GTK_COMBO_BOX (glade_xml_get_widget (wtree,
                                                      "cbox_detail_domain")); 
-  entry_add = GTK_ENTRY (glade_xml_get_widget (wtree, "entry_detail_add")); 
   domain = gtk_combo_box_get_active_text (cbox_domain);
 
   /* Make sure any changes to existing details between editing the new detail
@@ -770,6 +776,8 @@
   else if (g_str_equal (domain, "Mailing Address"))
     {
       /* TODO: set the corresponding LABEL attribute that Evolution sets */
+      param_val = soylent_browser_detail_add_get_cbox_val (browser,
+                                                           "cbox_detail_type");
       attr_name = g_strdup (EVC_ADR);
     }
   else
@@ -781,28 +789,32 @@
     {
       if (g_str_equal (attr_name, EVC_ADR))
         {
-          /* FIXME: check the return value */
-          detail_add_person_add_mail_attrs (browser, param_val);
+          retval = detail_add_person_add_mail_attrs (browser, param_val);
         }
       else
         {
-          /* FIXME: check the return value */
-          detail_add_person_add_attr (browser, attr_name, param_val);
+          retval = detail_add_person_add_attr (browser, attr_name, param_val);
         }
     }
 
   /* Make sure we actually commit these changes back */
-  soylent_browser_person_view_save_changes (NULL, browser);
+  if (retval)
+    {
+      soylent_browser_person_view_save_changes (NULL, browser);
 
-  person = soylent_browser_get_selected_person (browser);
-  soylent_browser_person_view_update (browser, person);
+      person = soylent_browser_get_selected_person (browser);
+      soylent_browser_person_view_update (browser, person);
+    }
 
+  entry_add = GTK_ENTRY (glade_xml_get_widget (wtree, "entry_detail_add")); 
   gtk_entry_set_text (entry_add, "");
-  gtk_widget_set_sensitive (widget, FALSE);
+  gtk_widget_set_sensitive (btn_detail_add, FALSE);
 
   g_free (domain);
   g_free (attr_name);
   g_free (param_val);
+
+  return retval;
 }
 
 /* Hook up signal handlers for the Detail Add UI section widgets
@@ -1676,8 +1688,152 @@
   return retval;
 }
 
-/* Save a new mailing address for the person being edited */
-static void
+/* Save a new mailing address for the person being edited
+ *
+ * Return TRUE for success, FALSE for any failure. */
+static gboolean
+detail_add_person_add_mail_attrs (SoylentBrowser *browser,
+                                  const gchar *param_val)
+/*
+detail_add_person_add_attr (SoylentBrowser *browser, const gchar *attr_name,
+                            const gchar *param_val)
+                            */
+{
+  gboolean retval = FALSE;
+  GladeXML *wtree = NULL;
+  EVCard *e_vcard = NULL;
+
+  g_return_val_if_fail (browser != NULL, retval);
+  /* FIXME: uncomment once SoylentBrowser is a GObject:
+  g_return_val_if_fail (SOYLENT_IS_BROWSER (user_data), retval);
+   */
+  
+  wtree = soylent_browser_get_widget_tree (browser);
+
+  e_vcard = E_VCARD (soylent_browser_get_selected_person_e_contact (browser));
+  if (e_vcard && E_IS_VCARD (e_vcard))
+    {
+      EContactAddress *addr = NULL;
+
+      g_debug ("\n%s\n", e_vcard_to_string (e_vcard, EVC_FORMAT_VCARD_30));
+
+      addr = g_new (EContactAddress, 1);
+      if (addr)
+        {
+          GtkTextView *tv_add_street = NULL;
+          GtkTextBuffer *tb_add_street = NULL;
+          GtkEntry *entry_add_po = NULL;
+          GtkEntry *entry_add_locality = NULL;
+          GtkEntry *entry_add_region = NULL;
+          GtkEntry *entry_add_code = NULL;
+          GtkEntry *entry_add_country = NULL;
+          GtkTextIter start;
+          GtkTextIter end;
+          EVCardAttribute *attr = NULL;
+
+          /*
+          GtkEntry *entry_add = NULL;
+          const gchar *attr_val = NULL;
+          */
+
+          entry_add_po = GTK_ENTRY (glade_xml_get_widget
+                                                  (wtree,
+                                                   "entry_person_mail_add_po"));
+          entry_add_locality = GTK_ENTRY (glade_xml_get_widget
+                                            (wtree,
+                                             "entry_person_mail_add_locality"));
+          entry_add_region= GTK_ENTRY (glade_xml_get_widget
+                                            (wtree,
+                                             "entry_person_mail_add_region"));
+          entry_add_code = GTK_ENTRY (glade_xml_get_widget
+                                              (wtree,
+                                               "entry_person_mail_add_code"));
+          entry_add_country = GTK_ENTRY (glade_xml_get_widget
+                                            (wtree,
+                                             "entry_person_mail_add_country"));
+          tv_add_street = GTK_TEXT_VIEW (glade_xml_get_widget
+                                                (wtree,
+                                                 "tv_person_mail_add_street"));
+          tb_add_street = gtk_text_view_get_buffer (tv_add_street);
+          gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER (tb_add_street), &start,
+                                      &end);
+
+          /* next two are dummy - just so the e_contact_address_free() below
+           * doesn't cause a segfault */
+          addr->address_format = g_strdup ("");
+          addr->ext = g_strdup ("");
+          addr->po = g_strdup (gtk_entry_get_text (entry_add_po));
+          addr->street = g_strdup (gtk_text_buffer_get_text (tb_add_street,
+                                                             &start, &end,
+                                                             FALSE));
+          addr->locality = g_strdup (gtk_entry_get_text (entry_add_locality));
+          addr->region = g_strdup (gtk_entry_get_text (entry_add_region));
+          addr->country = g_strdup (gtk_entry_get_text (entry_add_country));
+          addr->code = g_strdup (gtk_entry_get_text (entry_add_code));
+
+      /*
+          entry_add = GTK_ENTRY (glade_xml_get_widget (wtree, "entry_detail_add"));
+          attr_val = gtk_entry_get_text (entry_add);      
+          */
+
+
+          attr = e_vcard_attribute_new (NULL, EVC_ADR);
+          if (attr)
+            {
+              EVCardAttributeParam *param = NULL;
+
+              if (param_val)
+                {
+                  param = e_vcard_attribute_param_new (EVC_TYPE);
+                  e_vcard_attribute_add_param_with_value (attr, param,
+                                                          param_val);
+                }
+
+              e_vcard_add_attribute_with_values (e_vcard, attr, addr->po, "",
+                                                 addr->street, addr->locality,
+                                                 addr->region, addr->code,
+                                                 addr->country, NULL);
+
+              /* XXX: do we need to free attr and param here? */
+              attr = e_vcard_attribute_new (NULL, "LABEL");
+              if (attr)
+                {
+                  if (param)
+                    {
+                      e_vcard_attribute_add_param
+                                        (attr,
+                                         e_vcard_attribute_param_copy (param));
+                    }
+                  e_vcard_add_attribute_with_value
+                                            (e_vcard, attr,
+                                             e_contact_address_to_label (addr));
+                }
+
+              e_contact_address_free (addr);
+
+
+
+
+      /* XXX: do we need to free attr and param here? */
+
+      /*
+              vcard = E_VCARD (soylent_browser_get_selected_person_e_contact (browser));
+              e_vcard_add_attribute_with_value (vcard, attr, attr_val);
+              */
+
+              retval = TRUE;
+            }
+        }
+    }
+
+  return retval;
+}
+
+#if 0
+/* Save a new mailing address for the person being edited
+ *
+ * Return TRUE for success, FALSE for any failure. */
+static gboolean
 detail_add_person_add_mail_attrs (SoylentBrowser *browser,
                                   const gchar *param_val)
 {
@@ -1696,6 +1852,11 @@
   GtkTextIter start;
   GtkTextIter end;
 
+  g_return_val_if_fail (browser != NULL, retval);
+  /* FIXME: uncomment once SoylentBrowser is a GObject:
+  g_return_val_if_fail (SOYLENT_IS_BROWSER (browser), NULL);
+   */
+
   wtree = soylent_browser_get_widget_tree (browser);
 
   attr = e_vcard_attribute_new (NULL, EVC_ADR);
@@ -1715,7 +1876,8 @@
                                               "entry_person_mail_add_country"));
   
   gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER (tb_add_street), &start, &end);
-  /* next two are dummy - just so the _free() below doesn't cause a segfault */
+  /* next two are dummy - just so the e_contact_address_free() below doesn't
+   * cause a segfault */
   addr->address_format  = g_strdup ("");
   addr->ext             = g_strdup ("");
   addr->po        = g_strdup (gtk_entry_get_text (entry_add_po));
@@ -1726,7 +1888,6 @@
   addr->country   = g_strdup (gtk_entry_get_text (entry_add_country));
   addr->code      = g_strdup (gtk_entry_get_text (entry_add_code));
 
-  /* TODO: Also need to set TYPE=VOICE for phone, etc. */
   param = e_vcard_attribute_param_new (EVC_TYPE);
 
   if (!param_val)
@@ -1757,6 +1918,7 @@
 
   /* XXX: do we need to free attr and param here? */
 }
+#endif
 
 /* Save edits to the current person's existing details */
 static gboolean

Modified: trunk/src/soylent-browser-person-view.h
==============================================================================
--- trunk/src/soylent-browser-person-view.h	(original)
+++ trunk/src/soylent-browser-person-view.h	Sat Mar  8 06:09:01 2008
@@ -70,7 +70,7 @@
 gchar* soylent_browser_detail_add_get_cbox_val (SoylentBrowser *browser,
                                                 const gchar *cbox_name);
 gchar* soylent_browser_detail_add_get_web_attr_name (SoylentBrowser *browser);
-void commit_detail_add (GtkWidget *widget, gpointer user_data);
+gboolean commit_detail_add (GtkWidget *widget, gpointer user_data);
 
 /* Setup/update sections of the person view UI with latest data from e-d-s */
 void btn_detail_add_update (GtkWidget *widget, gpointer user_data);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]