soylent r96 - trunk/src



Author: treitter
Date: Sat Mar  8 20:13:13 2008
New Revision: 96
URL: http://svn.gnome.org/viewvc/soylent?rev=96&view=rev

Log:
Clean up the code that re-initializes the Detail Add widgets

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

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 20:13:13 2008
@@ -763,14 +763,15 @@
  *
  * Return TRUE for success, FALSE for any failure */
 gboolean
-cbox_detail_add_setup (SoylentBrowser *browser)
+soylent_browser_person_detail_add_cbox_setup (SoylentBrowser *browser,
+                                              gboolean skip_domain_cbox)
 {
   const gchar *cbox_names[] = {"cbox_detail_domain", "cbox_detail_proto",
                                "cbox_detail_type", "cbox_detail_type_phone",
                                "cbox_detail_type_web",};
   gboolean retval = FALSE;
   GladeXML *wtree = NULL;
-  GtkComboBox *cbox_cur = NULL;
+  guint num_cbox = ARRAY_LEN (cbox_names);
   guint i = 0;
 
   g_return_val_if_fail (browser != NULL, retval);
@@ -784,32 +785,28 @@
   wtree = soylent_browser_get_widget_tree (browser);
 
   /*  Glade lets us set these values, but they aren't honored */
-  for (i = 0; i < (sizeof (cbox_names) / sizeof (const gchar*)); i++)
+  for (i = (skip_domain_cbox ? 1 : 0); i < num_cbox; i++)
     {
-      cbox_cur = GTK_COMBO_BOX (glade_xml_get_widget (wtree,
-                                                      cbox_names[i]));
-      if (cbox_cur && GTK_IS_COMBO_BOX (cbox_cur))
-        {
-          gtk_combo_box_set_active(cbox_cur, 0);
-        }
-      else
-        {
-          g_critical ("failed to get combo box widget: %s", cbox_names[i]);
-          retval = FALSE;
-        }
+      GtkComboBox *cbox_cur = NULL;
+
+      cbox_cur = GTK_COMBO_BOX (glade_xml_get_widget (wtree, cbox_names[i]));
+      gtk_combo_box_set_active (cbox_cur, 0);
     }
 
   return retval;
 }
 
 /* Update the visibility of the Detail Add UI section "Type" combo boxes, based
- * on the current "Domain" combo box selection */
-void
-cbox_detail_type_update (GtkWidget *widget, gpointer user_data)
+ * on the current "Domain" combo box selection
+ *
+ * Return TRUE for success, FALSE for any failure */
+gboolean
+soylent_browser_person_detail_add_cbox_update (GtkComboBox *cbox_domain,
+                                               gpointer user_data)
 {
+  gboolean retval = FALSE;
   SoylentBrowser *browser = NULL;
   GladeXML *wtree = NULL;
-  GtkComboBox *cbox_domain = NULL;
   GtkWidget *cbox_proto = NULL;
   GtkWidget *cbox_type = NULL;
   GtkWidget *cbox_type_phone = NULL;
@@ -818,66 +815,69 @@
   GtkWidget *align_detail_add = NULL;
   gchar *domain = 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), retval);
+   */
 
   browser = (SoylentBrowser*) user_data;
   wtree = soylent_browser_get_widget_tree (browser);
-  cbox_domain = GTK_COMBO_BOX (glade_xml_get_widget (wtree,
-                                                     "cbox_detail_domain")); 
+
   cbox_proto = glade_xml_get_widget (wtree, "cbox_detail_proto"); 
   cbox_type = glade_xml_get_widget (wtree, "cbox_detail_type"); 
   cbox_type_phone = glade_xml_get_widget (wtree, "cbox_detail_type_phone");
   cbox_type_web = glade_xml_get_widget (wtree, "cbox_detail_type_web");
-  vbox_entry_detail_add = glade_xml_get_widget (wtree,
-                                                "vbox_entry_detail_add");
+  vbox_entry_detail_add = glade_xml_get_widget (wtree, "vbox_entry_detail_add");
   align_detail_add = glade_xml_get_widget (wtree, "align_detail_mail");
-  domain = gtk_combo_box_get_active_text (cbox_domain);
 
-  /* FIXME: There's got to be a cleaner (yet readable) way of doing this;
-   * maybe make a struct to configure this stuff, fill one out for each domain,
-   * then run through the array as appropriate. Maybe goto? :) */
+  soylent_browser_person_detail_add_cbox_setup (browser, TRUE);
+
+  /* Hide all of the widgets up-front to simplify the logic below */
+  gtk_widget_hide (cbox_proto);
+  gtk_widget_hide (cbox_type);
+  gtk_widget_hide (cbox_type_phone);
+  gtk_widget_hide (cbox_type_web);
+  gtk_widget_hide (vbox_entry_detail_add);
+  gtk_widget_hide (align_detail_add);
+
+  domain = gtk_combo_box_get_active_text (cbox_domain);
   if (g_str_equal (domain, "Instant Messaging"))
     {
       gtk_widget_show (cbox_proto);
       gtk_widget_show (cbox_type);
-      gtk_widget_hide (cbox_type_phone);
-      gtk_widget_hide (cbox_type_web);
     }
   else if (g_str_equal (domain, "Phone"))
     {
-      gtk_widget_hide (cbox_proto);
-      gtk_widget_hide (cbox_type);
       gtk_widget_show (cbox_type_phone);
-      gtk_widget_hide (cbox_type_web);
     }
   else if (g_str_equal (domain, "Web Address"))
     {
-      gtk_widget_hide (cbox_proto);
-      gtk_widget_hide (cbox_type);
-      gtk_widget_hide (cbox_type_phone);
       gtk_widget_show (cbox_type_web);
     }
   else if (g_str_equal (domain, "Mailing Address"))
     {
-      gtk_widget_hide (cbox_proto);
       gtk_widget_show (cbox_type);
-      gtk_widget_hide (cbox_type_phone);
-      gtk_widget_hide (cbox_type_web);
+    }
+  else /* Email */
+    {
+      gtk_widget_show (cbox_type);
+    }
 
-      gtk_widget_hide (vbox_entry_detail_add);
+  /* Display either the mailing Address fields or the generic entry box,
+   * depending on whether we're entering a Mailing Address or not */
+  if (g_str_equal (domain, "Mailing Address"))
+    {
       gtk_widget_show (align_detail_add);
-
-      return;
     }
   else
     {
-      gtk_widget_hide (cbox_proto);
-      gtk_widget_show (cbox_type);
-      gtk_widget_hide (cbox_type_phone);
-      gtk_widget_hide (cbox_type_web);
+      gtk_widget_show (vbox_entry_detail_add);
     }
 
-    gtk_widget_show (vbox_entry_detail_add);
-    gtk_widget_hide (align_detail_add);
+  /* There isn't anything to check between the validation block and here */
+  retval = TRUE;
+
+  return retval;
 }
 
 /* Set the sensitivity of the Detail Add button based on whether there are
@@ -2139,7 +2139,7 @@
 
   entry_detail_add = GTK_ENTRY (glade_xml_get_widget (wtree,
                                                       "entry_detail_add"));
-  cbox_detail_add_setup (browser);
+  soylent_browser_person_detail_add_cbox_setup (browser, FALSE);
   gtk_entry_set_text (entry_detail_add, "");
 
   /* Set up 'changed' signals for the mail "Detail Add" fields */

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 20:13:13 2008
@@ -72,7 +72,11 @@
 
 /* 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);
-gboolean cbox_detail_add_setup (SoylentBrowser *browser);
-void cbox_detail_type_update (GtkWidget *widget, gpointer user_data);
+gboolean soylent_browser_person_detail_add_cbox_setup
+                                                    (SoylentBrowser *browser,
+                                                     gboolean skip_domain_cbox);
+gboolean soylent_browser_person_detail_add_cbox_update
+                                                (GtkComboBox *cbox_domain, 
+                                                        gpointer user_data);
 
 #endif /* _SOYLENT_BROWSER_PERSON_VIEW_H_ */

Modified: trunk/src/soylent-browser.c
==============================================================================
--- trunk/src/soylent-browser.c	(original)
+++ trunk/src/soylent-browser.c	Sat Mar  8 20:13:13 2008
@@ -1496,7 +1496,8 @@
         {
           gtk_combo_box_set_active (cbox_presence, 0);
 
-          retval = cbox_detail_add_setup (browser);
+          retval = soylent_browser_person_detail_add_cbox_setup (browser,
+                                                                 FALSE);
         }
       else
         {
@@ -1566,8 +1567,8 @@
 
       /* Adding new details to a person */
       /*   general */
-      {"cbox_detail_domain", "changed", cbox_detail_type_update, CB_DATA_SIMPLE,
-       browser},
+      {"cbox_detail_domain", "changed",
+       soylent_browser_person_detail_add_cbox_update, CB_DATA_SIMPLE, browser},
       {"entry_detail_add", "changed", btn_detail_add_update, CB_DATA_SIMPLE,
        browser},
       {"btn_detail_add", "clicked", soylent_browser_person_detail_add_commit,



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