2 * MStarDict - International dictionary for Maemo.
3 * Copyright (C) 2010 Roman Moravcik
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
31 #include <glib/gi18n.h>
32 #include <glib/gstdio.h>
35 #include <hildon/hildon.h>
42 #include "libwrapper.hpp"
44 #include "mstardict.hpp"
46 MStarDict *pMStarDict;
53 MStarDict::MStarDict ()
56 results_widget = NULL;
58 results_view_scroll = NULL;
60 /* create list of ressults */
61 results_list = gtk_list_store_new (N_COLUMNS,
62 G_TYPE_STRING); /* DEF_COLUMN */
64 /* initialize stardict library */
65 oLibs = new Library ();
68 MStarDict::~MStarDict ()
70 /* destroy list of results */
71 g_object_unref (results_list);
73 /* deinitialize stardict library */
78 MStarDict::onResultsViewSelectionChanged (GtkTreeSelection *selection,
83 char *bookname, *def, *exp;
87 if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
88 /* unselect selected rows */
89 gtk_tree_selection_unselect_all (selection);
91 gtk_tree_model_get (model, &iter, DEF_COLUMN, &sWord, -1);
93 /* clear previous search results */
94 mStarDict->results.clear();
96 for (size_t iLib=0; iLib<mStarDict->oLibs->query_dictmask.size(); iLib++) {
97 bFound = mStarDict->oLibs->BuildResultData(mStarDict->oLibs->query_dictmask,
99 mStarDict->oLibs->iCurrentIndex,
104 bookname = g_markup_printf_escaped ("<span color=\"dimgray\" size=\"x-small\">%s</span>",
105 mStarDict->results[0].bookname.c_str());
106 def = g_markup_printf_escaped ("<span color=\"darkred\" weight=\"heavy\" size=\"large\">%s</span>",
107 mStarDict->results[0].def.c_str());
108 exp = g_strdup (mStarDict->results[0].exp.c_str());
110 /* create translation window */
111 mStarDict->CreateTranslationWindow (bookname, def, exp);
118 /* grab focus to search entry */
119 gtk_widget_grab_focus (GTK_WIDGET (mStarDict->search));
125 MStarDict::onSearchEntryChanged (GtkEditable *editable,
126 MStarDict *mStarDict)
128 GtkTreeSelection *selection;
133 sWord = gtk_entry_get_text (GTK_ENTRY (editable));
135 if (strcmp (sWord, "") == 0) {
136 gtk_widget_show (mStarDict->label_widget);
137 gtk_widget_hide (mStarDict->results_widget);
139 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (mStarDict->results_view));
140 gtk_tree_selection_set_mode (selection, GTK_SELECTION_NONE);
143 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (mStarDict->results_view));
144 gtk_tree_selection_unselect_all (selection);
146 switch (analyse_query(sWord, query)) {
149 mStarDict->oLibs->LookupWithFuzzy(sWord);
153 mStarDict->oLibs->LookupWithRule(sWord);
157 bFound = mStarDict->oLibs->SimpleLookup(sWord, mStarDict->oLibs->iCurrentIndex);
159 const gchar *sugWord = mStarDict->oLibs->GetSuggestWord(sWord, mStarDict->oLibs->iCurrentIndex, mStarDict->oLibs->query_dictmask, 0);
161 gchar *sSugWord = g_strdup(sugWord);
162 bFound = mStarDict->oLibs->SimpleLookup(sSugWord, mStarDict->oLibs->iCurrentIndex);
166 mStarDict->oLibs->ListWords(mStarDict->oLibs->iCurrentIndex);
170 // oLibs->LookupData(query, res_list);
177 /* unselect selected rows */
178 gtk_tree_selection_unselect_all (selection);
179 gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
181 gtk_widget_hide (mStarDict->label_widget);
182 gtk_widget_show (mStarDict->results_widget);
188 class GetAllDictList {
190 GetAllDictList(std::list<std::string> &dict_all_list_) :
191 dict_all_list(dict_all_list_) {}
192 void operator()(const std::string& url, bool disable) {
193 dict_all_list.push_back(url);
196 std::list<std::string> &dict_all_list;
200 MStarDict::LoadDictionaries ()
202 strlist_t dicts_dir_list;
203 strlist_t order_list;
204 strlist_t disable_list;
206 std::list<std::string> load_list;
208 /* dictionary directory */
209 dicts_dir_list.push_back (std::string ("/home/user/MyDocs/mstardict"));
211 for_each_file(dicts_dir_list, ".ifo", order_list, disable_list, GetAllDictList(load_list));
212 oLibs->load(load_list);
214 oLibs->query_dictmask.clear();
215 for (std::list<std::string>::iterator i = load_list.begin(); i != load_list.end(); ++i) {
217 if (oLibs->find_lib_by_filename(i->c_str(), iLib)) {
218 InstantDictIndex instance_dict_index;
219 instance_dict_index.type = InstantDictType_LOCAL;
220 instance_dict_index.index = iLib;
221 oLibs->query_dictmask.push_back(instance_dict_index);
225 if (oLibs->iCurrentIndex)
226 g_free (oLibs->iCurrentIndex);
227 oLibs->iCurrentIndex = (CurrentIndex *)g_malloc(sizeof(CurrentIndex) * oLibs->query_dictmask.size());
232 MStarDict::CreateTranslationWindow (const gchar *bookname,
236 GtkWidget *window, *alignment, *pannable, *vbox, *label;
238 window = hildon_stackable_window_new ();
239 gtk_window_set_title (GTK_WINDOW (window), _("Translation"));
241 alignment = gtk_alignment_new (0.0, 0.0, 1.0, 1.0);
242 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment),
243 HILDON_MARGIN_DEFAULT,
244 HILDON_MARGIN_DEFAULT,
245 HILDON_MARGIN_DOUBLE,
246 HILDON_MARGIN_DEFAULT);
247 gtk_container_add (GTK_CONTAINER (window), alignment);
249 pannable = hildon_pannable_area_new ();
250 g_object_set (G_OBJECT (pannable), "mov-mode", HILDON_MOVEMENT_MODE_BOTH,
252 gtk_container_add (GTK_CONTAINER (alignment), pannable);
254 vbox = gtk_vbox_new (FALSE, 0);
255 hildon_pannable_area_add_with_viewport (HILDON_PANNABLE_AREA (pannable),
258 label = gtk_label_new ("Bookname");
259 gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
260 gtk_label_set_markup (GTK_LABEL (label), bookname);
261 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
263 label = gtk_label_new ("Definition");
264 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
265 gtk_label_set_markup (GTK_LABEL (label), def);
266 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
268 label = gtk_label_new ("Expresion");
269 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
270 gtk_label_set_markup (GTK_LABEL (label), exp);
271 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
273 gtk_widget_show_all (window);
277 MStarDict::CreateMainWindow ()
279 HildonProgram *program = NULL;
280 GtkWidget *window, *alignment, *vbox;
281 GtkCellRenderer *renderer;
282 GtkTreeSelection *selection;
285 program = hildon_program_get_instance ();
286 g_set_application_name (_("MStardict"));
289 window = hildon_stackable_window_new ();
290 hildon_program_add_window (program, HILDON_WINDOW (window));
293 alignment = gtk_alignment_new (0.5, 0.5, 1.0, 1.0);
294 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment),
297 HILDON_MARGIN_DEFAULT,
298 HILDON_MARGIN_DEFAULT);
299 gtk_container_add (GTK_CONTAINER (window), alignment);
302 vbox = gtk_vbox_new (FALSE, 0);
303 gtk_container_add (GTK_CONTAINER (alignment), vbox);
305 /* no_search_result label */
306 label_widget = gtk_label_new (_("No search result"));
307 hildon_helper_set_logical_color (label_widget, GTK_RC_FG,
308 GTK_STATE_NORMAL, "SecondaryTextColor");
309 hildon_helper_set_logical_font (label_widget, "LargeSystemFont");
310 gtk_box_pack_start (GTK_BOX (vbox), label_widget, TRUE, TRUE, 0);
312 /* alignment for pannable area */
313 results_widget = gtk_alignment_new (0.5, 0.5, 1.0, 1.0);
314 gtk_alignment_set_padding (GTK_ALIGNMENT (results_widget),
317 HILDON_MARGIN_DEFAULT,
318 HILDON_MARGIN_DEFAULT);
319 gtk_box_pack_start (GTK_BOX (vbox), results_widget, TRUE, TRUE, 0);
321 /* pannable for tree view */
322 results_view_scroll = hildon_pannable_area_new ();
323 gtk_container_add (GTK_CONTAINER (results_widget), results_view_scroll);
325 /* result tree view */
326 results_view = hildon_gtk_tree_view_new (HILDON_UI_MODE_EDIT);
327 gtk_tree_view_set_model (GTK_TREE_VIEW (results_view),
328 GTK_TREE_MODEL (results_list));
329 gtk_container_add (GTK_CONTAINER (results_view_scroll), results_view);
331 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (results_view));
332 g_signal_connect (selection, "changed",
333 G_CALLBACK (onResultsViewSelectionChanged), this);
336 renderer = gtk_cell_renderer_text_new ();
337 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (results_view),
342 g_object_set (G_OBJECT (renderer), "xpad", 10, NULL);
345 search = hildon_entry_new (HILDON_SIZE_FINGER_HEIGHT);
346 gtk_box_pack_end (GTK_BOX (vbox), search, FALSE, TRUE, 0);
347 g_signal_connect (search, "changed",
348 G_CALLBACK (onSearchEntryChanged), this);
351 g_signal_connect (G_OBJECT (window), "destroy",
352 G_CALLBACK (gtk_main_quit), NULL);
354 /* show all widget instead of alignment */
355 gtk_widget_show_all (GTK_WIDGET (window));
356 gtk_widget_hide (results_widget);
358 /* grab focus to search entry */
359 gtk_widget_grab_focus (GTK_WIDGET (search));
363 MStarDict::ResultsListClear()
365 gtk_list_store_clear (results_list);
369 MStarDict::ResultsListInsertLast(const gchar *word)
372 gtk_list_store_append (results_list, &iter);
373 gtk_list_store_set (results_list, &iter, DEF_COLUMN, word, -1);
377 MStarDict::ReScroll()
379 hildon_pannable_area_scroll_to (HILDON_PANNABLE_AREA (results_view_scroll), -1, 0);
383 main (int argc, char **argv)
385 /* initialize hildon */
386 hildon_gtk_init (&argc, &argv);
388 /* initialize localization */
389 setlocale(LC_ALL, "");
390 bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR);
391 bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
392 textdomain(GETTEXT_PACKAGE);
394 /* create main window */
396 pMStarDict = &mStarDict;
397 mStarDict.CreateMainWindow();
399 /* load all dictionaries */
400 mStarDict.LoadDictionaries();