/* FIXME: This is actually a very ugly way to retrieve the text. Ideally, we would have API to retrieve it from the base clase (HildonTouchSelector). In the meantime, leaving it here. */ static gchar * hildon_touch_selector_entry_get_text_from_model (HildonTouchSelectorEntry * selector) { GtkTreeModel *model; GtkTreeIter iter; GtkTreePath *path; GList *selected_rows; gchar *text; gint text_column = -1; model = hildon_touch_selector_get_model (HILDON_TOUCH_SELECTOR (selector), 0); text_column = hildon_touch_selector_entry_get_text_column (selector); selected_rows = hildon_touch_selector_get_selected_rows (HILDON_TOUCH_SELECTOR (selector), 0); if (text_column == -1 || selected_rows == NULL) { return NULL; } /* We are in single selection mode */ g_assert (selected_rows->next == NULL); path = (GtkTreePath *)selected_rows->data; gtk_tree_model_get_iter (model, &iter, path); gtk_tree_model_get (model, &iter, text_column, &text, -1); gtk_tree_path_free (path); g_list_free (selected_rows); return text; }
void DictMngr::CreateDictMngrDialog() { GtkWidget *dialog, *selector; GtkCellRenderer *renderer; HildonTouchSelectorColumn *column; GtkTreeModel *tree_model; GtkTreeIter iter; gboolean iter_valid = TRUE; std::list < std::string > all_dict_list; std::list < std::string > selected_dict_list; GtkListStore *dict_list = NULL; const gint RESPONSE_REORDER = 1; gint response; dict_list = gtk_list_store_new(N_DICT_INFO_COLUMNS, G_TYPE_STRING, /* bookname */ G_TYPE_STRING); /* filename */ /* create dialog */ dialog = gtk_dialog_new(); gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); gtk_window_set_title(GTK_WINDOW(dialog), _("Dictionaries")); gtk_dialog_add_button(GTK_DIALOG(dialog), _("Reorder"), RESPONSE_REORDER); gtk_dialog_add_button(GTK_DIALOG(dialog), "OK", GTK_RESPONSE_ACCEPT); gtk_window_set_default_size(GTK_WINDOW(dialog), -1, 400); /* dictionary selector */ selector = hildon_touch_selector_new(); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), selector); renderer = gtk_cell_renderer_text_new(); g_object_set(G_OBJECT(renderer), "xpad", 10, "ellipsize", PANGO_ELLIPSIZE_END, "ellipsize-set", TRUE, NULL); column = hildon_touch_selector_append_column(HILDON_TOUCH_SELECTOR (selector), GTK_TREE_MODEL(dict_list), renderer, "text", BOOKNAME_DICT_INFO_COLUMN, NULL); hildon_touch_selector_column_set_text_column(column, 0); /* fill list with all available dictionaries */ GetAllDictionaryList(all_dict_list); for (std::list < std::string >::iterator i = all_dict_list.begin(); i != all_dict_list.end(); ++i) { DictInfo dictinfo; dictinfo.load_from_ifo_file(i->c_str(), 0); gtk_list_store_append(dict_list, &iter); gtk_list_store_set(dict_list, &iter, BOOKNAME_DICT_INFO_COLUMN, dictinfo.bookname.c_str(), FILENAME_DICT_INFO_COLUMN, i->c_str(), -1); } g_object_unref(dict_list); /* set selector mode to multiple */ hildon_touch_selector_set_column_selection_mode(HILDON_TOUCH_SELECTOR (selector), HILDON_TOUCH_SELECTOR_SELECTION_MODE_MULTIPLE); hildon_touch_selector_unselect_all(HILDON_TOUCH_SELECTOR(selector), BOOKNAME_DICT_INFO_COLUMN); /* select all load dictionaries */ tree_model = hildon_touch_selector_get_model(HILDON_TOUCH_SELECTOR(selector), BOOKNAME_DICT_INFO_COLUMN); for (iter_valid = gtk_tree_model_get_iter_first(tree_model, &iter); iter_valid; iter_valid = gtk_tree_model_iter_next(tree_model, &iter)) { const gchar *bookname; gtk_tree_model_get(tree_model, &iter, BOOKNAME_DICT_INFO_COLUMN, &bookname, -1); for (size_t iLib = 0; iLib < oStarDict->oLibs->query_dictmask.size(); iLib++) { if (!strcmp(oStarDict->oLibs->dict_name(iLib).c_str(), bookname)) { hildon_touch_selector_select_iter(HILDON_TOUCH_SELECTOR (selector), BOOKNAME_DICT_INFO_COLUMN, &iter, FALSE); break; } } } /* show dialog */ gtk_widget_show_all(GTK_WIDGET(dialog)); /* run the dialog */ response = gtk_dialog_run(GTK_DIALOG(dialog)); if (response == GTK_RESPONSE_ACCEPT || response == RESPONSE_REORDER) { GList *selected_dicts = NULL; selected_dicts = hildon_touch_selector_get_selected_rows(HILDON_TOUCH_SELECTOR (selector), BOOKNAME_DICT_INFO_COLUMN); if (selected_dicts) { GList *dict = selected_dicts; const gchar *filename; while (dict) { gtk_tree_model_get_iter(GTK_TREE_MODEL(tree_model), &iter, (GtkTreePath *) (dict->data)); gtk_tree_model_get(GTK_TREE_MODEL(tree_model), &iter, FILENAME_DICT_INFO_COLUMN, &filename, -1); selected_dict_list.push_back(std::string(filename)); dict = dict->next; } g_list_foreach(selected_dicts, (GFunc) gtk_tree_path_free, NULL); g_list_free(selected_dicts); } if (oStarDict->oConf->SetStringList("/apps/maemo/mstardict/dict_list", selected_dict_list)) { /* reload dictionaries */ ReLoadDictionaries(selected_dict_list); } } gtk_widget_destroy(GTK_WIDGET(dialog)); if (response == RESPONSE_REORDER) { CreateReorderDialog(); } }