X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=trunk%2Fsrc%2Fbase%2Fgui%2FTranslationWidget.cpp;h=75ebb5124e0a65be446ee478b473b425da870639;hb=294938bb59cd2d851e4f247736507ca7f250ffe0;hp=cc764c30660ab242f4f9605fd217a9cf53c57242;hpb=b807e8dde6a0256a0f61d008f9e5192023e434c7;p=mdictionary diff --git a/trunk/src/base/gui/TranslationWidget.cpp b/trunk/src/base/gui/TranslationWidget.cpp index cc764c3..75ebb51 100644 --- a/trunk/src/base/gui/TranslationWidget.cpp +++ b/trunk/src/base/gui/TranslationWidget.cpp @@ -22,29 +22,325 @@ //Created by Mateusz Półrola #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 -TranslationWidget::TranslationWidget(QWidget *parent) : - QWidget(parent) { - setAttribute(Qt::WA_Maemo5StackedWindow); - setWindowFlags(windowFlags() | Qt::Window); initializeUI(); + + setWindowTitle("mDictionary"); + + connect(textEdit, SIGNAL(search()), + this, SLOT(searchSelected())); + +} + + +void TranslationWidget::show() { + QScrollArea::show(); +} + + +void TranslationWidget::show(QStringList translations) { + + showMaximized(); + + #ifdef Q_WS_MAEMO_5 + if(!buttonsInitialized) + initButtons(); + #endif + + textEdit->clear(); + + QString trans; + QString t; + foreach(t, translations) { + trans += t + "\n"; + } + + + 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::show(QModelIndex index) { - QWidget::show(); +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; +} + + +#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); - qDebug()<data(index); + 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() { - verticalLayout = new QVBoxLayout; - translationTextEdit = new QTextEdit; + textEdit = new TranslationTextEdit; + textEdit->setReadOnly(true); + + 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())); - verticalLayout->addWidget(translationTextEdit); + buttonsInitialized = false; - setLayout(verticalLayout); + + + 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 + + +