]> git.0d.be Git - empathy.git/commitdiff
Re-wrote the UI of the importer dialog. (Jonny Lamb)
authorJonny Lamb <jonny.lamb@collabora.co.uk>
Fri, 17 Oct 2008 12:46:45 +0000 (12:46 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Fri, 17 Oct 2008 12:46:45 +0000 (12:46 +0000)
This UI currently does not work with the backend.

Signed-off-by: Jonny Lamb <jonny.lamb@collabora.co.uk>
svn path=/trunk/; revision=1611

src/empathy-import-dialog.c
src/empathy-import-dialog.glade [new file with mode: 0644]

index b14e224078e4fe3e3443c7b668eee8494d22421b..9aae07a96d2b4eca2350b1848258954fa566ef5a 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <glib.h>
 #include <gtk/gtk.h>
+#include <glade/glade.h>
 #include <glib/gi18n.h>
 
 #include <libxml/parser.h>
@@ -37,6 +38,9 @@
 
 #define DEBUG_FLAG EMPATHY_DEBUG_OTHER
 #include <libempathy/empathy-debug.h>
+#include <libempathy/empathy-utils.h>
+
+#include <libempathy-gtk/empathy-ui-utils.h>
 
 /* Pidgin to MC map */
 typedef struct
@@ -93,8 +97,9 @@ typedef struct
 typedef struct
 {
   GtkWidget *window;
-  GtkWidget *label_select;
-  GtkWidget *combo;
+  GtkWidget *treeview;
+  GtkWidget *button_ok;
+  GtkWidget *button_cancel;
 } EmpathyImportDialog;
 
 #define PIDGIN_ACCOUNT_TAG_NAME "name"
@@ -106,6 +111,29 @@ typedef struct
 #define PIDGIN_PROTOCOL_BONJOUR "bonjour"
 #define PIDGIN_PROTOCOL_NOVELL "novell"
 
+enum
+{
+  COL_IMPORT = 0,
+  COL_PROTOCOL,
+  COL_NAME,
+  COL_SOURCE,
+  COL_ACCOUNT,
+  COL_COUNT
+};
+
+
+static void import_dialog_add_setting (GHashTable *settings,
+    gchar *key, gpointer value, EmpathyImportSettingType  type);
+static gboolean import_dialog_add_account (gchar *protocol_name,
+    GHashTable *settings);
+static void import_dialog_pidgin_parse_setting (gchar *protocol,
+    xmlNodePtr setting, GHashTable *settings);
+static void import_dialog_pidgin_import_accounts ();
+static void import_dialog_button_ok_clicked_cb (GtkButton *button,
+    EmpathyImportDialog *dialog);
+static void import_dialog_button_cancel_clicked_cb (GtkButton *button,
+    EmpathyImportDialog *dialog);
+
 static void
 import_dialog_account_data_free (AccountData *data)
 {
@@ -378,28 +406,152 @@ OUT:
 }
 
 static void
-import_dialog_response_cb (GtkDialog *dialog_window,
-                           gint response,
-                           EmpathyImportDialog *dialog)
+import_dialog_button_ok_clicked_cb (GtkButton *button,
+                                    EmpathyImportDialog *dialog)
 {
-  gchar *from = NULL;
-  if (response == GTK_RESPONSE_OK)
-    {
-      from = gtk_combo_box_get_active_text (GTK_COMBO_BOX (dialog->combo));
+  if (FALSE)
+    import_dialog_pidgin_import_accounts ();
+
+  DEBUG ("ok clicked");
+
+  gtk_widget_hide (GTK_WIDGET (dialog->window));
+}
+
+static void
+import_dialog_button_cancel_clicked_cb (GtkButton *button,
+                                        EmpathyImportDialog *dialog)
+{
+  gtk_widget_hide (GTK_WIDGET (dialog->window));
+}
+
+static void
+import_dialog_add_accounts (EmpathyImportDialog *dialog)
+{
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+  GList *accounts, *account;
 
-      if (strcmp (from, "Pidgin") == 0)
-        import_dialog_pidgin_import_accounts ();
+  model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview));
 
-      g_free (from);
+  accounts = g_list_alloc ();
+
+  for (account = accounts; account; account = account->next)
+    {
+      /* Add the accounts here. */
     }
 
-  gtk_widget_hide (GTK_WIDGET (dialog_window));
+  /* A sample item for testing. */
+  gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+
+  gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+      COL_IMPORT, TRUE,
+      COL_PROTOCOL, "Jabber",
+      COL_NAME, "foo@gmail.com",
+      COL_SOURCE, "Pidgin",
+      COL_ACCOUNT, NULL,
+      -1);
+
+  g_list_free (accounts);
+}
+
+static void
+import_dialog_cell_toggled_cb (GtkCellRendererToggle *cell_renderer,
+                               const gchar *path_str,
+                               EmpathyImportDialog *dialog)
+{
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+  GtkTreePath *path;
+
+  path = gtk_tree_path_new_from_string (path_str);
+  model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview));
+
+  gtk_tree_model_get_iter (model, &iter, path);
+
+  gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+      COL_IMPORT, !gtk_cell_renderer_toggle_get_active (cell_renderer),
+      -1);
+
+  gtk_tree_path_free (path);
+}
+
+static void
+import_dialog_set_up_account_list (EmpathyImportDialog *dialog)
+{
+  GtkListStore *store;
+  GtkTreeView *view;
+  GtkTreeViewColumn *column;
+  GtkCellRenderer *cell;
+
+  store = gtk_list_store_new (COL_COUNT, G_TYPE_BOOLEAN, G_TYPE_STRING,
+      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_HASH_TABLE);
+
+  gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->treeview),
+      GTK_TREE_MODEL (store));
+
+  g_object_unref (store);
+
+  view = GTK_TREE_VIEW (dialog->treeview);
+  gtk_tree_view_set_headers_visible (view, TRUE);
+
+  /* Import column */
+  cell = gtk_cell_renderer_toggle_new ();
+  gtk_tree_view_insert_column_with_attributes (view, -1,
+      _("Import"), cell,
+      "active", COL_IMPORT,
+      NULL);
+
+  g_signal_connect (cell, "toggled",
+      G_CALLBACK (import_dialog_cell_toggled_cb), dialog);
+
+  /* Protocol column */
+  column = gtk_tree_view_column_new ();
+  gtk_tree_view_column_set_title (column, _("Protocol"));
+  gtk_tree_view_column_set_expand (column, TRUE);
+  gtk_tree_view_append_column (view, column);
+
+  cell = gtk_cell_renderer_text_new ();
+  g_object_set (cell,
+      "editable", FALSE,
+      NULL);
+  gtk_tree_view_column_pack_start (column, cell, TRUE);
+  gtk_tree_view_column_add_attribute (column, cell, "text", COL_PROTOCOL);
+
+  /* Account column */
+  column = gtk_tree_view_column_new ();
+  gtk_tree_view_column_set_title (column, _("Account"));
+  gtk_tree_view_column_set_expand (column, TRUE);
+  gtk_tree_view_append_column (view, column);
+
+  cell = gtk_cell_renderer_text_new ();
+  g_object_set (cell,
+      "editable", FALSE,
+      NULL);
+  gtk_tree_view_column_pack_start (column, cell, TRUE);
+  gtk_tree_view_column_add_attribute (column, cell, "text", COL_NAME);
+
+  /* Source column */
+  column = gtk_tree_view_column_new ();
+  gtk_tree_view_column_set_title (column, _("Source"));
+  gtk_tree_view_column_set_expand (column, TRUE);
+  gtk_tree_view_append_column (view, column);
+
+  cell = gtk_cell_renderer_text_new ();
+  g_object_set (cell,
+      "editable", FALSE,
+      NULL);
+  gtk_tree_view_column_pack_start (column, cell, TRUE);
+  gtk_tree_view_column_add_attribute (column, cell, "text", COL_SOURCE);
+
+  import_dialog_add_accounts (dialog);
 }
 
 void
 empathy_import_dialog_show (GtkWindow *parent)
 {
   static EmpathyImportDialog *dialog = NULL;
+  GladeXML *glade;
+  gchar *filename;
 
   if (dialog)
     {
@@ -409,32 +561,26 @@ empathy_import_dialog_show (GtkWindow *parent)
 
   dialog = g_slice_new0 (EmpathyImportDialog);
 
-  dialog->window = gtk_dialog_new_with_buttons (_("Import accounts"),
+  filename = empathy_file_lookup ("empathy-import-dialog.glade", "src");
+  glade = empathy_glade_get_file (filename,
+      "import_dialog",
       NULL,
-      GTK_DIALOG_MODAL,
-      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-      GTK_STOCK_OK, GTK_RESPONSE_OK,
+      "import_dialog", &dialog->window,
+      "treeview", &dialog->treeview,
       NULL);
 
-  g_signal_connect (G_OBJECT (dialog->window), "response",
-      G_CALLBACK (import_dialog_response_cb),
-      dialog);
-
-  dialog->label_select = gtk_label_new (
-      _("Select the program to import accounts from:"));
-  gtk_widget_show (dialog->label_select);
-
-  dialog->combo = gtk_combo_box_new_text ();
-  gtk_widget_show (dialog->combo);
+  empathy_glade_connect (glade,
+      dialog,
+      "button_ok", "clicked", import_dialog_button_ok_clicked_cb,
+      "button_cancel", "clicked", import_dialog_button_cancel_clicked_cb,
+      NULL);
 
-  gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->combo), "Pidgin");
-  gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->combo), 0);
+  import_dialog_set_up_account_list (dialog);
 
-  gtk_box_pack_start_defaults (GTK_BOX (GTK_DIALOG (dialog->window)->vbox),
-      dialog->label_select);
+  g_object_add_weak_pointer (G_OBJECT (dialog->window), (gpointer) &dialog);
 
-  gtk_box_pack_start_defaults (GTK_BOX (GTK_DIALOG (dialog->window)->vbox),
-      dialog->combo);
+  g_free (filename);
+  g_object_unref (glade);
 
   if (parent)
     gtk_window_set_transient_for (GTK_WINDOW (dialog->window), parent);
diff --git a/src/empathy-import-dialog.glade b/src/empathy-import-dialog.glade
new file mode 100644 (file)
index 0000000..374bfe5
--- /dev/null
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--Generated with glade3 3.4.5 on Fri Oct  3 19:30:53 2008 -->
+<glade-interface>
+  <widget class="GtkDialog" id="import_dialog">
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">Import Accounts</property>
+    <property name="modal">True</property>
+    <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+    <property name="has_separator">False</property>
+    <child internal-child="vbox">
+      <widget class="GtkVBox" id="dialog-vbox1">
+        <property name="visible">True</property>
+        <property name="spacing">2</property>
+        <child>
+          <widget class="GtkScrolledWindow" id="scrolledwindow17">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+            <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+            <property name="shadow_type">GTK_SHADOW_IN</property>
+            <child>
+              <widget class="GtkTreeView" id="treeview">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="enable_search">False</property>
+              </widget>
+            </child>
+          </widget>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <widget class="GtkHButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="layout_style">GTK_BUTTONBOX_END</property>
+            <child>
+              <widget class="GtkButton" id="button_cancel">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="label" translatable="yes">gtk-cancel</property>
+                <property name="use_stock">True</property>
+                <property name="response_id">0</property>
+              </widget>
+            </child>
+            <child>
+              <widget class="GtkButton" id="button_ok">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="label" translatable="yes">gtk-ok</property>
+                <property name="use_stock">True</property>
+                <property name="response_id">0</property>
+              </widget>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">GTK_PACK_END</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+</glade-interface>