summaryrefslogtreecommitdiff
authorleseb <leseb>2002-04-10 09:09:18 (UTC)
committer leseb <leseb>2002-04-10 09:09:18 (UTC)
commitef60c3e367a4ce89367ad6f5c035134bef6602a6 (patch) (unidiff)
treefe9560f1b3a8c1035808e5010ec6c157bda929c5
parent4eb2a1b8698fdcca7a2c74a3fe9a88a297607754 (diff)
downloadopie-ef60c3e367a4ce89367ad6f5c035134bef6602a6.zip
opie-ef60c3e367a4ce89367ad6f5c035134bef6602a6.tar.gz
opie-ef60c3e367a4ce89367ad6f5c035134bef6602a6.tar.bz2
Fix flickering when using tools
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/graphics/drawpad/drawpadcanvas.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/noncore/graphics/drawpad/drawpadcanvas.cpp b/noncore/graphics/drawpad/drawpadcanvas.cpp
index 3ddd7b7..58192d3 100644
--- a/noncore/graphics/drawpad/drawpadcanvas.cpp
+++ b/noncore/graphics/drawpad/drawpadcanvas.cpp
@@ -1,534 +1,536 @@
1/*************************************************************************** 1/***************************************************************************
2 * * 2 * *
3 * DrawPad - a drawing program for Opie Environment * 3 * DrawPad - a drawing program for Opie Environment *
4 * * 4 * *
5 * (C) 2002 by S. Prud'homme <prudhomme@laposte.net> * 5 * (C) 2002 by S. Prud'homme <prudhomme@laposte.net> *
6 * * 6 * *
7 * This program is free software; you can redistribute it and/or modify * 7 * This program is free software; you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by * 8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation; either version 2 of the License, or * 9 * the Free Software Foundation; either version 2 of the License, or *
10 * (at your option) any later version. * 10 * (at your option) any later version. *
11 * * 11 * *
12 ***************************************************************************/ 12 ***************************************************************************/
13 13
14#include "drawpadcanvas.h" 14#include "drawpadcanvas.h"
15 15
16#include "drawpad.h" 16#include "drawpad.h"
17#include "newpagedialog.h" 17#include "newpagedialog.h"
18#include "tool.h" 18#include "tool.h"
19 19
20#include <qpe/applnk.h> 20#include <qpe/applnk.h>
21#include <qpe/filemanager.h> 21#include <qpe/filemanager.h>
22#include <qpe/mimetype.h> 22#include <qpe/mimetype.h>
23 23
24#include <qbuffer.h> 24#include <qbuffer.h>
25#include <qimage.h> 25#include <qimage.h>
26#include <qmessagebox.h> 26#include <qmessagebox.h>
27#include <qpainter.h> 27#include <qpainter.h>
28#include <qpixmap.h> 28#include <qpixmap.h>
29#include <qtextcodec.h> 29#include <qtextcodec.h>
30#include <qtextstream.h> 30#include <qtextstream.h>
31#include <qxml.h> 31#include <qxml.h>
32 32
33#include <zlib.h> 33#include <zlib.h>
34 34
35class DrawPadCanvasXmlHandler: public QXmlDefaultHandler 35class DrawPadCanvasXmlHandler: public QXmlDefaultHandler
36{ 36{
37public: 37public:
38 DrawPadCanvasXmlHandler(); 38 DrawPadCanvasXmlHandler();
39 ~DrawPadCanvasXmlHandler(); 39 ~DrawPadCanvasXmlHandler();
40 40
41 QList<QPixmap> pixmaps(); 41 QList<QPixmap> pixmaps();
42 42
43 bool startElement(const QString& namespaceURI, const QString& localName, 43 bool startElement(const QString& namespaceURI, const QString& localName,
44 const QString& qName, const QXmlAttributes& atts); 44 const QString& qName, const QXmlAttributes& atts);
45 bool endElement(const QString& namespaceURI, const QString& localName, 45 bool endElement(const QString& namespaceURI, const QString& localName,
46 const QString& qName); 46 const QString& qName);
47 bool characters(const QString& ch); 47 bool characters(const QString& ch);
48 48
49private: 49private:
50 enum State { 50 enum State {
51 Unknown, 51 Unknown,
52 InData 52 InData
53 }; 53 };
54 54
55 State m_state; 55 State m_state;
56 ulong m_dataLenght; 56 ulong m_dataLenght;
57 QString m_dataFormat; 57 QString m_dataFormat;
58 QList<QPixmap> m_pixmaps; 58 QList<QPixmap> m_pixmaps;
59}; 59};
60 60
61DrawPadCanvasXmlHandler::DrawPadCanvasXmlHandler() 61DrawPadCanvasXmlHandler::DrawPadCanvasXmlHandler()
62{ 62{
63 m_state = Unknown; 63 m_state = Unknown;
64} 64}
65 65
66DrawPadCanvasXmlHandler::~DrawPadCanvasXmlHandler() 66DrawPadCanvasXmlHandler::~DrawPadCanvasXmlHandler()
67{ 67{
68} 68}
69 69
70QList<QPixmap> DrawPadCanvasXmlHandler::pixmaps() 70QList<QPixmap> DrawPadCanvasXmlHandler::pixmaps()
71{ 71{
72 return m_pixmaps; 72 return m_pixmaps;
73} 73}
74 74
75bool DrawPadCanvasXmlHandler::startElement(const QString& namespaceURI, const QString& localName, 75bool DrawPadCanvasXmlHandler::startElement(const QString& namespaceURI, const QString& localName,
76 const QString& qName, const QXmlAttributes& atts) 76 const QString& qName, const QXmlAttributes& atts)
77{ 77{
78 Q_CONST_UNUSED(namespaceURI) 78 Q_CONST_UNUSED(namespaceURI)
79 Q_CONST_UNUSED(localName) 79 Q_CONST_UNUSED(localName)
80 80
81 if (qName.compare("data") == 0) { 81 if (qName.compare("data") == 0) {
82 m_state = InData; 82 m_state = InData;
83 m_dataLenght = atts.value("length").toULong(); 83 m_dataLenght = atts.value("length").toULong();
84 m_dataFormat = atts.value("format"); 84 m_dataFormat = atts.value("format");
85 85
86 if (m_dataFormat.isEmpty()) { 86 if (m_dataFormat.isEmpty()) {
87 m_dataFormat = "XPM"; 87 m_dataFormat = "XPM";
88 } 88 }
89 } 89 }
90 90
91 return true; 91 return true;
92} 92}
93 93
94bool DrawPadCanvasXmlHandler::endElement(const QString& namespaceURI, const QString& localName, 94bool DrawPadCanvasXmlHandler::endElement(const QString& namespaceURI, const QString& localName,
95 const QString& qName) 95 const QString& qName)
96{ 96{
97 Q_CONST_UNUSED(namespaceURI) 97 Q_CONST_UNUSED(namespaceURI)
98 Q_CONST_UNUSED(localName) 98 Q_CONST_UNUSED(localName)
99 99
100 if (qName.compare("data") == 0) { 100 if (qName.compare("data") == 0) {
101 m_state = Unknown; 101 m_state = Unknown;
102 } 102 }
103 103
104 return true; 104 return true;
105} 105}
106 106
107bool DrawPadCanvasXmlHandler::characters(const QString& ch) 107bool DrawPadCanvasXmlHandler::characters(const QString& ch)
108{ 108{
109 if (m_state == InData) { 109 if (m_state == InData) {
110 QByteArray byteArray(ch.length() / 2); 110 QByteArray byteArray(ch.length() / 2);
111 111
112 for (int i = 0; i < (int)ch.length() / 2; i++) { 112 for (int i = 0; i < (int)ch.length() / 2; i++) {
113 char h = ch[2 * i].latin1(); 113 char h = ch[2 * i].latin1();
114 char l = ch[2 * i + 1].latin1(); 114 char l = ch[2 * i + 1].latin1();
115 uchar r = 0; 115 uchar r = 0;
116 116
117 if (h <= '9') { 117 if (h <= '9') {
118 r += h - '0'; 118 r += h - '0';
119 } else { 119 } else {
120 r += h - 'a' + 10; 120 r += h - 'a' + 10;
121 } 121 }
122 122
123 r = r << 4; 123 r = r << 4;
124 124
125 if (l <= '9') { 125 if (l <= '9') {
126 r += l - '0'; 126 r += l - '0';
127 } else { 127 } else {
128 r += l - 'a' + 10; 128 r += l - 'a' + 10;
129 } 129 }
130 130
131 byteArray[i] = r; 131 byteArray[i] = r;
132 } 132 }
133 133
134 134
135 QImage image; 135 QImage image;
136 136
137 if (m_dataFormat == "XPM") { 137 if (m_dataFormat == "XPM") {
138 if (m_dataLenght < ch.length() * 5) { 138 if (m_dataLenght < ch.length() * 5) {
139 m_dataLenght = ch.length() * 5; 139 m_dataLenght = ch.length() * 5;
140 } 140 }
141 141
142 QByteArray byteArrayUnzipped(m_dataLenght); 142 QByteArray byteArrayUnzipped(m_dataLenght);
143 ::uncompress((uchar*)byteArrayUnzipped.data(), &m_dataLenght, (uchar*)byteArray.data(), byteArray.size()); 143 ::uncompress((uchar*)byteArrayUnzipped.data(), &m_dataLenght, (uchar*)byteArray.data(), byteArray.size());
144 144
145 image.loadFromData((const uchar*)byteArrayUnzipped.data(), m_dataLenght, m_dataFormat); 145 image.loadFromData((const uchar*)byteArrayUnzipped.data(), m_dataLenght, m_dataFormat);
146 } else { 146 } else {
147 image.loadFromData((const uchar*)byteArray.data(), m_dataLenght, m_dataFormat); 147 image.loadFromData((const uchar*)byteArray.data(), m_dataLenght, m_dataFormat);
148 } 148 }
149 149
150 QPixmap* pixmap = new QPixmap(image.width(), image.height()); 150 QPixmap* pixmap = new QPixmap(image.width(), image.height());
151 pixmap->convertFromImage(image); 151 pixmap->convertFromImage(image);
152 m_pixmaps.append(pixmap); 152 m_pixmaps.append(pixmap);
153 } 153 }
154 154
155 return true; 155 return true;
156} 156}
157 157
158DrawPadCanvas::DrawPadCanvas(DrawPad* drawPad, QWidget* parent, const char* name) 158DrawPadCanvas::DrawPadCanvas(DrawPad* drawPad, QWidget* parent, const char* name)
159 : QScrollView(parent, name) 159 : QScrollView(parent, name)
160{ 160{
161 m_pDrawPad = drawPad; 161 m_pDrawPad = drawPad;
162 m_pages.setAutoDelete(true); 162 m_pages.setAutoDelete(true);
163 m_pageBackups.setAutoDelete(true); 163 m_pageBackups.setAutoDelete(true);
164
165 viewport()->setBackgroundMode(QWidget::NoBackground);
164} 166}
165 167
166DrawPadCanvas::~DrawPadCanvas() 168DrawPadCanvas::~DrawPadCanvas()
167{ 169{
168} 170}
169 171
170void DrawPadCanvas::load(QIODevice* ioDevice) 172void DrawPadCanvas::load(QIODevice* ioDevice)
171{ 173{
172 QTextStream textStream(ioDevice); 174 QTextStream textStream(ioDevice);
173 textStream.setCodec(QTextCodec::codecForName("UTF-8")); 175 textStream.setCodec(QTextCodec::codecForName("UTF-8"));
174 176
175 QXmlInputSource xmlInputSource(textStream); 177 QXmlInputSource xmlInputSource(textStream);
176 QXmlSimpleReader xmlSimpleReader; 178 QXmlSimpleReader xmlSimpleReader;
177 DrawPadCanvasXmlHandler drawPadCanvasXmlHandler; 179 DrawPadCanvasXmlHandler drawPadCanvasXmlHandler;
178 180
179 xmlSimpleReader.setContentHandler(&drawPadCanvasXmlHandler); 181 xmlSimpleReader.setContentHandler(&drawPadCanvasXmlHandler);
180 xmlSimpleReader.parse(xmlInputSource); 182 xmlSimpleReader.parse(xmlInputSource);
181 183
182 m_pages = drawPadCanvasXmlHandler.pixmaps(); 184 m_pages = drawPadCanvasXmlHandler.pixmaps();
183 185
184 if (m_pages.isEmpty()) { 186 if (m_pages.isEmpty()) {
185 m_pages.append(new QPixmap(contentsRect().size())); 187 m_pages.append(new QPixmap(contentsRect().size()));
186 m_pages.current()->fill(Qt::white); 188 m_pages.current()->fill(Qt::white);
187 } 189 }
188 190
189 m_pageBackups.clear(); 191 m_pageBackups.clear();
190 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 192 m_pageBackups.append(new QPixmap(*(m_pages.current())));
191 193
192 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 194 resizeContents(m_pages.current()->width(), m_pages.current()->height());
193 viewport()->update(); 195 viewport()->update();
194 196
195 emit pagesChanged(); 197 emit pagesChanged();
196 emit pageBackupsChanged(); 198 emit pageBackupsChanged();
197} 199}
198 200
199void DrawPadCanvas::initialPage() 201void DrawPadCanvas::initialPage()
200{ 202{
201 m_pages.append(new QPixmap(236, 232)); 203 m_pages.append(new QPixmap(236, 232));
202 m_pages.current()->fill(Qt::white); 204 m_pages.current()->fill(Qt::white);
203 205
204 m_pageBackups.clear(); 206 m_pageBackups.clear();
205 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 207 m_pageBackups.append(new QPixmap(*(m_pages.current())));
206 208
207 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 209 resizeContents(m_pages.current()->width(), m_pages.current()->height());
208 viewport()->update(); 210 viewport()->update();
209 211
210 emit pagesChanged(); 212 emit pagesChanged();
211 emit pageBackupsChanged(); 213 emit pageBackupsChanged();
212} 214}
213 215
214void DrawPadCanvas::save(QIODevice* ioDevice) 216void DrawPadCanvas::save(QIODevice* ioDevice)
215{ 217{
216 QTextStream textStream(ioDevice); 218 QTextStream textStream(ioDevice);
217 textStream.setCodec(QTextCodec::codecForName("UTF-8")); 219 textStream.setCodec(QTextCodec::codecForName("UTF-8"));
218 220
219 textStream << "<drawpad>" << endl; 221 textStream << "<drawpad>" << endl;
220 textStream << " <images>" << endl; 222 textStream << " <images>" << endl;
221 223
222 QListIterator<QPixmap> bufferIterator(m_pages); 224 QListIterator<QPixmap> bufferIterator(m_pages);
223 225
224 for (bufferIterator.toFirst(); bufferIterator.current() != 0; ++bufferIterator) { 226 for (bufferIterator.toFirst(); bufferIterator.current() != 0; ++bufferIterator) {
225 textStream << " <image>" << endl; 227 textStream << " <image>" << endl;
226 228
227 QImage image = bufferIterator.current()->convertToImage(); 229 QImage image = bufferIterator.current()->convertToImage();
228 QByteArray byteArray; 230 QByteArray byteArray;
229 QBuffer buffer(byteArray); 231 QBuffer buffer(byteArray);
230 QImageIO imageIO(&buffer, "PNG"); 232 QImageIO imageIO(&buffer, "PNG");
231 233
232 buffer.open(IO_WriteOnly); 234 buffer.open(IO_WriteOnly);
233 imageIO.setImage(image); 235 imageIO.setImage(image);
234 imageIO.write(); 236 imageIO.write();
235 buffer.close(); 237 buffer.close();
236 238
237 textStream << " <data length=\"" << byteArray.size() << "\" format=\"PNG\">"; 239 textStream << " <data length=\"" << byteArray.size() << "\" format=\"PNG\">";
238 240
239 static const char hexchars[] = "0123456789abcdef"; 241 static const char hexchars[] = "0123456789abcdef";
240 242
241 for (int i = 0; i < (int)byteArray.size(); i++ ) { 243 for (int i = 0; i < (int)byteArray.size(); i++ ) {
242 uchar s = (uchar)byteArray[i]; 244 uchar s = (uchar)byteArray[i];
243 textStream << hexchars[s >> 4]; 245 textStream << hexchars[s >> 4];
244 textStream << hexchars[s & 0x0f]; 246 textStream << hexchars[s & 0x0f];
245 } 247 }
246 248
247 textStream << "</data>" << endl; 249 textStream << "</data>" << endl;
248 textStream << " </image>" << endl; 250 textStream << " </image>" << endl;
249 } 251 }
250 252
251 textStream << " </images>" << endl; 253 textStream << " </images>" << endl;
252 textStream << "</drawpad>"; 254 textStream << "</drawpad>";
253} 255}
254 256
255void DrawPadCanvas::importPage(const QString& fileName) 257void DrawPadCanvas::importPage(const QString& fileName)
256{ 258{
257 QPixmap* importedPixmap = new QPixmap(); 259 QPixmap* importedPixmap = new QPixmap();
258 260
259 importedPixmap->load(fileName); 261 importedPixmap->load(fileName);
260 m_pages.insert(m_pages.at() + 1, importedPixmap); 262 m_pages.insert(m_pages.at() + 1, importedPixmap);
261 263
262 m_pageBackups.clear(); 264 m_pageBackups.clear();
263 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 265 m_pageBackups.append(new QPixmap(*(m_pages.current())));
264 266
265 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 267 resizeContents(m_pages.current()->width(), m_pages.current()->height());
266 viewport()->update(); 268 viewport()->update();
267 269
268 emit pagesChanged(); 270 emit pagesChanged();
269 emit pageBackupsChanged(); 271 emit pageBackupsChanged();
270} 272}
271 273
272void DrawPadCanvas::exportPage(uint fromPage, uint toPage, const QString& name,const QString& format) 274void DrawPadCanvas::exportPage(uint fromPage, uint toPage, const QString& name,const QString& format)
273{ 275{
274 if (fromPage == toPage) { 276 if (fromPage == toPage) {
275 DocLnk docLnk; 277 DocLnk docLnk;
276 MimeType mimeType(format); 278 MimeType mimeType(format);
277 279
278 docLnk.setName(name); 280 docLnk.setName(name);
279 docLnk.setType(mimeType.id()); 281 docLnk.setType(mimeType.id());
280 282
281 FileManager fileManager; 283 FileManager fileManager;
282 QIODevice* ioDevice = fileManager.saveFile(docLnk); 284 QIODevice* ioDevice = fileManager.saveFile(docLnk);
283 QImageIO imageIO(ioDevice, format); 285 QImageIO imageIO(ioDevice, format);
284 286
285 QImage image = m_pages.current()->convertToImage(); 287 QImage image = m_pages.current()->convertToImage();
286 imageIO.setImage(image); 288 imageIO.setImage(image);
287 imageIO.write(); 289 imageIO.write();
288 delete ioDevice; 290 delete ioDevice;
289 } else { 291 } else {
290 for (uint i = fromPage; i <= toPage; i++) { 292 for (uint i = fromPage; i <= toPage; i++) {
291 DocLnk docLnk; 293 DocLnk docLnk;
292 MimeType mimeType(format); 294 MimeType mimeType(format);
293 295
294 docLnk.setName(name + QString::number(i)); 296 docLnk.setName(name + QString::number(i));
295 docLnk.setType(mimeType.id()); 297 docLnk.setType(mimeType.id());
296 298
297 FileManager fileManager; 299 FileManager fileManager;
298 QIODevice* ioDevice = fileManager.saveFile(docLnk); 300 QIODevice* ioDevice = fileManager.saveFile(docLnk);
299 QImageIO imageIO(ioDevice, format); 301 QImageIO imageIO(ioDevice, format);
300 302
301 QImage image = m_pages.at(i - 1)->convertToImage(); 303 QImage image = m_pages.at(i - 1)->convertToImage();
302 imageIO.setImage(image); 304 imageIO.setImage(image);
303 imageIO.write(); 305 imageIO.write();
304 delete ioDevice; 306 delete ioDevice;
305 } 307 }
306 } 308 }
307} 309}
308 310
309QPixmap* DrawPadCanvas::currentPage() 311QPixmap* DrawPadCanvas::currentPage()
310{ 312{
311 return m_pages.current(); 313 return m_pages.current();
312} 314}
313 315
314uint DrawPadCanvas::pagePosition() 316uint DrawPadCanvas::pagePosition()
315{ 317{
316 return (m_pages.at() + 1); 318 return (m_pages.at() + 1);
317} 319}
318 320
319uint DrawPadCanvas::pageCount() 321uint DrawPadCanvas::pageCount()
320{ 322{
321 return m_pages.count(); 323 return m_pages.count();
322} 324}
323 325
324void DrawPadCanvas::deleteAll() 326void DrawPadCanvas::deleteAll()
325{ 327{
326 QMessageBox messageBox(tr("Delete All"), tr("Do you want to delete\nall the pages?"), 328 QMessageBox messageBox(tr("Delete All"), tr("Do you want to delete\nall the pages?"),
327 QMessageBox::Information, QMessageBox::Yes, 329 QMessageBox::Information, QMessageBox::Yes,
328 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default, 330 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default,
329 QMessageBox::NoButton, this); 331 QMessageBox::NoButton, this);
330 332
331 if (messageBox.exec() == QMessageBox::Yes) { 333 if (messageBox.exec() == QMessageBox::Yes) {
332 m_pages.clear(); 334 m_pages.clear();
333 335
334 m_pages.append(new QPixmap(contentsRect().size())); 336 m_pages.append(new QPixmap(contentsRect().size()));
335 m_pages.current()->fill(Qt::white); 337 m_pages.current()->fill(Qt::white);
336 338
337 m_pageBackups.clear(); 339 m_pageBackups.clear();
338 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 340 m_pageBackups.append(new QPixmap(*(m_pages.current())));
339 341
340 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 342 resizeContents(m_pages.current()->width(), m_pages.current()->height());
341 viewport()->update(); 343 viewport()->update();
342 344
343 emit pagesChanged(); 345 emit pagesChanged();
344 emit pageBackupsChanged(); 346 emit pageBackupsChanged();
345 } 347 }
346} 348}
347 349
348void DrawPadCanvas::newPage() 350void DrawPadCanvas::newPage()
349{ 351{
350 QRect rect = contentsRect(); 352 QRect rect = contentsRect();
351 353
352 NewPageDialog newPageDialog(rect.width(), rect.height(), m_pDrawPad->pen().color(), 354 NewPageDialog newPageDialog(rect.width(), rect.height(), m_pDrawPad->pen().color(),
353 m_pDrawPad->brush().color(), this); 355 m_pDrawPad->brush().color(), this);
354 356
355 if (newPageDialog.exec() == QDialog::Accepted) { 357 if (newPageDialog.exec() == QDialog::Accepted) {
356 m_pages.insert(m_pages.at() + 1, new QPixmap(newPageDialog.selectedWidth(), 358 m_pages.insert(m_pages.at() + 1, new QPixmap(newPageDialog.selectedWidth(),
357 newPageDialog.selectedHeight())); 359 newPageDialog.selectedHeight()));
358 m_pages.current()->fill(newPageDialog.selectedColor()); 360 m_pages.current()->fill(newPageDialog.selectedColor());
359 361
360 m_pageBackups.clear(); 362 m_pageBackups.clear();
361 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 363 m_pageBackups.append(new QPixmap(*(m_pages.current())));
362 364
363 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 365 resizeContents(m_pages.current()->width(), m_pages.current()->height());
364 viewport()->update(); 366 viewport()->update();
365 367
366 emit pagesChanged(); 368 emit pagesChanged();
367 emit pageBackupsChanged(); 369 emit pageBackupsChanged();
368 } 370 }
369} 371}
370 372
371void DrawPadCanvas::clearPage() 373void DrawPadCanvas::clearPage()
372{ 374{
373 QMessageBox messageBox(tr("Clear Page"), tr("Do you want to clear\nthe current page?"), 375 QMessageBox messageBox(tr("Clear Page"), tr("Do you want to clear\nthe current page?"),
374 QMessageBox::Information, QMessageBox::Yes, 376 QMessageBox::Information, QMessageBox::Yes,
375 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default, 377 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default,
376 QMessageBox::NoButton, this); 378 QMessageBox::NoButton, this);
377 379
378 if (messageBox.exec() == QMessageBox::Yes) { 380 if (messageBox.exec() == QMessageBox::Yes) {
379 m_pages.current()->fill(Qt::white); 381 m_pages.current()->fill(Qt::white);
380 382
381 viewport()->update(); 383 viewport()->update();
382 } 384 }
383} 385}
384 386
385void DrawPadCanvas::deletePage() 387void DrawPadCanvas::deletePage()
386{ 388{
387 QMessageBox messageBox(tr("Delete Page"), tr("Do you want to delete\nthe current page?"), 389 QMessageBox messageBox(tr("Delete Page"), tr("Do you want to delete\nthe current page?"),
388 QMessageBox::Information, QMessageBox::Yes, 390 QMessageBox::Information, QMessageBox::Yes,
389 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default, 391 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default,
390 QMessageBox::NoButton, this); 392 QMessageBox::NoButton, this);
391 393
392 if (messageBox.exec() == QMessageBox::Yes) { 394 if (messageBox.exec() == QMessageBox::Yes) {
393 m_pages.remove(m_pages.current()); 395 m_pages.remove(m_pages.current());
394 396
395 if (m_pages.isEmpty()) { 397 if (m_pages.isEmpty()) {
396 m_pages.append(new QPixmap(contentsRect().size())); 398 m_pages.append(new QPixmap(contentsRect().size()));
397 m_pages.current()->fill(Qt::white); 399 m_pages.current()->fill(Qt::white);
398 } 400 }
399 401
400 m_pageBackups.clear(); 402 m_pageBackups.clear();
401 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 403 m_pageBackups.append(new QPixmap(*(m_pages.current())));
402 404
403 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 405 resizeContents(m_pages.current()->width(), m_pages.current()->height());
404 viewport()->update(); 406 viewport()->update();
405 407
406 emit pagesChanged(); 408 emit pagesChanged();
407 emit pageBackupsChanged(); 409 emit pageBackupsChanged();
408 } 410 }
409} 411}
410 412
411bool DrawPadCanvas::undoEnabled() 413bool DrawPadCanvas::undoEnabled()
412{ 414{
413 return (m_pageBackups.current() != m_pageBackups.getFirst()); 415 return (m_pageBackups.current() != m_pageBackups.getFirst());
414} 416}
415 417
416bool DrawPadCanvas::redoEnabled() 418bool DrawPadCanvas::redoEnabled()
417{ 419{
418 return (m_pageBackups.current() != m_pageBackups.getLast()); 420 return (m_pageBackups.current() != m_pageBackups.getLast());
419} 421}
420 422
421bool DrawPadCanvas::goPreviousPageEnabled() 423bool DrawPadCanvas::goPreviousPageEnabled()
422{ 424{
423 return (m_pages.current() != m_pages.getFirst()); 425 return (m_pages.current() != m_pages.getFirst());
424} 426}
425 427
426bool DrawPadCanvas::goNextPageEnabled() 428bool DrawPadCanvas::goNextPageEnabled()
427{ 429{
428 return (m_pages.current() != m_pages.getLast()); 430 return (m_pages.current() != m_pages.getLast());
429} 431}
430 432
431void DrawPadCanvas::undo() 433void DrawPadCanvas::undo()
432{ 434{
433 *(m_pages.current()) = *(m_pageBackups.prev()); 435 *(m_pages.current()) = *(m_pageBackups.prev());
434 436
435 viewport()->update(); 437 viewport()->update();
436 438
437 emit pageBackupsChanged(); 439 emit pageBackupsChanged();
438} 440}
439 441
440void DrawPadCanvas::redo() 442void DrawPadCanvas::redo()
441{ 443{
442 *(m_pages.current()) = *(m_pageBackups.next()); 444 *(m_pages.current()) = *(m_pageBackups.next());
443 445
444 viewport()->update(); 446 viewport()->update();
445 447
446 emit pageBackupsChanged(); 448 emit pageBackupsChanged();
447} 449}
448 450
449void DrawPadCanvas::goFirstPage() 451void DrawPadCanvas::goFirstPage()
450{ 452{
451 m_pages.first(); 453 m_pages.first();
452 m_pageBackups.clear(); 454 m_pageBackups.clear();
453 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 455 m_pageBackups.append(new QPixmap(*(m_pages.current())));
454 456
455 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 457 resizeContents(m_pages.current()->width(), m_pages.current()->height());
456 viewport()->update(); 458 viewport()->update();
457 459
458 emit pagesChanged(); 460 emit pagesChanged();
459 emit pageBackupsChanged(); 461 emit pageBackupsChanged();
460} 462}
461 463
462void DrawPadCanvas::goPreviousPage() 464void DrawPadCanvas::goPreviousPage()
463{ 465{
464 m_pages.prev(); 466 m_pages.prev();
465 m_pageBackups.clear(); 467 m_pageBackups.clear();
466 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 468 m_pageBackups.append(new QPixmap(*(m_pages.current())));
467 469
468 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 470 resizeContents(m_pages.current()->width(), m_pages.current()->height());
469 viewport()->update(); 471 viewport()->update();
470 472
471 emit pagesChanged(); 473 emit pagesChanged();
472 emit pageBackupsChanged(); 474 emit pageBackupsChanged();
473} 475}
474 476
475void DrawPadCanvas::goNextPage() 477void DrawPadCanvas::goNextPage()
476{ 478{
477 m_pages.next(); 479 m_pages.next();
478 m_pageBackups.clear(); 480 m_pageBackups.clear();
479 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 481 m_pageBackups.append(new QPixmap(*(m_pages.current())));
480 482
481 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 483 resizeContents(m_pages.current()->width(), m_pages.current()->height());
482 viewport()->update(); 484 viewport()->update();
483 485
484 emit pagesChanged(); 486 emit pagesChanged();
485 emit pageBackupsChanged(); 487 emit pageBackupsChanged();
486} 488}
487 489
488void DrawPadCanvas::goLastPage() 490void DrawPadCanvas::goLastPage()
489{ 491{
490 m_pages.last(); 492 m_pages.last();
491 m_pageBackups.clear(); 493 m_pageBackups.clear();
492 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 494 m_pageBackups.append(new QPixmap(*(m_pages.current())));
493 495
494 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 496 resizeContents(m_pages.current()->width(), m_pages.current()->height());
495 viewport()->update(); 497 viewport()->update();
496 498
497 emit pagesChanged(); 499 emit pagesChanged();
498 emit pageBackupsChanged(); 500 emit pageBackupsChanged();
499} 501}
500 502
501void DrawPadCanvas::contentsMousePressEvent(QMouseEvent* e) 503void DrawPadCanvas::contentsMousePressEvent(QMouseEvent* e)
502{ 504{
503 m_pDrawPad->tool()->mousePressEvent(e); 505 m_pDrawPad->tool()->mousePressEvent(e);
504} 506}
505 507
506void DrawPadCanvas::contentsMouseReleaseEvent(QMouseEvent* e) 508void DrawPadCanvas::contentsMouseReleaseEvent(QMouseEvent* e)
507{ 509{
508 m_pDrawPad->tool()->mouseReleaseEvent(e); 510 m_pDrawPad->tool()->mouseReleaseEvent(e);
509 511
510 QPixmap* currentBackup = m_pageBackups.current(); 512 QPixmap* currentBackup = m_pageBackups.current();
511 while (m_pageBackups.last() != currentBackup) { 513 while (m_pageBackups.last() != currentBackup) {
512 m_pageBackups.removeLast(); 514 m_pageBackups.removeLast();
513 } 515 }
514 516
515 while (m_pageBackups.count() >= (5 + 1)) { 517 while (m_pageBackups.count() >= (5 + 1)) {
516 m_pageBackups.removeFirst(); 518 m_pageBackups.removeFirst();
517 } 519 }
518 520
519 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 521 m_pageBackups.append(new QPixmap(*(m_pages.current())));
520 522
521 emit pageBackupsChanged(); 523 emit pageBackupsChanged();
522} 524}
523 525
524void DrawPadCanvas::contentsMouseMoveEvent(QMouseEvent* e) 526void DrawPadCanvas::contentsMouseMoveEvent(QMouseEvent* e)
525{ 527{
526 m_pDrawPad->tool()->mouseMoveEvent(e); 528 m_pDrawPad->tool()->mouseMoveEvent(e);
527} 529}
528 530
529void DrawPadCanvas::drawContents(QPainter* p, int cx, int cy, int cw, int ch) 531void DrawPadCanvas::drawContents(QPainter* p, int cx, int cy, int cw, int ch)
530{ 532{
531 QRect clipRect(cx, cy, cw, ch); 533 QRect clipRect(cx, cy, cw, ch);
532 534
533 p->drawPixmap(clipRect.topLeft(), *(m_pages.current()), clipRect); 535 p->drawPixmap(clipRect.topLeft(), *(m_pages.current()), clipRect);
534} 536}