From 71f5369ebfe5ee1d06b0bd1936cca80abc58e60a Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Mon, 25 Apr 2011 15:18:41 -0400 Subject: Adapt modules/startup-wizard to the new ESource API. --- .../e-mail-config-import-progress-page.c | 381 +++++++++++++++++++++ 1 file changed, 381 insertions(+) create mode 100644 modules/startup-wizard/e-mail-config-import-progress-page.c (limited to 'modules/startup-wizard/e-mail-config-import-progress-page.c') diff --git a/modules/startup-wizard/e-mail-config-import-progress-page.c b/modules/startup-wizard/e-mail-config-import-progress-page.c new file mode 100644 index 0000000000..12a1a7b04e --- /dev/null +++ b/modules/startup-wizard/e-mail-config-import-progress-page.c @@ -0,0 +1,381 @@ +/* + * e-mail-config-import-progress-page.c + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the program; if not, see + * + */ + +#include "e-mail-config-import-progress-page.h" + +#include +#include + +#define E_MAIL_CONFIG_IMPORT_PROGRESS_PAGE_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE \ + ((obj), E_TYPE_MAIL_CONFIG_IMPORT_PROGRESS_PAGE, EMailConfigImportProgressPagePrivate)) + +struct _EMailConfigImportProgressPagePrivate { + EActivity *activity; + GtkWidget *progress_bar; /* not referenced */ + GtkWidget *cancelled_msg; /* not referenced */ + GtkWidget *completed_msg; /* not referenced */ +}; + +enum { + PROP_0, + PROP_ACTIVITY +}; + +/* Forward Declarations */ +static void e_mail_config_import_progress_page_interface_init + (EMailConfigPageInterface *interface); + +G_DEFINE_DYNAMIC_TYPE_EXTENDED ( + EMailConfigImportProgressPage, + e_mail_config_import_progress_page, + GTK_TYPE_BOX, + 0, + G_IMPLEMENT_INTERFACE_DYNAMIC ( + E_TYPE_MAIL_CONFIG_PAGE, + e_mail_config_import_progress_page_interface_init)) + +static gboolean +mail_config_import_progress_page_is_cancelled (GBinding *binding, + const GValue *source_value, + GValue *target_value, + gpointer unused) +{ + EActivityState state; + gboolean is_cancelled; + + state = g_value_get_enum (source_value); + is_cancelled = (state == E_ACTIVITY_CANCELLED); + g_value_set_boolean (target_value, is_cancelled); + + return TRUE; +} + +static gboolean +mail_config_import_progress_page_is_completed (GBinding *binding, + const GValue *source_value, + GValue *target_value, + gpointer unused) +{ + EActivityState state; + gboolean is_completed; + + state = g_value_get_enum (source_value); + is_completed = (state == E_ACTIVITY_COMPLETED); + g_value_set_boolean (target_value, is_completed); + + return TRUE; +} + +static gboolean +mail_config_import_progress_page_percent_to_fraction (GBinding *binding, + const GValue *source_value, + GValue *target_value, + gpointer unused) +{ + gdouble fraction; + + fraction = g_value_get_double (source_value) / 100.0; + g_value_set_double (target_value, CLAMP (fraction, 0.0, 1.0)); + + return TRUE; +} + +static void +mail_config_import_progress_page_set_activity (EMailConfigImportProgressPage *page, + EActivity *activity) +{ + g_return_if_fail (E_IS_ACTIVITY (activity)); + g_return_if_fail (page->priv->activity == NULL); + + page->priv->activity = g_object_ref (activity); +} + +static void +mail_config_import_progress_page_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + switch (property_id) { + case PROP_ACTIVITY: + mail_config_import_progress_page_set_activity ( + E_MAIL_CONFIG_IMPORT_PROGRESS_PAGE (object), + g_value_get_object (value)); + return; + } + + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); +} + +static void +mail_config_import_progress_page_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + switch (property_id) { + case PROP_ACTIVITY: + g_value_set_object ( + value, + e_mail_config_import_progress_page_get_activity ( + E_MAIL_CONFIG_IMPORT_PROGRESS_PAGE (object))); + return; + } + + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); +} + +static void +mail_config_import_progress_page_dispose (GObject *object) +{ + EMailConfigImportProgressPagePrivate *priv; + + priv = E_MAIL_CONFIG_IMPORT_PROGRESS_PAGE_GET_PRIVATE (object); + + if (priv->activity != NULL) { + g_object_unref (priv->activity); + priv->activity = NULL; + } + + /* Chain up to parent's dispose() method. */ + G_OBJECT_CLASS (e_mail_config_import_progress_page_parent_class)-> + dispose (object); +} + +static void +mail_config_import_progress_page_constructed (GObject *object) +{ + EMailConfigImportProgressPage *page; + GtkSizeGroup *size_group; + GtkWidget *container; + GtkWidget *widget; + EActivity *activity; + + page = E_MAIL_CONFIG_IMPORT_PROGRESS_PAGE (object); + + /* Chain up to parent's constructed() method. */ + G_OBJECT_CLASS (e_mail_config_import_progress_page_parent_class)-> + constructed (object); + + gtk_orientable_set_orientation ( + GTK_ORIENTABLE (page), GTK_ORIENTATION_VERTICAL); + + gtk_box_set_spacing (GTK_BOX (page), 12); + + gtk_widget_set_valign (GTK_WIDGET (page), GTK_ALIGN_CENTER); + + activity = e_mail_config_import_progress_page_get_activity (page); + + /* The activity state affects the "check-complete" result. */ + g_signal_connect_swapped ( + activity, "notify::state", + G_CALLBACK (e_mail_config_page_changed), page); + + size_group = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL); + + /* Just a spacer. */ + widget = gtk_alignment_new (0.5, 0.0, 0.0, 0.0); + gtk_size_group_add_widget (size_group, widget); + gtk_box_pack_start (GTK_BOX (page), widget, TRUE, TRUE, 0); + gtk_widget_show (widget); + + widget = gtk_progress_bar_new (); + gtk_box_pack_start (GTK_BOX (page), widget, FALSE, FALSE, 0); + page->priv->progress_bar = widget; /* not referenced */ + gtk_widget_show (widget); + + g_object_bind_property ( + activity, "text", + widget, "text", + G_BINDING_SYNC_CREATE); + + g_object_bind_property_full ( + activity, "percent", + widget, "fraction", + G_BINDING_SYNC_CREATE, + mail_config_import_progress_page_percent_to_fraction, + NULL, + NULL, (GDestroyNotify) NULL); + + widget = gtk_vbox_new (FALSE, 12); + gtk_size_group_add_widget (size_group, widget); + gtk_box_pack_start (GTK_BOX (page), widget, TRUE, TRUE, 0); + gtk_widget_show (widget); + + container = widget; + + widget = gtk_alignment_new (0.5, 0.0, 0.0, 0.0); + gtk_box_pack_start (GTK_BOX (container), widget, TRUE, TRUE, 0); + page->priv->cancelled_msg = widget; /* not referenced */ + + g_object_bind_property_full ( + activity, "state", + widget, "visible", + G_BINDING_SYNC_CREATE, + mail_config_import_progress_page_is_cancelled, + NULL, + NULL, (GDestroyNotify) NULL); + + widget = gtk_alignment_new (0.5, 0.0, 0.0, 0.0); + gtk_box_pack_start (GTK_BOX (container), widget, TRUE, TRUE, 0); + page->priv->completed_msg = widget; /* not referenced */ + gtk_widget_show (widget); + + g_object_bind_property_full ( + activity, "state", + widget, "visible", + G_BINDING_SYNC_CREATE, + mail_config_import_progress_page_is_completed, + NULL, + NULL, (GDestroyNotify) NULL); + + container = page->priv->cancelled_msg; + + widget = gtk_hbox_new (FALSE, 6); + gtk_container_add (GTK_CONTAINER (container), widget); + gtk_widget_show (widget); + + container = widget; + + widget = gtk_image_new_from_stock ( + GTK_STOCK_CANCEL, GTK_ICON_SIZE_MENU); + gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0); + gtk_widget_show (widget); + + widget = gtk_label_new (_("Import cancelled.")); + gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0); + gtk_widget_show (widget); + + container = page->priv->completed_msg; + + widget = gtk_hbox_new (FALSE, 6); + gtk_container_add (GTK_CONTAINER (container), widget); + gtk_widget_show (widget); + + container = widget; + + widget = gtk_image_new_from_icon_name ( + "emblem-default", GTK_ICON_SIZE_MENU); + gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0); + gtk_widget_show (widget); + + widget = gtk_label_new _("Import complete."); + gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0); + gtk_widget_show (widget); + + g_object_unref (size_group); +} + +static gboolean +mail_config_import_progress_page_check_complete (EMailConfigPage *page) +{ + EMailConfigImportProgressPagePrivate *priv; + gboolean complete; + + priv = E_MAIL_CONFIG_IMPORT_PROGRESS_PAGE_GET_PRIVATE (page); + + switch (e_activity_get_state (priv->activity)) { + case E_ACTIVITY_CANCELLED: + case E_ACTIVITY_COMPLETED: + complete = TRUE; + break; + default: + complete = FALSE; + break; + } + + return complete; +} + +static void +e_mail_config_import_progress_page_class_init (EMailConfigImportProgressPageClass *class) +{ + GObjectClass *object_class; + + g_type_class_add_private ( + class, sizeof (EMailConfigImportProgressPagePrivate)); + + object_class = G_OBJECT_CLASS (class); + object_class->set_property = mail_config_import_progress_page_set_property; + object_class->get_property = mail_config_import_progress_page_get_property; + object_class->dispose = mail_config_import_progress_page_dispose; + object_class->constructed = mail_config_import_progress_page_constructed; + + g_object_class_install_property ( + object_class, + PROP_ACTIVITY, + g_param_spec_object ( + "activity", + "Activity", + "Import activity", + E_TYPE_ACTIVITY, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); +} + +static void +e_mail_config_import_progress_page_class_finalize (EMailConfigImportProgressPageClass *class) +{ +} + +static void +e_mail_config_import_progress_page_interface_init (EMailConfigPageInterface *interface) +{ + /* Keep the title identical to EMailConfigImportPage + * so it's only shown once in the assistant sidebar. */ + interface->title = _("Importing Files"); + interface->sort_order = E_MAIL_CONFIG_IMPORT_PROGRESS_PAGE_SORT_ORDER; + interface->page_type = GTK_ASSISTANT_PAGE_PROGRESS; + interface->check_complete = mail_config_import_progress_page_check_complete; +} + +static void +e_mail_config_import_progress_page_init (EMailConfigImportProgressPage *page) +{ + page->priv = E_MAIL_CONFIG_IMPORT_PROGRESS_PAGE_GET_PRIVATE (page); +} + +void +e_mail_config_import_progress_page_type_register (GTypeModule *type_module) +{ + /* XXX G_DEFINE_DYNAMIC_TYPE declares a static type registration + * function, so we have to wrap it with a public function in + * order to register types from a separate compilation unit. */ + e_mail_config_import_progress_page_register_type (type_module); +} + +EMailConfigPage * +e_mail_config_import_progress_page_new (EActivity *activity) +{ + g_return_val_if_fail (E_IS_ACTIVITY (activity), NULL); + + return g_object_new ( + E_TYPE_MAIL_CONFIG_IMPORT_PROGRESS_PAGE, + "activity", activity, NULL); +} + +EActivity * +e_mail_config_import_progress_page_get_activity (EMailConfigImportProgressPage *page) +{ + g_return_val_if_fail ( + E_IS_MAIL_CONFIG_IMPORT_PROGRESS_PAGE (page), NULL); + + return page->priv->activity; +} + -- cgit v1.2.3