From: Jose Dapena Paz Date: Wed, 1 Oct 2008 08:52:19 +0000 (+0000) Subject: * Created ModestProviderPicker widget for hildon2 toolkit. X-Git-Tag: git_migration_finished~1176 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=0a7c11e4ab92b8ad12116a699620739f55b2b619 * Created ModestProviderPicker widget for hildon2 toolkit. * Modified hildon2 wizard to use the new provider picker. pmo-trunk-r5829 --- diff --git a/src/hildon2/Makefile.am b/src/hildon2/Makefile.am index 6d7fe13..f184fd2 100644 --- a/src/hildon2/Makefile.am +++ b/src/hildon2/Makefile.am @@ -53,7 +53,7 @@ libmodest_ui_la_SOURCES= \ modest-default-account-settings-dialog.c \ modest-easysetup-wizard-dialog.h modest-easysetup-wizard-dialog.c \ modest-country-picker.h modest-country-picker.c \ - modest-easysetup-provider-combo-box.h modest-easysetup-provider-combo-box.c \ + modest-provider-picker.h modest-provider-picker.c \ modest-easysetup-servertype-combo-box.h modest-easysetup-servertype-combo-box.c \ modest-icon-names.h \ modest-maemo-global-settings-dialog.c \ diff --git a/src/hildon2/modest-easysetup-provider-combo-box.c b/src/hildon2/modest-easysetup-provider-combo-box.c deleted file mode 100644 index 1147a1d..0000000 --- a/src/hildon2/modest-easysetup-provider-combo-box.c +++ /dev/null @@ -1,332 +0,0 @@ -/* Copyright (c) 2006, Nokia Corporation - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Nokia Corporation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "modest-easysetup-provider-combo-box.h" -#include -#include -#include -#include -#include -#include "modest-protocol-registry.h" -#include "modest-runtime.h" - -#include -#include /* For memcpy() */ - -/* Include config.h so that _() works: */ -#ifdef HAVE_CONFIG_H -#include -#endif - -G_DEFINE_TYPE (EasysetupProviderComboBox, easysetup_provider_combo_box, GTK_TYPE_COMBO_BOX); - -#define PROVIDER_COMBO_BOX_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((o), EASYSETUP_TYPE_PROVIDER_COMBO_BOX, EasysetupProviderComboBoxPrivate)) - -typedef struct _EasysetupProviderComboBoxPrivate EasysetupProviderComboBoxPrivate; - -struct _EasysetupProviderComboBoxPrivate -{ - GtkTreeModel *model; -}; - -static void -easysetup_provider_combo_box_get_property (GObject *object, guint property_id, - GValue *value, GParamSpec *pspec) -{ - switch (property_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - } -} - -static void -easysetup_provider_combo_box_set_property (GObject *object, guint property_id, - const GValue *value, GParamSpec *pspec) -{ - switch (property_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - } -} - -static void -easysetup_provider_combo_box_dispose (GObject *object) -{ - if (G_OBJECT_CLASS (easysetup_provider_combo_box_parent_class)->dispose) - G_OBJECT_CLASS (easysetup_provider_combo_box_parent_class)->dispose (object); -} - -static void -easysetup_provider_combo_box_finalize (GObject *object) -{ - EasysetupProviderComboBoxPrivate *priv = PROVIDER_COMBO_BOX_GET_PRIVATE (object); - - g_object_unref (G_OBJECT (priv->model)); - - G_OBJECT_CLASS (easysetup_provider_combo_box_parent_class)->finalize (object); -} - -static void -easysetup_provider_combo_box_class_init (EasysetupProviderComboBoxClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - g_type_class_add_private (klass, sizeof (EasysetupProviderComboBoxPrivate)); - - object_class->get_property = easysetup_provider_combo_box_get_property; - object_class->set_property = easysetup_provider_combo_box_set_property; - object_class->dispose = easysetup_provider_combo_box_dispose; - object_class->finalize = easysetup_provider_combo_box_finalize; -} - -enum MODEL_COLS { - MODEL_COL_ID, /* a string, not an int. */ - MODEL_COL_NAME, - MODEL_COL_ID_TYPE -}; - - -/* - * strictly, we should sort providers with mcc=0 after the other ones.... but, we don't have - * that info here, so ignoring for now. - */ -static gint -provider_sort_func (GtkTreeModel *model, GtkTreeIter *iter1, GtkTreeIter *iter2, gpointer user_data) -{ - gchar *prov1, *prov2; - gint retval; - - gtk_tree_model_get (model, iter1, MODEL_COL_NAME, &prov1, -1); - gtk_tree_model_get (model, iter2, MODEL_COL_NAME, &prov2, -1); - - if (strcmp (prov1, prov2) == 0) - retval = 0; - else if (strcmp (_("mcen_va_serviceprovider_other"), prov1) == 0) - retval = -1; - else if (strcmp (_("mcen_va_serviceprovider_other"), prov2) == 0) - retval = 1; - else - retval = modest_text_utils_utf8_strcmp (prov1, prov2, TRUE); - - g_free (prov1); - g_free (prov2); - - return retval; -} - -static void -easysetup_provider_combo_box_init (EasysetupProviderComboBox *self) -{ - EasysetupProviderComboBoxPrivate *priv = PROVIDER_COMBO_BOX_GET_PRIVATE (self); - - /* Create a tree model for the combo box, - * with a string for the name, and a string for the ID (e.g. "vodafone.it"), and the mcc - * This must match our MODEL_COLS enum constants. - */ - priv->model = GTK_TREE_MODEL (gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT)); - - /* Setup the combo box: */ - GtkComboBox *combobox = GTK_COMBO_BOX (self); - gtk_combo_box_set_model (combobox, priv->model); - - /* Provider column: - * The ID model column in not shown in the view. */ - GtkCellRenderer *renderer = gtk_cell_renderer_text_new (); - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT (combobox), renderer, TRUE); - gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "text", MODEL_COL_NAME, NULL); - - gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(priv->model), - MODEL_COL_NAME, GTK_SORT_ASCENDING); - gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE(priv->model), - MODEL_COL_NAME, - (GtkTreeIterCompareFunc)provider_sort_func, - NULL, NULL); -} - -EasysetupProviderComboBox* -easysetup_provider_combo_box_new (void) -{ - return g_object_new (EASYSETUP_TYPE_PROVIDER_COMBO_BOX, NULL); -} - -void -easysetup_provider_combo_box_fill (EasysetupProviderComboBox *combobox, - ModestPresets *presets, - gint mcc) -{ - GtkTreeIter other_iter; - EasysetupProviderComboBoxPrivate *priv; - GtkListStore *liststore; - GSList *provider_ids_used_already = NULL, *provider_protos, *tmp; - gchar ** provider_ids = NULL; - gchar ** provider_names; - gchar ** iter_provider_names; - gchar ** iter_provider_ids; - ModestProtocolRegistry *registry; - - g_return_if_fail (EASYSETUP_IS_PROVIDER_COMBO_BOX(combobox)); - - priv = PROVIDER_COMBO_BOX_GET_PRIVATE (combobox); - liststore = GTK_LIST_STORE (priv->model); - gtk_list_store_clear (liststore); - provider_names = modest_presets_get_providers (presets, mcc, TRUE, &provider_ids); - - iter_provider_names = provider_names; - iter_provider_ids = provider_ids; - - while(iter_provider_names && *iter_provider_names && iter_provider_ids && *iter_provider_ids) { - const gchar* provider_name = *iter_provider_names; - const gchar* provider_id = *iter_provider_ids; - - /* Prevent duplicate providers: */ - if (g_slist_find_custom (provider_ids_used_already, - provider_id, (GCompareFunc)strcmp) == NULL) { - /* printf("debug: provider_name=%s\n", provider_name); */ - - /* Add the row: */ - GtkTreeIter iter; - gtk_list_store_append (liststore, &iter); - - gtk_list_store_set(liststore, &iter, - MODEL_COL_ID, provider_id, - MODEL_COL_NAME, provider_name, - MODEL_COL_ID_TYPE, EASYSETUP_PROVIDER_COMBO_BOX_ID_PROVIDER, - -1); - - provider_ids_used_already = g_slist_prepend ( - provider_ids_used_already, (gpointer)g_strdup (provider_id)); - } - - ++iter_provider_names; - ++iter_provider_ids; - } - - /* Free the result of modest_presets_get_providers() - * as specified by its documentation: */ - g_strfreev (provider_names); - g_strfreev (provider_ids); - - /* Add the provider protocols */ - registry = modest_runtime_get_protocol_registry (); - provider_protos = modest_protocol_registry_get_by_tag (registry, - MODEST_PROTOCOL_REGISTRY_PROVIDER_PROTOCOLS); - tmp = provider_protos; - while (tmp) { - GtkTreeIter iter; - ModestProtocol *proto = MODEST_PROTOCOL (tmp->data); - const gchar *name = modest_protocol_get_display_name (proto); - - /* only add store protocols, no need to duplicate them */ - if (modest_protocol_registry_protocol_type_has_tag (registry, - modest_protocol_get_type_id (proto), - MODEST_PROTOCOL_REGISTRY_STORE_PROTOCOLS)) { - gtk_list_store_append (liststore, &iter); - gtk_list_store_set (liststore, &iter, - MODEL_COL_ID, modest_protocol_get_name (proto), - MODEL_COL_NAME, name, - MODEL_COL_ID_TYPE, EASYSETUP_PROVIDER_COMBO_BOX_ID_PLUGIN_PROTOCOL, - -1); - } - tmp = g_slist_next (tmp); - } - g_slist_free (provider_protos); - - /* Add the "Other" item: */ - /* Note that ID 0 means "Other" for us: */ - gtk_list_store_prepend (liststore, &other_iter); - gtk_list_store_set (liststore, &other_iter, - MODEL_COL_ID, 0, - MODEL_COL_NAME, _("mcen_va_serviceprovider_other"), - MODEL_COL_ID_TYPE, EASYSETUP_PROVIDER_COMBO_BOX_ID_OTHER, - -1); - - /* Select the "Other" item: */ - gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combobox), &other_iter); - - g_slist_foreach (provider_ids_used_already, (GFunc)g_free, NULL); - g_slist_free (provider_ids_used_already); -} - -/** - * Returns the MCC number of the selected provider, - * or NULL if no provider was selected, or "Other" was selected. - */ -gchar* -easysetup_provider_combo_box_get_active_provider_id (EasysetupProviderComboBox *combobox) -{ - GtkTreeIter active; - - g_return_val_if_fail (EASYSETUP_IS_PROVIDER_COMBO_BOX(combobox), NULL); - - const gboolean found = gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combobox), &active); - if (found) { - EasysetupProviderComboBoxPrivate *priv = PROVIDER_COMBO_BOX_GET_PRIVATE (combobox); - - gchar *id = NULL; - gtk_tree_model_get (priv->model, &active, MODEL_COL_ID, &id, -1); - return g_strdup(id); - } - - return NULL; /* Failed. */ -} - -void -easysetup_provider_combo_box_set_others_provider (EasysetupProviderComboBox *combobox) -{ - GtkTreeModel *model; - GtkTreeIter others_iter; - - g_return_if_fail (EASYSETUP_IS_PROVIDER_COMBO_BOX(combobox)); - - model = gtk_combo_box_get_model (GTK_COMBO_BOX (combobox)); - - if (gtk_tree_model_get_iter_first (model, &others_iter)) - gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combobox), &others_iter); -} - -EasysetupProviderComboBoxIdType -easysetup_provider_combo_box_get_active_id_type (EasysetupProviderComboBox *combobox) -{ - GtkTreeIter active; - - g_return_val_if_fail (EASYSETUP_IS_PROVIDER_COMBO_BOX (combobox), - EASYSETUP_PROVIDER_COMBO_BOX_ID_OTHER); - - if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combobox), &active)) { - EasysetupProviderComboBoxPrivate *priv = PROVIDER_COMBO_BOX_GET_PRIVATE (combobox); - EasysetupProviderComboBoxIdType id_type; - - gtk_tree_model_get (priv->model, &active, MODEL_COL_ID_TYPE, &id_type, -1); - return id_type; - } else { - /* Fallback to other */ - return EASYSETUP_PROVIDER_COMBO_BOX_ID_OTHER; - } -} diff --git a/src/hildon2/modest-easysetup-provider-combo-box.h b/src/hildon2/modest-easysetup-provider-combo-box.h deleted file mode 100644 index d4bc283..0000000 --- a/src/hildon2/modest-easysetup-provider-combo-box.h +++ /dev/null @@ -1,96 +0,0 @@ -/* Copyright (c) 2006, Nokia Corporation - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Nokia Corporation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _EASYSETUP_PROVIDER_COMBO_BOX -#define _EASYSETUP_PROVIDER_COMBO_BOX - -#include -#include "modest-presets.h" - -G_BEGIN_DECLS - -#define EASYSETUP_TYPE_PROVIDER_COMBO_BOX easysetup_provider_combo_box_get_type() - -#define EASYSETUP_PROVIDER_COMBO_BOX(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - EASYSETUP_TYPE_PROVIDER_COMBO_BOX, EasysetupProviderComboBox)) - -#define EASYSETUP_PROVIDER_COMBO_BOX_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), \ - EASYSETUP_TYPE_PROVIDER_COMBO_BOX, EasysetupProviderComboBoxClass)) - -#define EASYSETUP_IS_PROVIDER_COMBO_BOX(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - EASYSETUP_TYPE_PROVIDER_COMBO_BOX)) - -#define EASYSETUP_IS_PROVIDER_COMBO_BOX_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - EASYSETUP_TYPE_PROVIDER_COMBO_BOX)) - -#define EASYSETUP_PROVIDER_COMBO_BOX_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - EASYSETUP_TYPE_PROVIDER_COMBO_BOX, EasysetupProviderComboBoxClass)) - -/** The thype of the ID - * - * this means the value of returned by get_active_provider_id will be - * different depending on the value returned by get_active_id_type - * - * If the selected option is a provider then the ID will be the provider ID - * If the selected option is "Other..." the the ID will be 0 - * If the selected option is a provider protocol () the the ID will be protocol name - **/ -typedef enum { - EASYSETUP_PROVIDER_COMBO_BOX_ID_PROVIDER, - EASYSETUP_PROVIDER_COMBO_BOX_ID_OTHER, - EASYSETUP_PROVIDER_COMBO_BOX_ID_PLUGIN_PROTOCOL -} EasysetupProviderComboBoxIdType; - -typedef struct { - GtkComboBox parent; -} EasysetupProviderComboBox; - -typedef struct { - GtkComboBoxClass parent_class; -} EasysetupProviderComboBoxClass; - -GType easysetup_provider_combo_box_get_type (void); - -EasysetupProviderComboBox* easysetup_provider_combo_box_new (void); - -void easysetup_provider_combo_box_fill (EasysetupProviderComboBox *combobox, ModestPresets *presets, - gint mcc); - -gchar* easysetup_provider_combo_box_get_active_provider_id (EasysetupProviderComboBox *combobox); - -EasysetupProviderComboBoxIdType easysetup_provider_combo_box_get_active_id_type (EasysetupProviderComboBox *combobox); - -G_END_DECLS - -#endif /* _EASYSETUP_PROVIDER_COMBO_BOX */ diff --git a/src/hildon2/modest-easysetup-wizard-dialog.c b/src/hildon2/modest-easysetup-wizard-dialog.c index 8ddc972..3c98895 100644 --- a/src/hildon2/modest-easysetup-wizard-dialog.c +++ b/src/hildon2/modest-easysetup-wizard-dialog.c @@ -41,7 +41,7 @@ #include #include #include "modest-country-picker.h" -#include "modest-easysetup-provider-combo-box.h" +#include "modest-provider-picker.h" #include "modest-easysetup-servertype-combo-box.h" #include "widgets/modest-validating-entry.h" #include "modest-text-utils.h" @@ -104,7 +104,7 @@ struct _ModestEasysetupWizardDialogPrivate GtkWidget *page_account_details; GtkWidget *account_country_picker; - GtkWidget *combo_account_serviceprovider; + GtkWidget *account_serviceprovider_picker; GtkWidget *entry_account_title; GtkWidget *page_user_details; @@ -214,91 +214,6 @@ get_port_from_protocol (ModestProtocolType server_type, return server_port; } -/* static GList* */ -/* check_for_supported_auth_methods (ModestEasysetupWizardDialog* self) */ -/* { */ -/* GError *error = NULL; */ -/* ModestProtocolType protocol_type; */ -/* const gchar* hostname; */ -/* const gchar* username; */ -/* ModestProtocolType security_protocol_incoming_type; */ -/* ModestProtocolRegistry *registry; */ -/* int port_num; */ -/* GList *list_auth_methods; */ -/* ModestEasysetupWizardDialogPrivate *priv; */ - -/* priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self); */ -/* registry = modest_runtime_get_protocol_registry (); */ -/* protocol_type = easysetup_servertype_combo_box_get_active_servertype ( */ -/* EASYSETUP_SERVERTYPE_COMBO_BOX (priv->combo_incoming_servertype)); */ -/* hostname = gtk_entry_get_text(GTK_ENTRY(priv->entry_incomingserver)); */ -/* username = gtk_entry_get_text(GTK_ENTRY(priv->entry_user_username)); */ -/* security_protocol_incoming_type = modest_serversecurity_combo_box_get_active_serversecurity */ -/* (MODEST_SERVERSECURITY_COMBO_BOX (priv->combo_incoming_security)); */ -/* port_num = get_port_from_protocol(protocol_type, FALSE); */ -/* list_auth_methods = modest_utils_get_supported_secure_authentication_methods (protocol_type, hostname, port_num, */ -/* username, GTK_WINDOW (self), &error); */ - -/* if (list_auth_methods) { */ -/* /\* TODO: Select the correct method *\/ */ -/* GList* list = NULL; */ -/* GList* method; */ -/* for (method = list_auth_methods; method != NULL; method = g_list_next(method)) { */ -/* ModestProtocolType auth_protocol_type = (ModestProtocolType) (GPOINTER_TO_INT(method->data)); */ -/* if (modest_protocol_registry_protocol_type_has_tag (registry, auth_protocol_type, */ -/* MODEST_PROTOCOL_REGISTRY_SECURE_PROTOCOLS)) { */ -/* list = g_list_append(list, GINT_TO_POINTER(auth_protocol_type)); */ -/* } */ -/* } */ - -/* g_list_free(list_auth_methods); */ - -/* if (list) */ -/* return list; */ -/* } */ - -/* if(error == NULL || error->domain != modest_utils_get_supported_secure_authentication_error_quark() || */ -/* error->code != MODEST_UTILS_GET_SUPPORTED_SECURE_AUTHENTICATION_ERROR_CANCELED) */ -/* { */ -/* modest_platform_information_banner (GTK_WIDGET(self), NULL, */ -/* _("mcen_ib_unableto_discover_auth_methods")); */ -/* } */ - -/* if(error != NULL) */ -/* g_error_free(error); */ - -/* return NULL; */ -/* } */ - -/* static gboolean check_has_supported_auth_methods(ModestEasysetupWizardDialog* self) */ -/* { */ -/* GList* methods = check_for_supported_auth_methods(self); */ -/* if (!methods) */ -/* { */ -/* return FALSE; */ -/* } */ - -/* g_list_free(methods); */ -/* return TRUE; */ -/* } */ - -/* static ModestProtocolType check_first_supported_auth_method(ModestEasysetupWizardDialog* self) */ -/* { */ -/* ModestProtocolType result; */ - -/* result = MODEST_PROTOCOLS_AUTH_PASSWORD; */ - -/* GList* methods = check_for_supported_auth_methods(self); */ -/* if (methods) */ -/* { */ -/* /\* Use the first one: *\/ */ -/* result = (ModestProtocolType) (GPOINTER_TO_INT(methods->data)); */ -/* g_list_free(methods); */ -/* } */ - -/* return result; */ -/* } */ - static void invoke_enable_buttons_vfunc (ModestEasysetupWizardDialog *wizard_dialog) { @@ -411,13 +326,13 @@ on_account_country_selector_changed (HildonTouchSelector *widget, gint column, g if (priv->presets != NULL) { gint mcc = modest_country_picker_get_active_country_mcc ( MODEST_COUNTRY_PICKER (priv->account_country_picker)); - easysetup_provider_combo_box_fill ( - EASYSETUP_PROVIDER_COMBO_BOX (priv->combo_account_serviceprovider), priv->presets, mcc); + modest_provider_picker_fill ( + MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker), priv->presets, mcc); } } static void -on_combo_account_serviceprovider (GtkComboBox *widget, gpointer user_data) +on_account_serviceprovider_selector_changed (GtkComboBox *widget, gint column, gpointer user_data) { ModestEasysetupWizardDialog *self = MODEST_EASYSETUP_WIZARD_DIALOG (user_data); g_assert(self); @@ -426,8 +341,8 @@ on_combo_account_serviceprovider (GtkComboBox *widget, gpointer user_data) priv->dirty = TRUE; /* Fill the providers combo, based on the selected country: */ - gchar* provider_id = easysetup_provider_combo_box_get_active_provider_id ( - EASYSETUP_PROVIDER_COMBO_BOX (priv->combo_account_serviceprovider)); + gchar* provider_id = modest_provider_picker_get_active_provider_id ( + MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker)); gchar* domain_name = NULL; if(provider_id) @@ -477,7 +392,7 @@ create_page_account_details (ModestEasysetupWizardDialog *self) gtk_box_pack_start (GTK_BOX (box), priv->account_country_picker, FALSE, FALSE, MODEST_MARGIN_HALF); gtk_widget_show (priv->account_country_picker); - /* connect to country combo's changed signal, so we can fill the provider combo: */ + /* connect to country combo's changed signal, so we can fill the provider picker: */ g_signal_connect (G_OBJECT (hildon_picker_button_get_selector (HILDON_PICKER_BUTTON (priv->account_country_picker))), "changed", @@ -488,18 +403,18 @@ create_page_account_details (ModestEasysetupWizardDialog *self) gtk_widget_show (separator); /* The service provider widgets: */ - priv->combo_account_serviceprovider = GTK_WIDGET (easysetup_provider_combo_box_new ()); - gtk_widget_set_size_request (priv->combo_account_serviceprovider, 320, -1); - - caption = create_caption_new_with_asterisk (self, sizegroup, _("mcen_fi_serviceprovider"), - priv->combo_account_serviceprovider, NULL, HILDON_CAPTION_OPTIONAL); - gtk_widget_show (priv->combo_account_serviceprovider); - gtk_box_pack_start (GTK_BOX (box), caption, FALSE, FALSE, MODEST_MARGIN_HALF); - gtk_widget_show (caption); + priv->account_serviceprovider_picker = GTK_WIDGET (modest_provider_picker_new ()); + hildon_button_set_title (HILDON_BUTTON (priv->account_serviceprovider_picker), _("mcen_fi_serviceprovider")); + g_signal_connect (G_OBJECT (priv->account_serviceprovider_picker), "value-changed", + G_CALLBACK (on_picker_button_value_changed), self); + gtk_box_pack_start (GTK_BOX (box), priv->account_serviceprovider_picker, FALSE, FALSE, MODEST_MARGIN_HALF); + gtk_widget_show (priv->account_serviceprovider_picker); /* connect to providers combo's changed signal, so we can fill the email address: */ - g_signal_connect (G_OBJECT (priv->combo_account_serviceprovider), "changed", - G_CALLBACK (on_combo_account_serviceprovider), self); + g_signal_connect (G_OBJECT (hildon_picker_button_get_selector + (HILDON_PICKER_BUTTON (priv->account_serviceprovider_picker))), + "changed", + G_CALLBACK (on_account_serviceprovider_selector_changed), self); /* The description widgets: */ priv->entry_account_title = GTK_WIDGET (modest_validating_entry_new ()); @@ -1128,9 +1043,10 @@ presets_idle (gpointer userdata) MODEST_COUNTRY_PICKER (priv->account_country_picker)); mcc = modest_country_picker_get_active_country_mcc ( MODEST_COUNTRY_PICKER (priv->account_country_picker)); - easysetup_provider_combo_box_fill ( - EASYSETUP_PROVIDER_COMBO_BOX (priv->combo_account_serviceprovider), + modest_provider_picker_fill ( + MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker), priv->presets, mcc); + modest_provider_picker_set_others_provider (MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker)); } priv->dirty = FALSE; @@ -1426,16 +1342,16 @@ static void create_subsequent_pages (ModestEasysetupWizardDialog *self) { ModestEasysetupWizardDialogPrivate *priv; - EasysetupProviderComboBox *combo; - EasysetupProviderComboBoxIdType id_type; + ModestProviderPicker *picker; + ModestProviderPickerIdType id_type; GtkNotebook *notebook; priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self); - combo = EASYSETUP_PROVIDER_COMBO_BOX (priv->combo_account_serviceprovider); - id_type = easysetup_provider_combo_box_get_active_id_type (combo); + picker = MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker); + id_type = modest_provider_picker_get_active_id_type (picker); g_object_get (self, "wizard-notebook", ¬ebook, NULL); - if (id_type == EASYSETUP_PROVIDER_COMBO_BOX_ID_OTHER) { + if (id_type == MODEST_PROVIDER_PICKER_ID_OTHER) { /* "Other..." was selected: */ /* If we come from a rollbacked easysetup */ @@ -1465,7 +1381,7 @@ create_subsequent_pages (ModestEasysetupWizardDialog *self) } /* It's a pluggable protocol and not a provider with presets */ - if (id_type == EASYSETUP_PROVIDER_COMBO_BOX_ID_PLUGIN_PROTOCOL) { + if (id_type == MODEST_PROVIDER_PICKER_ID_PLUGIN_PROTOCOL) { ModestProtocol *protocol; gchar *proto_name; ModestProtocolType proto_type; @@ -1480,7 +1396,7 @@ create_subsequent_pages (ModestEasysetupWizardDialog *self) priv->page_complete_easysetup = NULL; } - proto_name = easysetup_provider_combo_box_get_active_provider_id (combo); + proto_name = modest_provider_picker_get_active_provider_id (picker); protocol = modest_protocol_registry_get_protocol_by_name (modest_runtime_get_protocol_registry (), MODEST_PROTOCOL_REGISTRY_PROVIDER_PROTOCOLS, proto_name); @@ -1880,20 +1796,20 @@ save_to_settings (ModestEasysetupWizardDialog *self) ModestProtocolType store_auth_protocol, transport_auth_protocol; ModestServerAccountSettings *store_settings, *transport_settings; const gchar *fullname, *email_address; - EasysetupProviderComboBox *combo; - EasysetupProviderComboBoxIdType id_type; + ModestProviderPicker *picker; + ModestProviderPickerIdType id_type; priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self); - combo = EASYSETUP_PROVIDER_COMBO_BOX (priv->combo_account_serviceprovider); + picker = MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker); protocol_registry = modest_runtime_get_protocol_registry (); /* Get details from the specified presets: */ - id_type = easysetup_provider_combo_box_get_active_id_type (combo); - provider_id = easysetup_provider_combo_box_get_active_provider_id (combo); + id_type = modest_provider_picker_get_active_id_type (picker); + provider_id = modest_provider_picker_get_active_provider_id (picker); /* Let the plugin save the settings. We do a return in order to save an indentation level */ - if (id_type == EASYSETUP_PROVIDER_COMBO_BOX_ID_PLUGIN_PROTOCOL) { + if (id_type == MODEST_PROVIDER_PICKER_ID_PLUGIN_PROTOCOL) { ModestProtocol *protocol; protocol = modest_protocol_registry_get_protocol_by_name ( diff --git a/src/hildon2/modest-provider-picker.c b/src/hildon2/modest-provider-picker.c new file mode 100644 index 0000000..f5763e4 --- /dev/null +++ b/src/hildon2/modest-provider-picker.c @@ -0,0 +1,349 @@ +/* Copyright (c) 2006, 2008 Nokia Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the Nokia Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "modest-provider-picker.h" +#include +#include +#include +#include +#include +#include "modest-protocol-registry.h" +#include "modest-runtime.h" + +#include +#include /* For memcpy() */ + +/* Include config.h so that _() works: */ +#ifdef HAVE_CONFIG_H +#include +#endif + +G_DEFINE_TYPE (ModestProviderPicker, modest_provider_picker, HILDON_TYPE_PICKER_BUTTON); + +#define MODEST_PROVIDER_PICKER_GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEST_TYPE_PROVIDER_PICKER, ModestProviderPickerPrivate)) + +typedef struct _ModestProviderPickerPrivate ModestProviderPickerPrivate; + +struct _ModestProviderPickerPrivate +{ + GtkTreeModel *model; +}; +static void +modest_provider_picker_finalize (GObject *object) +{ + ModestProviderPickerPrivate *priv = MODEST_PROVIDER_PICKER_GET_PRIVATE (object); + + g_object_unref (G_OBJECT (priv->model)); + + G_OBJECT_CLASS (modest_provider_picker_parent_class)->finalize (object); +} + +static void +modest_provider_picker_class_init (ModestProviderPickerClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (ModestProviderPickerPrivate)); + + object_class->finalize = modest_provider_picker_finalize; +} + +enum MODEL_COLS { + MODEL_COL_ID, /* a string, not an int. */ + MODEL_COL_NAME, + MODEL_COL_ID_TYPE +}; + + +/* + * strictly, we should sort providers with mcc=0 after the other ones.... but, we don't have + * that info here, so ignoring for now. + */ +static gint +provider_sort_func (GtkTreeModel *model, GtkTreeIter *iter1, GtkTreeIter *iter2, gpointer user_data) +{ + gchar *prov1, *prov2; + gint retval; + + gtk_tree_model_get (model, iter1, MODEL_COL_NAME, &prov1, -1); + gtk_tree_model_get (model, iter2, MODEL_COL_NAME, &prov2, -1); + + if (strcmp (prov1, prov2) == 0) + retval = 0; + else if (strcmp (_("mcen_va_serviceprovider_other"), prov1) == 0) + retval = -1; + else if (strcmp (_("mcen_va_serviceprovider_other"), prov2) == 0) + retval = 1; + else + retval = modest_text_utils_utf8_strcmp (prov1, prov2, TRUE); + + g_free (prov1); + g_free (prov2); + + return retval; +} + +static gchar * +touch_selector_print_func (HildonTouchSelector *selector) +{ + GtkTreeIter iter; + if (hildon_touch_selector_get_selected (HILDON_TOUCH_SELECTOR (selector), 0, &iter)) { + GtkTreeModel *model; + GValue value = {0,}; + + model = hildon_touch_selector_get_model (HILDON_TOUCH_SELECTOR (selector), 0); + gtk_tree_model_get_value (model, &iter, MODEL_COL_NAME, &value); + return g_value_dup_string (&value); + } + return NULL; +} + + +static void +modest_provider_picker_init (ModestProviderPicker *self) +{ + ModestProviderPickerPrivate *priv; + + priv = MODEST_PROVIDER_PICKER_GET_PRIVATE (self); + priv->model = NULL; +} + +ModestProviderPicker* +modest_provider_picker_new (void) +{ + ModestProviderPickerPrivate *priv; + ModestProviderPicker *self; + GtkCellRenderer *renderer; + GtkWidget *selector; + + self = g_object_new (MODEST_TYPE_PROVIDER_PICKER, + "arrangement", HILDON_BUTTON_ARRANGEMENT_VERTICAL, + "size", HILDON_SIZE_AUTO, + NULL); + priv = MODEST_PROVIDER_PICKER_GET_PRIVATE (self); + + /* Create the tree model for the selector, + * with a string for the name, and a string for the ID (e.g. "vodafone.it"), and the mcc + * This must match our MODEL_COLS enum constants. + */ + priv->model = GTK_TREE_MODEL (gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT)); + gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(priv->model), + MODEL_COL_NAME, GTK_SORT_ASCENDING); + gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE(priv->model), + MODEL_COL_NAME, + (GtkTreeIterCompareFunc)provider_sort_func, + NULL, NULL); + + renderer = gtk_cell_renderer_text_new (); + g_object_set (G_OBJECT (renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL); + + selector = hildon_touch_selector_new (); + hildon_touch_selector_append_column (HILDON_TOUCH_SELECTOR (selector), GTK_TREE_MODEL (priv->model), + renderer, "text", MODEL_COL_NAME, NULL); + + hildon_touch_selector_set_model (HILDON_TOUCH_SELECTOR (selector), 0, GTK_TREE_MODEL (priv->model)); + hildon_touch_selector_set_print_func (HILDON_TOUCH_SELECTOR (selector), touch_selector_print_func); + + hildon_picker_button_set_selector (HILDON_PICKER_BUTTON (self), HILDON_TOUCH_SELECTOR (selector)); + modest_provider_picker_set_others_provider (MODEST_PROVIDER_PICKER (self)); + + return self; +} + +void +modest_provider_picker_fill (ModestProviderPicker *self, + ModestPresets *presets, + gint mcc) +{ + GtkTreeIter other_iter; + ModestProviderPickerPrivate *priv; + GtkListStore *liststore; + GSList *provider_ids_used_already = NULL, *provider_protos, *tmp; + gchar ** provider_ids = NULL; + gchar ** provider_names; + gchar ** iter_provider_names; + gchar ** iter_provider_ids; + ModestProtocolRegistry *registry; + GtkWidget *selector; + + g_return_if_fail (MODEST_IS_PROVIDER_PICKER(self)); + + priv = MODEST_PROVIDER_PICKER_GET_PRIVATE (self); + liststore = GTK_LIST_STORE (priv->model); + gtk_list_store_clear (liststore); + provider_names = modest_presets_get_providers (presets, mcc, TRUE, &provider_ids); + + iter_provider_names = provider_names; + iter_provider_ids = provider_ids; + + while(iter_provider_names && *iter_provider_names && iter_provider_ids && *iter_provider_ids) { + const gchar* provider_name = *iter_provider_names; + const gchar* provider_id = *iter_provider_ids; + + /* Prevent duplicate providers: */ + if (g_slist_find_custom (provider_ids_used_already, + provider_id, (GCompareFunc)strcmp) == NULL) { + /* printf("debug: provider_name=%s\n", provider_name); */ + + /* Add the row: */ + GtkTreeIter iter; + gtk_list_store_append (liststore, &iter); + + gtk_list_store_set(liststore, &iter, + MODEL_COL_ID, provider_id, + MODEL_COL_NAME, provider_name, + MODEL_COL_ID_TYPE, MODEST_PROVIDER_PICKER_ID_PROVIDER, + -1); + + provider_ids_used_already = g_slist_prepend ( + provider_ids_used_already, (gpointer)g_strdup (provider_id)); + } + + ++iter_provider_names; + ++iter_provider_ids; + } + + /* Free the result of modest_presets_get_providers() + * as specified by its documentation: */ + g_strfreev (provider_names); + g_strfreev (provider_ids); + + /* Add the provider protocols */ + registry = modest_runtime_get_protocol_registry (); + provider_protos = modest_protocol_registry_get_by_tag (registry, + MODEST_PROTOCOL_REGISTRY_PROVIDER_PROTOCOLS); + tmp = provider_protos; + while (tmp) { + GtkTreeIter iter; + ModestProtocol *proto = MODEST_PROTOCOL (tmp->data); + const gchar *name = modest_protocol_get_display_name (proto); + + /* only add store protocols, no need to duplicate them */ + if (modest_protocol_registry_protocol_type_has_tag (registry, + modest_protocol_get_type_id (proto), + MODEST_PROTOCOL_REGISTRY_STORE_PROTOCOLS)) { + gtk_list_store_append (liststore, &iter); + gtk_list_store_set (liststore, &iter, + MODEL_COL_ID, modest_protocol_get_name (proto), + MODEL_COL_NAME, name, + MODEL_COL_ID_TYPE, MODEST_PROVIDER_PICKER_ID_PLUGIN_PROTOCOL, + -1); + } + tmp = g_slist_next (tmp); + } + g_slist_free (provider_protos); + + g_slist_foreach (provider_ids_used_already, (GFunc)g_free, NULL); + g_slist_free (provider_ids_used_already); + + /* Add the "Other" item: */ + /* Note that ID 0 means "Other" for us: */ + gtk_list_store_prepend (liststore, &other_iter); + gtk_list_store_set (liststore, &other_iter, + MODEL_COL_ID, 0, + MODEL_COL_NAME, _("mcen_va_serviceprovider_other"), + MODEL_COL_ID_TYPE, MODEST_PROVIDER_PICKER_ID_OTHER, + -1); + + /* Select the "Other" item: */ + selector = GTK_WIDGET (hildon_picker_button_get_selector (HILDON_PICKER_BUTTON (self))); + hildon_touch_selector_select_iter (HILDON_TOUCH_SELECTOR (selector), 0, &other_iter, TRUE); + hildon_button_set_value (HILDON_BUTTON (self), + hildon_touch_selector_get_current_text (HILDON_TOUCH_SELECTOR (selector))); + +} + +/** + * Returns the MCC number of the selected provider, + * or NULL if no provider was selected, or "Other" was selected. + */ +gchar* +modest_provider_picker_get_active_provider_id (ModestProviderPicker *self) +{ + GtkTreeIter active; + gboolean found; + GtkWidget *selector; + + g_return_val_if_fail (MODEST_IS_PROVIDER_PICKER(self), NULL); + + selector = GTK_WIDGET (hildon_picker_button_get_selector (HILDON_PICKER_BUTTON (self))); + found = hildon_touch_selector_get_selected (HILDON_TOUCH_SELECTOR (selector), 0, &active); + if (found) { + ModestProviderPickerPrivate *priv = MODEST_PROVIDER_PICKER_GET_PRIVATE (self); + + gchar *id = NULL; + gtk_tree_model_get (priv->model, &active, MODEL_COL_ID, &id, -1); + return g_strdup(id); + } + + return NULL; /* Failed. */ +} + +void +modest_provider_picker_set_others_provider (ModestProviderPicker *self) +{ + GtkTreeModel *model; + GtkTreeIter others_iter; + GtkWidget *selector; + + g_return_if_fail (MODEST_IS_PROVIDER_PICKER(self)); + + selector = GTK_WIDGET (hildon_picker_button_get_selector (HILDON_PICKER_BUTTON (self))); + model = hildon_touch_selector_get_model (HILDON_TOUCH_SELECTOR (selector), 0); + + if (gtk_tree_model_get_iter_first (model, &others_iter)) { + hildon_touch_selector_select_iter (HILDON_TOUCH_SELECTOR (selector), 0, &others_iter, TRUE); + hildon_button_set_value (HILDON_BUTTON (self), + hildon_touch_selector_get_current_text (HILDON_TOUCH_SELECTOR (selector))); + } +} + +ModestProviderPickerIdType +modest_provider_picker_get_active_id_type (ModestProviderPicker *self) +{ + GtkTreeIter active; + GtkWidget *selector; + + g_return_val_if_fail (MODEST_IS_PROVIDER_PICKER (self), + MODEST_PROVIDER_PICKER_ID_OTHER); + + selector = GTK_WIDGET (hildon_picker_button_get_selector (HILDON_PICKER_BUTTON(self))); + + if (hildon_touch_selector_get_selected (HILDON_TOUCH_SELECTOR (self), 0, &active)) { + ModestProviderPickerPrivate *priv = MODEST_PROVIDER_PICKER_GET_PRIVATE (self); + ModestProviderPickerIdType id_type; + + gtk_tree_model_get (priv->model, &active, MODEL_COL_ID_TYPE, &id_type, -1); + return id_type; + } else { + /* Fallback to other */ + return MODEST_PROVIDER_PICKER_ID_OTHER; + } +} diff --git a/src/hildon2/modest-provider-picker.h b/src/hildon2/modest-provider-picker.h new file mode 100644 index 0000000..e9709fb --- /dev/null +++ b/src/hildon2/modest-provider-picker.h @@ -0,0 +1,98 @@ +/* Copyright (c) 2006, 2008 Nokia Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the Nokia Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _MODEST_PROVIDER_PICKER +#define _MODEST_PROVIDER_PICKER + +#include +#include "modest-presets.h" + +G_BEGIN_DECLS + +#define MODEST_TYPE_PROVIDER_PICKER modest_provider_picker_get_type() + +#define MODEST_PROVIDER_PICKER(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ + MODEST_TYPE_PROVIDER_PICKER, ModestProviderPicker)) + +#define MODEST_PROVIDER_PICKER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), \ + MODEST_TYPE_PROVIDER_PICKER, ModestProviderPickerClass)) + +#define MODEST_IS_PROVIDER_PICKER(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ + MODEST_TYPE_PROVIDER_PICKER)) + +#define MODEST_IS_PROVIDER_PICKER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), \ + MODEST_TYPE_PROVIDER_PICKER)) + +#define MODEST_PROVIDER_PICKER_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), \ + MODEST_TYPE_PROVIDER_PICKER, ModestProviderPickerClass)) + +/** The thype of the ID + * + * this means the value of returned by get_active_provider_id will be + * different depending on the value returned by get_active_id_type + * + * If the selected option is a provider then the ID will be the provider ID + * If the selected option is "Other..." the the ID will be 0 + * If the selected option is a provider protocol () the the ID will be protocol name + **/ +typedef enum { + MODEST_PROVIDER_PICKER_ID_PROVIDER, + MODEST_PROVIDER_PICKER_ID_OTHER, + MODEST_PROVIDER_PICKER_ID_PLUGIN_PROTOCOL +} ModestProviderPickerIdType; + +typedef struct { + HildonPickerButton parent; +} ModestProviderPicker; + +typedef struct { + HildonPickerButtonClass parent_class; +} ModestProviderPickerClass; + +GType modest_provider_picker_get_type (void); + +ModestProviderPicker* modest_provider_picker_new (void); + +void modest_provider_picker_fill (ModestProviderPicker *combobox, ModestPresets *presets, + gint mcc); + +gchar* modest_provider_picker_get_active_provider_id (ModestProviderPicker *combobox); + +ModestProviderPickerIdType modest_provider_picker_get_active_id_type (ModestProviderPicker *combobox); + +void modest_provider_picker_set_others_provider (ModestProviderPicker *self); + +G_END_DECLS + +#endif /* _MODEST_PROVIDER_PICKER */