#include <gtk/gtkbutton.h>
#include <gtk/gtkmessagedialog.h>
#include <gtk/gtkseparator.h>
-#include "modest-provider-picker.h"
#include "modest-servertype-picker.h"
#include "widgets/modest-validating-entry.h"
#include "modest-text-utils.h"
GtkWidget *page_account_details;
GtkWidget *account_country_selector;
- GtkWidget *account_serviceprovider_picker;
+ GtkWidget *account_serviceprovider_selector;
GtkWidget *entry_account_title;
GtkWidget *caption_account_title;
}
static void
-on_serviceprovider_picker_button_value_changed (HildonPickerButton *widget, gpointer user_data)
+on_serviceprovider_selector_value_changed (GtkWidget *widget, gpointer user_data)
{
gchar* default_account_name_start;
gchar* default_account_name;
ModestEasysetupWizardDialog *self;
ModestEasysetupWizardDialogPrivate *priv;
- ModestProviderPickerIdType provider_id_type;
+ ModestProviderSelectorIdType provider_id_type;
ModestProtocol *protocol;
gchar *proto_name;
ModestProtocolType proto_type;
on_picker_button_value_changed (GTK_WIDGET (widget), user_data);
- provider_id_type = modest_provider_picker_get_active_id_type (
- MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker));
- if (provider_id_type == MODEST_PROVIDER_PICKER_ID_OTHER) {
+ provider_id_type = modest_provider_selector_get_active_id_type (
+ priv->account_serviceprovider_selector);
+ if (provider_id_type == MODEST_PROVIDER_SELECTOR_ID_OTHER) {
default_account_name_start = g_strdup (_("mcen_ia_emailsetup_defaultname"));
} else {
- GtkWidget *selector;
-
- selector = GTK_WIDGET (hildon_picker_button_get_selector (HILDON_PICKER_BUTTON (widget)));
- default_account_name_start =
- g_strdup (hildon_touch_selector_get_current_text (HILDON_TOUCH_SELECTOR (selector)));
-
+ /* obtain properly the account name! */
+ default_account_name_start = modest_provider_selector_get_active_provider_label (widget);
}
default_account_name = modest_account_mgr_get_unused_account_display_name (
priv->account_manager, default_account_name_start);
default_account_name_start = NULL;
hide_account_title = FALSE;
- proto_name = modest_provider_picker_get_active_provider_id (MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker));
+ proto_name = modest_provider_selector_get_active_provider_id (priv->account_serviceprovider_selector);
if (proto_name != NULL) {
protocol = modest_protocol_registry_get_protocol_by_name (modest_runtime_get_protocol_registry (),
MODEST_PROTOCOL_REGISTRY_PROVIDER_PROTOCOLS,
priv->dirty = TRUE;
- /* Fill the providers picker, based on the selected country: */
+ /* Fill the providers selector, based on the selected country: */
if (priv->presets != NULL) {
gint mcc = modest_country_selector_get_active_country_mcc (priv->account_country_selector);
- modest_provider_picker_fill (
- MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker), priv->presets, mcc);
+ modest_provider_selector_fill (priv->account_serviceprovider_selector, priv->presets, mcc);
}
}
priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self);
/* Fill the providers combo, based on the selected country: */
- provider_id = modest_provider_picker_get_active_provider_id (
- MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker));
+ provider_id = modest_provider_selector_get_active_provider_id (
+ priv->account_serviceprovider_selector);
if (provider_id) {
gchar *domain_name = modest_presets_get_domain (priv->presets, provider_id);
}
static void
-on_account_serviceprovider_selector_changed (HildonTouchSelector *widget, gint column, gpointer user_data)
+on_account_serviceprovider_selector_changed (GtkWidget *widget, gint column, gpointer user_data)
+{
+ ModestEasysetupWizardDialog *self = MODEST_EASYSETUP_WIZARD_DIALOG (user_data);
+ g_assert(self);
+ ModestEasysetupWizardDialogPrivate *priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self);
+
+ priv->dirty = TRUE;
+
+ update_user_email_from_provider (self);
+}
+
+static void
+on_account_serviceprovider_selector_combo_box_changed (GtkWidget *widget, gpointer user_data)
{
ModestEasysetupWizardDialog *self = MODEST_EASYSETUP_WIZARD_DIALOG (user_data);
g_assert(self);
gtk_widget_show (priv->account_country_selector);
/* The service provider widgets: */
- priv->account_serviceprovider_picker = GTK_WIDGET (modest_provider_picker_new (MODEST_EDITABLE_SIZE,
- HILDON_BUTTON_ARRANGEMENT_HORIZONTAL));
- modest_maemo_utils_set_hbutton_layout (title_sizegroup, value_sizegroup,
- _("mcen_fi_serviceprovider"),
- priv->account_serviceprovider_picker);
- g_signal_connect (G_OBJECT (priv->account_serviceprovider_picker), "value-changed",
- G_CALLBACK (on_serviceprovider_picker_button_value_changed), self);
- gtk_box_pack_start (GTK_BOX (box), priv->account_serviceprovider_picker, FALSE, FALSE, 0);
- gtk_widget_show (priv->account_serviceprovider_picker);
+ priv->account_serviceprovider_selector = modest_toolkit_factory_create_provider_selector (modest_runtime_get_toolkit_factory ());
+ if (GTK_IS_COMBO_BOX (priv->account_serviceprovider_selector)) {
+ GtkWidget *captioned;
+ g_signal_connect (G_OBJECT (priv->account_serviceprovider_selector), "changed",
+ G_CALLBACK (on_serviceprovider_selector_value_changed), self);
+ captioned = modest_maemo_utils_create_captioned (title_sizegroup, value_sizegroup,
+ _("mcen_fi_serviceprovider"), FALSE,
+ priv->account_serviceprovider_selector);
+
+ gtk_box_pack_start (GTK_BOX (box), captioned, FALSE, FALSE, MODEST_MARGIN_HALF);
+ gtk_widget_show (captioned);
+ } else {
+ modest_maemo_utils_set_hbutton_layout (title_sizegroup, value_sizegroup,
+ _("mcen_fi_serviceprovider"),
+ priv->account_serviceprovider_selector);
+ g_signal_connect (G_OBJECT (priv->account_serviceprovider_selector), "value-changed",
+ G_CALLBACK (on_serviceprovider_selector_value_changed), self);
+ gtk_box_pack_start (GTK_BOX (box), priv->account_serviceprovider_selector, FALSE, FALSE, 0);
+ }
+ gtk_widget_show (priv->account_serviceprovider_selector);
/* The description widgets: */
priv->entry_account_title = GTK_WIDGET (modest_validating_entry_new ());
priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self);
/* Work out the user email address */
- provider_id = modest_provider_picker_get_active_provider_id (
- MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker));
+ provider_id = modest_provider_selector_get_active_provider_id (
+ priv->account_serviceprovider_selector);
if (provider_id) {
const gchar *current_username;
modest_country_selector_set_active_country_locale (priv->account_country_selector);
mcc = modest_country_selector_get_active_country_mcc (priv->account_country_selector);
- modest_provider_picker_fill (
- MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker),
+ modest_provider_selector_fill (
+ priv->account_serviceprovider_selector,
priv->presets, mcc);
/* connect to providers picker's changed signal, so we can fill the email address: */
- 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);
-
- modest_provider_picker_set_others_provider (MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker));
+ if (GTK_IS_COMBO_BOX (priv->account_serviceprovider_selector)) {
+ g_signal_connect (priv->account_serviceprovider_selector,
+ "changed",
+ G_CALLBACK (on_account_serviceprovider_selector_combo_box_changed), self);
+ } else {
+ g_signal_connect (G_OBJECT (hildon_picker_button_get_selector
+ (HILDON_PICKER_BUTTON (priv->account_serviceprovider_selector))),
+ "changed",
+ G_CALLBACK (on_account_serviceprovider_selector_changed), self);
+ }
+ modest_provider_selector_set_others_provider (priv->account_serviceprovider_selector);
}
priv->dirty = FALSE;
create_subsequent_pages (ModestEasysetupWizardDialog *self)
{
ModestEasysetupWizardDialogPrivate *priv;
- ModestProviderPicker *picker;
- ModestProviderPickerIdType id_type;
+ GtkWidget *picker;
+ ModestProviderSelectorIdType id_type;
GtkNotebook *notebook;
priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self);
- picker = MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker);
- id_type = modest_provider_picker_get_active_id_type (picker);
+ picker = priv->account_serviceprovider_selector;
+ id_type = modest_provider_selector_get_active_id_type (picker);
g_object_get (self, "wizard-notebook", ¬ebook, NULL);
/* Remove the response override handler for non-plugin
protocols. For plugins it'll be overriden later */
- if (id_type != MODEST_PROVIDER_PICKER_ID_PLUGIN_PROTOCOL)
+ if (id_type != MODEST_PROVIDER_SELECTOR_ID_PLUGIN_PROTOCOL)
modest_wizard_dialog_set_response_override_handler (MODEST_WIZARD_DIALOG (self),
NULL);
- if (id_type == MODEST_PROVIDER_PICKER_ID_OTHER) {
+ if (id_type == MODEST_PROVIDER_SELECTOR_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 == MODEST_PROVIDER_PICKER_ID_PLUGIN_PROTOCOL) {
+ if (id_type == MODEST_PROVIDER_SELECTOR_ID_PLUGIN_PROTOCOL) {
ModestProtocol *protocol;
gchar *proto_name;
ModestProtocolType proto_type;
ModestWizardDialogResponseOverrideFunc response_override;
/* Get protocol data */
- proto_name = modest_provider_picker_get_active_provider_id (picker);
+ proto_name = modest_provider_selector_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;
- ModestProviderPicker *picker;
- ModestProviderPickerIdType id_type;
+ GtkWidget *picker;
+ ModestProviderSelectorIdType id_type;
priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self);
- picker = MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker);
+ picker = priv->account_serviceprovider_selector;
protocol_registry = modest_runtime_get_protocol_registry ();
/* Get details from the specified presets: */
- id_type = modest_provider_picker_get_active_id_type (picker);
- provider_id = modest_provider_picker_get_active_provider_id (picker);
+ id_type = modest_provider_selector_get_active_id_type (picker);
+ provider_id = modest_provider_selector_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 == MODEST_PROVIDER_PICKER_ID_PLUGIN_PROTOCOL) {
+ if (id_type == MODEST_PROVIDER_SELECTOR_ID_PLUGIN_PROTOCOL) {
ModestProtocol *protocol;
protocol = modest_protocol_registry_get_protocol_by_name (
modest-details-dialog.h \
modest-progress-bar.c \
modest-progress-bar.h \
+ modest-provider-combo-box.c \
+ modest-provider-combo-box.h \
modest-recpt-editor.c \
modest-recpt-editor.h \
modest-recpt-view.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-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 <modest-account-protocol.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 (ModestProviderComboBox, modest_provider_combo_box, GTK_TYPE_COMBO_BOX);
+
+#define MODEST_PROVIDER_COMBO_BOX_GET_PRIVATE(o) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEST_TYPE_PROVIDER_COMBO_BOX, ModestProviderComboBoxPrivate))
+
+typedef struct _ModestProviderComboBoxPrivate ModestProviderComboBoxPrivate;
+
+struct _ModestProviderComboBoxPrivate
+{
+ GtkTreeModel *model;
+};
+
+static void
+modest_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
+modest_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
+modest_provider_combo_box_dispose (GObject *object)
+{
+ if (G_OBJECT_CLASS (modest_provider_combo_box_parent_class)->dispose)
+ G_OBJECT_CLASS (modest_provider_combo_box_parent_class)->dispose (object);
+}
+
+static void
+modest_provider_combo_box_finalize (GObject *object)
+{
+ ModestProviderComboBoxPrivate *priv = MODEST_PROVIDER_COMBO_BOX_GET_PRIVATE (object);
+
+ g_object_unref (G_OBJECT (priv->model));
+
+ G_OBJECT_CLASS (modest_provider_combo_box_parent_class)->finalize (object);
+}
+
+static void
+modest_provider_combo_box_class_init (ModestProviderComboBoxClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (ModestProviderComboBoxPrivate));
+
+ object_class->get_property = modest_provider_combo_box_get_property;
+ object_class->set_property = modest_provider_combo_box_set_property;
+ object_class->dispose = modest_provider_combo_box_dispose;
+ object_class->finalize = modest_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
+modest_provider_combo_box_init (ModestProviderComboBox *self)
+{
+ ModestProviderComboBoxPrivate *priv = MODEST_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);
+}
+
+ModestProviderComboBox*
+modest_provider_combo_box_new (void)
+{
+ ModestProviderComboBox *self;
+
+ self = g_object_new (MODEST_TYPE_PROVIDER_COMBO_BOX, NULL);
+ modest_provider_combo_box_set_others_provider (MODEST_PROVIDER_COMBO_BOX (self));
+
+ return self;
+}
+
+void
+modest_provider_combo_box_fill (ModestProviderComboBox *combobox,
+ ModestPresets *presets,
+ gint mcc)
+{
+ GtkTreeIter other_iter;
+ ModestProviderComboBoxPrivate *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 (MODEST_IS_PROVIDER_COMBO_BOX(combobox));
+
+ priv = MODEST_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, MODEST_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);
+
+ /* 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)) {
+ gboolean supported;
+
+ supported = modest_account_protocol_is_supported (MODEST_ACCOUNT_PROTOCOL (proto));
+
+ if (supported) {
+ const gchar *name = modest_protocol_get_display_name (proto);
+
+ 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_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, MODEST_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*
+modest_provider_combo_box_get_active_provider_id (ModestProviderComboBox *combobox)
+{
+ GtkTreeIter active;
+
+ g_return_val_if_fail (MODEST_IS_PROVIDER_COMBO_BOX(combobox), NULL);
+
+ const gboolean found = gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combobox), &active);
+ if (found) {
+ ModestProviderComboBoxPrivate *priv = MODEST_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. */
+}
+
+gchar*
+modest_provider_combo_box_get_active_provider_label (ModestProviderComboBox *combobox)
+{
+ GtkTreeIter active;
+
+ g_return_val_if_fail (MODEST_IS_PROVIDER_COMBO_BOX(combobox), NULL);
+
+ const gboolean found = gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combobox), &active);
+ if (found) {
+ ModestProviderComboBoxPrivate *priv = MODEST_PROVIDER_COMBO_BOX_GET_PRIVATE (combobox);
+
+ gchar *label = NULL;
+ gtk_tree_model_get (priv->model, &active, MODEL_COL_NAME, &label, -1);
+ return g_strdup(label);
+ }
+
+ return NULL; /* Failed. */
+}
+
+void
+modest_provider_combo_box_set_others_provider (ModestProviderComboBox *combobox)
+{
+ GtkTreeModel *model;
+ GtkTreeIter others_iter;
+
+ g_return_if_fail (MODEST_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);
+}
+
+ModestProviderComboBoxIdType
+modest_provider_combo_box_get_active_id_type (ModestProviderComboBox *combobox)
+{
+ GtkTreeIter active;
+
+ g_return_val_if_fail (MODEST_IS_PROVIDER_COMBO_BOX (combobox),
+ MODEST_PROVIDER_COMBO_BOX_ID_OTHER);
+
+ if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combobox), &active)) {
+ ModestProviderComboBoxPrivate *priv = MODEST_PROVIDER_COMBO_BOX_GET_PRIVATE (combobox);
+ ModestProviderComboBoxIdType 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_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 _MODEST_PROVIDER_COMBO_BOX
+#define _MODEST_PROVIDER_COMBO_BOX
+
+#include <gtk/gtkcombobox.h>
+#include <modest-presets.h>
+
+G_BEGIN_DECLS
+
+#define MODEST_TYPE_PROVIDER_COMBO_BOX modest_provider_combo_box_get_type()
+
+#define MODEST_PROVIDER_COMBO_BOX(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ MODEST_TYPE_PROVIDER_COMBO_BOX, ModestProviderComboBox))
+
+#define MODEST_PROVIDER_COMBO_BOX_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ MODEST_TYPE_PROVIDER_COMBO_BOX, ModestProviderComboBoxClass))
+
+#define MODEST_IS_PROVIDER_COMBO_BOX(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ MODEST_TYPE_PROVIDER_COMBO_BOX))
+
+#define MODEST_IS_PROVIDER_COMBO_BOX_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ MODEST_TYPE_PROVIDER_COMBO_BOX))
+
+#define MODEST_PROVIDER_COMBO_BOX_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ MODEST_TYPE_PROVIDER_COMBO_BOX, ModestProviderComboBoxClass))
+
+/** The type 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 singleton provider protocol then the ID will be protocol name
+ **/
+typedef enum {
+ MODEST_PROVIDER_COMBO_BOX_ID_PROVIDER,
+ MODEST_PROVIDER_COMBO_BOX_ID_OTHER,
+ MODEST_PROVIDER_COMBO_BOX_ID_PLUGIN_PROTOCOL
+} ModestProviderComboBoxIdType;
+
+typedef struct {
+ GtkComboBox parent;
+} ModestProviderComboBox;
+
+typedef struct {
+ GtkComboBoxClass parent_class;
+} ModestProviderComboBoxClass;
+
+GType modest_provider_combo_box_get_type (void);
+
+ModestProviderComboBox* modest_provider_combo_box_new (void);
+
+void modest_provider_combo_box_fill (ModestProviderComboBox *combobox, ModestPresets *presets,
+ gint mcc);
+
+gchar* modest_provider_combo_box_get_active_provider_id (ModestProviderComboBox *combobox);
+
+gchar* modest_provider_combo_box_get_active_provider_label (ModestProviderComboBox *combobox);
+
+ModestProviderComboBoxIdType modest_provider_combo_box_get_active_id_type (ModestProviderComboBox *combobox);
+
+void modest_provider_combo_box_set_others_provider (ModestProviderComboBox *self);
+
+
+G_END_DECLS
+
+#endif /* _MODEST_PROVIDER_COMBO_BOX */
#define USE_GTK_ENTRY
#define USE_GTK_FILE_CHOOSER
#define USE_COUNTRY_COMBOBOX
+#define USE_PROVIDER_COMBOBOX
#endif
#ifdef USE_SCROLLED_WINDOW
#include <modest-country-picker.h>
#endif
+#ifdef USE_PROVIDER_COMBOBOX
+#include <modest-provider-combo-box.h>
+#else
+#include <modest-provider-picker.h>
+#endif
+
static void modest_toolkit_factory_class_init (ModestToolkitFactoryClass *klass);
static void modest_toolkit_factory_init (ModestToolkitFactory *self);
GtkWindow *parent,
GtkFileChooserAction action);
static GtkWidget * modest_toolkit_factory_create_country_selector_default (ModestToolkitFactory *self);
+static GtkWidget * modest_toolkit_factory_create_provider_selector_default (ModestToolkitFactory *self);
/* globals */
static GObjectClass *parent_class = NULL;
klass->create_number_entry = modest_toolkit_factory_create_number_entry_default;
klass->create_file_chooser_dialog = modest_toolkit_factory_create_file_chooser_dialog_default;
klass->create_country_selector = modest_toolkit_factory_create_country_selector_default;
+ klass->create_provider_selector = modest_toolkit_factory_create_provider_selector_default;
}
static void
return modest_country_picker_set_active_country_locale (MODEST_COUNTRY_PICKER (widget));
#endif
}
+
+GtkWidget *
+modest_toolkit_factory_create_provider_selector (ModestToolkitFactory *self)
+{
+ return MODEST_TOOLKIT_FACTORY_GET_CLASS (self)->create_provider_selector (self);
+}
+
+static GtkWidget *
+modest_toolkit_factory_create_provider_selector_default (ModestToolkitFactory *self)
+{
+ GtkWidget *result;
+#ifdef USE_PROVIDER_COMBOBOX
+ result = modest_provider_combo_box_new ();
+#else
+ result = GTK_WIDGET (modest_provider_picker_new (MODEST_EDITABLE_SIZE,
+ HILDON_BUTTON_ARRANGEMENT_HORIZONTAL));
+#endif
+ return result;
+}
+
+void
+modest_provider_selector_fill (GtkWidget *widget,
+ ModestPresets *presets,
+ gint mcc)
+{
+#ifdef USE_PROVIDER_COMBOBOX
+ modest_provider_combo_box_fill (MODEST_PROVIDER_COMBO_BOX (widget),
+ presets,
+ mcc);
+#else
+ modest_provider_picker_fill (MODEST_PROVIDER_PICKER (widget),
+ presets,
+ mcc);
+#endif
+}
+
+gchar *
+modest_provider_selector_get_active_provider_id (GtkWidget *widget)
+{
+#ifdef USE_PROVIDER_COMBOBOX
+ return modest_provider_combo_box_get_active_provider_id (MODEST_PROVIDER_COMBO_BOX (widget));
+#else
+ return modest_provider_picker_get_active_provider_id (MODEST_PROVIDER_PICKER (widget));
+#endif
+}
+
+gchar *
+modest_provider_selector_get_active_provider_label (GtkWidget *widget)
+{
+#ifdef USE_PROVIDER_COMBOBOX
+
+ return modest_provider_combo_box_get_active_provider_label (MODEST_PROVIDER_COMBO_BOX (widget));
+#else
+ GtkWidget *selector;
+
+ selector = GTK_WIDGET (hildon_picker_button_get_selector (HILDON_PICKER_BUTTON (widget)));
+ return g_strdup (hildon_touch_selector_get_current_text (HILDON_TOUCH_SELECTOR (selector)));
+#endif
+}
+
+ModestProviderSelectorIdType
+modest_provider_selector_get_active_id_type (GtkWidget *widget)
+{
+ ModestProviderSelectorIdType result;
+#ifdef USE_PROVIDER_COMBOBOX
+ ModestProviderComboBoxIdType id_type;
+
+ id_type = modest_provider_combo_box_get_active_id_type (MODEST_PROVIDER_COMBO_BOX (widget));
+ switch (id_type) {
+ case MODEST_PROVIDER_COMBO_BOX_ID_PROVIDER:
+ result = MODEST_PROVIDER_SELECTOR_ID_PROVIDER;
+ break;
+ case MODEST_PROVIDER_COMBO_BOX_ID_OTHER:
+ result = MODEST_PROVIDER_SELECTOR_ID_OTHER;
+ break;
+ case MODEST_PROVIDER_COMBO_BOX_ID_PLUGIN_PROTOCOL:
+ result = MODEST_PROVIDER_SELECTOR_ID_PLUGIN_PROTOCOL;
+ break;
+ default:
+ result = MODEST_PROVIDER_SELECTOR_ID_OTHER;
+ }
+ return result;
+#else
+ ModestProviderPickerIdType id_type;
+
+ id_type = modest_provider_picker_get_active_id_type (MODEST_PROVIDER_PICKER (widget));
+ switch (id_type) {
+ case MODEST_PROVIDER_PICKER_ID_PROVIDER:
+ result = MODEST_PROVIDER_SELECTOR_ID_PROVIDER;
+ break;
+ case MODEST_PROVIDER_PICKER_ID_OTHER:
+ result = MODEST_PROVIDER_SELECTOR_ID_OTHER;
+ break;
+ case MODEST_PROVIDER_PICKER_ID_PLUGIN_PROTOCOL:
+ result = MODEST_PROVIDER_SELECTOR_ID_PLUGIN_PROTOCOL;
+ break;
+ default:
+ result = MODEST_PROVIDER_SELECTOR_ID_OTHER;
+ }
+#endif
+ return result;
+}
+
+void
+modest_provider_selector_set_others_provider (GtkWidget *self)
+{
+#ifdef USE_PROVIDER_COMBOBOX
+ modest_provider_combo_box_set_others_provider (MODEST_PROVIDER_COMBO_BOX (self));
+#else
+ modest_provider_picker_set_others_provider (MODEST_PROVIDER_PICKER (self));
+#endif
+}
#include <glib-object.h>
#include <gtk/gtk.h>
+#include <modest-presets.h>
G_BEGIN_DECLS
GtkWidget * (*create_file_chooser_dialog) (ModestToolkitFactory *self, const gchar *title,
GtkWindow *parent, GtkFileChooserAction action);
GtkWidget * (*create_country_selector) (ModestToolkitFactory *self);
+ GtkWidget * (*create_provider_selector) (ModestToolkitFactory *self);
};
struct _ModestToolkitFactory
GtkWidget *
modest_toolkit_factory_create_country_selector (ModestToolkitFactory *self);
+GtkWidget *
+modest_toolkit_factory_create_provider_selector (ModestToolkitFactory *self);
+
gboolean
modest_togglable_get_active (GtkWidget *widget);
gboolean
modest_country_selector_set_active_country_locale (GtkWidget *widget);
+typedef enum {
+ MODEST_PROVIDER_SELECTOR_ID_PROVIDER,
+ MODEST_PROVIDER_SELECTOR_ID_OTHER,
+ MODEST_PROVIDER_SELECTOR_ID_PLUGIN_PROTOCOL
+} ModestProviderSelectorIdType;
+
+
+void
+modest_provider_selector_fill (GtkWidget *widget, ModestPresets *presets, gint mcc);
+
+gchar *
+modest_provider_selector_get_active_provider_id (GtkWidget *widget);
+
+gchar *
+modest_provider_selector_get_active_provider_label (GtkWidget *widget);
+
+ModestProviderSelectorIdType
+modest_provider_selector_get_active_id_type (GtkWidget *widget);
+
+void
+modest_provider_selector_set_others_provider (GtkWidget *self);
+
#ifndef MODEST_TOOLKIT_HILDON2
#define USE_GTK_SPIN_BUTTON