Added direct search of translation, changed searching for translation of words list...
authorMateusz Półrola <mateusz.polrola@comarch.pl>
Wed, 11 Aug 2010 07:43:28 +0000 (09:43 +0200)
committerMateusz Półrola <mateusz.polrola@comarch.pl>
Wed, 11 Aug 2010 07:43:28 +0000 (09:43 +0200)
15 files changed:
trunk/src/base/backbone/backbone.cpp
trunk/src/base/backbone/backbone.h
trunk/src/base/base.pro
trunk/src/base/gui/DictManagerWidget.cpp
trunk/src/base/gui/MainWindow.cpp
trunk/src/base/gui/MainWindow.h
trunk/src/base/gui/SearchBarWidget.cpp
trunk/src/base/gui/SearchBarWidget.h
trunk/src/base/gui/TranslationWidget.cpp
trunk/src/base/gui/TranslationWidget.h
trunk/src/base/gui/TranslationWidgetAutoResizer.h
trunk/src/base/gui/WordListWidget.cpp
trunk/src/base/gui/WordListWidget.h
trunk/src/base/gui/main.cpp
trunk/src/plugins/xdxf/src/xdxfplugin.cpp

index 6dcdda4..d311c98 100644 (file)
@@ -130,21 +130,21 @@ void Backbone::stopSearching() {
 
 
 
-void Backbone::search(QStringList words) {
+void Backbone::search(QString word) {
     _timerSearch.stop();
     _result.clear();
     _innerResult.clear();
 
     _timerSearch.start(_interval);
-    foreach(QString word, words)
-        foreach(CommonDictInterface* dict, _dicts.keys())
-            if(_dicts[dict] == 1) {
-                QFuture<QList<Translation*> > tr =
-                        QtConcurrent::run(dict,
-                                      &CommonDictInterface::searchWordList,word,
-                                                             searchLimit());
-                _innerResult.append(tr);
-            }
+
+    foreach(CommonDictInterface* dict, _dicts.keys())
+        if(_dicts[dict] == 1) {
+            QFuture<QList<Translation*> > tr =
+                    QtConcurrent::run(dict,
+                                  &CommonDictInterface::searchWordList,word,
+                                                         searchLimit());
+            _innerResult.append(tr);
+        }
 
 }
 
index 8a1b29d..2e185f2 100644 (file)
@@ -92,9 +92,9 @@ public Q_SLOTS:
     void stopSearching();
 
     /*! search for a word translation
-       \param word list of words to be translated
+       \param word to be translated
       */
-    void search(QStringList word);
+    void search(QString word);
 
     /*! sets active dictionaries (searches are performed only in active dicts
        \param List of dictionaris to be activated
index 08d6172..2c6a578 100644 (file)
@@ -4,7 +4,11 @@
 #
 #-------------------------------------------------
 
-QT       += core gui 
+QT       += core gui
+
+maemo5 {
+    QT += maemo5
+}
 
 TARGET = mdictionary
 TEMPLATE = app
index 286bb1c..d99c4fc 100644 (file)
@@ -88,7 +88,6 @@ void DictManagerWidget::refreshDictsList() {
 
     while(i.hasNext()) {
         i.next();
-        qDebug()<<i.key();
         QListWidgetItem* item = new QListWidgetItem;
         QString name = i.key()->langFrom() + " - " + i.key()->langTo() + " (" +
                        i.key()->type() + " " + i.key()->name() + ")";
@@ -132,7 +131,6 @@ void DictManagerWidget::addNewDictButtonClicked() {
     CommonDictInterface* selectedPlugin =
             DictTypeSelectDialog::addNewDict(backbone->getPlugins(),this);
     if(selectedPlugin != NULL) {
-        qDebug()<< selectedPlugin->type();
         Settings* settings =
                 selectedPlugin->dictDialog()->addNewDictionary(this);
 
index a3663de..4752e8e 100644 (file)
@@ -41,10 +41,7 @@ MainWindow::MainWindow(Backbone *backbone, QWidget *parent):
     wordListWidget = new WordListWidget(backbone);
     translationWidget = new TranslationWidget(backbone, this);
 
-    searchBarWidget->setFocus();
     menuWidget = new MenuWidget(this);
-
-
     menuWidget->addSubMenu(tr("Dictionaries"),
                            new DictManagerWidget(backbone, this));
     menuWidget->addSubMenu(tr("Settings"), new QPushButton("Settings"));
@@ -53,10 +50,10 @@ MainWindow::MainWindow(Backbone *backbone, QWidget *parent):
     ui->menuBar->addAction(menuWidget);
 
 
-    connect(this, SIGNAL(searchWordList(QStringList)),
-            searchBarWidget, SLOT(searchWordList(QStringList)));
+    connect(this, SIGNAL(search(QString)),
+            searchBarWidget, SLOT(search(QString)));
 
-    connect(searchBarWidget, SIGNAL(searchForTranslations(QStringList)),
+    connect(searchBarWidget, SIGNAL(searchForTranslations(QString)),
             wordListWidget, SLOT(lockList()));
 
     connect(searchBarWidget, SIGNAL(stopSearching()),
@@ -100,11 +97,11 @@ void MainWindow::closeOk() {
     close();*/
 }
 
-void MainWindow::search(QStringList words) {
-    emit searchWordList(words);
+void MainWindow::searchExactWord(QString word) {
+    wordListWidget->setExactMatchString(word);
+    emit search(word);
 }
 
 void MainWindow::enableMenu(bool enabled) {
     ui->menuBar->setVisible(enabled);
-    qDebug()<<enabled;
 }
index 57091f9..be80f29 100644 (file)
@@ -42,7 +42,7 @@ class MainWindow : public QMainWindow
 public:
     explicit MainWindow(Backbone* backbone, QWidget *parent = 0);
     ~MainWindow();
-    void search(QStringList);
+    void searchExactWord(QString);
 
 
 public Q_SLOTS:
@@ -52,7 +52,7 @@ public Q_SLOTS:
 Q_SIGNALS:
     //! Request to backbone to stop all it's activities
     void quit();
-    void searchWordList(QStringList);
+    void search(QString);
 
 protected:
     /*! When user wants to close application, we first sends signal to stop all
index 65edf61..3c66688 100644 (file)
@@ -58,8 +58,8 @@ SearchBarWidget::SearchBarWidget(Backbone* backbone, QWidget *parent) :
 
 
     //connects request to backbone
-    connect(this, SIGNAL(searchForTranslations(QStringList)),
-            backbone, SLOT(search(QStringList)));
+    connect(this, SIGNAL(searchForTranslations(QString)),
+            backbone, SLOT(search(QString)));
 
     connect(this, SIGNAL(stopSearching()),
             backbone, SLOT(stopSearching()));
@@ -77,6 +77,20 @@ SearchBarWidget::~SearchBarWidget() {
 
 }
 
+QIcon SearchBarWidget::generateIcon(QIcon oryginal, qreal rotation) {
+    QPixmap p = oryginal.pixmap(64);
+
+    QIcon newIcon;
+    newIcon.addPixmap(p);
+
+    QPainter painter(&p);
+    painter.fillRect(p.rect(), QColor(0,0,0,192));
+
+    newIcon.addPixmap(p, QIcon::Disabled, QIcon::Off);
+
+    return newIcon;
+}
+
 
 void SearchBarWidget::initializeUI() {
     horizontalLayout = new QHBoxLayout();
@@ -103,21 +117,28 @@ void SearchBarWidget::initializeUI() {
 
 
     historyNextToolButton = new QToolButton();
-    historyNextToolButton->setIcon(QIcon::fromTheme("general_forward"));
+    historyNextToolButton->setIcon(
+            generateIcon(QIcon::fromTheme("general_forward")));
 
     historyPrevToolButton = new QToolButton();
-    historyPrevToolButton->setIcon(QIcon::fromTheme("general_back"));
+    historyPrevToolButton->setIcon(
+            generateIcon(QIcon::fromTheme("general_back")));
 
     historyShowToolButton = new QToolButton();
-    historyShowToolButton->setIcon(QIcon::fromTheme("general_back"));
+    historyShowToolButton->setIcon(
+            generateIcon(QIcon::fromTheme("general_back")));
+
 
     QPixmap p = historyShowToolButton->icon().pixmap(256);
+    qDebug()<<p.size();
     QMatrix m;
     m.rotate(90);
 
+    QPixmap p2 = p.transformed(m);
+    qDebug()<<p2.size();
+
 
-    QIcon temp;
-    temp.addPixmap(p.transformed(m));
+    QIcon temp(p2);
     historyShowToolButton->setIcon(temp);
 
 
@@ -156,18 +177,16 @@ void SearchBarWidget::searchPushButtonClicked() {
         emit stopSearching();
     }
     else {
-        if(searchWordLineEdit->text().isEmpty()) return;
-        setBusy();
-        QStringList searchWord;
-        searchWord << searchWordLineEdit->text();
-        emit searchForTranslations(searchWord);
+        search(searchWordLineEdit->text());
     }
 }
 
-void SearchBarWidget::searchWordList(QStringList words) {
-    if(!_isSearching) {
+
+void SearchBarWidget::search(QString word) {
+    if(!_isSearching && !word.isEmpty()) {
+        searchWordLineEdit->setText(word);
         setBusy();
-        emit searchForTranslations(words);
+        emit searchForTranslations(word);
     }
 }
 
index bb5f7df..37ab63e 100644 (file)
@@ -47,7 +47,7 @@ public:
 
 Q_SIGNALS:
     //! Requests to search for translation of word passed as parameter
-    void searchForTranslations(QStringList);
+    void searchForTranslations(QString);
 
     //! Request to stop all active searchings
     void stopSearching();
@@ -60,12 +60,6 @@ public Q_SLOTS:
     */
     void setEnabled(bool);
 
-    //! Search for all words in list
-    /*!
-       Used only when program starts with parameters.
-       Perform search of all words in list.
-     */
-    void searchWordList(QStringList words);
 
     //! Sets search bar in busy state
     /*!
@@ -80,6 +74,9 @@ public Q_SLOTS:
     void setIdle();
 
 
+    //! Search for given word
+    void search(QString word);
+
 private Q_SLOTS:
     void clearSearchWordToolButtonClicked();
     void searchPushButtonClicked();
@@ -87,6 +84,7 @@ private Q_SLOTS:
     void historyNextToolButtonClicked();
     void historyShowToolButtonClicked();
 
+
 private:
     Backbone* backbone;
     QLineEdit* searchWordLineEdit;
@@ -98,6 +96,8 @@ private:
     QHBoxLayout* horizontalLayout;
     QProgressBar* searchingProgressBar;
 
+    QIcon generateIcon(QIcon oryginal, qreal rotation=0);
+
     QVBoxLayout* verticalLayout;
 
     bool _isSearching;
index 42d4890..a11b6b6 100644 (file)
@@ -62,22 +62,48 @@ void TranslationWidget::show() {
 
     update(this->rect());
 
+    emit updateSize();
 }
 
 void TranslationWidget::initializeUI() {
 
+    zoomInToolButton = new QToolButton;
+    zoomInToolButton->setIcon(QIcon::fromTheme("pdf_zoomin"));
+
+    zoomOutToolButton = new QToolButton;
+    zoomOutToolButton->setIcon(QIcon::fromTheme("pdf_zoomout"));
+
+    horizontalLayout = new QHBoxLayout;
+    horizontalLayout->addWidget(zoomInToolButton);
+    horizontalLayout->addWidget(zoomOutToolButton);
+
     textEdit = new QTextEdit;
     textEdit->setReadOnly(true);
 
-    new TranslationWidgetAutoResizer(textEdit);
+    resizer = new TranslationWidgetAutoResizer(textEdit);
+    connect(this, SIGNAL(updateSize()),
+            resizer, SLOT(textEditChanged()));
 
     QWidget*w = new QWidget;
     verticalLayout = new QVBoxLayout(w);
+    verticalLayout->addLayout(horizontalLayout);
     verticalLayout->addWidget(textEdit);
 
     this->setWidget(w);
     this->setWidgetResizable(true);
 
+    connect(zoomInToolButton, SIGNAL(clicked()),
+            textEdit, SLOT(zoomIn()));
+
+    connect(zoomInToolButton, SIGNAL(clicked()),
+            this, SIGNAL(updateSize()));
+
+    connect(zoomOutToolButton, SIGNAL(clicked()),
+            textEdit, SLOT(zoomOut()));
+
+    connect(zoomInToolButton, SIGNAL(clicked()),
+            this, SIGNAL(updateSize()));
+
 }
 
 void TranslationWidget::showContextMenu(QPoint pos) {
index 38b9053..be61d0c 100644 (file)
@@ -28,6 +28,7 @@
 #include <QModelIndex>
 #include <QtGui>
 #include "../backbone/backbone.h"
+#include "TranslationWidgetAutoResizer.h"
 
 //! Displays translation of word found in dictionaries
 /*!
@@ -39,6 +40,7 @@ public:
     explicit TranslationWidget(Backbone* backbone, QWidget *parent = 0);
 
 Q_SIGNALS:
+    void updateSize();
 
 public Q_SLOTS:
     //! Request to show translation widget.
@@ -52,7 +54,12 @@ private:
     Backbone *backbone;
     QMenu *contextMenu;
     QTextEdit *textEdit;
+    QToolButton* zoomInToolButton;
+    QToolButton* zoomOutToolButton;
     QVBoxLayout *verticalLayout;
+    QHBoxLayout* horizontalLayout;
+    TranslationWidgetAutoResizer* resizer;
+
 
     void initializeUI();
 
index c8768d2..2f5d5c0 100644 (file)
@@ -40,7 +40,7 @@ public:
              this, SLOT(textEditChanged()));
      }
 
-private Q_SLOTS:
+public Q_SLOTS:
     inline void textEditChanged();
 
 private:
@@ -58,6 +58,9 @@ void TranslationWidgetAutoResizer::textEditChanged() {
 
     edit->setMinimumHeight(qMax(70, s.height() + (fr.height() - cr.height()) -
                                 1));
+
+    edit->setMinimumHeight(qMax(70, s.height() + (fr.height() - cr.height()) -
+                                1));
 }
 
 #endif // TRANSLATIONWIDGETAUTORESIZER_H
index 6536d6e..ddb8f3f 100644 (file)
 #include "../../includes/translation.h"
 #include <QMultiHash>
 
+#ifdef Q_WS_MAEMO_5
+    #include <QMaemo5InformationBox>
+#endif
 
 WordListWidget::WordListWidget(Backbone *backbone, QWidget *parent):
     QListView(parent) {
 
     this->backbone = backbone;
 
+    _exactMatchString = QString();
+
     wordListModel = new QStringListModel();
 
     connect(backbone, SIGNAL(ready()),
@@ -69,17 +74,51 @@ void WordListWidget::showSearchResults() {
     searchResult.clear();
     QMultiHash<QString, Translation*> result = backbone->result();
 
-    QMultiHash<QString, Translation*>::iterator i;
-    for(i = result.begin(); i != result.end(); i++) {
-        if(!searchResult.contains(i.key())) {
-           addWord(i.key());
-        }
-        searchResult[i.key()].push_back(i.value());
+    if(result.count() == 0) {
+        #ifdef Q_WS_MAEMO_5
+        QMaemo5InformationBox::information(this,
+                            tr("Can't find any matching words"),
+                            QMaemo5InformationBox::DefaultTimeout);
+        #endif
     }
+    else
+    {
+        QMultiHash<QString, Translation*>::iterator i;
+        for(i = result.begin(); i != result.end(); i++) {
+
+            if(!searchResult.contains(i.key())) {
+               addWord(i.key());
+            }
 
-    wordListModel->sort(0, Qt::AscendingOrder);
+            searchResult[i.key()].push_back(i.value());
+        }
 
-    scrollTo(model()->index(0,0));
+        bool foundExactMatch = false;
+
+        if(!_exactMatchString.isEmpty()) {
+            QHash<QString, QList<Translation*> >::iterator j;
+            for(j = searchResult.begin(); j != searchResult.end(); j++) {
+                if(j.key() == _exactMatchString && !foundExactMatch) {
+                    foundExactMatch = true;
+                    clear();
+                    backbone->searchHtml(j.value());
+                    emit selectedWord(j.key());
+                    break;
+                }
+            }
+            if(!foundExactMatch) {
+                #ifdef Q_WS_MAEMO_5
+                QMaemo5InformationBox::information(this,
+                                    tr("Can't find exactly matching word"),
+                                    QMaemo5InformationBox::DefaultTimeout);
+                #endif
+            }
+            setExactMatchString(QString());
+        }
+        wordListModel->sort(0, Qt::AscendingOrder);
+
+        scrollTo(model()->index(0,0));
+    }
 
     unlockList();
 }
@@ -97,3 +136,11 @@ void WordListWidget::lockList() {
 void WordListWidget::unlockList() {
     setEnabled(true);
 }
+
+void WordListWidget::setExactMatchString(QString exactMatchString) {
+    _exactMatchString = exactMatchString;
+}
+
+QString WordListWidget::exactMatchString() {
+    return _exactMatchString;
+}
index d670973..12d94c3 100644 (file)
@@ -47,9 +47,23 @@ public Q_SLOTS:
     /*! Request to show search results, requested by backbone when it finished
       search*/
     void showSearchResults();
+
+    //! Lock words list, while backbone is doing somethig in background
     void lockList();
+
+    //! Unlocks words list
     void unlockList();
 
+    //! Sets string which exact match will be searched
+    /*!
+      When exactMatchString is not empty, widget will not display found words,
+      but when in found words is exactMatchString it will direct display it's
+      translation. When exactMatchString isn't in list widget will display
+      suitable information, and list of found words
+      */
+    void setExactMatchString(QString exactMatchString);
+    QString exactMatchString();
+
 private Q_SLOTS:
     void itemClicked(QModelIndex index);
 
@@ -61,6 +75,7 @@ private:
     //clears all list of words
     void clear();
     QHash<QString, QList<Translation*> > searchResult;
+    QString _exactMatchString;
 };
 
 #endif // WORDLISTWIDGET_H
index b5c37f1..6cdb305 100644 (file)
@@ -34,7 +34,7 @@ QStringList parseParameters(int argc, char *argv[]) {
     for(int i=1; i<argc; i++) {
         QString argument(argv[i]);
         if(!wordListStarted) {
-            if(argument == "-s") {
+            if(argument == "-s" || argument == "--search") {
                 wordListStarted = true;
             }
         }
@@ -65,7 +65,7 @@ int main(int argc, char *argv[]) {
     w->show();
 
     if(search.count() > 0) {
-        w->search(search);
+        w->searchExactWord(search[0]);
     }
 
     return a.exec();
index 2c4da4c..6d69003 100644 (file)
@@ -42,9 +42,6 @@ XdxfPlugin::XdxfPlugin(QObject *parent) : CommonDictInterface(parent),
 
     setPath("/usr/lib/mdictionary/dict.xdxf");
     stopped = false;
-
-
-    qDebug()<<removeAccents(QString::fromUtf8("Słońce"));
 }
 
 QString XdxfPlugin::langFrom() const {   
@@ -73,7 +70,6 @@ QList<Translation*> XdxfPlugin::searchWordList(QString word, int limit) {
     QFile dictionaryFile(path);
 
     word = removeAccents(word);
-    qDebug()<<word;
 
     stopped = false;
     if(word.indexOf("*")==-1)