[empathy] account-assistant: add a page to configure the salut account



commit 9a0777b347b50e56840190472cda3d979c6f3045
Author: Guillaume Desmottes <guillaume desmottes collabora co uk>
Date:   Wed Jan 20 14:58:14 2010 +0000

    account-assistant: add a page to configure the salut account
    
    This will let user filling his details if we failed to fetch them and so give
    him a chance to actually create the Salut account (#596575).

 src/empathy-account-assistant.c |  136 +++++++++++++++++++++++++++++++++++----
 1 files changed, 124 insertions(+), 12 deletions(-)
---
diff --git a/src/empathy-account-assistant.c b/src/empathy-account-assistant.c
index a80e47c..dd437f6 100644
--- a/src/empathy-account-assistant.c
+++ b/src/empathy-account-assistant.c
@@ -57,6 +57,7 @@ enum {
   PAGE_INTRO = 0,
   PAGE_IMPORT = 1,
   PAGE_ENTER_CREATE = 2,
+  PAGE_SALUT = 3,
 };
 
 enum {
@@ -82,6 +83,11 @@ typedef struct {
   /* import page */
   EmpathyImportWidget *iw;
 
+  /* salut page */
+  GtkWidget *salut_page;
+  EmpathyAccountSettings *salut_settings;
+  GtkWidget *salut_account_widget;
+
   GtkWindow *parent_window;
 
   gboolean dispose_run;
@@ -461,8 +467,10 @@ account_assistant_page_forward_func (gint current_page,
       if (priv->first_resp == RESPONSE_ENTER_ACCOUNT ||
           priv->first_resp == RESPONSE_CREATE_ACCOUNT)
         retval = PAGE_ENTER_CREATE;
-      if (priv->first_resp == RESPONSE_IMPORT)
+      else if (priv->first_resp == RESPONSE_IMPORT)
         retval = PAGE_IMPORT;
+      else if (priv->first_resp == RESPONSE_SALUT_ONLY)
+        retval = PAGE_SALUT;
     }
 
   if (current_page == PAGE_IMPORT ||
@@ -486,22 +494,11 @@ account_assistant_radio_choice_toggled_cb (GtkToggleButton *button,
 {
   FirstPageResponse response;
   EmpathyAccountAssistantPriv *priv = GET_PRIV (self);
-  GtkWidget *intro_page;
 
   response = GPOINTER_TO_INT (g_object_get_data
       (G_OBJECT (button), "response"));
 
   priv->first_resp = response;
-
-  intro_page = gtk_assistant_get_nth_page (GTK_ASSISTANT (self),
-      PAGE_INTRO);
-
-  if (response == RESPONSE_SALUT_ONLY)
-    gtk_assistant_set_page_type (GTK_ASSISTANT (self), intro_page,
-        GTK_ASSISTANT_PAGE_SUMMARY);
-  else
-    gtk_assistant_set_page_type (GTK_ASSISTANT (self), intro_page,
-        GTK_ASSISTANT_PAGE_INTRO);
 }
 
 static GtkWidget *
@@ -905,6 +902,113 @@ empathy_account_assistant_class_init (EmpathyAccountAssistantClass *klass)
 }
 
 static void
+create_salut_check_box_toggled_cb (GtkWidget *widget,
+    EmpathyAccountAssistant *self)
+{
+  EmpathyAccountAssistantPriv *priv = GET_PRIV (self);
+  gboolean sensitive;
+  gboolean page_valid;
+
+  sensitive = !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+
+  gtk_widget_set_sensitive (priv->salut_account_widget, sensitive);
+
+  if (!sensitive)
+    {
+      page_valid = TRUE;
+    }
+  else
+    {
+      /* page is complete if the account is valid */
+      page_valid = empathy_account_settings_is_valid (priv->salut_settings);
+    }
+
+  gtk_assistant_set_page_complete (GTK_ASSISTANT (self), priv->salut_page,
+      page_valid);
+}
+
+static void
+account_assistant_salut_handle_apply_cb (EmpathyAccountWidget *widget_object,
+    gboolean is_valid,
+    EmpathyAccountAssistant *self)
+{
+  EmpathyAccountAssistantPriv *priv = GET_PRIV (self);
+
+  gtk_assistant_set_page_complete (GTK_ASSISTANT (self),
+      priv->salut_page, is_valid);
+}
+
+static GtkWidget *
+account_assistant_build_salut_page (EmpathyAccountAssistant *self)
+{
+  EmpathyAccountAssistantPriv *priv = GET_PRIV (self);
+  GtkWidget *main_vbox, *hbox_1, *w;
+  GdkPixbuf *pix;
+  EmpathyAccountSettings *settings;
+  GtkWidget *account_widget;
+  EmpathyAccountWidget *widget_object;
+
+  main_vbox = gtk_vbox_new (FALSE, 12);
+  gtk_widget_show (main_vbox);
+  gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12);
+
+  hbox_1 = gtk_hbox_new (FALSE, 12);
+  gtk_box_pack_start (GTK_BOX (main_vbox), hbox_1, TRUE, TRUE, 0);
+  gtk_widget_show (hbox_1);
+
+  w = gtk_label_new (
+      _("Empathy can automatically discover and chat with the people "
+        "connected on the same network as you. "
+        "If you want to use this feature, please check that the "
+        "details below are correct. "
+        "You can easily change these details later or disable this feature "
+        "by using the 'Accounts' dialog."));
+  gtk_misc_set_alignment (GTK_MISC (w), 0, 0.5);
+  gtk_label_set_line_wrap (GTK_LABEL (w), TRUE);
+  gtk_box_pack_start (GTK_BOX (hbox_1), w, FALSE, FALSE, 0);
+  gtk_widget_show (w);
+
+  pix = empathy_pixbuf_from_icon_name_sized ("im-local-xmpp", 80);
+  w = gtk_image_new_from_pixbuf (pix);
+  gtk_box_pack_start (GTK_BOX (hbox_1), w, FALSE, FALSE, 6);
+  gtk_widget_show (w);
+
+  g_object_unref (pix);
+
+  /* TODO: display a message if Salut is not installed */
+
+  w = gtk_check_button_new_with_label (
+      _("I don't want to enable this feature for now"));
+  gtk_box_pack_start (GTK_BOX (main_vbox), w, FALSE, FALSE, 0);
+  g_signal_connect (w, "toggled",
+      G_CALLBACK (create_salut_check_box_toggled_cb), self);
+  gtk_widget_show (w);
+
+  w = gtk_alignment_new (0, 0, 0, 0);
+  gtk_alignment_set_padding (GTK_ALIGNMENT (w), 0, 0, 12, 0);
+  gtk_box_pack_start (GTK_BOX (main_vbox), w, TRUE, TRUE, 0);
+  gtk_widget_show (w);
+
+  /* TODO: use this setting to create the account */
+  settings = create_salut_account_settings ();
+
+  widget_object = empathy_account_widget_new_for_protocol (settings, TRUE);
+  account_widget = empathy_account_widget_get_widget (widget_object);
+
+  priv->salut_settings = settings;
+  priv->salut_account_widget = account_widget;
+
+  g_signal_connect (widget_object, "handle-apply",
+      G_CALLBACK (account_assistant_salut_handle_apply_cb), self);
+
+  gtk_box_pack_start (GTK_BOX (main_vbox), account_widget,
+      FALSE, FALSE, 0);
+  gtk_widget_show (account_widget);
+
+  return main_vbox;
+}
+
+static void
 empathy_account_assistant_init (EmpathyAccountAssistant *self)
 {
   EmpathyAccountAssistantPriv *priv;
@@ -944,6 +1048,14 @@ empathy_account_assistant_init (EmpathyAccountAssistant *self)
   gtk_assistant_set_page_type (assistant, page, GTK_ASSISTANT_PAGE_CONFIRM);
   priv->enter_or_create_page = page;
 
+  /* fourth page (salut details) */
+  page = account_assistant_build_salut_page (self);
+  gtk_assistant_append_page (assistant, page);
+  gtk_assistant_set_page_title (assistant, page,
+      _("Please enter personal details"));
+  gtk_assistant_set_page_type (assistant, page, GTK_ASSISTANT_PAGE_CONFIRM);
+  priv->salut_page = page;
+
   gtk_window_set_resizable (GTK_WINDOW (self), FALSE);
 }
 



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