Imported version 0.4-2 v0.4-2
authorRoman Moravcik <roman.moravcik@gmail.com>
Thu, 18 Feb 2010 16:43:34 +0000 (17:43 +0100)
committerRoman Moravcik <roman.moravcik@gmail.com>
Thu, 18 Feb 2010 16:43:34 +0000 (17:43 +0100)
debian/changelog
po/POTFILES.in
po/sk.po
src/Makefile.am
src/dictmngr.cpp
src/libwrapper.cpp
src/libwrapper.hpp
src/mstardict.cpp
src/mstardict.hpp
src/transwin.cpp [new file with mode: 0644]
src/transwin.hpp [new file with mode: 0644]

index 4df50fd..15b6d18 100644 (file)
@@ -1,3 +1,11 @@
+mstardict (0.4-2) unstable; urgency=low
+
+  * Reimplemented parser.
+  * Rewritten translation window.
+  * Updated Slovak translation.
+
+ -- Roman Moravcik <roman.moravcik@gmail.com>  Mon,  8 Feb 2010 16:22:36 +0100
+
 mstardict (0.4-1) unstable; urgency=low
 
   * Fixed searching of synonyms.
index aa15d0b..41b5e7d 100644 (file)
@@ -1,2 +1,5 @@
 # Package source files
+src/dictmngr.cpp
+src/libwrapper.cpp
 src/mstardict.cpp
+src/transwin.cpp
index 2695860..0ea4078 100644 (file)
--- a/po/sk.po
+++ b/po/sk.po
@@ -7,43 +7,75 @@ msgid ""
 msgstr ""
 "Project-Id-Version: mstardict\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-03 16:08+0100\n"
-"PO-Revision-Date: 2010-02-03 16:08+0100\n"
+"POT-Creation-Date: 2010-02-08 16:04+0100\n"
+"PO-Revision-Date: 2010-02-08 16:04+0100\n"
 "Last-Translator: Roman Moravčík <roman.moravcik@gmail.com>\n"
 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../src/mstardict.cpp:246 ../src/mstardict.cpp:593
+#: ../src/dictmngr.cpp:88 ../src/mstardict.cpp:380
 msgid "Dictionaries"
 msgstr "Slovníky"
 
-#: ../src/mstardict.cpp:441
+#: ../src/libwrapper.cpp:127
+msgid "XDXF data parsing plug-in is not found!"
+msgstr "Modul pre spracovanie XDXF dát nebol nájdený!"
+
+#: ../src/libwrapper.cpp:132
+msgid "PowerWord data parsing plug-in is not found!"
+msgstr "Modul na spracovanie PowerWord dát nebol nájdený!"
+
+#: ../src/libwrapper.cpp:137
+msgid "Wiki data parsing plug-in is not found!"
+msgstr "Modul pre spracovanie Wiki dát nebol nájdený!"
+
+#: ../src/libwrapper.cpp:142
+msgid "HTML data parsing plug-in is not found!"
+msgstr "Modul pre spracovanie HTML dát nebol nájdený!"
+
+#: ../src/libwrapper.cpp:147
+msgid "WordNet data parsing plug-in is not found!"
+msgstr "Modul na spracovanie PowerWord dát nebol nájdený!"
+
+#: ../src/libwrapper.cpp:193
+msgid "<span foreground=\"red\">[Load image error!]</span>"
+msgstr "<span foreground=\\\"red\\\">[Chyba pri načítaní obrázku!]</span>"
+
+#: ../src/libwrapper.cpp:197
+msgid "<span foreground=\"red\">[Missing Image]</span>"
+msgstr "<span foreground=\\\"red\\\">[Chýbajúci obrázok]</span>"
+
+#: ../src/libwrapper.cpp:211
+msgid "Unknown data type"
+msgstr "Neznámy dátový typ"
+
+#: ../src/mstardict.cpp:265
 msgid "Searching"
 msgstr "Hľadám"
 
-#: ../src/mstardict.cpp:443
+#: ../src/mstardict.cpp:267
 msgid "Cancel"
 msgstr "Zrušiť"
 
-#: ../src/mstardict.cpp:475
-msgid "Translation"
-msgstr "Preklad"
-
-#: ../src/mstardict.cpp:518
+#: ../src/mstardict.cpp:301
 msgid "MStardict"
 msgstr "Slovník"
 
 #. no_search_result label
-#: ../src/mstardict.cpp:535 ../src/mstardict.cpp:676
+#: ../src/mstardict.cpp:318 ../src/mstardict.cpp:463
 msgid "No search result"
 msgstr "Žiadne výsledky hľadania"
 
-#: ../src/mstardict.cpp:599
+#: ../src/mstardict.cpp:386
 msgid "Quit"
 msgstr "Zavrieť"
 
-#: ../src/mstardict.cpp:689
+#: ../src/mstardict.cpp:476
 msgid "No loaded dictionary"
 msgstr "Žiadne načítané slovníky"
+
+#: ../src/transwin.cpp:107
+msgid "Translation"
+msgstr "Preklad"
index c45e984..02cefbb 100644 (file)
@@ -4,7 +4,8 @@ mstardict_SOURCES = \
        conf.cpp conf.hpp \
        dictmngr.cpp dictmngr.hpp \
        libwrapper.cpp libwrapper.hpp \
-       mstardict.cpp mstardict.hpp
+       mstardict.cpp mstardict.hpp \
+       transwin.cpp transwin.hpp
 
 mstardict_DEPENDENCIES = lib/libstardict.a
 mstardict_LDADD = @MSTARDICT_LIBS@ @LIBINTL@ lib/libstardict.a
index 2dd7350..ce712cc 100644 (file)
 #  include "config.h"
 #endif
 
-#include <cerrno>
-#include <cstring>
-#include <cstdlib>
-#include <cstdio>
-#include <clocale>
+#include <list>
 
 #include <glib.h>
 #include <glib/gi18n.h>
-#include <glib/gstdio.h>
 
 #include <gtk/gtk.h>
 #include <hildon/hildon.h>
 
-#include <getopt.h>
-#include <string>
-#include <vector>
-#include <memory>
-#include <list>
-
 #include "conf.hpp"
 #include "libwrapper.hpp"
 #include "mstardict.hpp"
@@ -185,9 +174,6 @@ DictMngr::CreateDictMngrDialog()
        if (oStarDict->oConf->SetStringList("/apps/maemo/mstardict/dict_list", selected_dict_list)) {
            /* reload dictionaries */
            ReLoadDictionaries(selected_dict_list);
-
-//         /* trigger re-search */
-//         oStarDict->onSearchEntryChanged(GTK_EDITABLE(oStarDict->search), oStarDict);
        }
     }
     gtk_widget_destroy(GTK_WIDGET(dialog));
index 0cc7001..e4c00cb 100644 (file)
 #  include "config.h"
 #endif
 
+#include <glib.h>
 #include <glib/gi18n.h>
-#include <map>
+
+#include "lib/getuint32.h"
 
 #include "libwrapper.hpp"
 #include "mstardict.hpp"
 
 static
-std::string xdxf2text(const char *p)
-{
-    std::string res;
-    for (; *p; ++p) {
-       if (*p != '<') {
-           if (g_str_has_prefix(p, "&gt;")) {
-               res += ">";
-               p += 3;
-           } else if (g_str_has_prefix(p, "&lt;")) {
-               res += "<";
-               p += 3;
-           } else if (g_str_has_prefix(p, "&amp;")) {
-               res += "&";
-               p += 4;
-           } else if (g_str_has_prefix(p, "&quot;")) {
-               res += "\"";
-               p += 5;
-           } else
-               res += *p;
-           continue;
-       }
-
-       const char *next = strchr(p, '>');
-       if (!next)
-           continue;
-
-       std::string name(p + 1, next - p - 1);
-
-       if (name == "abr")
-           res += "";
-       else if (name == "/abr")
-           res += "";
-       else if (name == "k") {
-           const char *begin = next;
-           if ((next = strstr(begin, "</k>")) != NULL)
-               next += sizeof("</k>") - 1 - 1;
-           else
-               next = begin;
-       } else if (name == "b")
-           res += "";
-       else if (name == "/b")
-           res += "";
-       else if (name == "i")
-           res += "";
-       else if (name == "/i")
-           res += "";
-       else if (name == "tr")
-           res += "[";
-       else if (name == "/tr")
-           res += "]";
-       else if (name == "ex")
-           res += "";
-       else if (name == "/ex")
-           res += "";
-       else if (!name.empty() && name[0] == 'c' && name != "co") {
-           std::string::size_type pos = name.find("code");
-           if (pos != std::string::size_type(-1)) {
-               pos += sizeof("code=\"") - 1;
-               std::string::size_type end_pos = name.find("\"");
-               std::string color(name, pos, end_pos - pos);
-               res += "";
-           } else {
-               res += "";
-           }
-       } else if (name == "/c")
-           res += "";
-
-       p = next;
-    }
-    return res;
-}
-
-static
 string parse_data(const gchar *data,
                  const gchar *oword)
 {
@@ -115,9 +44,8 @@ string parse_data(const gchar *data,
 
     string mark;
     guint32 data_size, sec_size = 0;
-    gchar *m_str;
     const gchar *p = data;
-    data_size = *((guint32 *) p);
+    data_size = get_uint32(data);
     p += sizeof(guint32);
     size_t iPlugin;
     size_t nPlugins = pMStarDict->oStarDictPlugins->ParseDataPlugins.nplugins();
@@ -173,53 +101,118 @@ string parse_data(const gchar *data,
            continue;
        }
 
-       switch (*p++) {
-       case 'g':
-       case 'h':
+       switch (*p) {
        case 'm':
        case 'l':               //need more work...
+           p++;
            sec_size = strlen(p);
            if (sec_size) {
-               mark += "\n";
-               m_str = g_strndup(p, sec_size);
+               gchar *m_str = g_markup_escape_text(p, sec_size);
                mark += m_str;
                g_free(m_str);
            }
            sec_size++;
            break;
-       case 'x':
+       case 'g':
+           p++;
            sec_size = strlen(p);
            if (sec_size) {
-               mark += "\n";
-               m_str = g_strndup(p, sec_size);
-               mark += xdxf2text(m_str);
-               g_free(m_str);
+               mark += p;
            }
            sec_size++;
            break;
+       case 'x':
+           p++;
+           sec_size = strlen(p) + 1;
+           mark += _("XDXF data parsing plug-in is not found!");
+           break;
+       case 'k':
+           p++;
+           sec_size = strlen(p) + 1;
+           mark += _("PowerWord data parsing plug-in is not found!");
+           break;
+       case 'w':
+           p++;
+           sec_size = strlen(p) + 1;
+           mark += _("Wiki data parsing plug-in is not found!");
+           break;
+       case 'h':
+           p++;
+           sec_size = strlen(p) + 1;
+           mark += _("HTML data parsing plug-in is not found!");
+           break;
+       case 'n':
+           p++;
+           sec_size = strlen(p) + 1;
+           mark += _("WordNet data parsing plug-in is not found!");
+           break;
        case 't':
+           p++;
            sec_size = strlen(p);
            if (sec_size) {
-               mark += "\n";
-               m_str = g_strndup(p, sec_size);
-               mark += "[" + string(m_str) + "]";
+               mark += "[<span foreground=\"blue\">";
+               gchar *m_str = g_markup_escape_text(p, sec_size);
+               mark += m_str;
                g_free(m_str);
+               mark += "</span>]";
            }
            sec_size++;
            break;
        case 'y':
+           p++;
            sec_size = strlen(p);
+           if (sec_size) {
+               mark += "[<span foreground=\"red\">";
+               gchar *m_str = g_markup_escape_text(p, sec_size);
+               mark += m_str;
+               g_free(m_str);
+               mark += "</span>]";
+           }
            sec_size++;
            break;
        case 'W':
-       case 'P':
-           sec_size = *((guint32 *) p);
+           p++;
+           sec_size = g_ntohl(get_uint32(p));
+           //enbale sound button.
            sec_size += sizeof(guint32);
            break;
+       case 'P':
+           {
+               p++;
+               sec_size = g_ntohl(get_uint32(p));
+               if (sec_size) {
+                   GdkPixbufLoader *loader = gdk_pixbuf_loader_new();
+                   gdk_pixbuf_loader_write(loader, (const guchar *) (p + sizeof(guint32)), sec_size, NULL);
+                   gdk_pixbuf_loader_close(loader, NULL);
+                   GdkPixbuf *pixbuf = gdk_pixbuf_loader_get_pixbuf(loader);
+                   if (pixbuf) {
+//                     append_and_mark_orig_word(mark, real_oword, LinksPosList());
+//                     mark.clear();
+//                     append_pixbuf(pixbuf);
+                   } else {
+                       mark += _("<span foreground=\"red\">[Load image error!]</span>");
+                   }
+                   g_object_unref(loader);
+               } else {
+                   mark += _("<span foreground=\"red\">[Missing Image]</span>");
+               }
+               sec_size += sizeof(guint32);
+           }
+           break;
+       default:
+           if (g_ascii_isupper(*p)) {
+               p++;
+               sec_size = g_ntohl(get_uint32(p));
+               sec_size += sizeof(guint32);
+           } else {
+               p++;
+               sec_size = strlen(p) + 1;
+           }
+           mark += _("Unknown data type");
+           break;
        }
        p += sec_size;
     }
-
     return mark;
 }
 
@@ -254,12 +247,13 @@ Library::BuildResultData(std::vector < InstantDictIndex > &dictmask,
                         const char *sWord,
                         CurrentIndex *iIndex,
                         int iLib,
-                        TSearchResultList &res_list)
+                        GList **result_data)
 {
     int iRealLib;
     bool bFound = false, bLookupWord = false, bLookupSynonymWord = false;
     gint nWord = 0, count = 0, i = 0, j = 0;
     glong iWordIdx;
+    struct SearchResult *result;
 
     iRealLib = dictmask[iLib].index;
 
@@ -292,10 +286,11 @@ Library::BuildResultData(std::vector < InstantDictIndex > &dictmask,
        if (bLookupWord) {
            count = GetOrigWordCount(iIndex[iLib].idx, iRealLib, true);
            for (i = 0; i < count; i++) {
-               res_list.push_back(TSearchResult(dict_name(iLib),
-                                                poGetOrigWord(iIndex[iLib].idx, iRealLib),
-                                                parse_data(poGetOrigWordData(iIndex[iLib].idx + i, iRealLib),
-                                                           poGetOrigWord(iIndex[iLib].idx, iRealLib))));
+               result = (SearchResult *) g_malloc(sizeof(struct SearchResult));
+               result->bookname = g_strdup(dict_name(iLib).c_str());
+               result->def = g_strdup(poGetOrigWord(iIndex[iLib].idx, iRealLib));
+               result->exp = g_strdup(parse_data(poGetOrigWordData(iIndex[iLib].idx + i, iRealLib), poGetOrigWord(iIndex[iLib].idx, iRealLib)).c_str());
+               *result_data = g_list_append(*result_data, result);
            }
            i = 1;
        } else {
@@ -303,10 +298,11 @@ Library::BuildResultData(std::vector < InstantDictIndex > &dictmask,
        }
        for (j = 0; i < nWord; i++, j++) {
            iWordIdx = poGetOrigSynonymWordIdx(iIndex[iLib].synidx + j, iRealLib);
-           res_list.push_back(TSearchResult(dict_name(iLib),
-                                            poGetOrigWord(iWordIdx, iRealLib),
-                                            parse_data(poGetOrigWordData(iWordIdx, iRealLib),
-                                                       poGetOrigWord(iWordIdx, iRealLib))));
+           result = (SearchResult *) g_malloc(sizeof(struct SearchResult));
+           result->bookname = g_strdup(dict_name(iLib).c_str());
+           result->def = g_strdup(poGetOrigWord(iWordIdx, iRealLib));
+           result->exp = g_strdup(parse_data(poGetOrigWordData(iWordIdx, iRealLib), poGetOrigWord(iWordIdx, iRealLib)).c_str());
+           *result_data = g_list_append(*result_data, result);
        }
 
        bFound = true;
@@ -315,12 +311,17 @@ Library::BuildResultData(std::vector < InstantDictIndex > &dictmask,
     return bFound;
 }
 
+void
+Library::FreeResultData(GList *result_data)
+{
+}
+
 bool
 Library::SimpleLookup(const gchar *sWord,
                      CurrentIndex *piIndex)
 {
     CurrentIndex *iIndex;
-    TSearchResultList results;
+    GList *results = NULL;
     bool bFound = false;
 
     if (!piIndex)
@@ -329,10 +330,12 @@ Library::SimpleLookup(const gchar *sWord,
        iIndex = piIndex;
 
     for (size_t iLib = 0; iLib < query_dictmask.size(); iLib++) {
-       if (BuildResultData(query_dictmask, sWord, iIndex, iLib, results))
+       if (BuildResultData(query_dictmask, sWord, iIndex, iLib, &results))
            bFound = true;
     }
 
+    FreeResultData(results);
+
     if (!piIndex)
        g_free(iIndex);
 
index 2909eca..411124f 100644 (file)
 #include "file.hpp"
 #include "lib.h"
 
+struct SearchResult {
+       const gchar *bookname;
+       const gchar *def;
+       const gchar *exp;
+};
+
 using std::string;
 using std::vector;
 class MStarDict;
 
-//this structure is wrapper and it need for unification
-//results of search whith return Dicts class
-struct TSearchResult {
-    string bookname;
-    string def;
-    string exp;
-
-    TSearchResult(const string &bookname_, const string &def_, const string &exp_)
-    :bookname(bookname_), def(def_), exp(exp_) {
-}};
-
-typedef vector < TSearchResult > TSearchResultList;
-typedef TSearchResultList::iterator PSearchResult;
-
 //this class is wrapper around Dicts class for easy use
 //of it
 class Library:public Libs {
@@ -68,7 +60,9 @@ class Library:public Libs {
                         const char *sWord,
                         CurrentIndex *iIndex,
                         int iLib,
-                        TSearchResultList &res_list);
+                        GList **result_data);
+    void FreeResultData(GList *result_data);
+
     bool SimpleLookup(const gchar *sWord,
                      CurrentIndex *piIndex);
     bool LookupWithFuzzy(const gchar *sWord);
index 4e71e2d..886d451 100644 (file)
@@ -49,6 +49,7 @@
 #include "conf.hpp"
 #include "dictmngr.hpp"
 #include "libwrapper.hpp"
+#include "transwin.hpp"
 #include "mstardict.hpp"
 
 MStarDict *pMStarDict;
@@ -60,7 +61,7 @@ enum {
 
 MStarDict::MStarDict()
 {
-    main_window = NULL;
+    window = NULL;
     label_widget = NULL;
     results_widget = NULL;
     results_view = NULL;
@@ -83,6 +84,9 @@ MStarDict::MStarDict()
     /* initialize dict manager */
     oDict = new DictMngr(this);
 
+    /* initialize translation window */
+    oTransWin = new TransWin(this);
+
     /* initialize stardict library */
     oLibs = new Library(this);
 }
@@ -95,6 +99,9 @@ MStarDict::~MStarDict()
     /* deinitialize stardict library */
     delete oLibs;
 
+    /* deinitialize translation window */
+    delete oTransWin;
+
     /* deinitialize dict manager */
     delete oDict;
 
@@ -111,42 +118,29 @@ MStarDict::onResultsViewSelectionChanged(GtkTreeSelection *selection,
 {
     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 */
@@ -225,6 +219,9 @@ MStarDict::onDictionariesMenuItemClicked(GtkButton *button,
                                         MStarDict *mStarDict)
 {
     mStarDict->oDict->CreateDictMngrDialog();
+
+    /* trigger re-search */
+    mStarDict->onSearchEntryChanged(GTK_EDITABLE(mStarDict->search), mStarDict);
     return true;
 }
 
@@ -266,7 +263,7 @@ MStarDict::CreateLookupProgressDialog(bool *cancel)
     /* 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);
@@ -292,47 +289,6 @@ MStarDict::DestroyLookupProgressDialog(GtkWidget *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;
@@ -345,14 +301,14 @@ MStarDict::CreateMainWindow()
     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);
@@ -400,11 +356,11 @@ MStarDict::CreateMainWindow()
     g_signal_connect(search, "changed", G_CALLBACK(onSearchEntryChanged), this);
 
     /* 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 */
     GrabFocus();
@@ -417,7 +373,7 @@ 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);
@@ -530,9 +486,9 @@ void
 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
index 42c2655..6bb0343 100644 (file)
@@ -32,12 +32,13 @@ extern MStarDict *pMStarDict;
 
 class Conf;
 class DictMngr;
+class TransWin;
 class Library;
 class MStarDict;
 
 class MStarDict {
   private:
-    GtkWidget *main_window;
+    GtkWidget *window;
     GtkWidget *label_widget;
     GtkWidget *results_widget;
     GtkWidget *search;
@@ -46,8 +47,6 @@ class MStarDict {
 
     GtkListStore *results_list;
 
-    TSearchResultList results;
-
     static gboolean onResultsViewSelectionChanged(GtkTreeSelection *selection,
                                                  MStarDict *mStarDict);
     static gboolean onSearchEntryChanged(GtkEditable *editable,
@@ -69,14 +68,12 @@ class MStarDict {
 
     Conf *oConf;
     DictMngr *oDict;
+    TransWin *oTransWin;
     Library *oLibs;
     StarDictPlugins *oStarDictPlugins;
 
     GtkWidget *CreateLookupProgressDialog(bool *cancel);
     void DestroyLookupProgressDialog(GtkWidget *dialog);
-    void CreateTranslationWindow(const gchar *bookname,
-                                const gchar *def,
-                                const gchar *exp);
     void CreateMainWindow();
     void CreateMainMenu();
 
diff --git a/src/transwin.cpp b/src/transwin.cpp
new file mode 100644 (file)
index 0000000..8734c7c
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ *  MStarDict - International dictionary for Maemo.
+ *  Copyright (C) 2010 Roman Moravcik
+ *
+ *  base on code of stardict:
+ *  Copyright (C) 2003-2007 Hu Zheng <huzheng_001@163.com>
+ *
+ *  based on code of sdcv:
+ *  Copyright (C) 2005-2006 Evgeniy <dushistov@mail.ru>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <string>
+#include <vector>
+#include <memory>
+#include <list>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include <gtk/gtk.h>
+#include <hildon/hildon.h>
+
+#include "libwrapper.hpp"
+#include "mstardict.hpp"
+#include "transwin.hpp"
+
+TransWin::TransWin(MStarDict *mStarDict)
+{
+    oStarDict = mStarDict;
+    window = NULL;
+}
+
+TransWin::~TransWin()
+{
+}
+
+GtkWidget *
+TransWin::CreateTransWidget(SearchResult *result)
+{
+    GtkWidget *vbox, *hbox, *label;
+    char *bookname = NULL, *def = NULL, *exp = NULL;
+
+    bookname = g_markup_printf_escaped("<span color=\"dimgray\" size=\"x-small\">%s</span>",
+                                      result->bookname);
+    def = g_markup_printf_escaped("<span color=\"darkred\" weight=\"heavy\" size=\"large\">%s</span>",
+                                 result->def);
+    exp = g_strdup(result->exp);
+
+    vbox = gtk_vbox_new(FALSE, 0);
+
+    hbox = gtk_hbox_new(FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+
+    label = gtk_label_new("Definition");
+    gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+    if (def) {
+       gtk_label_set_markup(GTK_LABEL(label), def);
+       g_free(def);
+    }
+
+    label = gtk_label_new("Bookname");
+    gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
+    gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+    if (bookname) {
+       gtk_label_set_markup(GTK_LABEL(label), bookname);
+       g_free(bookname);
+    }
+
+    label = gtk_label_new("Expresion");
+    gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
+    gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
+    gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
+    if (exp) {
+       gtk_label_set_markup(GTK_LABEL(label), exp);
+       g_free(exp);
+    }
+
+    return vbox;
+}
+
+void
+TransWin::CreateTransWindow(GList *results)
+{
+    GtkWidget *window, *alignment, *pannable, *vbox, *trans, *separator;
+    GList *result = NULL;
+
+    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();
+    gtk_container_add(GTK_CONTAINER(alignment), pannable);
+
+    vbox = gtk_vbox_new(FALSE, 16);
+    hildon_pannable_area_add_with_viewport(HILDON_PANNABLE_AREA(pannable), vbox);
+
+    for (result = results; result != NULL; result = result->next) {
+       trans = CreateTransWidget((SearchResult *) result->data);
+       gtk_box_pack_start(GTK_BOX(vbox), trans, FALSE, FALSE, 0);
+
+       separator = gtk_hseparator_new();
+       gtk_box_pack_start(GTK_BOX(vbox), separator, FALSE, FALSE, 0);
+    }
+
+    gtk_widget_show_all(window);
+}
diff --git a/src/transwin.hpp b/src/transwin.hpp
new file mode 100644 (file)
index 0000000..7244ac1
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ *  MStarDict - International dictionary for Maemo.
+ *  Copyright (C) 2010 Roman Moravcik
+ *
+ *  base on code of stardict:
+ *  Copyright (C) 2003-2007 Hu Zheng <huzheng_001@163.com>
+ *
+ *  based on code of sdcv:
+ *  Copyright (C) 2005-2006 Evgeniy <dushistov@mail.ru>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+
+class MStarDict;
+
+class TransWin {
+  private:
+    MStarDict *oStarDict;
+    GtkWidget *window;
+
+    GtkWidget *CreateTransWidget(SearchResult *result);
+
+  public:
+     TransWin(MStarDict *mStarDict);
+    ~TransWin();
+
+    void CreateTransWindow(GList *result_data);
+};