#include "conf.hpp"
#include "dictmngr.hpp"
#include "libwrapper.hpp"
+#include "transwin.hpp"
#include "mstardict.hpp"
+MStarDict *pMStarDict;
+
enum {
DEF_COLUMN,
N_COLUMNS
MStarDict::MStarDict()
{
- main_window = NULL;
+ window = NULL;
label_widget = NULL;
results_widget = NULL;
results_view = NULL;
/* initialize configuration */
oConf = new Conf();
+ /* initialize stardict plugins */
+ std::list < std::string > plugin_order_list;
+ std::list < std::string > plugin_disable_list;
+ oStarDictPlugins = new StarDictPlugins("/usr/lib/mstardict/plugins",
+ plugin_order_list,
+ plugin_disable_list);
+
/* initialize dict manager */
oDict = new DictMngr(this);
+ /* initialize translation window */
+ oTransWin = new TransWin(this);
+
/* initialize stardict library */
oLibs = new Library(this);
}
/* deinitialize stardict library */
delete oLibs;
+ /* deinitialize translation window */
+ delete oTransWin;
+
/* deinitialize dict manager */
delete oDict;
+ /* deinitialize stardict plugins */
+ delete oStarDictPlugins;
+
/* deinitialize configuration */
delete oConf;
}
{
GtkTreeModel *model;
GtkTreeIter iter;
- char *bookname, *def, *exp;
const gchar *sWord;
bool bFound = false;
if (gtk_tree_selection_get_selected(selection, &model, &iter)) {
+ GList *results = NULL;
+
/* unselect selected rows */
gtk_tree_selection_unselect_all(selection);
gtk_tree_model_get(model, &iter, DEF_COLUMN, &sWord, -1);
- /* clear previous search results */
- mStarDict->results.clear();
-
for (size_t iLib = 0; iLib < mStarDict->oLibs->query_dictmask.size(); iLib++) {
bFound =
mStarDict->oLibs->BuildResultData(mStarDict->oLibs->query_dictmask, sWord,
mStarDict->oLibs->iCurrentIndex, iLib,
- mStarDict->results);
+ &results);
}
- bookname =
- g_markup_printf_escaped
- ("<span color=\"dimgray\" size=\"x-small\">%s</span>",
- mStarDict->results[0].bookname.c_str());
- def =
- g_markup_printf_escaped
- ("<span color=\"darkred\" weight=\"heavy\" size=\"large\">%s</span>",
- mStarDict->results[0].def.c_str());
- exp = g_strdup(mStarDict->results[0].exp.c_str());
-
/* create translation window */
- mStarDict->CreateTranslationWindow(bookname, def, exp);
+ mStarDict->oTransWin->CreateTransWindow(results);
- g_free(bookname);
- g_free(def);
- g_free(exp);
+ /* free result data */
+ mStarDict->oLibs->FreeResultData(results);
}
/* grab focus to search entry */
- gtk_widget_grab_focus(GTK_WIDGET(mStarDict->search));
+ mStarDict->GrabFocus();
return true;
}
}
gboolean
+MStarDict::onSearchClearClicked(GtkButton* button,
+ MStarDict* mStarDict)
+{
+ gtk_entry_set_text(GTK_ENTRY(mStarDict->search_entry), "");
+ mStarDict->GrabFocus();
+ return true;
+}
+
+gboolean
MStarDict::onDictionariesMenuItemClicked(GtkButton *button,
MStarDict *mStarDict)
{
mStarDict->oDict->CreateDictMngrDialog();
+
+ /* trigger re-search */
+ mStarDict->onSearchEntryChanged(GTK_EDITABLE(mStarDict->search_entry), mStarDict);
+ mStarDict->GrabFocus();
return true;
}
{
if (event->type == GDK_KEY_PRESS && event->keyval == GDK_KP_Enter) {
mStarDict->SearchWord();
+ } else if (event->type == GDK_KEY_PRESS && event->keyval >= 0x21 && event->keyval <= 0x7E) {
+ mStarDict->GrabFocus();
}
return false;
}
/* create dialog */
dialog = gtk_dialog_new();
gtk_window_set_title(GTK_WINDOW(dialog), _("Searching"));
- gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(main_window));
+ gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(window));
gtk_dialog_add_button(GTK_DIALOG(dialog), _("Cancel"), GTK_RESPONSE_OK);
g_signal_connect(dialog, "response", G_CALLBACK(onLookupProgressDialogResponse), cancel);
/* add progress bar */
progress = gtk_progress_bar_new();
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), progress);
- g_object_set_data(G_OBJECT(dialog), "progress", progress);
+ g_object_set_data(G_OBJECT(dialog), "progress_bar", progress);
/* show dialog */
gtk_widget_show_all(dialog);
}
void
-MStarDict::CreateTranslationWindow(const gchar *bookname,
- const gchar *def,
- const gchar *exp)
-{
- GtkWidget *window, *alignment, *pannable, *vbox, *label;
-
- window = hildon_stackable_window_new();
- gtk_window_set_title(GTK_WINDOW(window), _("Translation"));
-
- alignment = gtk_alignment_new(0.0, 0.0, 1.0, 1.0);
- gtk_alignment_set_padding(GTK_ALIGNMENT(alignment),
- HILDON_MARGIN_DEFAULT,
- HILDON_MARGIN_DEFAULT, HILDON_MARGIN_DOUBLE, HILDON_MARGIN_DEFAULT);
- gtk_container_add(GTK_CONTAINER(window), alignment);
-
- pannable = hildon_pannable_area_new();
- g_object_set(G_OBJECT(pannable), "mov-mode", HILDON_MOVEMENT_MODE_BOTH, NULL);
- gtk_container_add(GTK_CONTAINER(alignment), pannable);
-
- vbox = gtk_vbox_new(FALSE, 0);
- hildon_pannable_area_add_with_viewport(HILDON_PANNABLE_AREA(pannable), vbox);
-
- label = gtk_label_new("Bookname");
- gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
- gtk_label_set_markup(GTK_LABEL(label), bookname);
- gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
-
- label = gtk_label_new("Definition");
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_label_set_markup(GTK_LABEL(label), def);
- gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
-
- label = gtk_label_new("Expresion");
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
- gtk_label_set_markup(GTK_LABEL(label), exp);
- gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
-
- gtk_widget_show_all(window);
-}
-
-void
MStarDict::CreateMainWindow()
{
HildonProgram *program = NULL;
- GtkWidget *alignment, *vbox;
+ GtkWidget *alignment, *main_vbox, *search;
GtkCellRenderer *renderer;
GtkTreeSelection *selection;
g_set_application_name(_("MStardict"));
/* main window */
- main_window = hildon_stackable_window_new();
- hildon_program_add_window(program, HILDON_WINDOW(main_window));
+ window = hildon_stackable_window_new();
+ hildon_program_add_window(program, HILDON_WINDOW(window));
/* aligment */
alignment = gtk_alignment_new(0.5, 0.5, 1.0, 1.0);
gtk_alignment_set_padding(GTK_ALIGNMENT(alignment),
HILDON_MARGIN_HALF, 0, HILDON_MARGIN_DEFAULT, HILDON_MARGIN_DEFAULT);
- gtk_container_add(GTK_CONTAINER(main_window), alignment);
+ gtk_container_add(GTK_CONTAINER(window), alignment);
/* main vbox */
- vbox = gtk_vbox_new(FALSE, 0);
- gtk_container_add(GTK_CONTAINER(alignment), vbox);
+ main_vbox = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(alignment), main_vbox);
/* no_search_result label */
label_widget = gtk_label_new(_("No search result"));
hildon_helper_set_logical_color(label_widget, GTK_RC_FG,
GTK_STATE_NORMAL, "SecondaryTextColor");
hildon_helper_set_logical_font(label_widget, "LargeSystemFont");
- gtk_box_pack_start(GTK_BOX(vbox), label_widget, TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(main_vbox), label_widget, TRUE, TRUE, 0);
/* alignment for pannable area */
results_widget = gtk_alignment_new(0.5, 0.5, 1.0, 1.0);
gtk_alignment_set_padding(GTK_ALIGNMENT(results_widget),
0, 0, HILDON_MARGIN_DEFAULT, HILDON_MARGIN_DEFAULT);
- gtk_box_pack_start(GTK_BOX(vbox), results_widget, TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(main_vbox), results_widget, TRUE, TRUE, 0);
/* pannable for tree view */
results_view_scroll = hildon_pannable_area_new();
gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW
(results_view), -1, "Def",
renderer, "text", DEF_COLUMN, NULL);
- g_object_set(G_OBJECT(renderer), "xpad", 10, NULL);
+ g_object_set(G_OBJECT(renderer),
+ "xpad", 10,
+ "ellipsize", PANGO_ELLIPSIZE_END,
+ "ellipsize-set", TRUE,
+ NULL);
- /* search entry */
- search = hildon_entry_new(HILDON_SIZE_FINGER_HEIGHT);
- gtk_box_pack_end(GTK_BOX(vbox), search, FALSE, TRUE, 0);
- g_signal_connect(search, "changed", G_CALLBACK(onSearchEntryChanged), this);
+ /* create search bar */
+ search = CreateSearchBar();
+ gtk_box_pack_end(GTK_BOX(main_vbox), search, FALSE, TRUE, 0);
/* window signals */
- g_signal_connect(G_OBJECT(main_window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
- g_signal_connect(G_OBJECT(main_window), "key_press_event", G_CALLBACK(onMainWindowKeyPressEvent), this);
+ g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
+ g_signal_connect(G_OBJECT(window), "key_press_event", G_CALLBACK(onMainWindowKeyPressEvent), this);
/* show all widget instead of alignment */
- gtk_widget_show_all(GTK_WIDGET(main_window));
+ gtk_widget_show_all(GTK_WIDGET(window));
/* grab focus to search entry */
- gtk_widget_grab_focus(GTK_WIDGET(search));
+ GrabFocus();
+}
+
+GtkWidget *
+MStarDict::CreateSearchBar()
+{
+ GtkWidget *hbox, *entry, *button;
+ GtkEntryCompletion *completion;
+
+ /* search hbox */
+ hbox = gtk_hbox_new(FALSE, HILDON_MARGIN_DEFAULT);
+
+ /* search entry */
+ entry = hildon_entry_new(HILDON_SIZE_FINGER_HEIGHT);
+ hildon_gtk_entry_set_input_mode(GTK_ENTRY(entry), HILDON_GTK_INPUT_MODE_FULL);
+ gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0);
+
+ completion = gtk_entry_completion_new();
+ gtk_entry_completion_set_inline_completion(completion, TRUE);
+ gtk_entry_completion_set_popup_completion(completion, FALSE);
+ gtk_entry_set_completion(GTK_ENTRY(entry), completion);
+
+ /* clear button */
+ button = GTK_WIDGET(gtk_tool_button_new(gtk_image_new_from_icon_name("general_delete",
+ (GtkIconSize)HILDON_ICON_PIXEL_SIZE_FINGER),
+ "Clear"));
+ gtk_box_pack_end(GTK_BOX (hbox), button, FALSE, TRUE, 0);
+
+ /* search signals */
+ g_signal_connect(entry, "changed", G_CALLBACK(onSearchEntryChanged), this);
+ g_signal_connect(button, "clicked", G_CALLBACK(onSearchClearClicked), this);
+
+ search_entry = entry;
+ return hbox;
}
+
void
MStarDict::CreateMainMenu()
{
GtkWidget *item;
menu = HILDON_APP_MENU(hildon_app_menu_new());
- hildon_window_set_app_menu(HILDON_WINDOW(main_window), menu);
+ hildon_window_set_app_menu(HILDON_WINDOW(window), menu);
/* dictionaries menu item */
item = hildon_gtk_button_new(HILDON_SIZE_AUTO);
if (oLibs->query_dictmask.empty())
return;
- sWord = gtk_entry_get_text(GTK_ENTRY(search));
+ sWord = gtk_entry_get_text(GTK_ENTRY(search_entry));
if (strcmp(sWord, "") == 0) {
ShowNoResults(true);
} else {
switch (analyse_query(sWord, query)) {
case qtDATA:
bFound = oLibs->LookupData(query.c_str());
+
+ if (bFound)
+ ShowNoResults(false);
+ else
+ ShowNoResults(true);
break;
default:
/* nothing */ ;
/* unselect selected rows */
ResultsUnselectAll(GTK_SELECTION_SINGLE);
-
- if (bFound)
- ShowNoResults(false);
- else
- ShowNoResults(true);
}
}
MStarDict::ShowProgressIndicator(bool bShow)
{
if (bShow)
- hildon_gtk_window_set_progress_indicator(GTK_WINDOW(main_window), 1);
+ hildon_gtk_window_set_progress_indicator(GTK_WINDOW(window), 1);
else
- hildon_gtk_window_set_progress_indicator(GTK_WINDOW(main_window), 0);
+ hildon_gtk_window_set_progress_indicator(GTK_WINDOW(window), 0);
+}
+
+void
+MStarDict::GrabFocus()
+{
+ gtk_widget_grab_focus(GTK_WIDGET(search_entry));
}
int
/* create main window */
MStarDict mStarDict;
+ pMStarDict = &mStarDict;
mStarDict.CreateMainWindow();
mStarDict.CreateMainMenu();
mStarDict.ShowNoResults(true);