From 3d34f236affc731dba540027f8879b80d37aacd4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mateusz=20P=C3=B3=C5=82rola?= Date: Thu, 19 Aug 2010 12:05:48 +0200 Subject: [PATCH] Added on screen button in maemo and hardware zoom buttons --- trunk/src/base/base.pro | 6 +- trunk/src/base/gui/MainWindow.cpp | 15 ++ trunk/src/base/gui/MainWindow.h | 8 + trunk/src/base/gui/TranslationWidget.cpp | 272 ++++++++++++++++++++++++------ trunk/src/base/gui/TranslationWidget.h | 40 ++++- 5 files changed, 283 insertions(+), 58 deletions(-) diff --git a/trunk/src/base/base.pro b/trunk/src/base/base.pro index 8d29e8a..1ef9a0a 100644 --- a/trunk/src/base/base.pro +++ b/trunk/src/base/base.pro @@ -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 diff --git a/trunk/src/base/gui/MainWindow.cpp b/trunk/src/base/gui/MainWindow.cpp index a9a70d9..fac9d25 100644 --- a/trunk/src/base/gui/MainWindow.cpp +++ b/trunk/src/base/gui/MainWindow.cpp @@ -249,6 +249,12 @@ QHash 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() { diff --git a/trunk/src/base/gui/MainWindow.h b/trunk/src/base/gui/MainWindow.h index 7f570b0..d475ad6 100644 --- a/trunk/src/base/gui/MainWindow.h +++ b/trunk/src/base/gui/MainWindow.h @@ -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 diff --git a/trunk/src/base/gui/TranslationWidget.cpp b/trunk/src/base/gui/TranslationWidget.cpp index 04c7565..0424cd7 100644 --- a/trunk/src/base/gui/TranslationWidget.cpp +++ b/trunk/src/base/gui/TranslationWidget.cpp @@ -24,6 +24,11 @@ #include "TranslationWidget.h" #include "TranslationWidgetAutoResizer.h" #include +#ifdef Q_WS_MAEMO_5 + #include + #include + #include +#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(&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 + + diff --git a/trunk/src/base/gui/TranslationWidget.h b/trunk/src/base/gui/TranslationWidget.h index 957f243..6d77227 100644 --- a/trunk/src/base/gui/TranslationWidget.h +++ b/trunk/src/base/gui/TranslationWidget.h @@ -30,6 +30,8 @@ #include #include "../backbone/backbone.h" #include "TranslationWidgetAutoResizer.h" +#include "TranslationTextEdit.h" +#include //! 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 -- 1.7.9.5