1 /*******************************************************************************
3 This file is part of mDictionary.
5 mDictionary is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
10 mDictionary is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with mDictionary. If not, see <http://www.gnu.org/licenses/>.
18 Copyright 2010 Comarch S.A.
20 *******************************************************************************/
22 //Created by Mateusz Półrola
24 #include "TranslationWidget.h"
25 #include "TranslationWidgetAutoResizer.h"
28 #include <QtGui/QX11Info>
30 #include <X11/Xatom.h>
33 TranslationWidget::TranslationWidget(QWidget *parent):
38 setAttribute(Qt::WA_Maemo5StackedWindow);
39 setWindowFlags(windowFlags() | Qt::Window);
45 setWindowTitle("mDictionary");
47 connect(textEdit, SIGNAL(search()),
48 this, SLOT(searchSelected()));
53 void TranslationWidget::show() {
58 void TranslationWidget::show(QStringList translations) {
63 if(!buttonsInitialized)
71 foreach(t, translations) {
76 trans=QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?>") +
77 QString("\n <ar>") + trans + QString("\n </ar>");
78 // trans.replace("&","&");
79 trans=XslConversion(trans);
81 // trans.replace("&","&");
82 textEdit->insertHtml(trans);
83 // textEdit->setPlainText(trans);
85 textEdit->repaint(this->rect());
92 QString TranslationWidget::XslConversion(QString translation)
94 QXmlQuery myQuery(QXmlQuery::XSLT20);
95 myQuery.setFocus(translation);
97 QFile file(":/xsl/xsl.xsl");
98 if(!file.open(QFile::ReadOnly)){
99 qDebug()<<"can't open a xslt file";
104 myQuery.setQuery(xslt);
106 myQuery.evaluateTo(&result);
112 void TranslationWidget::initButtons() {
114 int x = width() - showButtonsButton->sizeHint().width();
115 int y = height() - showButtonsButton->sizeHint().height();
117 showButtonsButton->move(QPoint(x,y));
118 showButtonsButton->show();
119 //==================================================================
121 x = width() - zoomOutButton->sizeHint().width();
122 y = height() - 2*zoomOutButton->sizeHint().height();
123 zoomOutButton->move(QPoint(x, height()));
125 zoomOutButtonAnimation =
126 new QPropertyAnimation(zoomOutButton, "pos", this);
128 zoomOutButtonAnimation->setStartValue(QPoint(x, height()));
129 zoomOutButtonAnimation->setEndValue(QPoint(x,y));
130 zoomOutButtonAnimation->setDuration(200);
131 zoomOutButtonAnimation->setEasingCurve(QEasingCurve::InOutBack);
132 //==================================================================
133 x = width() - zoomInButton->sizeHint().width();
134 y = height() - 3*zoomInButton->sizeHint().height();
135 zoomInButton->move(QPoint(x, height()));
137 zoomInButtonAnimation =
138 new QPropertyAnimation(zoomInButton, "pos", this);
140 zoomInButtonAnimation->setStartValue(QPoint(x, height()));
141 zoomInButtonAnimation->setEndValue(QPoint(x,y));
142 zoomInButtonAnimation->setDuration(400);
143 zoomInButtonAnimation->setEasingCurve(QEasingCurve::InOutBack);
144 //==================================================================
146 y = height() - copyButton->sizeHint().height();
148 copyButton->move(QPoint(x, height()));
150 copyButtonAnimation =
151 new QPropertyAnimation(copyButton, "pos", this);
153 copyButtonAnimation->setStartValue(QPoint(x, height()));
154 copyButtonAnimation->setEndValue(QPoint(x,y));
155 copyButtonAnimation->setDuration(200);
156 copyButtonAnimation->setEasingCurve(QEasingCurve::InOutBack);
157 //==================================================================
159 y = height() - 2*copyButton->sizeHint().height();
161 selectAllButton->move(QPoint(x, height()));
163 selectAllButtonAnimation =
164 new QPropertyAnimation(selectAllButton, "pos", this);
166 selectAllButtonAnimation->setStartValue(QPoint(x, height()));
167 selectAllButtonAnimation->setEndValue(QPoint(x,y));
168 selectAllButtonAnimation->setDuration(400);
169 selectAllButtonAnimation->setEasingCurve(QEasingCurve::InOutBack);
170 //==================================================================
172 y = height() - 3*copyButton->sizeHint().height();
174 searchButton->move(QPoint(x, height()));
176 searchButtonAnimation =
177 new QPropertyAnimation(searchButton, "pos", this);
179 searchButtonAnimation->setStartValue(QPoint(x, height()));
180 searchButtonAnimation->setEndValue(QPoint(x,y));
181 searchButtonAnimation->setDuration(600);
182 searchButtonAnimation->setEasingCurve(QEasingCurve::InOutBack);
183 //==================================================================
185 buttonsAnimation = new QParallelAnimationGroup(this);
186 buttonsAnimation->addAnimation(zoomInButtonAnimation);
187 buttonsAnimation->addAnimation(zoomOutButtonAnimation);
188 buttonsAnimation->addAnimation(selectAllButtonAnimation);
189 buttonsAnimation->addAnimation(copyButtonAnimation);
190 buttonsAnimation->addAnimation(searchButtonAnimation);
191 buttonsInitialized = true;
192 buttonsVisible = false;
194 connect(showButtonsButton, SIGNAL(clicked()),
195 this, SLOT(showButtons()));
199 void TranslationWidget::initializeUI() {
201 textEdit = new TranslationTextEdit;
202 textEdit->setReadOnly(true);
204 resizer = new TranslationWidgetAutoResizer(textEdit);
205 connect(this, SIGNAL(updateSize()),
206 resizer, SLOT(textEditChanged()));
208 QWidget*w = new QWidget;
209 verticalLayout = new QVBoxLayout(w);
210 verticalLayout->addWidget(textEdit);
213 textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
214 textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
218 this->setWidgetResizable(true);
221 zoomInButton = new QToolButton(this);
222 zoomInButton->setIcon(QIcon::fromTheme("pdf_zoomin"));
223 zoomInButton->setMinimumSize(zoomInButton->sizeHint());
225 zoomOutButton = new QToolButton(this);
226 zoomOutButton->setIcon(QIcon::fromTheme("pdf_zoomout"));
227 zoomOutButton->setMinimumSize(zoomOutButton->sizeHint());
229 selectAllButton = new QToolButton(this);
230 selectAllButton->setIcon(QIcon(":/icons/48x48/edit-select-all.png"));
231 selectAllButton->setMinimumSize(selectAllButton->sizeHint());
233 copyButton = new QToolButton(this);
234 copyButton->setIcon(QIcon::fromTheme("general_notes"));
235 copyButton->setMinimumSize(copyButton->sizeHint());
236 copyButton->setEnabled(false);
238 searchButton = new QToolButton(this);
239 searchButton->setIcon(QIcon::fromTheme("general_search"));
240 searchButton->setMinimumSize(searchButton->sizeHint());
241 searchButton->setEnabled(false);
243 showButtonsButton = new QToolButton(this);
244 showButtonsButton->setIcon(QIcon::fromTheme("general_sent"));
245 showButtonsButton->setMinimumSize(searchButton->sizeHint());
247 connect(zoomInButton, SIGNAL(clicked()),
248 textEdit, SLOT(zoomIn()));
250 connect(zoomOutButton, SIGNAL(clicked()),
251 textEdit, SLOT(zoomOut()));
254 connect(searchButton, SIGNAL(clicked()),
255 this, SLOT(searchSelected()));
257 connect(copyButton, SIGNAL(clicked()),
258 textEdit, SLOT(copy()));
260 connect(textEdit, SIGNAL(copyAvailable(bool)),
261 searchButton, SLOT(setEnabled(bool)));
263 connect(textEdit, SIGNAL(copyAvailable(bool)),
264 copyButton, SLOT(setEnabled(bool)));
266 connect(selectAllButton, SIGNAL(clicked()),
267 textEdit, SLOT(selectAll()));
269 buttonsInitialized = false;
277 void TranslationWidget::searchSelected() {
281 emit search(textEdit->textCursor().selectedText());
285 void TranslationWidget::showButtons() {
286 if(!buttonsVisible) {
287 buttonsAnimation->setDirection(QAbstractAnimation::Forward);
288 buttonsAnimation->start();
289 buttonsVisible = true;
291 showButtonsButton->setIcon(QIcon::fromTheme("general_received"));
293 else if(buttonsVisible) {
294 buttonsAnimation->setDirection(QAbstractAnimation::Backward);
295 buttonsAnimation->start();
296 buttonsVisible = false;
297 showButtonsButton->setIcon(QIcon::fromTheme("general_sent"));
301 void TranslationWidget::grabZoomKeys(bool grab) {
306 unsigned long val = (grab) ? 1 : 0;
307 Atom atom = XInternAtom(QX11Info::display(),
308 "_HILDON_ZOOM_KEY_ATOM", False);
313 XChangeProperty (QX11Info::display(),
319 reinterpret_cast<unsigned char *>(&val),
323 void TranslationWidget::hideEvent(QHideEvent* e) {
327 QScrollArea::hideEvent(e);
330 void TranslationWidget::keyPressEvent(QKeyEvent* event) {
331 switch (event->key()) {
342 QWidget::keyPressEvent(event);