aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--widgets/misc/e-import-assistant.c287
1 files changed, 153 insertions, 134 deletions
diff --git a/widgets/misc/e-import-assistant.c b/widgets/misc/e-import-assistant.c
index 4db3d55353..8815fd9228 100644
--- a/widgets/misc/e-import-assistant.c
+++ b/widgets/misc/e-import-assistant.c
@@ -31,7 +31,6 @@
#include <gdk/gdkkeysyms.h>
#include "e-util/e-error.h"
-#include "e-util/e-icon-factory.h"
#include "e-util/e-import.h"
#include "e-util/e-util-private.h"
@@ -45,7 +44,6 @@ typedef struct _ImportTypePage ImportTypePage;
typedef struct _ImportSelectionPage ImportSelectionPage;
struct _ImportFilePage {
- GtkWidget *vbox;
GtkWidget *filename;
GtkWidget *filetype;
@@ -54,20 +52,15 @@ struct _ImportFilePage {
};
struct _ImportDestinationPage {
- GtkWidget *vbox;
-
GtkWidget *control;
};
struct _ImportTypePage {
- GtkWidget *vbox;
GtkWidget *intelligent;
GtkWidget *file;
};
struct _ImportSelectionPage {
- GtkWidget *vbox;
-
GSList *importers;
GSList *current;
EImportTargetHome *target;
@@ -90,6 +83,15 @@ struct _EImportAssistantPrivate {
};
enum {
+ PAGE_START,
+ PAGE_INTELI_OR_DIRECT,
+ PAGE_INTELI_SOURCE,
+ PAGE_FILE_CHOOSE,
+ PAGE_FILE_DEST,
+ PAGE_FINISH
+};
+
+enum {
FINISHED,
LAST_SIGNAL
};
@@ -175,28 +177,31 @@ filename_changed (GtkWidget *widget,
}
}
- gtk_assistant_set_page_complete (assistant, page->vbox, fileok);
+ widget = gtk_assistant_get_nth_page (assistant, PAGE_FILE_CHOOSE);
+ gtk_assistant_set_page_complete (assistant, widget, fileok);
}
static void
-filetype_changed_cb (GtkWidget *combobox,
+filetype_changed_cb (GtkComboBox *combo_box,
GtkAssistant *assistant)
{
EImportAssistantPrivate *priv;
+ GtkTreeModel *model;
GtkTreeIter iter;
priv = E_IMPORT_ASSISTANT_GET_PRIVATE (assistant);
- g_return_if_fail (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combobox), &iter));
+ g_return_if_fail (gtk_combo_box_get_active_iter (combo_box, &iter));
- gtk_tree_model_get (gtk_combo_box_get_model (GTK_COMBO_BOX (combobox)), &iter, 2, &priv->file_page.importer, -1);
+ model = gtk_combo_box_get_model (combo_box);
+ gtk_tree_model_get (model, &iter, 2, &priv->file_page.importer, -1);
filename_changed (priv->file_page.filename, assistant);
}
-static void
+static GtkWidget *
import_assistant_file_page_init (EImportAssistant *import_assistant)
{
- ImportFilePage *page;
+ GtkWidget *page;
GtkWidget *label;
GtkWidget *container;
GtkWidget *widget;
@@ -205,14 +210,11 @@ import_assistant_file_page_init (EImportAssistant *import_assistant)
const gchar *text;
gint row = 0;
- page = &import_assistant->priv->file_page;
-
- widget = gtk_vbox_new (FALSE, 6);
- gtk_container_set_border_width (GTK_CONTAINER (widget), 12);
- page->vbox = widget;
- gtk_widget_show (widget);
+ page = gtk_vbox_new (FALSE, 6);
+ gtk_container_set_border_width (GTK_CONTAINER (page), 12);
+ gtk_widget_show (page);
- container = widget;
+ container = page;
text = _("Choose the file that you want to import into Evolution, "
"and select what type of file it is from the list.");
@@ -246,7 +248,7 @@ import_assistant_file_page_init (EImportAssistant *import_assistant)
gtk_table_attach (
GTK_TABLE (container), widget, 1, 2,
row, row + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- page->filename = widget;
+ import_assistant->priv->file_page.filename = widget;
gtk_widget_show (widget);
g_signal_connect (
@@ -271,7 +273,7 @@ import_assistant_file_page_init (EImportAssistant *import_assistant)
gtk_table_attach (
GTK_TABLE (container), widget,
1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- page->filetype = widget;
+ import_assistant->priv->file_page.filetype = widget;
gtk_widget_show (widget);
g_object_unref (store);
@@ -280,24 +282,23 @@ import_assistant_file_page_init (EImportAssistant *import_assistant)
gtk_cell_layout_set_attributes (
GTK_CELL_LAYOUT (widget), cell,
"text", 0, "sensitive", 1, NULL);
+
+ return page;
}
-static void
+static GtkWidget *
import_assistant_destination_page_init (EImportAssistant *import_assistant)
{
- ImportDestinationPage *page;
+ GtkWidget *page;
GtkWidget *container;
GtkWidget *widget;
const gchar *text;
- page = &import_assistant->priv->destination_page;
-
- widget = gtk_vbox_new (FALSE, 6);
- gtk_container_set_border_width (GTK_CONTAINER (widget), 12);
- page->vbox = widget;
- gtk_widget_show (widget);
+ page = gtk_vbox_new (FALSE, 6);
+ gtk_container_set_border_width (GTK_CONTAINER (page), 12);
+ gtk_widget_show (page);
- container = widget;
+ container = page;
text = _("Choose the destination for this import");
@@ -305,24 +306,24 @@ import_assistant_destination_page_init (EImportAssistant *import_assistant)
gtk_label_set_line_wrap (GTK_LABEL (widget), TRUE);
gtk_box_pack_start (GTK_BOX (container), widget, FALSE, TRUE, 0);
gtk_widget_show (widget);
+
+ return page;
}
-static void
+static GtkWidget *
import_assistant_type_page_init (EImportAssistant *import_assistant)
{
- ImportTypePage *page;
+ GtkRadioButton *radio_button;
+ GtkWidget *page;
GtkWidget *container;
GtkWidget *widget;
const gchar *text;
- page = &import_assistant->priv->type_page;
+ page = gtk_vbox_new (FALSE, 6);
+ gtk_container_set_border_width (GTK_CONTAINER (page), 12);
+ gtk_widget_show (page);
- widget = gtk_vbox_new (FALSE, 6);
- gtk_container_set_border_width (GTK_CONTAINER (widget), 12);
- page->vbox = widget;
- gtk_widget_show (widget);
-
- container = widget;
+ container = page;
text = _("Choose the type of importer to run:");
@@ -334,33 +335,33 @@ import_assistant_type_page_init (EImportAssistant *import_assistant)
widget = gtk_radio_button_new_with_mnemonic (
NULL, _("Import data and settings from _older programs"));
gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
- page->intelligent = widget;
+ import_assistant->priv->type_page.intelligent = widget;
gtk_widget_show (widget);
+ radio_button = GTK_RADIO_BUTTON (widget);
+
widget = gtk_radio_button_new_with_mnemonic_from_widget (
- GTK_RADIO_BUTTON (page->intelligent),
- _("Import a _single file"));
+ radio_button, _("Import a _single file"));
gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
- page->file = widget;
+ import_assistant->priv->type_page.file = widget;
gtk_widget_show (widget);
+
+ return page;
}
-static void
+static GtkWidget *
import_assistant_selection_page_init (EImportAssistant *import_assistant)
{
- ImportSelectionPage *page;
+ GtkWidget *page;
GtkWidget *container;
GtkWidget *widget;
const gchar *text;
- page = &import_assistant->priv->selection_page;
-
- widget = gtk_vbox_new (FALSE, 6);
- gtk_container_set_border_width (GTK_CONTAINER (widget), 12);
- page->vbox = widget;
- gtk_widget_show (widget);
+ page = gtk_vbox_new (FALSE, 6);
+ gtk_container_set_border_width (GTK_CONTAINER (page), 12);
+ gtk_widget_show (page);
- container = widget;
+ container = page;
text = _("Please select the information "
"that you would like to import:");
@@ -373,10 +374,13 @@ import_assistant_selection_page_init (EImportAssistant *import_assistant)
widget = gtk_hseparator_new ();
gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
gtk_widget_show (widget);
+
+ return page;
}
static void
-prepare_intelligent_page (GtkAssistant *assistant)
+prepare_intelligent_page (GtkAssistant *assistant,
+ GtkWidget *vbox)
{
EImportAssistantPrivate *priv;
GSList *l;
@@ -388,7 +392,7 @@ prepare_intelligent_page (GtkAssistant *assistant)
page = &priv->selection_page;
if (page->target != NULL) {
- gtk_assistant_set_page_complete (assistant, page->vbox, FALSE);
+ gtk_assistant_set_page_complete (assistant, vbox, FALSE);
return;
}
@@ -412,11 +416,10 @@ prepare_intelligent_page (GtkAssistant *assistant)
widget = gtk_label_new (text);
gtk_label_set_line_wrap (GTK_LABEL (widget), TRUE);
- gtk_box_pack_start (
- GTK_BOX (page->vbox), widget, FALSE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, TRUE, 0);
gtk_widget_show (widget);
- gtk_assistant_set_page_complete (assistant, page->vbox, FALSE);
+ gtk_assistant_set_page_complete (assistant, vbox, FALSE);
return;
}
@@ -436,18 +439,22 @@ prepare_intelligent_page (GtkAssistant *assistant)
gtk_widget_show (label);
g_free (str);
- gtk_misc_set_alignment ((GtkMisc *)label, 0, .5);
+ gtk_misc_set_alignment (GTK_MISC (label), 0, .5);
- gtk_table_attach ((GtkTable *)table, label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach (
+ GTK_TABLE (table), label,
+ 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
if (w)
- gtk_table_attach ((GtkTable *)table, w, 1, 2, row, row+1, GTK_FILL, 0, 3, 0);
+ gtk_table_attach (
+ GTK_TABLE (table), w,
+ 1, 2, row, row+1, GTK_FILL, 0, 3, 0);
row++;
}
gtk_widget_show (table);
- gtk_box_pack_start (GTK_BOX (page->vbox), table, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);
- gtk_assistant_set_page_complete (assistant, page->vbox, TRUE);
+ gtk_assistant_set_page_complete (assistant, vbox, TRUE);
}
static void
@@ -491,18 +498,26 @@ import_intelligent_done (EImport *ei,
gpointer user_data)
{
EImportAssistant *import_assistant = user_data;
+ ImportSelectionPage *page;
+
+ page = &import_assistant->priv->selection_page;
- if (import_assistant->priv->selection_page.current
- && (import_assistant->priv->selection_page.current = import_assistant->priv->selection_page.current->next)) {
+ if (page->current && (page->current = page->current->next)) {
import_status (ei, "", 0, import_assistant);
- import_assistant->priv->import_importer = import_assistant->priv->selection_page.current->data;
- e_import_import (import_assistant->priv->import, (EImportTarget *)import_assistant->priv->selection_page.target, import_assistant->priv->import_importer, import_status, import_intelligent_done, import_assistant);
+ import_assistant->priv->import_importer = page->current->data;
+ e_import_import (
+ import_assistant->priv->import,
+ (EImportTarget *) page->target,
+ import_assistant->priv->import_importer,
+ import_status, import_intelligent_done,
+ import_assistant);
} else
import_done (ei, import_assistant);
}
static void
-prepare_file_page (GtkAssistant *assistant)
+prepare_file_page (GtkAssistant *assistant,
+ GtkWidget *vbox)
{
EImportAssistantPrivate *priv;
GSList *importers, *imp;
@@ -548,7 +563,8 @@ prepare_file_page (GtkAssistant *assistant)
}
static gboolean
-prepare_destination_page (GtkAssistant *assistant)
+prepare_destination_page (GtkAssistant *assistant,
+ GtkWidget *vbox)
{
EImportAssistantPrivate *priv;
ImportDestinationPage *page;
@@ -557,34 +573,24 @@ prepare_destination_page (GtkAssistant *assistant)
page = &priv->destination_page;
if (page->control)
- gtk_container_remove ((GtkContainer *)page->vbox, page->control);
+ gtk_container_remove (GTK_CONTAINER (vbox), page->control);
page->control = e_import_get_widget (
priv->import, (EImportTarget *)
priv->file_page.target, priv->file_page.importer);
if (page->control == NULL) {
/* Coding error, not needed for translators */
- page->control = gtk_label_new ("** PLUGIN ERROR ** No settings for importer");
+ page->control = gtk_label_new (
+ "** PLUGIN ERROR ** No settings for importer");
gtk_widget_show (page->control);
}
- gtk_box_pack_start (
- GTK_BOX (priv->destination_page.vbox),
- page->control, TRUE, TRUE, 0);
- gtk_assistant_set_page_complete (assistant, page->vbox, TRUE);
+ gtk_box_pack_start (GTK_BOX (vbox), page->control, TRUE, TRUE, 0);
+ gtk_assistant_set_page_complete (assistant, vbox, TRUE);
return FALSE;
}
-enum {
- PAGE_START,
- PAGE_INTELI_OR_DIRECT,
- PAGE_INTELI_SOURCE,
- PAGE_FILE_CHOOSE,
- PAGE_FILE_DEST,
- PAGE_FINISH
-};
-
static gint
forward_cb (gint current_page,
EImportAssistant *import_assistant)
@@ -652,7 +658,7 @@ import_assistant_finalize (GObject *object)
static gboolean
import_assistant_key_press_event (GtkWidget *widget,
- GdkEventKey *event)
+ GdkEventKey *event)
{
GtkWidgetClass *widget_class;
@@ -668,18 +674,21 @@ import_assistant_key_press_event (GtkWidget *widget,
static void
import_assistant_prepare (GtkAssistant *assistant,
- GtkWidget *page)
+ GtkWidget *page)
{
- EImportAssistantPrivate *priv;
-
- priv = E_IMPORT_ASSISTANT_GET_PRIVATE (assistant);
-
- if (page == priv->selection_page.vbox)
- prepare_intelligent_page (assistant);
- else if (page == priv->file_page.vbox)
- prepare_file_page (assistant);
- else if (page == priv->destination_page.vbox)
- prepare_destination_page (assistant);
+ switch (gtk_assistant_get_current_page (assistant)) {
+ case PAGE_INTELI_SOURCE:
+ prepare_intelligent_page (assistant, page);
+ break;
+ case PAGE_FILE_CHOOSE:
+ prepare_file_page (assistant, page);
+ break;
+ case PAGE_FILE_DEST:
+ prepare_destination_page (assistant, page);
+ break;
+ default:
+ break;
+ }
}
static void
@@ -687,38 +696,56 @@ import_assistant_apply (GtkAssistant *assistant)
{
EImportAssistantPrivate *priv;
EImportCompleteFunc done = NULL;
+ GtkToggleButton *toggle_button;
+ ImportSelectionPage *page;
gchar *msg = NULL;
priv = E_IMPORT_ASSISTANT_GET_PRIVATE (assistant);
+ page = &priv->selection_page;
+
+ toggle_button = GTK_TOGGLE_BUTTON (priv->type_page.intelligent);
- if (gtk_toggle_button_get_active ((GtkToggleButton *)priv->type_page.intelligent)) {
- priv->selection_page.current = priv->selection_page.importers;
- if (priv->selection_page.current) {
- priv->import_target = (EImportTarget *)priv->selection_page.target;
- priv->import_importer = priv->selection_page.current->data;
+ if (gtk_toggle_button_get_active (toggle_button)) {
+ page->current = page->importers;
+ if (page->current) {
+ priv->import_target = (EImportTarget *) page->target;
+ priv->import_importer = page->current->data;
done = import_intelligent_done;
- msg = g_strdup_printf (_("Importing data."));
+ msg = g_strdup (_("Importing Data"));
}
} else {
if (priv->file_page.importer) {
priv->import_importer = priv->file_page.importer;
priv->import_target = (EImportTarget *)priv->file_page.target;
done = import_done;
- msg = g_strdup_printf (_("Importing `%s'"), priv->file_page.target->uri_src);
+ msg = g_strdup_printf (
+ _("Importing \"%s\""),
+ priv->file_page.target->uri_src);
}
}
if (done) {
+ GtkWidget *content_area;
+
priv->import_dialog = e_error_new (
GTK_WINDOW (assistant), "shell:importing", msg, NULL);
g_signal_connect (priv->import_dialog, "response", G_CALLBACK(import_dialog_response), assistant);
priv->import_label = gtk_label_new (_("Please wait"));
priv->import_progress = gtk_progress_bar_new ();
- gtk_box_pack_start (GTK_BOX(((GtkDialog *)priv->import_dialog)->vbox), priv->import_label, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX(((GtkDialog *)priv->import_dialog)->vbox), priv->import_progress, FALSE, FALSE, 0);
+ content_area = gtk_dialog_get_content_area (
+ GTK_DIALOG (priv->import_dialog));
+ gtk_box_pack_start (
+ GTK_BOX (content_area),
+ priv->import_label, FALSE, FALSE, 0);
+ gtk_box_pack_start (
+ GTK_BOX (content_area),
+ priv->import_progress, FALSE, FALSE, 0);
gtk_widget_show_all (priv->import_dialog);
- e_import_import (priv->import, priv->import_target, priv->import_importer, import_status, import_done, assistant);
+ e_import_import (
+ priv->import, priv->import_target,
+ priv->import_importer, import_status,
+ import_done, assistant);
} else {
import_assistant_emit_finished (E_IMPORT_ASSISTANT (assistant));
}
@@ -759,25 +786,24 @@ import_assistant_class_init (EImportAssistantClass *class)
static void
import_assistant_init (EImportAssistant *import_assistant)
{
- const gchar *empty_xpm_img[] = {
- "48 1 2 1",
- " c None",
- ". c #FFFFFF",
- " "};
-
GtkAssistant *assistant;
+ GtkIconTheme *icon_theme;
GtkWidget *page;
- GdkPixbuf *icon, *spacer;
+ GdkPixbuf *pixbuf;
+ gint size;
assistant = GTK_ASSISTANT (import_assistant);
- import_assistant->priv = E_IMPORT_ASSISTANT_GET_PRIVATE (import_assistant);
+ import_assistant->priv =
+ E_IMPORT_ASSISTANT_GET_PRIVATE (import_assistant);
import_assistant->priv->import =
e_import_new ("org.gnome.evolution.shell.importer");
- icon = e_icon_factory_get_icon ("stock_mail-import", GTK_ICON_SIZE_DIALOG);
- spacer = gdk_pixbuf_new_from_xpm_data (empty_xpm_img);
+ icon_theme = gtk_icon_theme_get_default ();
+ gtk_icon_size_lookup (GTK_ICON_SIZE_DIALOG, &size, NULL);
+ pixbuf = gtk_icon_theme_load_icon (
+ icon_theme, "stock_mail-import", size, 0, NULL);
gtk_window_set_position (GTK_WINDOW (assistant), GTK_WIN_POS_CENTER);
gtk_window_set_title (GTK_WINDOW (assistant), _("Evolution Import Assistant"));
@@ -795,46 +821,41 @@ import_assistant_init (EImportAssistant *import_assistant)
gtk_widget_show (page);
gtk_assistant_append_page (assistant, page);
- gtk_assistant_set_page_header_image (assistant, page, icon);
+ gtk_assistant_set_page_header_image (assistant, page, pixbuf);
gtk_assistant_set_page_title (assistant, page, _("Evolution Import Assistant"));
gtk_assistant_set_page_type (assistant, page, GTK_ASSISTANT_PAGE_INTRO);
- gtk_assistant_set_page_side_image (assistant, page, spacer);
gtk_assistant_set_page_complete (assistant, page, TRUE);
/* Intelligent or direct import page */
- import_assistant_type_page_init (import_assistant);
- page = import_assistant->priv->type_page.vbox;
+ page = import_assistant_type_page_init (import_assistant);
gtk_assistant_append_page (assistant, page);
- gtk_assistant_set_page_header_image (assistant, page, icon);
+ gtk_assistant_set_page_header_image (assistant, page, pixbuf);
gtk_assistant_set_page_title (assistant, page, _("Importer Type"));
gtk_assistant_set_page_type (assistant, page, GTK_ASSISTANT_PAGE_CONTENT);
gtk_assistant_set_page_complete (assistant, page, TRUE);
/* Intelligent importer source page */
- import_assistant_selection_page_init (import_assistant);
- page = import_assistant->priv->selection_page.vbox;
+ page = import_assistant_selection_page_init (import_assistant);
gtk_assistant_append_page (assistant, page);
- gtk_assistant_set_page_header_image (assistant, page, icon);
+ gtk_assistant_set_page_header_image (assistant, page, pixbuf);
gtk_assistant_set_page_title (assistant, page, _("Select Information to Import"));
gtk_assistant_set_page_type (assistant, page, GTK_ASSISTANT_PAGE_CONTENT);
/* File selection and file type page */
- import_assistant_file_page_init (import_assistant);
- page = import_assistant->priv->file_page.vbox;
+ page = import_assistant_file_page_init (import_assistant);
gtk_assistant_append_page (assistant, page);
- gtk_assistant_set_page_header_image (assistant, page, icon);
+ gtk_assistant_set_page_header_image (assistant, page, pixbuf);
gtk_assistant_set_page_title (assistant, page, _("Select a File"));
gtk_assistant_set_page_type (assistant, page, GTK_ASSISTANT_PAGE_CONTENT);
/* File destination page */
- import_assistant_destination_page_init (import_assistant);
- page = import_assistant->priv->destination_page.vbox;
+ page = import_assistant_destination_page_init (import_assistant);
gtk_assistant_append_page (assistant, page);
- gtk_assistant_set_page_header_image (assistant, page, icon);
+ gtk_assistant_set_page_header_image (assistant, page, pixbuf);
gtk_assistant_set_page_title (assistant, page, _("Import Location"));
gtk_assistant_set_page_type (assistant, page, GTK_ASSISTANT_PAGE_CONTENT);
@@ -847,18 +868,16 @@ import_assistant_init (EImportAssistant *import_assistant)
gtk_widget_show (page);
gtk_assistant_append_page (assistant, page);
- gtk_assistant_set_page_header_image (assistant, page, icon);
+ gtk_assistant_set_page_header_image (assistant, page, pixbuf);
gtk_assistant_set_page_title (assistant, page, _("Import File"));
gtk_assistant_set_page_type (assistant, page, GTK_ASSISTANT_PAGE_CONFIRM);
- gtk_assistant_set_page_side_image (assistant, page, spacer);
gtk_assistant_set_page_complete (assistant, page, TRUE);
gtk_assistant_set_forward_page_func (
assistant, (GtkAssistantPageFunc)
forward_cb, import_assistant, NULL);
- g_object_unref (icon);
- g_object_unref (spacer);
+ g_object_unref (pixbuf);
gtk_assistant_update_buttons_state (assistant);
}