* Modified hildon2 wizard to use the new provider picker.
pmo-trunk-r5829
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 \
+++ /dev/null
-/* 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 <gtk/gtkliststore.h>
-#include <gtk/gtkcelllayout.h>
-#include <gtk/gtkcellrenderertext.h>
-#include <glib/gi18n.h>
-#include <modest-text-utils.h>
-#include "modest-protocol-registry.h"
-#include "modest-runtime.h"
-
-#include <stdlib.h>
-#include <string.h> /* For memcpy() */
-
-/* Include config.h so that _() works: */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#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;
- }
-}
+++ /dev/null
-/* 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 <gtk/gtkcombobox.h>
-#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 */
#include <gtk/gtkmessagedialog.h>
#include <gtk/gtkseparator.h>
#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"
GtkWidget *page_account_details;
GtkWidget *account_country_picker;
- GtkWidget *combo_account_serviceprovider;
+ GtkWidget *account_serviceprovider_picker;
GtkWidget *entry_account_title;
GtkWidget *page_user_details;
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)
{
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);
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)
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",
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 ());
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;
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 */
}
/* 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;
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);
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 (
--- /dev/null
+/* 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 <gtk/gtkliststore.h>
+#include <gtk/gtkcelllayout.h>
+#include <gtk/gtkcellrenderertext.h>
+#include <glib/gi18n.h>
+#include <modest-text-utils.h>
+#include "modest-protocol-registry.h"
+#include "modest-runtime.h"
+
+#include <stdlib.h>
+#include <string.h> /* For memcpy() */
+
+/* Include config.h so that _() works: */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#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;
+ }
+}
--- /dev/null
+/* 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 <hildon/hildon-picker-button.h>
+#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 */