Fixed "Download dictionaries" URL.
[mstardict] / src / mstardict.cpp
index 886d451..5fa72d1 100644 (file)
@@ -40,6 +40,8 @@
 #include <gtk/gtk.h>
 #include <hildon/hildon.h>
 
+#include <libosso.h>
+
 #include <getopt.h>
 #include <string>
 #include <vector>
@@ -49,7 +51,9 @@
 #include "conf.hpp"
 #include "dictmngr.hpp"
 #include "libwrapper.hpp"
+#include "prefsdlg.hpp"
 #include "transwin.hpp"
+#include "tts.hpp"
 #include "mstardict.hpp"
 
 MStarDict *pMStarDict;
@@ -67,6 +71,8 @@ MStarDict::MStarDict()
     results_view = NULL;
     results_view_scroll = NULL;
 
+    osso_context = osso_initialize("org.maemo.mstardict", VERSION, TRUE, NULL);
+
     /* create list of ressults */
     results_list = gtk_list_store_new(N_COLUMNS,
                                      G_TYPE_STRING);   /* DEF_COLUMN */
@@ -77,16 +83,22 @@ MStarDict::MStarDict()
     /* 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);
+    oPlugins = new StarDictPlugins("/usr/lib/mstardict/plugins",
+                                  plugin_order_list,
+                                  plugin_disable_list);
 
     /* initialize dict manager */
     oDict = new DictMngr(this);
 
+    /* initialize prefs dialog */
+    oPrefs = new PrefsDlg(this);
+
     /* initialize translation window */
     oTransWin = new TransWin(this);
 
+    /* initialize tts */
+    oTts = new Tts(this);
+
     /* initialize stardict library */
     oLibs = new Library(this);
 }
@@ -99,17 +111,26 @@ MStarDict::~MStarDict()
     /* deinitialize stardict library */
     delete oLibs;
 
+    /* deinitialize tts */
+    delete oTts;
+
     /* deinitialize translation window */
     delete oTransWin;
 
+    /* deinitialize prefs dialog */
+    delete oPrefs;
+
     /* deinitialize dict manager */
     delete oDict;
 
     /* deinitialize stardict plugins */
-    delete oStarDictPlugins;
+    delete oPlugins;
 
     /* deinitialize configuration */
     delete oConf;
+
+    /* deinitialize osso context */
+    osso_deinitialize(osso_context);
 }
 
 gboolean
@@ -215,13 +236,46 @@ MStarDict::onSearchEntryChanged(GtkEditable* editable,
 }
 
 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), mStarDict);
+    mStarDict->onSearchEntryChanged(GTK_EDITABLE(mStarDict->search_entry), mStarDict);
+    mStarDict->GrabFocus();
+    return true;
+}
+
+gboolean
+MStarDict::onDownloadDictionariesMenuItemClicked(GtkButton *button,
+                                                MStarDict *mStarDict)
+{
+    osso_rpc_run(mStarDict->osso_context,
+                "com.nokia.osso_browser",
+                "/com/nokia/osso_browser",
+                "com.nokia.osso_browser",
+                "open_new_window",
+                NULL,
+                DBUS_TYPE_STRING, "http://xdxf.revdanica.com/down2/index.php?down_format=StarDict",
+                DBUS_TYPE_INVALID);
+    return true;
+}
+
+gboolean
+MStarDict::onPreferencesMenuItemClicked(GtkButton *button,
+                                        MStarDict *mStarDict)
+{
+    mStarDict->oPrefs->CreatePrefsDialog();
     return true;
 }
 
@@ -292,7 +346,7 @@ void
 MStarDict::CreateMainWindow()
 {
     HildonProgram *program = NULL;
-    GtkWidget *alignment, *vbox;
+    GtkWidget *alignment, *main_vbox, *search;
     GtkCellRenderer *renderer;
     GtkTreeSelection *selection;
 
@@ -311,21 +365,21 @@ MStarDict::CreateMainWindow()
     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();
@@ -350,10 +404,9 @@ MStarDict::CreateMainWindow()
                 "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(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
@@ -366,6 +419,46 @@ MStarDict::CreateMainWindow()
     GrabFocus();
 }
 
+GtkWidget *
+MStarDict::GetMainWindow()
+{
+    return window;
+}
+
+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()
 {
@@ -381,6 +474,18 @@ MStarDict::CreateMainMenu()
     hildon_app_menu_append(menu, GTK_BUTTON(item));
     g_signal_connect(item, "clicked", G_CALLBACK(onDictionariesMenuItemClicked), this);
 
+    /* download dictionaries menu item */
+    item = hildon_gtk_button_new(HILDON_SIZE_AUTO);
+    gtk_button_set_label(GTK_BUTTON(item), _("Download dictionaries"));
+    hildon_app_menu_append(menu, GTK_BUTTON(item));
+    g_signal_connect(item, "clicked", G_CALLBACK(onDownloadDictionariesMenuItemClicked), this);
+
+    /* preferences menu item */
+    item = hildon_gtk_button_new(HILDON_SIZE_AUTO);
+    gtk_button_set_label(GTK_BUTTON(item), _("Preferences"));
+    hildon_app_menu_append(menu, GTK_BUTTON(item));
+    g_signal_connect(item, "clicked", G_CALLBACK(onPreferencesMenuItemClicked), this);
+
     /* quit menu item */
     item = hildon_gtk_button_new(HILDON_SIZE_AUTO);
     gtk_button_set_label(GTK_BUTTON(item), _("Quit"));
@@ -401,7 +506,7 @@ MStarDict::SearchWord()
     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 {
@@ -411,6 +516,11 @@ MStarDict::SearchWord()
        switch (analyse_query(sWord, query)) {
        case qtDATA:
            bFound = oLibs->LookupData(query.c_str());
+
+           if (bFound)
+               ShowNoResults(false);
+           else
+               ShowNoResults(true);
            break;
        default:
            /* nothing */ ;
@@ -418,11 +528,6 @@ MStarDict::SearchWord()
 
        /* unselect selected rows */
        ResultsUnselectAll(GTK_SELECTION_SINGLE);
-
-       if (bFound)
-           ShowNoResults(false);
-       else
-           ShowNoResults(true);
     }
 }
 
@@ -494,7 +599,7 @@ MStarDict::ShowProgressIndicator(bool bShow)
 void
 MStarDict::GrabFocus()
 {
-    gtk_widget_grab_focus(GTK_WIDGET(search));
+    gtk_widget_grab_focus(GTK_WIDGET(search_entry));
 }
 
 int