Merge branch 'master' into cache
authorJakub Jaszczynski <j.j.jaszczynski@gmail.com>
Thu, 19 Aug 2010 10:51:54 +0000 (12:51 +0200)
committerJakub Jaszczynski <j.j.jaszczynski@gmail.com>
Thu, 19 Aug 2010 10:51:54 +0000 (12:51 +0200)
Conflicts:
trunk/src/base/gui/TranslationWidget.cpp
trunk/src/base/gui/TranslationWidget.h

1  2 
trunk/src/base/base.pro
trunk/src/base/gui/TranslationWidget.cpp
trunk/src/base/gui/TranslationWidget.h

diff --combined trunk/src/base/base.pro
@@@ -1,16 -1,10 +1,16 @@@
  # -------------------------------------------------
  # Project created by QtCreator 2010-08-03T08:54:27
 -# -------------------------------------------------
 +#-------------------------------------------------
 +
  QT += core \
      gui \
 -    sql
 +    sql \
 +    xml \
 +    xmlpatterns
 +
  maemo5:QT += maemo5
 +
 +
  TARGET = mdictionary
  TEMPLATE = app
  MDICT_BINDIR = $$[MDICT_BINDIR]
@@@ -33,7 -27,8 +33,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 \
@@@ -57,7 -52,8 +58,8 @@@
      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
@@@ -89,5 -85,3 +91,5 @@@ unix 
      desktop.files += ../../../data/other/$${TARGET}.desktop
      icon64.files += ../../../data/icons/64x64/$${TARGET}.png
  }
 +
 +RESOURCES += xslt2.qrc
  #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) {
      setWindowFlags(windowFlags() | Qt::Window);
  
      initializeUI();
 -
 +    //Q_INIT_RESOURCE(xslt);
      setWindowTitle(tr("Translation"));
+     connect(textEdit, SIGNAL(search()),
+             this, SLOT(searchSelected()));
  }
  
  
@@@ -45,7 -54,12 +54,12 @@@ void TranslationWidget::show() 
  
  void TranslationWidget::show(QStringList translations) {
  
-     show();
+     showMaximized();
+     #ifdef Q_WS_MAEMO_5
+         if(!buttonsInitialized)
+             initButtons();
+     #endif
  
      textEdit->clear();
  
          trans += t + "\n";
      }
  
 -    textEdit->setPlainText(trans);
 +  //  qDebug()<<trans;
 +    trans=tr("<?xml version=\"1.0\" encoding=\"UTF-8\"?>") + tr("\n <ar>") + trans + tr("\n </ar>");
 +
 +    trans=XslConversion(trans);
 +    textEdit->insertHtml(trans);
 +  //  textEdit->setPlainText(trans);
  
      textEdit->repaint(this->rect());
  
      emit updateSize();
  }
  
 +QString TranslationWidget::XslConversion(QString translation)
 +{
 +    QXmlQuery myQuery(QXmlQuery::XSLT20);
 +    myQuery.setFocus(translation);
 +//    qDebug()<<translation;
 +    QFile file(":/xsl/xsl.xsl");
 +    if(!file.open(QFile::ReadOnly)){
 +        qDebug()<<"can't open a xslt file";
 +        return translation;
 +    }
 +    QString xslt;
 +    xslt=file.readAll();
 +    myQuery.setQuery(xslt);
 +    QString result("");
 +    myQuery.evaluateTo(&result);
 +    return result;
 +}
 +
 +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);
      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
  #include <QtGui>
  #include "../backbone/backbone.h"
  #include "TranslationWidgetAutoResizer.h"
 +#include <QtXml>
 +#include <QXmlQuery>
+ #include "TranslationTextEdit.h"
+ #include <QPropertyAnimation>
  
  //! Displays translation of word found in dictionaries
  /*!
@@@ -45,6 -45,8 +47,8 @@@ public
  Q_SIGNALS:
      void updateSize();
  
+     void search(QString);
  public Q_SLOTS:
      //! Show widget.
      void show();
      //! 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:
 +    QString XslConversion(QString translation);
-     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