Disabled horizontal scroll bar in about widget
[mdictionary] / trunk / src / base / gui / TranslationWidget.cpp
1 /*******************************************************************************
2
3     This file is part of mDictionary.
4
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.
9
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.
14
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/>.
17
18     Copyright 2010 Comarch S.A.
19
20 *******************************************************************************/
21
22 //Created by Mateusz Półrola
23
24 #include "TranslationWidget.h"
25 #include "TranslationWidgetAutoResizer.h"
26 #include <QDebug>
27 #ifdef Q_WS_MAEMO_5
28     #include <QtGui/QX11Info>
29     #include <X11/Xlib.h>
30     #include <X11/Xatom.h>
31 #endif
32
33 TranslationWidget::TranslationWidget(QWidget *parent):
34     QScrollArea(parent) {
35
36     #ifdef Q_WS_MAEMO_5
37         setAttribute(Qt::WA_Maemo5StackedWindow);
38         setWindowFlags(windowFlags() | Qt::Window);
39     #endif
40
41
42     initializeUI();
43
44     setWindowTitle("mDictionary");
45
46     connect(textEdit, SIGNAL(search()),
47            this, SLOT(searchSelected()));
48
49 }
50
51
52 void TranslationWidget::show() {
53     QScrollArea::show();
54 }
55
56
57 void TranslationWidget::show(QStringList translations) {
58     textEdit->clear();
59
60     showMaximized();
61
62     #ifdef Q_WS_MAEMO_5
63         if(!buttonsInitialized)
64             initButtons();
65     #endif
66     textEdit->repaint(this->rect());
67     update(this->rect());
68
69     QString trans;
70     QString t;
71     foreach(t, translations) {
72         trans += t + "\n";
73     }
74
75  //   qDebug()<<trans;
76
77
78     trans=tr("<?xml version=\"1.0\" encoding=\"UTF-8\"?>") + tr("\n <ar>") + trans + tr("\n </ar>");
79     trans=XslConversion(trans);
80     textEdit->insertHtml(trans);
81  //   textEdit->setPlainText(trans);
82
83     textEdit->repaint(this->rect());
84
85
86
87     update(this->rect());
88
89     emit updateSize();
90 }
91
92 QString TranslationWidget::XslConversion(QString translation)
93 {
94     QXmlQuery myQuery(QXmlQuery::XSLT20);
95     myQuery.setFocus(translation);
96
97     QFile file(":/xsl/xsl.xsl");
98     if(!file.open(QFile::ReadOnly)){
99         qDebug()<<"can't open a xslt file";
100         return translation;
101     }
102     QString xslt;
103     xslt=file.readAll();
104     myQuery.setQuery(xslt);
105     QString result("");
106     myQuery.evaluateTo(&result);
107     return result;
108 }
109
110
111 #ifdef Q_WS_MAEMO_5
112 void TranslationWidget::initButtons() {
113
114         int x = width() - showButtonsButton->sizeHint().width();
115         int y = height() - showButtonsButton->sizeHint().height();
116
117         showButtonsButton->move(QPoint(x,y));
118         showButtonsButton->show();
119 //==================================================================
120
121         x = width() - zoomOutButton->sizeHint().width();
122         y = height() - 2*zoomOutButton->sizeHint().height();
123         zoomOutButton->move(QPoint(x, height()));
124
125         zoomOutButtonAnimation =
126                 new QPropertyAnimation(zoomOutButton, "pos", this);
127
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()));
136
137         zoomInButtonAnimation =
138                 new QPropertyAnimation(zoomInButton, "pos", this);
139
140         zoomInButtonAnimation->setStartValue(QPoint(x, height()));
141         zoomInButtonAnimation->setEndValue(QPoint(x,y));
142         zoomInButtonAnimation->setDuration(400);
143         zoomInButtonAnimation->setEasingCurve(QEasingCurve::InOutBack);
144 //==================================================================
145         x = 0;
146         y = height() - copyButton->sizeHint().height();
147
148         copyButton->move(QPoint(x, height()));
149
150         copyButtonAnimation =
151                 new QPropertyAnimation(copyButton, "pos", this);
152
153         copyButtonAnimation->setStartValue(QPoint(x, height()));
154         copyButtonAnimation->setEndValue(QPoint(x,y));
155         copyButtonAnimation->setDuration(200);
156         copyButtonAnimation->setEasingCurve(QEasingCurve::InOutBack);
157 //==================================================================
158         x = 0;
159         y = height() - 2*copyButton->sizeHint().height();
160
161         selectAllButton->move(QPoint(x, height()));
162
163         selectAllButtonAnimation =
164                 new QPropertyAnimation(selectAllButton, "pos", this);
165
166         selectAllButtonAnimation->setStartValue(QPoint(x, height()));
167         selectAllButtonAnimation->setEndValue(QPoint(x,y));
168         selectAllButtonAnimation->setDuration(400);
169         selectAllButtonAnimation->setEasingCurve(QEasingCurve::InOutBack);
170 //==================================================================
171         x = 0;
172         y = height() - 3*copyButton->sizeHint().height();
173
174         searchButton->move(QPoint(x, height()));
175
176         searchButtonAnimation =
177                 new QPropertyAnimation(searchButton, "pos", this);
178
179         searchButtonAnimation->setStartValue(QPoint(x, height()));
180         searchButtonAnimation->setEndValue(QPoint(x,y));
181         searchButtonAnimation->setDuration(600);
182         searchButtonAnimation->setEasingCurve(QEasingCurve::InOutBack);
183 //==================================================================
184
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;
193
194         connect(showButtonsButton, SIGNAL(clicked()),
195                 this, SLOT(showButtons()));
196 }
197 #endif
198
199 void TranslationWidget::initializeUI() {
200
201     textEdit = new TranslationTextEdit;
202     textEdit->setReadOnly(true);
203
204     resizer = new TranslationWidgetAutoResizer(textEdit);
205     connect(this, SIGNAL(updateSize()),
206             resizer, SLOT(textEditChanged()));
207
208     QWidget*w = new QWidget;
209     verticalLayout = new QVBoxLayout(w);
210     verticalLayout->addWidget(textEdit);
211
212     textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
213     textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
214
215     this->setWidget(w);
216     this->setWidgetResizable(true);
217
218     #ifdef Q_WS_MAEMO_5
219         zoomInButton = new QToolButton(this);
220         zoomInButton->setIcon(QIcon::fromTheme("pdf_zoomin"));
221         zoomInButton->setMinimumSize(zoomInButton->sizeHint());
222
223         zoomOutButton = new QToolButton(this);
224         zoomOutButton->setIcon(QIcon::fromTheme("pdf_zoomout"));
225         zoomOutButton->setMinimumSize(zoomOutButton->sizeHint());
226
227         selectAllButton = new QToolButton(this);
228         selectAllButton->setIcon(QIcon(":/icons/48x48/edit-select-all.png"));
229         selectAllButton->setMinimumSize(selectAllButton->sizeHint());
230
231         copyButton = new QToolButton(this);
232         copyButton->setIcon(QIcon::fromTheme("general_notes"));
233         copyButton->setMinimumSize(copyButton->sizeHint());
234         copyButton->setEnabled(false);
235
236         searchButton = new QToolButton(this);
237         searchButton->setIcon(QIcon::fromTheme("general_search"));
238         searchButton->setMinimumSize(searchButton->sizeHint());
239         searchButton->setEnabled(false);
240
241         showButtonsButton = new QToolButton(this);
242         showButtonsButton->setIcon(QIcon::fromTheme("general_sent"));
243         showButtonsButton->setMinimumSize(searchButton->sizeHint());
244
245         connect(zoomInButton, SIGNAL(clicked()),
246                 textEdit, SLOT(zoomIn()));
247
248         connect(zoomOutButton, SIGNAL(clicked()),
249                 textEdit, SLOT(zoomOut()));
250
251
252         connect(searchButton, SIGNAL(clicked()),
253                 this, SLOT(searchSelected()));
254
255         connect(copyButton, SIGNAL(clicked()),
256                 textEdit, SLOT(copy()));
257
258         connect(textEdit, SIGNAL(copyAvailable(bool)),
259                 searchButton, SLOT(setEnabled(bool)));
260
261         connect(textEdit, SIGNAL(copyAvailable(bool)),
262                 copyButton, SLOT(setEnabled(bool)));
263
264         connect(selectAllButton, SIGNAL(clicked()),
265                 textEdit, SLOT(selectAll()));
266
267         buttonsInitialized = false;
268
269
270
271         grabZoomKeys(true);
272     #endif
273 }
274
275 void TranslationWidget::searchSelected() {
276     #ifdef Q_WS_MAEMO_5
277         hide();
278     #endif
279     emit search(textEdit->textCursor().selectedText());
280 }
281
282 #ifdef Q_WS_MAEMO_5
283 void TranslationWidget::showButtons() {
284     if(!buttonsVisible) {
285         buttonsAnimation->setDirection(QAbstractAnimation::Forward);
286         buttonsAnimation->start();
287         buttonsVisible = true;
288
289         showButtonsButton->setIcon(QIcon::fromTheme("general_received"));
290     }
291     else if(buttonsVisible) {
292         buttonsAnimation->setDirection(QAbstractAnimation::Backward);
293         buttonsAnimation->start();
294         buttonsVisible = false;
295         showButtonsButton->setIcon(QIcon::fromTheme("general_sent"));
296     }
297 }
298
299 void TranslationWidget::grabZoomKeys(bool grab) {
300      if (!winId()) {
301          return;
302      }
303
304     unsigned long val = (grab) ? 1 : 0;
305     Atom atom = XInternAtom(QX11Info::display(),
306                             "_HILDON_ZOOM_KEY_ATOM", False);
307     if (!atom) {
308         return;
309     }
310
311     XChangeProperty (QX11Info::display(),
312          winId(),
313          atom,
314          XA_INTEGER,
315          32,
316          PropModeReplace,
317          reinterpret_cast<unsigned char *>(&val),
318          1);
319 }
320
321 void TranslationWidget::hideEvent(QHideEvent* e) {
322     if(buttonsVisible)
323         showButtons();
324
325     QScrollArea::hideEvent(e);
326 }
327
328 void TranslationWidget::keyPressEvent(QKeyEvent* event) {
329     switch (event->key()) {
330         case Qt::Key_F7:
331         textEdit->zoomIn();
332         event->accept();
333         break;
334
335         case Qt::Key_F8:
336         textEdit->zoomOut();
337         event->accept();
338         break;
339     }
340     QWidget::keyPressEvent(event);
341 }
342 #endif
343
344
345