X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmaemo%2Feasysetup%2Fmodest-easysetup-provider-combo-box.c;h=0ca0cf323b8c7398b6dd470a572f7d97ac1c3f3d;hp=d4fcdca4fd23f950a3b77a3c0febe3105e731e66;hb=8b526c9f3277121da415cb9c72fec24f02441b64;hpb=acaa1ca87c20110b228946d5678643aa6f3a9862 diff --git a/src/maemo/easysetup/modest-easysetup-provider-combo-box.c b/src/maemo/easysetup/modest-easysetup-provider-combo-box.c index d4fcdca..0ca0cf3 100644 --- a/src/maemo/easysetup/modest-easysetup-provider-combo-box.c +++ b/src/maemo/easysetup/modest-easysetup-provider-combo-box.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include /* For memcpy() */ @@ -105,10 +106,37 @@ easysetup_provider_combo_box_class_init (EasysetupProviderComboBoxClass *klass) enum MODEL_COLS { MODEL_COL_NAME = 0, - MODEL_COL_ID = 1 /* a string, not an int. */ + MODEL_COL_ID = 1 /* a string, not an int. */ }; +/* + * strictly, we should sort providers with mcc=0 after the other ones.... but, we don't have + * that info here, so ignoring for now. + */ +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) @@ -116,7 +144,7 @@ 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"). + * 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 (2, G_TYPE_STRING, G_TYPE_STRING)); @@ -129,11 +157,14 @@ easysetup_provider_combo_box_init (EasysetupProviderComboBox *self) * 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_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "text", MODEL_COL_NAME, NULL); - /* The application should call easysetup_provider_combo_box_fill() - * to actually add some rows. */ + 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* @@ -142,17 +173,10 @@ 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, GSList * list_country_id) +void +easysetup_provider_combo_box_fill (EasysetupProviderComboBox *combobox, ModestPresets *presets, + gint mcc) { - /* If the list is empty then use mcc=0 to get the providers for all countries: */ - GSList *list = list_country_id; - GSList *fake_list = NULL; - if (!list_country_id) { - fake_list = g_slist_append(fake_list, GUINT_TO_POINTER(0)); - list = fake_list; - } - - EasysetupProviderComboBoxPrivate *priv = PROVIDER_COMBO_BOX_GET_PRIVATE (combobox); /* Remove any existing rows: */ @@ -161,71 +185,56 @@ void easysetup_provider_combo_box_fill (EasysetupProviderComboBox *combobox, Mod GSList *provider_ids_used_already = NULL; - GSList *iter_ids = list; - while (iter_ids) { - const guint country_id = GPOINTER_TO_UINT (iter_ids->data); + /* Add the appropriate rows for this country, from the presets file: */ + gchar ** provider_ids = NULL; + gchar ** provider_names = modest_presets_get_providers (presets, mcc, + TRUE /* include_globals */, &provider_ids); + gchar ** iter_provider_names = provider_names; + gchar ** 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; - /* Add the appropriate rows for this country, from the presets file: */ - gchar ** provider_ids = NULL; - gchar ** provider_names = modest_presets_get_providers (presets, country_id, - TRUE /* include_globals */, &provider_ids); - - gchar ** iter_provider_names = provider_names; - gchar ** 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; - if(!provider_name) - continue; - - const gchar* provider_id = *iter_provider_ids; - if(!provider_id) - continue; + /* 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); - /* 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); */ + gtk_list_store_set(liststore, &iter, + MODEL_COL_ID, provider_id, + MODEL_COL_NAME, provider_name, -1); - /* 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, -1); - - provider_ids_used_already = g_slist_append ( - provider_ids_used_already, (gpointer)g_strdup (provider_id)); - } - + provider_ids_used_already = g_slist_prepend ( + provider_ids_used_already, (gpointer)g_strdup (provider_id)); + } + ++iter_provider_names; - ++iter_provider_ids; + ++iter_provider_ids; } - - /* Free the result of modest_presets_get_providers() - * as specified by its documentation: */ - g_strfreev (provider_names); - g_strfreev (provider_ids); - - iter_ids = g_slist_next (iter_ids); - } + + /* Free the result of modest_presets_get_providers() + * as specified by its documentation: */ + g_strfreev (provider_names); + g_strfreev (provider_ids); + /* Add the "Other" item: */ /* Note that ID 0 means "Other" for us: */ /* TODO: We need a Logical ID for this text. */ GtkTreeIter iter; gtk_list_store_prepend (liststore, &iter); - gtk_list_store_set (liststore, &iter, MODEL_COL_ID, 0, MODEL_COL_NAME, _("mcen_va_serviceprovider_other"), -1); + gtk_list_store_set (liststore, &iter, MODEL_COL_ID, 0, MODEL_COL_NAME, _("mcen_va_serviceprovider_other"), + -1); /* Select the "Other" item: */ gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combobox), &iter); g_slist_foreach (provider_ids_used_already, (GFunc)g_free, NULL); g_slist_free (provider_ids_used_already); - - if (fake_list) - g_slist_free (fake_list); } /**