X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmaemo%2Feasysetup%2Fmodest-easysetup-servertype-combo-box.c;h=ab54656ad5458bfc9f43439bb40b529d146e5e5f;hp=f7ea654ef46db80f9f776e1fbb4376d65a7987c3;hb=627c4af6ac85444cc3256fa568baf4a8d62178ae;hpb=3fdfee96b812d8e1794d388a3975334133ccf61b diff --git a/src/maemo/easysetup/modest-easysetup-servertype-combo-box.c b/src/maemo/easysetup/modest-easysetup-servertype-combo-box.c index f7ea654..ab54656 100644 --- a/src/maemo/easysetup/modest-easysetup-servertype-combo-box.c +++ b/src/maemo/easysetup/modest-easysetup-servertype-combo-box.c @@ -1,8 +1,33 @@ -/* Copyright (c) 2007, Nokia Corporation +/* 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 #include "modest-easysetup-servertype-combo-box.h" #include #include @@ -85,9 +110,6 @@ enum MODEL_COLS { }; static void -easysetup_servertype_combo_box_fill (EasysetupServertypeComboBox *combobox); - -static void easysetup_servertype_combo_box_init (EasysetupServertypeComboBox *self) { EasysetupServertypeComboBoxPrivate *priv = SERVERTYPE_COMBO_BOX_GET_PRIVATE (self); @@ -108,53 +130,90 @@ easysetup_servertype_combo_box_init (EasysetupServertypeComboBox *self) 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); - - easysetup_servertype_combo_box_fill (self); } -EasysetupServertypeComboBox* -easysetup_servertype_combo_box_new (void) -{ - return g_object_new (EASYSETUP_TYPE_SERVERTYPE_COMBO_BOX, NULL); -} - -void easysetup_servertype_combo_box_fill (EasysetupServertypeComboBox *combobox) +static void +easysetup_servertype_combo_box_fill (EasysetupServertypeComboBox *combobox, + gboolean filter_providers) { - EasysetupServertypeComboBoxPrivate *priv = SERVERTYPE_COMBO_BOX_GET_PRIVATE (combobox); + EasysetupServertypeComboBoxPrivate *priv; + GtkListStore *liststore; + ModestProtocolRegistry *protocol_registry; + GSList *remote_protocols, *node; + GtkTreeIter iter; /* Remove any existing rows: */ - GtkListStore *liststore = GTK_LIST_STORE (priv->model); + priv = SERVERTYPE_COMBO_BOX_GET_PRIVATE (combobox); + protocol_registry = modest_runtime_get_protocol_registry (); + remote_protocols = modest_protocol_registry_get_by_tag (protocol_registry, MODEST_PROTOCOL_REGISTRY_REMOTE_STORE_PROTOCOLS); + + liststore = GTK_LIST_STORE (priv->model); gtk_list_store_clear (liststore); + + for (node = remote_protocols; node != NULL; node = g_slist_next (node)) { + ModestProtocol* protocol; + gboolean add = TRUE; + + protocol = (ModestProtocol *) node->data; + + /* Do not include the protocols that would be listed + in the providers combo */ + if (filter_providers) + if (modest_protocol_registry_protocol_type_is_provider (protocol_registry, + modest_protocol_get_type_id (protocol))) { + add = FALSE; + } + + if (add) { + gtk_list_store_append (liststore, &iter); + gtk_list_store_set (liststore, &iter, + MODEL_COL_ID, + modest_protocol_get_type_id (protocol), + MODEL_COL_NAME, + modest_protocol_get_display_name (protocol), + -1); + } + } - GtkTreeIter iter; - gtk_list_store_append (liststore, &iter); - gtk_list_store_set (liststore, &iter, MODEL_COL_ID, (gint)MODEST_PROTOCOL_STORE_POP, MODEL_COL_NAME, _("mail_fi_emailtype_pop3"), -1); - - /* Select the POP item: */ - gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combobox), &iter); - - gtk_list_store_append (liststore, &iter); - gtk_list_store_set (liststore, &iter, MODEL_COL_ID, (gint)MODEST_PROTOCOL_STORE_IMAP, MODEL_COL_NAME, _("mail_fi_emailtype_imap"), -1); + g_slist_free (remote_protocols); +} + +EasysetupServertypeComboBox* +easysetup_servertype_combo_box_new (gboolean filter_providers) +{ + EasysetupServertypeComboBox *combo; + + combo = g_object_new (EASYSETUP_TYPE_SERVERTYPE_COMBO_BOX, NULL); + + /* Fill the combo */ + easysetup_servertype_combo_box_fill (combo, filter_providers); + + return combo; } /** * Returns the selected servertype, - * or MODEST_PROTOCOL_UNKNOWN if no servertype was selected. + * or MODEST_PROTOCOL_REGISTRY_TYPE_INVALID if no servertype was selected. */ -ModestProtocol +ModestProtocolType easysetup_servertype_combo_box_get_active_servertype (EasysetupServertypeComboBox *combobox) { GtkTreeIter active; - const gboolean found = gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combobox), &active); + gboolean found; + + found = gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combobox), &active); if (found) { - EasysetupServertypeComboBoxPrivate *priv = SERVERTYPE_COMBO_BOX_GET_PRIVATE (combobox); + EasysetupServertypeComboBoxPrivate *priv; + ModestProtocolType servertype; + + priv = SERVERTYPE_COMBO_BOX_GET_PRIVATE (combobox); - ModestProtocol servertype = MODEST_PROTOCOL_UNKNOWN; + servertype = MODEST_PROTOCOL_REGISTRY_TYPE_INVALID; gtk_tree_model_get (priv->model, &active, MODEL_COL_ID, &servertype, -1); return servertype; } - return MODEST_PROTOCOL_UNKNOWN; /* Failed. */ + return MODEST_PROTOCOL_REGISTRY_TYPE_INVALID; /* Failed. */ } /* This allows us to pass more than one piece of data to the signal handler, @@ -162,7 +221,7 @@ easysetup_servertype_combo_box_get_active_servertype (EasysetupServertypeComboBo typedef struct { EasysetupServertypeComboBox* self; - gint id; + ModestProtocolType id; gboolean found; } ForEachData; @@ -170,10 +229,10 @@ static gboolean on_model_foreach_select_id(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data) { + ModestProtocolType id = MODEST_PROTOCOL_REGISTRY_TYPE_INVALID; ForEachData *state = (ForEachData*)(user_data); /* Select the item if it has the matching ID: */ - guint id = 0; gtk_tree_model_get (model, iter, MODEL_COL_ID, &id, -1); if(id == state->id) { gtk_combo_box_set_active_iter (GTK_COMBO_BOX (state->self), iter); @@ -187,15 +246,19 @@ on_model_foreach_select_id(GtkTreeModel *model, /** * Selects the specified servertype, - * or MODEST_PROTOCOL_UNKNOWN if no servertype was selected. + * or MODEST_PROTOCOL_TRANSPORT_STORE_UNKNOWN if no servertype was selected. */ gboolean -easysetup_servertype_combo_box_set_active_servertype (EasysetupServertypeComboBox *combobox, ModestProtocol servertype) +easysetup_servertype_combo_box_set_active_servertype (EasysetupServertypeComboBox *combobox, ModestProtocolType servertype) { - EasysetupServertypeComboBoxPrivate *priv = SERVERTYPE_COMBO_BOX_GET_PRIVATE (combobox); + EasysetupServertypeComboBoxPrivate *priv; + ForEachData *state; + gboolean result; + priv = SERVERTYPE_COMBO_BOX_GET_PRIVATE (combobox); + /* Create a state instance so we can send two items of data to the signal handler: */ - ForEachData *state = g_new0 (ForEachData, 1); + state = g_new0 (ForEachData, 1); state->self = combobox; state->id = servertype; state->found = FALSE; @@ -203,7 +266,7 @@ easysetup_servertype_combo_box_set_active_servertype (EasysetupServertypeComboBo /* Look at each item, and select the one with the correct ID: */ gtk_tree_model_foreach (priv->model, &on_model_foreach_select_id, state); - const gboolean result = state->found; + result = state->found; /* Free the state instance: */ g_free(state);