//Created by Mateusz Półrola
#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(Backbone *backbone, QWidget *parent):
- QWidget(parent) {
-
- this->backbone = backbone;
-
+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();
- connect(textEdit, SIGNAL(customContextMenuRequested(QPoint)),
- this, SLOT(showContextMenu(QPoint)));
+ setWindowTitle("mDictionary");
+
+ connect(textEdit, SIGNAL(search()),
+ this, SLOT(searchSelected()));
- setWindowTitle(tr("Translation"));
}
void TranslationWidget::show() {
- QWidget::show();
+ QScrollArea::show();
}
-void TranslationWidget::show(QList<Translation*> 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);
+
+ trans=QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?>") +
+ QString("\n <ar>") + trans + QString("\n </ar>");
+// trans.replace("&","&");
+ trans=XslConversion(trans);
+ qDebug()<<trans;
+// trans.replace("&","&");
+ textEdit->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;
+}
+
+
+#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()));
- contextMenu->addAction(tr("Copy"), this, SLOT(copy()));
- contextMenu->addAction(tr("Paste"), this, SLOT(paste()));
- contextMenu->addAction(tr("Select all"), this, SLOT(selectAll()));
+ zoomInButtonAnimation =
+ new QPropertyAnimation(zoomInButton, "pos", this);
- textEdit = new QTextEdit;
+ 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);
- textEdit->setContextMenuPolicy(Qt::CustomContextMenu);
- verticalLayout = new QVBoxLayout;
- setLayout(verticalLayout);
+ 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::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<unsigned char *>(&val),
+ 1);
+}
+
+void TranslationWidget::hideEvent(QHideEvent* e) {
+ if(buttonsVisible)
+ showButtons();
+
+ QScrollArea::hideEvent(e);
}
-void TranslationWidget::showContextMenu(QPoint pos) {
- contextMenu->exec(pos);
+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
+
+