X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=trunk%2Fsrc%2Fbase%2Fgui%2FTranslationWidget.cpp;h=9b1dc713216562ff8b6812f571b532fcb3293fa5;hb=03b28346abcf9a59f6ca66942214eb6ae1302081;hp=04c7565f9e0cbb9eee11a80c15c5066bce1c7c15;hpb=1028f128fa2a8319b330ceecc050bfb7c5e7096a;p=mdictionary diff --git a/trunk/src/base/gui/TranslationWidget.cpp b/trunk/src/base/gui/TranslationWidget.cpp index 04c7565..9b1dc71 100644 --- a/trunk/src/base/gui/TranslationWidget.cpp +++ b/trunk/src/base/gui/TranslationWidget.cpp @@ -24,18 +24,28 @@ #include "TranslationWidget.h" #include "TranslationWidgetAutoResizer.h" #include +#ifdef Q_WS_MAEMO_5 + #include + #include + #include +#endif TranslationWidget::TranslationWidget(QWidget *parent): QScrollArea(parent) { #ifdef Q_WS_MAEMO_5 setAttribute(Qt::WA_Maemo5StackedWindow); + setWindowFlags(windowFlags() | Qt::Window); #endif - setWindowFlags(windowFlags() | Qt::Window); + initializeUI(); - setWindowTitle(tr("Translation")); + setWindowTitle("mDictionary"); + + connect(textEdit, SIGNAL(search()), + this, SLOT(searchSelected())); + } @@ -43,9 +53,15 @@ void TranslationWidget::show() { QScrollArea::show(); } + void TranslationWidget::show(QStringList translations) { - show(); + showMaximized(); + + #ifdef Q_WS_MAEMO_5 + if(!buttonsInitialized) + initButtons(); + #endif textEdit->clear(); @@ -55,7 +71,12 @@ void TranslationWidget::show(QStringList translations) { trans += t + "\n"; } - textEdit->setPlainText(trans); + // qDebug()<") + tr("\n ") + trans + tr("\n "); + trans=XslConversion(trans); + textEdit->insertHtml(trans); + // textEdit->setPlainText(trans); textEdit->repaint(this->rect()); @@ -64,19 +85,116 @@ void TranslationWidget::show(QStringList translations) { emit updateSize(); } -void TranslationWidget::initializeUI() { +QString TranslationWidget::XslConversion(QString translation) +{ + QXmlQuery myQuery(QXmlQuery::XSLT20); + myQuery.setFocus(translation); - zoomInToolButton = new QToolButton; - zoomInToolButton->setIcon(QIcon::fromTheme("pdf_zoomin")); + 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; +} - zoomOutToolButton = new QToolButton; - zoomOutToolButton->setIcon(QIcon::fromTheme("pdf_zoomout")); - // horizontalLayout = new QHBoxLayout; - //horizontalLayout->addWidget(zoomInToolButton); - // horizontalLayout->addWidget(zoomOutToolButton); +#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(); +//================================================================== + + 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(clicked()), + this, SLOT(showButtons())); +} +#endif - textEdit = new QTextEdit; +void TranslationWidget::initializeUI() { + + textEdit = new TranslationTextEdit; textEdit->setReadOnly(true); resizer = new TranslationWidgetAutoResizer(textEdit); @@ -87,50 +205,139 @@ void TranslationWidget::initializeUI() { verticalLayout = new QVBoxLayout(w); verticalLayout->addWidget(textEdit); - textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - + #ifndef Q_WS_MAEMO_5 + textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + #endif 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(":/icons/48x48/edit-select-all.png")); + 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_sent")); + 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() { + if(!buttonsVisible) { + buttonsAnimation->setDirection(QAbstractAnimation::Forward); + buttonsAnimation->start(); + buttonsVisible = true; + + showButtonsButton->setIcon(QIcon::fromTheme("general_received")); + } + else if(buttonsVisible) { + buttonsAnimation->setDirection(QAbstractAnimation::Backward); + buttonsAnimation->start(); + buttonsVisible = false; + showButtonsButton->setIcon(QIcon::fromTheme("general_sent")); + } +} + +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::hideEvent(QHideEvent* e) { + if(buttonsVisible) + showButtons(); + + QScrollArea::hideEvent(e); } +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 + + +