Added on screen button in maemo and hardware zoom buttons
authorMateusz Półrola <mateusz.polrola@comarch.pl>
Thu, 19 Aug 2010 10:05:48 +0000 (12:05 +0200)
committerMateusz Półrola <mateusz.polrola@comarch.pl>
Thu, 19 Aug 2010 10:05:48 +0000 (12:05 +0200)
trunk/src/base/base.pro
trunk/src/base/gui/MainWindow.cpp
trunk/src/base/gui/MainWindow.h
trunk/src/base/gui/TranslationWidget.cpp
trunk/src/base/gui/TranslationWidget.h

index 8d29e8a..1ef9a0a 100644 (file)
@@ -27,7 +27,8 @@ SOURCES += gui/main.cpp \
     gui/SettingsWidget.cpp \
     gui/BookmarksWidget.cpp \
     gui/WelcomeScreenWidget.cpp \ 
-    gui/AboutWidget.cpp
+    gui/AboutWidget.cpp \
+    gui/TranslationTextEdit.cpp
 
 HEADERS  += gui/MainWindow.h \
     gui/AboutWidget.h \
@@ -51,7 +52,8 @@ HEADERS  += gui/MainWindow.h \
     backbone/BookmarkTranslations.h \
     gui/SettingsWidget.h \
     gui/BookmarksWidget.h \
-    gui/WelcomeScreenWidget.h
+    gui/WelcomeScreenWidget.h \
+    gui/TranslationTextEdit.h
 
 FORMS    += gui/MainWindow.ui
 RESOURCES += gui/gui.qrc
index a9a70d9..fac9d25 100644 (file)
@@ -249,6 +249,12 @@ QHash<CommonDictInterface*, bool> MainWindow::getDictionaries() {
     return backbone->getDictionaries();
 }
 
+
+void MainWindow::search(QString word) {
+    setExactSearch(false);
+    searchBarWidget->search(word);
+}
+
 void MainWindow::searchExact(QString word) {
     setExactSearch(true);
     //searching with searchBar, not directly by emiting searchWordList(),
@@ -448,6 +454,15 @@ void MainWindow::connectTranslationWidget() {
     connect(this, SIGNAL(showTranslation(QStringList)),
             translationWidget, SLOT(show(QStringList)));
 
+     #ifdef Q_WS_MAEMO_5
+        connect(translationWidget, SIGNAL(search(QString)),
+                this, SLOT(search(QString)));
+    #else
+        connect(translationWidget, SIGNAL(search(QString)),
+                this, SLOT(searchExact(QString)));
+    #endif
+
+
 }
 
 void MainWindow::connectDictManager() {
index 7f570b0..d475ad6 100644 (file)
@@ -124,6 +124,14 @@ public:
     void searchExact(QString);
 
 
+    //! Search for given word
+    /*!
+      \param word which will be searched in dictionaries
+      */
+    void search(QString);
+
+
+
     //! Gets word list from backbone and prepares received list to display
     /*!
       Checks if received list is empty, in that case displays suitable
index 04c7565..0424cd7 100644 (file)
 #include "TranslationWidget.h"
 #include "TranslationWidgetAutoResizer.h"
 #include <QDebug>
+#ifdef Q_WS_MAEMO_5
+    #include <QtGui/QX11Info>
+    #include <X11/Xlib.h>
+    #include <X11/Xatom.h>
+#endif
 
 TranslationWidget::TranslationWidget(QWidget *parent):
     QScrollArea(parent) {
@@ -36,6 +41,10 @@ TranslationWidget::TranslationWidget(QWidget *parent):
     initializeUI();
 
     setWindowTitle(tr("Translation"));
+
+    connect(textEdit, SIGNAL(search()),
+            this, SLOT(searchSelected()));
+
 }
 
 
@@ -45,7 +54,12 @@ void TranslationWidget::show() {
 
 void TranslationWidget::show(QStringList translations) {
 
-    show();
+    showMaximized();
+
+    #ifdef Q_WS_MAEMO_5
+        if(!buttonsInitialized)
+            initButtons();
+    #endif
 
     textEdit->clear();
 
@@ -64,19 +78,98 @@ void TranslationWidget::show(QStringList translations) {
     emit updateSize();
 }
 
-void TranslationWidget::initializeUI() {
-
-    zoomInToolButton = new QToolButton;
-    zoomInToolButton->setIcon(QIcon::fromTheme("pdf_zoomin"));
-
-    zoomOutToolButton = new QToolButton;
-    zoomOutToolButton->setIcon(QIcon::fromTheme("pdf_zoomout"));
+#ifdef Q_WS_MAEMO_5
+void TranslationWidget::initButtons() {
+
+        int x = width() - showButtonsButton->sizeHint().width();
+        int y = height() - showButtonsButton->sizeHint().height();
+
+        showButtonsButton->move(QPoint(x,y));
+        showButtonsButton->show();
+        showButtonsButton->setCheckable(true);
+//==================================================================
+
+        x = width() - zoomOutButton->sizeHint().width();
+        y = height() - 2*zoomOutButton->sizeHint().height();
+        zoomOutButton->move(QPoint(x, height()));
+
+        zoomOutButtonAnimation =
+                new QPropertyAnimation(zoomOutButton, "pos", this);
+
+        zoomOutButtonAnimation->setStartValue(QPoint(x, height()));
+        zoomOutButtonAnimation->setEndValue(QPoint(x,y));
+        zoomOutButtonAnimation->setDuration(200);
+        zoomOutButtonAnimation->setEasingCurve(QEasingCurve::InOutBack);
+//==================================================================
+        x = width() - zoomInButton->sizeHint().width();
+        y = height() - 3*zoomInButton->sizeHint().height();
+        zoomInButton->move(QPoint(x, height()));
+
+        zoomInButtonAnimation =
+                new QPropertyAnimation(zoomInButton, "pos", this);
+
+        zoomInButtonAnimation->setStartValue(QPoint(x, height()));
+        zoomInButtonAnimation->setEndValue(QPoint(x,y));
+        zoomInButtonAnimation->setDuration(400);
+        zoomInButtonAnimation->setEasingCurve(QEasingCurve::InOutBack);
+//==================================================================
+        x = 0;
+        y = height() - copyButton->sizeHint().height();
+
+        copyButton->move(QPoint(x, height()));
+
+        copyButtonAnimation =
+                new QPropertyAnimation(copyButton, "pos", this);
+
+        copyButtonAnimation->setStartValue(QPoint(x, height()));
+        copyButtonAnimation->setEndValue(QPoint(x,y));
+        copyButtonAnimation->setDuration(200);
+        copyButtonAnimation->setEasingCurve(QEasingCurve::InOutBack);
+//==================================================================
+        x = 0;
+        y = height() - 2*copyButton->sizeHint().height();
+
+        selectAllButton->move(QPoint(x, height()));
+
+        selectAllButtonAnimation =
+                new QPropertyAnimation(selectAllButton, "pos", this);
+
+        selectAllButtonAnimation->setStartValue(QPoint(x, height()));
+        selectAllButtonAnimation->setEndValue(QPoint(x,y));
+        selectAllButtonAnimation->setDuration(400);
+        selectAllButtonAnimation->setEasingCurve(QEasingCurve::InOutBack);
+//==================================================================
+        x = 0;
+        y = height() - 3*copyButton->sizeHint().height();
+
+        searchButton->move(QPoint(x, height()));
+
+        searchButtonAnimation =
+                new QPropertyAnimation(searchButton, "pos", this);
+
+        searchButtonAnimation->setStartValue(QPoint(x, height()));
+        searchButtonAnimation->setEndValue(QPoint(x,y));
+        searchButtonAnimation->setDuration(600);
+        searchButtonAnimation->setEasingCurve(QEasingCurve::InOutBack);
+//==================================================================
+
+        buttonsAnimation = new QParallelAnimationGroup(this);
+        buttonsAnimation->addAnimation(zoomInButtonAnimation);
+        buttonsAnimation->addAnimation(zoomOutButtonAnimation);
+        buttonsAnimation->addAnimation(selectAllButtonAnimation);
+        buttonsAnimation->addAnimation(copyButtonAnimation);
+        buttonsAnimation->addAnimation(searchButtonAnimation);
+        buttonsInitialized = true;
+        buttonsVisible = false;
+
+        connect(showButtonsButton, SIGNAL(toggled(bool)),
+                this, SLOT(showButtons(bool)));
+}
+#endif
 
-   // horizontalLayout = new QHBoxLayout;
-    //horizontalLayout->addWidget(zoomInToolButton);
-   // horizontalLayout->addWidget(zoomOutToolButton);
+void TranslationWidget::initializeUI() {
 
-    textEdit = new QTextEdit;
+    textEdit = new TranslationTextEdit;
     textEdit->setReadOnly(true);
 
     resizer = new TranslationWidgetAutoResizer(textEdit);
@@ -94,43 +187,122 @@ void TranslationWidget::initializeUI() {
     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()));
-
-   /* #ifdef Q_WS_MAEMO_5
-        fullScreenButton = new QToolButton(this);
-        fullScreenButton->setIcon(QIcon::fromTheme("general_fullsize"));
-        fullScreenButton->setMinimumSize(fullScreenButton->sizeHint());
-        int x = QApplication::desktop()->screenGeometry(this).width()  -
-                fullScreenButton->sizeHint().width();
-        int y = QApplication::desktop()->screenGeometry(this).height() -
-                fullScreenButton->sizeHint().height();
-        fullScreenButton->move(QPoint(x,y));
-        fullScreenButton->show();
-        fullScreenButton->setWindowOpacity(0.5);
-
-
-        backButton = new QToolButton(this);
-        backButton->setIcon(QIcon::fromTheme("general_overlay_back"));
-        backButton->setMinimumSize(fullScreenButton->sizeHint());
-        x = QApplication::desktop()->screenGeometry(this).width()  -
-                backButton->sizeHint().width();
-        y = 0;
-        backButton->move(QPoint(x,y));
-        backButton->show();
-        backButton->setWindowOpacity(0.5);
-
-        connect(backButton, SIGNAL(clicked()),
-                this, SLOT(hide()));
-    #endif*/
+
+    #ifdef Q_WS_MAEMO_5
+        zoomInButton = new QToolButton(this);
+        zoomInButton->setIcon(QIcon::fromTheme("pdf_zoomin"));
+        zoomInButton->setMinimumSize(zoomInButton->sizeHint());
+
+        zoomOutButton = new QToolButton(this);
+        zoomOutButton->setIcon(QIcon::fromTheme("pdf_zoomout"));
+        zoomOutButton->setMinimumSize(zoomOutButton->sizeHint());
+
+        selectAllButton = new QToolButton(this);
+        selectAllButton->setIcon(QIcon::fromTheme("pdf_zoomout"));
+        selectAllButton->setMinimumSize(selectAllButton->sizeHint());
+
+        copyButton = new QToolButton(this);
+        copyButton->setIcon(QIcon::fromTheme("general_notes"));
+        copyButton->setMinimumSize(copyButton->sizeHint());
+        copyButton->setEnabled(false);
+
+        searchButton = new QToolButton(this);
+        searchButton->setIcon(QIcon::fromTheme("general_search"));
+        searchButton->setMinimumSize(searchButton->sizeHint());
+        searchButton->setEnabled(false);
+
+        showButtonsButton = new QToolButton(this);
+        showButtonsButton->setIcon(QIcon::fromTheme("general_search"));
+        showButtonsButton->setMinimumSize(searchButton->sizeHint());
+
+        connect(zoomInButton, SIGNAL(clicked()),
+                textEdit, SLOT(zoomIn()));
+
+        connect(zoomOutButton, SIGNAL(clicked()),
+                textEdit, SLOT(zoomOut()));
+
+
+        connect(searchButton, SIGNAL(clicked()),
+                this, SLOT(searchSelected()));
+
+        connect(copyButton, SIGNAL(clicked()),
+                textEdit, SLOT(copy()));
+
+        connect(textEdit, SIGNAL(copyAvailable(bool)),
+                searchButton, SLOT(setEnabled(bool)));
+
+        connect(textEdit, SIGNAL(copyAvailable(bool)),
+                copyButton, SLOT(setEnabled(bool)));
+
+        connect(selectAllButton, SIGNAL(clicked()),
+                textEdit, SLOT(selectAll()));
+
+        buttonsInitialized = false;
+
+
+
+        grabZoomKeys(true);
+    #endif
+}
+
+void TranslationWidget::searchSelected() {
+    #ifdef Q_WS_MAEMO_5
+        hide();
+    #endif
+    emit search(textEdit->textCursor().selectedText());
+}
+
+#ifdef Q_WS_MAEMO_5
+void TranslationWidget::showButtons(bool show) {
+    if(show && !buttonsVisible) {
+        buttonsAnimation->setDirection(QAbstractAnimation::Forward);
+        buttonsAnimation->start();
+        buttonsVisible = true;
+    }
+    else if(!show && buttonsVisible) {
+        buttonsAnimation->setDirection(QAbstractAnimation::Backward);
+        buttonsAnimation->start();
+        buttonsVisible = false;
+    }
+}
+
+void TranslationWidget::grabZoomKeys(bool grab) {
+     if (!winId()) {
+         return;
+     }
+
+    unsigned long val = (grab) ? 1 : 0;
+    Atom atom = XInternAtom(QX11Info::display(),
+                            "_HILDON_ZOOM_KEY_ATOM", False);
+    if (!atom) {
+        return;
+    }
+
+    XChangeProperty (QX11Info::display(),
+         winId(),
+         atom,
+         XA_INTEGER,
+         32,
+         PropModeReplace,
+         reinterpret_cast<unsigned char *>(&val),
+         1);
+}
+
+void TranslationWidget::keyPressEvent(QKeyEvent* event) {
+    switch (event->key()) {
+        case Qt::Key_F7:
+        textEdit->zoomIn();
+        event->accept();
+        break;
+
+        case Qt::Key_F8:
+        textEdit->zoomOut();
+        event->accept();
+        break;
+    }
+    QWidget::keyPressEvent(event);
 }
+#endif
+
+
 
index 957f243..6d77227 100644 (file)
@@ -30,6 +30,8 @@
 #include <QtGui>
 #include "../backbone/backbone.h"
 #include "TranslationWidgetAutoResizer.h"
+#include "TranslationTextEdit.h"
+#include <QPropertyAnimation>
 
 //! Displays translation of word found in dictionaries
 /*!
@@ -43,6 +45,8 @@ public:
 Q_SIGNALS:
     void updateSize();
 
+    void search(QString);
+
 public Q_SLOTS:
     //! Show widget.
     void show();
@@ -50,21 +54,45 @@ public Q_SLOTS:
     //! Request to show translation of word list passed as parameter.
     void show(QStringList);
 
+protected:
+    #ifdef Q_WS_MAEMO_5
+        void keyPressEvent(QKeyEvent *);
+    #endif
+
+private Q_SLOTS:
+    void searchSelected();
+    #ifdef Q_WS_MAEMO_5
+        void showButtons(bool);
+    #endif
 
 private:
-    QTextEdit *textEdit;
-    QToolButton* zoomInToolButton;
-    QToolButton* zoomOutToolButton;
+    TranslationTextEdit *textEdit;
     #ifdef Q_WS_MAEMO_5
-        QToolButton* fullScreenButton;
-        QToolButton* backButton;
+        QToolButton* zoomInButton;
+        QToolButton* zoomOutButton;
+        QToolButton* selectAllButton;
+        QToolButton* copyButton;
+        QToolButton* searchButton;
+        QToolButton* showButtonsButton;
+
+        QPropertyAnimation* zoomInButtonAnimation;
+        QPropertyAnimation* zoomOutButtonAnimation;
+        QPropertyAnimation* copyButtonAnimation;
+        QPropertyAnimation* selectAllButtonAnimation;
+        QPropertyAnimation* searchButtonAnimation;
+        QAnimationGroup* buttonsAnimation;
+
+        void initButtons();
+        bool buttonsInitialized;
+        bool buttonsVisible;
+
+        void grabZoomKeys(bool);
     #endif
     QVBoxLayout *verticalLayout;
     QHBoxLayout* horizontalLayout;
     TranslationWidgetAutoResizer* resizer;
 
     void initializeUI();
-
 };
 
 #endif // TRANSLATIONWIDGET_H