+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.
# Package source files
+src/dictmngr.cpp
+src/libwrapper.cpp
src/mstardict.cpp
+src/transwin.cpp
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"
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
# 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"
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));
# 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, ">")) {
- res += ">";
- p += 3;
- } else if (g_str_has_prefix(p, "<")) {
- res += "<";
- p += 3;
- } else if (g_str_has_prefix(p, "&")) {
- res += "&";
- p += 4;
- } else if (g_str_has_prefix(p, """)) {
- 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)
{
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();
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;
}
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;
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 {
}
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;
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)
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);
#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 {
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);
#include "conf.hpp"
#include "dictmngr.hpp"
#include "libwrapper.hpp"
+#include "transwin.hpp"
#include "mstardict.hpp"
MStarDict *pMStarDict;
MStarDict::MStarDict()
{
- main_window = NULL;
+ window = NULL;
label_widget = NULL;
results_widget = NULL;
results_view = NULL;
/* 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;
{
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 */
MStarDict *mStarDict)
{
mStarDict->oDict->CreateDictMngrDialog();
+
+ /* trigger re-search */
+ mStarDict->onSearchEntryChanged(GTK_EDITABLE(mStarDict->search), mStarDict);
return true;
}
/* 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);
}
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;
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);
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();
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);
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
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;
GtkListStore *results_list;
- TSearchResultList results;
-
static gboolean onResultsViewSelectionChanged(GtkTreeSelection *selection,
MStarDict *mStarDict);
static gboolean onSearchEntryChanged(GtkEditable *editable,
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();
--- /dev/null
+/*
+ * 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);
+}
--- /dev/null
+/*
+ * 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);
+};