soylent r91 - trunk/src



Author: treitter
Date: Fri Mar  7 06:36:31 2008
New Revision: 91
URL: http://svn.gnome.org/viewvc/soylent?rev=91&view=rev

Log:
continued commit_detail_add() cleanups

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	Fri Mar  7 06:36:31 2008
@@ -643,6 +643,8 @@
   return retval;
 }
 
+/* Return an uppercased copy of the contents of the given GtkComboBox or NULL
+ * for any failure. */
 gchar*
 soylent_browser_detail_add_get_cbox_val (SoylentBrowser *browser,
                                          const gchar *cbox_name)
@@ -668,6 +670,48 @@
   return retval;
 }
 
+/* Return a copy of the VCard name for the active Detail Add:Web GtkComboBox or
+ * NULL for any failure. */
+gchar*
+soylent_browser_detail_add_get_web_attr_name (SoylentBrowser *browser)
+{
+  const gchar *menu_strs[] = {"Home Page", "Blog", "Calendar", "Video Phone",
+                              NULL,};
+  const gchar *attr_strs[] = {EVC_URL, EVC_X_BLOG_URL, EVC_CALURI,
+                              EVC_X_VIDEO_URL, NULL,};
+
+  gchar *retval = NULL;
+  GladeXML *wtree = NULL;
+  GtkComboBox *cbox = NULL;
+  gchar *attr_val_menu = NULL;
+  guint i;
+
+  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);
+   */
+
+  wtree = soylent_browser_get_widget_tree (browser);
+  cbox = GTK_COMBO_BOX (glade_xml_get_widget (wtree, "cbox_detail_type_web"));
+  attr_val_menu = gtk_combo_box_get_active_text (cbox);
+  for (i = 0; menu_strs[i] != NULL; i++)
+    {
+      if (g_str_equal (attr_val_menu, menu_strs[i]))
+        {
+          retval = g_strdup (attr_strs[i]);
+        }
+    }
+
+  if (!retval)
+    {
+      g_warning ("Didn't find a supported VCard attr. name in menu");
+    }
+
+  g_free (attr_val_menu);
+
+  return retval;
+}
+
 /* FIXME: make this boolean */
 /* Commit any new details to the person being edited */
 void
@@ -680,6 +724,7 @@
   gchar *domain = NULL;
   gchar *attr_name = NULL;
   gchar *param_val = NULL;
+  SoylentPerson *person = NULL;
 
   browser = (SoylentBrowser*) user_data;
   wtree = soylent_browser_get_widget_tree (browser);
@@ -695,63 +740,32 @@
 
   if (g_str_equal (domain, "Email"))
     {
+      attr_name = g_strdup (EVC_EMAIL);
       param_val = soylent_browser_detail_add_get_cbox_val (browser,
                                                            "cbox_detail_type");
-      attr_name = g_strdup ("EMAIL");
     }
   else if (g_str_equal (domain, "Instant Messaging"))
     {
       gchar *proto = NULL;
 
-      param_val = soylent_browser_detail_add_get_cbox_val (browser,
-                                                           "cbox_detail_type");
       proto = soylent_browser_detail_add_get_cbox_val (browser,
                                                        "cbox_detail_proto");
       attr_name = g_strdup_printf ("X-%s", proto);
+      param_val = soylent_browser_detail_add_get_cbox_val (browser,
+                                                           "cbox_detail_type");
 
       g_free (proto);
     }
   else if (g_str_equal (domain, "Phone"))
     {
+      attr_name = g_strdup (EVC_TEL);
       param_val = soylent_browser_detail_add_get_cbox_val
                                                     (browser,
                                                      "cbox_detail_type_phone");
-      attr_name = g_strdup ("TEL");
     }
   else if (g_str_equal (domain, "Web Address"))
     {
-      /* FIXME: this doesn't seem to save them for some reason - maybe because
-       * the attributes don't have parameters? or it's getting botched or
-       * something */
-      const gchar *menu_strs[] = {"Home Page", "Blog", "Calendar",
-                                  "Video Phone", NULL,};
-      const gchar *param_strs[] = {"URL", "X-EVOLUTION-BLOG-URL", "CALURI",
-                                   "X-EVOLUTION-VIDEO-URL", NULL,};
-      GtkComboBox *cbox_type_web = NULL;
-      gchar *param_val_menu = NULL;
-      guint i;
-
-      cbox_type_web = GTK_COMBO_BOX (glade_xml_get_widget
-                                                      (wtree,
-                                                       "cbox_detail_type_web"));
-      param_val_menu = gtk_combo_box_get_active_text (cbox_type_web);
-
-      for (i = 0; menu_strs[i] != NULL; i++)
-        {
-          if (g_str_equal (param_val_menu, menu_strs[i]))
-            {
-              param_val = g_ascii_strup (param_strs[i], -1);
-            }
-
-          g_print ("\nparam_val: '%s'\n", param_val);
-        }
-
-      if (!param_val)
-        {
-          g_warning ("Didn't find a supported VCard parameter type in menu");
-        }
-
-      g_free (param_val_menu);
+      attr_name = soylent_browser_detail_add_get_web_attr_name (browser);
     }
   else if (g_str_equal (domain, "Mailing Address"))
     {
@@ -765,22 +779,23 @@
 
   if (attr_name)
     {
-      /* FIXME: Please, mommy, make the bad hacker stop! */
       if (g_str_equal (attr_name, EVC_ADR))
         {
+          /* FIXME: check the return value */
           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);
         }
     }
 
   /* Make sure we actually commit these changes back */
   soylent_browser_person_view_save_changes (NULL, browser);
-  soylent_browser_person_view_update (browser,
-                                      soylent_browser_get_selected_person
-                                                                    (browser));
+
+  person = soylent_browser_get_selected_person (browser);
+  soylent_browser_person_view_update (browser, person);
 
   gtk_entry_set_text (entry_add, "");
   gtk_widget_set_sensitive (widget, FALSE);
@@ -1615,9 +1630,6 @@
   gboolean retval = FALSE;
   EVCard *vcard = NULL;
   EVCardAttribute *attr = NULL;
-  EVCardAttributeParam *param = NULL;
-  GtkEntry *entry_add = NULL;
-  const gchar *attr_val = NULL;
   GladeXML *wtree = NULL;
 
   g_return_val_if_fail (browser != NULL, retval);
@@ -1625,33 +1637,41 @@
   g_return_val_if_fail (SOYLENT_IS_BROWSER (user_data), NULL);
    */
   g_return_val_if_fail (attr_name != NULL, retval);
-  g_return_val_if_fail (param_val != NULL, retval);
 
   wtree = soylent_browser_get_widget_tree (browser);
 
   attr = e_vcard_attribute_new (NULL, attr_name);
-  entry_add = GTK_ENTRY (glade_xml_get_widget (wtree, "entry_detail_add"));
-  attr_val = gtk_entry_get_text (entry_add);      
-  /* TODO: Also need to set TYPE=VOICE for phone, etc. */
-  param = e_vcard_attribute_param_new (EVC_TYPE);
-
-  /* FIXME: this special-case code is really ugly; push it into the appropriate
-   * detail_add_get_attr_val_*() functions */
-  /*
-  if (!param_val)
+  if (attr)
     {
-      GtkComboBox *cbox_type = GTK_COMBO_BOX (glade_xml_get_widget (wtree,
-                                                          "cbox_detail_type"));
-      gchar *param_val_lc = gtk_combo_box_get_active_text (cbox_type);
-      param_val = g_ascii_strup (param_val_lc, -1);
+      GtkEntry *entry_add = NULL;
+      const gchar *attr_val = NULL;
 
-      g_free (param_val_lc);
-    }
-    */
+      entry_add = GTK_ENTRY (glade_xml_get_widget (wtree, "entry_detail_add"));
+      attr_val = gtk_entry_get_text (entry_add);      
 
-  e_vcard_attribute_add_param_with_value (attr, param, param_val);
-  vcard = E_VCARD (soylent_browser_get_selected_person_e_contact (browser));
-  e_vcard_add_attribute_with_value (vcard, attr, attr_val);
+      if (param_val)
+        {
+          EVCardAttributeParam *param = NULL;
+
+          param = e_vcard_attribute_param_new (EVC_TYPE);
+          e_vcard_attribute_add_param_with_value (attr, param, param_val);
+
+          /* Mimicking the way Evolution sets up phone VCard entries (for better
+           * or worse...) */
+          if (g_str_equal (attr_name, EVC_TEL)
+              && (g_str_equal (param_val, "HOME")
+                  || g_str_equal (param_val, "WORK")))
+            {
+              param = e_vcard_attribute_param_new (EVC_TYPE);
+              e_vcard_attribute_add_param_with_value (attr, param, "VOICE");
+            }
+        }
+
+      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;
 }

Modified: trunk/src/soylent-browser-person-view.h
==============================================================================
--- trunk/src/soylent-browser-person-view.h	(original)
+++ trunk/src/soylent-browser-person-view.h	Fri Mar  7 06:36:31 2008
@@ -69,7 +69,8 @@
 /* Committing changes from the above functions */
 gchar* soylent_browser_detail_add_get_cbox_val (SoylentBrowser *browser,
                                                 const gchar *cbox_name);
-void commit_detail_add        (GtkWidget *widget, gpointer user_data);
+gchar* soylent_browser_detail_add_get_web_attr_name (SoylentBrowser *browser);
+void 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]