X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=trunk%2Fsrc%2Fbase%2Fgui%2FTranslationWidget.cpp;h=75ebb5124e0a65be446ee478b473b425da870639;hb=294938bb59cd2d851e4f247736507ca7f250ffe0;hp=25ef2d888ed265f5aefb9bc2aff8883e1813cef9;hpb=7ba2236033452bed8a2e85b2d0b95f19491f98f7;p=mdictionary diff --git a/trunk/src/base/gui/TranslationWidget.cpp b/trunk/src/base/gui/TranslationWidget.cpp index 25ef2d8..75ebb51 100644 --- a/trunk/src/base/gui/TranslationWidget.cpp +++ b/trunk/src/base/gui/TranslationWidget.cpp @@ -24,24 +24,28 @@ #include "TranslationWidget.h" #include "TranslationWidgetAutoResizer.h" #include +#ifdef Q_WS_MAEMO_5 + #include + #include + #include +#endif -TranslationWidget::TranslationWidget(Backbone *backbone, QWidget *parent): +TranslationWidget::TranslationWidget(QWidget *parent): QScrollArea(parent) { - this->backbone = backbone; - - #ifdef Q_WS_MAEMO_5 setAttribute(Qt::WA_Maemo5StackedWindow); + setWindowFlags(windowFlags() | Qt::Window); #endif - setWindowFlags(windowFlags() | Qt::Window); + initializeUI(); - /* connect(textEdit, SIGNAL(customContextMenuRequested(QPoint)), - this, SLOT(showContextMenu(QPoint)));*/ + setWindowTitle("mDictionary"); + + connect(textEdit, SIGNAL(search()), + this, SLOT(searchSelected())); - setWindowTitle(tr("Translation")); } @@ -49,47 +53,294 @@ void TranslationWidget::show() { QScrollArea::show(); } -void TranslationWidget::show(QList translations) { - show(); +void TranslationWidget::show(QStringList translations) { + + showMaximized(); + + #ifdef Q_WS_MAEMO_5 + if(!buttonsInitialized) + initButtons(); + #endif textEdit->clear(); QString trans; - Translation* t; + QString t; foreach(t, translations) { - trans += t->toHtml() + "\n"; + trans += t + "\n"; } - textEdit->setPlainText(trans); - textEdit->update(this->rect()); + trans=QString("") + + QString("\n ") + trans + QString("\n "); +// trans.replace("&","&"); + trans=XslConversion(trans); + qDebug()<insertHtml(trans); + // textEdit->setPlainText(trans); + textEdit->repaint(this->rect()); + + update(this->rect()); + + emit updateSize(); } -void TranslationWidget::initializeUI() { - /*contextMenu = new QMenu; +QString TranslationWidget::XslConversion(QString translation) +{ + QXmlQuery myQuery(QXmlQuery::XSLT20); + myQuery.setFocus(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; +} - contextMenu->addAction(tr("Copy"), this, SLOT(copy())); - contextMenu->addAction(tr("Paste"), this, SLOT(paste())); - contextMenu->addAction(tr("Select all"), this, SLOT(selectAll()));*/ - textEdit = new QTextEdit; +#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 + +void TranslationWidget::initializeUI() { + + textEdit = new TranslationTextEdit; 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->addWidget(textEdit); + #ifndef Q_WS_MAEMO_5 + textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + #endif + this->setWidget(w); this->setWidgetResizable(true); + #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::showContextMenu(QPoint pos) { - contextMenu->exec(pos); +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 + + +