summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/graphics/drawpad/drawpadcanvas.cpp6
1 files changed, 0 insertions, 6 deletions
diff --git a/noncore/graphics/drawpad/drawpadcanvas.cpp b/noncore/graphics/drawpad/drawpadcanvas.cpp
index 4e17245..21ef15c 100644
--- a/noncore/graphics/drawpad/drawpadcanvas.cpp
+++ b/noncore/graphics/drawpad/drawpadcanvas.cpp
@@ -1,540 +1,534 @@
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} 164}
165 165
166DrawPadCanvas::~DrawPadCanvas() 166DrawPadCanvas::~DrawPadCanvas()
167{ 167{
168} 168}
169 169
170void DrawPadCanvas::load(QIODevice* ioDevice) 170void DrawPadCanvas::load(QIODevice* ioDevice)
171{ 171{
172 QTextStream textStream(ioDevice); 172 QTextStream textStream(ioDevice);
173 textStream.setCodec(QTextCodec::codecForName("UTF-8")); 173 textStream.setCodec(QTextCodec::codecForName("UTF-8"));
174 174
175 QXmlInputSource xmlInputSource(textStream); 175 QXmlInputSource xmlInputSource(textStream);
176 QXmlSimpleReader xmlSimpleReader; 176 QXmlSimpleReader xmlSimpleReader;
177 DrawPadCanvasXmlHandler drawPadCanvasXmlHandler; 177 DrawPadCanvasXmlHandler drawPadCanvasXmlHandler;
178 178
179 xmlSimpleReader.setContentHandler(&drawPadCanvasXmlHandler); 179 xmlSimpleReader.setContentHandler(&drawPadCanvasXmlHandler);
180 xmlSimpleReader.parse(xmlInputSource); 180 xmlSimpleReader.parse(xmlInputSource);
181 181
182 m_pages = drawPadCanvasXmlHandler.pixmaps(); 182 m_pages = drawPadCanvasXmlHandler.pixmaps();
183 183
184 if (m_pages.isEmpty()) { 184 if (m_pages.isEmpty()) {
185 m_pages.append(new QPixmap(contentsRect().size())); 185 m_pages.append(new QPixmap(contentsRect().size()));
186 m_pages.current()->fill(Qt::white); 186 m_pages.current()->fill(Qt::white);
187 } 187 }
188 188
189 m_pageBackups.clear(); 189 m_pageBackups.clear();
190 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 190 m_pageBackups.append(new QPixmap(*(m_pages.current())));
191 191
192 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 192 resizeContents(m_pages.current()->width(), m_pages.current()->height());
193 viewport()->update(); 193 viewport()->update();
194 194
195 emit pagesChanged(); 195 emit pagesChanged();
196 emit pageBackupsChanged(); 196 emit pageBackupsChanged();
197} 197}
198 198
199void DrawPadCanvas::initialPage() 199void DrawPadCanvas::initialPage()
200{ 200{
201 m_pages.append(new QPixmap(234, 233)); 201 m_pages.append(new QPixmap(234, 233));
202 m_pages.current()->fill(Qt::white); 202 m_pages.current()->fill(Qt::white);
203 203
204 m_pageBackups.clear(); 204 m_pageBackups.clear();
205 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 205 m_pageBackups.append(new QPixmap(*(m_pages.current())));
206 206
207 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 207 resizeContents(m_pages.current()->width(), m_pages.current()->height());
208 viewport()->update(); 208 viewport()->update();
209 209
210 emit pagesChanged(); 210 emit pagesChanged();
211 emit pageBackupsChanged(); 211 emit pageBackupsChanged();
212} 212}
213 213
214void DrawPadCanvas::save(QIODevice* ioDevice) 214void DrawPadCanvas::save(QIODevice* ioDevice)
215{ 215{
216 QTextStream textStream(ioDevice); 216 QTextStream textStream(ioDevice);
217 textStream.setCodec(QTextCodec::codecForName("UTF-8")); 217 textStream.setCodec(QTextCodec::codecForName("UTF-8"));
218 218
219 textStream << "<drawpad>" << endl; 219 textStream << "<drawpad>" << endl;
220 textStream << " <images>" << endl; 220 textStream << " <images>" << endl;
221 221
222 QListIterator<QPixmap> bufferIterator(m_pages); 222 QListIterator<QPixmap> bufferIterator(m_pages);
223 223
224 for (bufferIterator.toFirst(); bufferIterator.current() != 0; ++bufferIterator) { 224 for (bufferIterator.toFirst(); bufferIterator.current() != 0; ++bufferIterator) {
225 textStream << " <image>" << endl; 225 textStream << " <image>" << endl;
226 226
227 QImage image = bufferIterator.current()->convertToImage(); 227 QImage image = bufferIterator.current()->convertToImage();
228 QByteArray byteArray; 228 QByteArray byteArray;
229 QBuffer buffer(byteArray); 229 QBuffer buffer(byteArray);
230 QImageIO imageIO(&buffer, "PNG"); 230 QImageIO imageIO(&buffer, "PNG");
231 231
232 buffer.open(IO_WriteOnly); 232 buffer.open(IO_WriteOnly);
233 imageIO.setImage(image); 233 imageIO.setImage(image);
234 imageIO.write(); 234 imageIO.write();
235 buffer.close(); 235 buffer.close();
236 236
237/*
238 ulong size = byteArray.size() * 2;
239 QByteArray byteArrayZipped(size);
240 ::compress((uchar*)byteArrayZipped.data(), &size, (uchar*)byteArray.data(), byteArray.size());
241*/
242
243 textStream << " <data length=\"" << byteArray.size() << "\" format=\"PNG\">"; 237 textStream << " <data length=\"" << byteArray.size() << "\" format=\"PNG\">";
244 238
245 static const char hexchars[] = "0123456789abcdef"; 239 static const char hexchars[] = "0123456789abcdef";
246 240
247 for (int i = 0; i < (int)byteArray.size(); i++ ) { 241 for (int i = 0; i < (int)byteArray.size(); i++ ) {
248 uchar s = (uchar)byteArray[i]; 242 uchar s = (uchar)byteArray[i];
249 textStream << hexchars[s >> 4]; 243 textStream << hexchars[s >> 4];
250 textStream << hexchars[s & 0x0f]; 244 textStream << hexchars[s & 0x0f];
251 } 245 }
252 246
253 textStream << "</data>" << endl; 247 textStream << "</data>" << endl;
254 textStream << " </image>" << endl; 248 textStream << " </image>" << endl;
255 } 249 }
256 250
257 textStream << " </images>" << endl; 251 textStream << " </images>" << endl;
258 textStream << "</drawpad>"; 252 textStream << "</drawpad>";
259} 253}
260 254
261void DrawPadCanvas::importPage(const QString& fileName) 255void DrawPadCanvas::importPage(const QString& fileName)
262{ 256{
263 QPixmap* importedPixmap = new QPixmap(); 257 QPixmap* importedPixmap = new QPixmap();
264 258
265 importedPixmap->load(fileName); 259 importedPixmap->load(fileName);
266 m_pages.insert(m_pages.at() + 1, importedPixmap); 260 m_pages.insert(m_pages.at() + 1, importedPixmap);
267 261
268 m_pageBackups.clear(); 262 m_pageBackups.clear();
269 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 263 m_pageBackups.append(new QPixmap(*(m_pages.current())));
270 264
271 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 265 resizeContents(m_pages.current()->width(), m_pages.current()->height());
272 viewport()->update(); 266 viewport()->update();
273 267
274 emit pagesChanged(); 268 emit pagesChanged();
275 emit pageBackupsChanged(); 269 emit pageBackupsChanged();
276} 270}
277 271
278void DrawPadCanvas::exportPage(uint fromPage, uint toPage, const QString& name,const QString& format) 272void DrawPadCanvas::exportPage(uint fromPage, uint toPage, const QString& name,const QString& format)
279{ 273{
280 if (fromPage == toPage) { 274 if (fromPage == toPage) {
281 DocLnk docLnk; 275 DocLnk docLnk;
282 MimeType mimeType(format); 276 MimeType mimeType(format);
283 277
284 docLnk.setName(name); 278 docLnk.setName(name);
285 docLnk.setType(mimeType.id()); 279 docLnk.setType(mimeType.id());
286 280
287 FileManager fileManager; 281 FileManager fileManager;
288 QIODevice* ioDevice = fileManager.saveFile(docLnk); 282 QIODevice* ioDevice = fileManager.saveFile(docLnk);
289 QImageIO imageIO(ioDevice, format); 283 QImageIO imageIO(ioDevice, format);
290 284
291 QImage image = m_pages.current()->convertToImage(); 285 QImage image = m_pages.current()->convertToImage();
292 imageIO.setImage(image); 286 imageIO.setImage(image);
293 imageIO.write(); 287 imageIO.write();
294 delete ioDevice; 288 delete ioDevice;
295 } else { 289 } else {
296 for (uint i = fromPage; i <= toPage; i++) { 290 for (uint i = fromPage; i <= toPage; i++) {
297 DocLnk docLnk; 291 DocLnk docLnk;
298 MimeType mimeType(format); 292 MimeType mimeType(format);
299 293
300 docLnk.setName(name + QString::number(i)); 294 docLnk.setName(name + QString::number(i));
301 docLnk.setType(mimeType.id()); 295 docLnk.setType(mimeType.id());
302 296
303 FileManager fileManager; 297 FileManager fileManager;
304 QIODevice* ioDevice = fileManager.saveFile(docLnk); 298 QIODevice* ioDevice = fileManager.saveFile(docLnk);
305 QImageIO imageIO(ioDevice, format); 299 QImageIO imageIO(ioDevice, format);
306 300
307 QImage image = m_pages.at(i - 1)->convertToImage(); 301 QImage image = m_pages.at(i - 1)->convertToImage();
308 imageIO.setImage(image); 302 imageIO.setImage(image);
309 imageIO.write(); 303 imageIO.write();
310 delete ioDevice; 304 delete ioDevice;
311 } 305 }
312 } 306 }
313} 307}
314 308
315QPixmap* DrawPadCanvas::currentPage() 309QPixmap* DrawPadCanvas::currentPage()
316{ 310{
317 return m_pages.current(); 311 return m_pages.current();
318} 312}
319 313
320uint DrawPadCanvas::pagePosition() 314uint DrawPadCanvas::pagePosition()
321{ 315{
322 return (m_pages.at() + 1); 316 return (m_pages.at() + 1);
323} 317}
324 318
325uint DrawPadCanvas::pageCount() 319uint DrawPadCanvas::pageCount()
326{ 320{
327 return m_pages.count(); 321 return m_pages.count();
328} 322}
329 323
330void DrawPadCanvas::deleteAll() 324void DrawPadCanvas::deleteAll()
331{ 325{
332 QMessageBox messageBox(tr("Delete All"), tr("Do you want to delete\nall the pages?"), 326 QMessageBox messageBox(tr("Delete All"), tr("Do you want to delete\nall the pages?"),
333 QMessageBox::Information, QMessageBox::Yes, 327 QMessageBox::Information, QMessageBox::Yes,
334 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default, 328 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default,
335 QMessageBox::NoButton, this); 329 QMessageBox::NoButton, this);
336 330
337 if (messageBox.exec() == QMessageBox::Yes) { 331 if (messageBox.exec() == QMessageBox::Yes) {
338 m_pages.clear(); 332 m_pages.clear();
339 333
340 m_pages.append(new QPixmap(contentsRect().size())); 334 m_pages.append(new QPixmap(contentsRect().size()));
341 m_pages.current()->fill(Qt::white); 335 m_pages.current()->fill(Qt::white);
342 336
343 m_pageBackups.clear(); 337 m_pageBackups.clear();
344 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 338 m_pageBackups.append(new QPixmap(*(m_pages.current())));
345 339
346 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 340 resizeContents(m_pages.current()->width(), m_pages.current()->height());
347 viewport()->update(); 341 viewport()->update();
348 342
349 emit pagesChanged(); 343 emit pagesChanged();
350 emit pageBackupsChanged(); 344 emit pageBackupsChanged();
351 } 345 }
352} 346}
353 347
354void DrawPadCanvas::newPage() 348void DrawPadCanvas::newPage()
355{ 349{
356 QRect rect = contentsRect(); 350 QRect rect = contentsRect();
357 351
358 NewPageDialog newPageDialog(rect.width(), rect.height(), m_pDrawPad->pen().color(), 352 NewPageDialog newPageDialog(rect.width(), rect.height(), m_pDrawPad->pen().color(),
359 m_pDrawPad->brush().color(), this); 353 m_pDrawPad->brush().color(), this);
360 354
361 if (newPageDialog.exec() == QDialog::Accepted) { 355 if (newPageDialog.exec() == QDialog::Accepted) {
362 m_pages.insert(m_pages.at() + 1, new QPixmap(newPageDialog.selectedWidth(), 356 m_pages.insert(m_pages.at() + 1, new QPixmap(newPageDialog.selectedWidth(),
363 newPageDialog.selectedHeight())); 357 newPageDialog.selectedHeight()));
364 m_pages.current()->fill(newPageDialog.selectedColor()); 358 m_pages.current()->fill(newPageDialog.selectedColor());
365 359
366 m_pageBackups.clear(); 360 m_pageBackups.clear();
367 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 361 m_pageBackups.append(new QPixmap(*(m_pages.current())));
368 362
369 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 363 resizeContents(m_pages.current()->width(), m_pages.current()->height());
370 viewport()->update(); 364 viewport()->update();
371 365
372 emit pagesChanged(); 366 emit pagesChanged();
373 emit pageBackupsChanged(); 367 emit pageBackupsChanged();
374 } 368 }
375} 369}
376 370
377void DrawPadCanvas::clearPage() 371void DrawPadCanvas::clearPage()
378{ 372{
379 QMessageBox messageBox(tr("Clear Page"), tr("Do you want to clear\nthe current page?"), 373 QMessageBox messageBox(tr("Clear Page"), tr("Do you want to clear\nthe current page?"),
380 QMessageBox::Information, QMessageBox::Yes, 374 QMessageBox::Information, QMessageBox::Yes,
381 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default, 375 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default,
382 QMessageBox::NoButton, this); 376 QMessageBox::NoButton, this);
383 377
384 if (messageBox.exec() == QMessageBox::Yes) { 378 if (messageBox.exec() == QMessageBox::Yes) {
385 m_pages.current()->fill(Qt::white); 379 m_pages.current()->fill(Qt::white);
386 380
387 viewport()->update(); 381 viewport()->update();
388 } 382 }
389} 383}
390 384
391void DrawPadCanvas::deletePage() 385void DrawPadCanvas::deletePage()
392{ 386{
393 QMessageBox messageBox(tr("Delete Page"), tr("Do you want to delete\nthe current page?"), 387 QMessageBox messageBox(tr("Delete Page"), tr("Do you want to delete\nthe current page?"),
394 QMessageBox::Information, QMessageBox::Yes, 388 QMessageBox::Information, QMessageBox::Yes,
395 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default, 389 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default,
396 QMessageBox::NoButton, this); 390 QMessageBox::NoButton, this);
397 391
398 if (messageBox.exec() == QMessageBox::Yes) { 392 if (messageBox.exec() == QMessageBox::Yes) {
399 m_pages.remove(m_pages.current()); 393 m_pages.remove(m_pages.current());
400 394
401 if (m_pages.isEmpty()) { 395 if (m_pages.isEmpty()) {
402 m_pages.append(new QPixmap(contentsRect().size())); 396 m_pages.append(new QPixmap(contentsRect().size()));
403 m_pages.current()->fill(Qt::white); 397 m_pages.current()->fill(Qt::white);
404 } 398 }
405 399
406 m_pageBackups.clear(); 400 m_pageBackups.clear();
407 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 401 m_pageBackups.append(new QPixmap(*(m_pages.current())));
408 402
409 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 403 resizeContents(m_pages.current()->width(), m_pages.current()->height());
410 viewport()->update(); 404 viewport()->update();
411 405
412 emit pagesChanged(); 406 emit pagesChanged();
413 emit pageBackupsChanged(); 407 emit pageBackupsChanged();
414 } 408 }
415} 409}
416 410
417bool DrawPadCanvas::undoEnabled() 411bool DrawPadCanvas::undoEnabled()
418{ 412{
419 return (m_pageBackups.current() != m_pageBackups.getFirst()); 413 return (m_pageBackups.current() != m_pageBackups.getFirst());
420} 414}
421 415
422bool DrawPadCanvas::redoEnabled() 416bool DrawPadCanvas::redoEnabled()
423{ 417{
424 return (m_pageBackups.current() != m_pageBackups.getLast()); 418 return (m_pageBackups.current() != m_pageBackups.getLast());
425} 419}
426 420
427bool DrawPadCanvas::goPreviousPageEnabled() 421bool DrawPadCanvas::goPreviousPageEnabled()
428{ 422{
429 return (m_pages.current() != m_pages.getFirst()); 423 return (m_pages.current() != m_pages.getFirst());
430} 424}
431 425
432bool DrawPadCanvas::goNextPageEnabled() 426bool DrawPadCanvas::goNextPageEnabled()
433{ 427{
434 return (m_pages.current() != m_pages.getLast()); 428 return (m_pages.current() != m_pages.getLast());
435} 429}
436 430
437void DrawPadCanvas::undo() 431void DrawPadCanvas::undo()
438{ 432{
439 *(m_pages.current()) = *(m_pageBackups.prev()); 433 *(m_pages.current()) = *(m_pageBackups.prev());
440 434
441 viewport()->update(); 435 viewport()->update();
442 436
443 emit pageBackupsChanged(); 437 emit pageBackupsChanged();
444} 438}
445 439
446void DrawPadCanvas::redo() 440void DrawPadCanvas::redo()
447{ 441{
448 *(m_pages.current()) = *(m_pageBackups.next()); 442 *(m_pages.current()) = *(m_pageBackups.next());
449 443
450 viewport()->update(); 444 viewport()->update();
451 445
452 emit pageBackupsChanged(); 446 emit pageBackupsChanged();
453} 447}
454 448
455void DrawPadCanvas::goFirstPage() 449void DrawPadCanvas::goFirstPage()
456{ 450{
457 m_pages.first(); 451 m_pages.first();
458 m_pageBackups.clear(); 452 m_pageBackups.clear();
459 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 453 m_pageBackups.append(new QPixmap(*(m_pages.current())));
460 454
461 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 455 resizeContents(m_pages.current()->width(), m_pages.current()->height());
462 viewport()->update(); 456 viewport()->update();
463 457
464 emit pagesChanged(); 458 emit pagesChanged();
465 emit pageBackupsChanged(); 459 emit pageBackupsChanged();
466} 460}
467 461
468void DrawPadCanvas::goPreviousPage() 462void DrawPadCanvas::goPreviousPage()
469{ 463{
470 m_pages.prev(); 464 m_pages.prev();
471 m_pageBackups.clear(); 465 m_pageBackups.clear();
472 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 466 m_pageBackups.append(new QPixmap(*(m_pages.current())));
473 467
474 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 468 resizeContents(m_pages.current()->width(), m_pages.current()->height());
475 viewport()->update(); 469 viewport()->update();
476 470
477 emit pagesChanged(); 471 emit pagesChanged();
478 emit pageBackupsChanged(); 472 emit pageBackupsChanged();
479} 473}
480 474
481void DrawPadCanvas::goNextPage() 475void DrawPadCanvas::goNextPage()
482{ 476{
483 m_pages.next(); 477 m_pages.next();
484 m_pageBackups.clear(); 478 m_pageBackups.clear();
485 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 479 m_pageBackups.append(new QPixmap(*(m_pages.current())));
486 480
487 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 481 resizeContents(m_pages.current()->width(), m_pages.current()->height());
488 viewport()->update(); 482 viewport()->update();
489 483
490 emit pagesChanged(); 484 emit pagesChanged();
491 emit pageBackupsChanged(); 485 emit pageBackupsChanged();
492} 486}
493 487
494void DrawPadCanvas::goLastPage() 488void DrawPadCanvas::goLastPage()
495{ 489{
496 m_pages.last(); 490 m_pages.last();
497 m_pageBackups.clear(); 491 m_pageBackups.clear();
498 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 492 m_pageBackups.append(new QPixmap(*(m_pages.current())));
499 493
500 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 494 resizeContents(m_pages.current()->width(), m_pages.current()->height());
501 viewport()->update(); 495 viewport()->update();
502 496
503 emit pagesChanged(); 497 emit pagesChanged();
504 emit pageBackupsChanged(); 498 emit pageBackupsChanged();
505} 499}
506 500
507void DrawPadCanvas::contentsMousePressEvent(QMouseEvent* e) 501void DrawPadCanvas::contentsMousePressEvent(QMouseEvent* e)
508{ 502{
509 m_pDrawPad->tool()->mousePressEvent(e); 503 m_pDrawPad->tool()->mousePressEvent(e);
510} 504}
511 505
512void DrawPadCanvas::contentsMouseReleaseEvent(QMouseEvent* e) 506void DrawPadCanvas::contentsMouseReleaseEvent(QMouseEvent* e)
513{ 507{
514 m_pDrawPad->tool()->mouseReleaseEvent(e); 508 m_pDrawPad->tool()->mouseReleaseEvent(e);
515 509
516 QPixmap* currentBackup = m_pageBackups.current(); 510 QPixmap* currentBackup = m_pageBackups.current();
517 while (m_pageBackups.last() != currentBackup) { 511 while (m_pageBackups.last() != currentBackup) {
518 m_pageBackups.removeLast(); 512 m_pageBackups.removeLast();
519 } 513 }
520 514
521 while (m_pageBackups.count() >= (5 + 1)) { 515 while (m_pageBackups.count() >= (5 + 1)) {
522 m_pageBackups.removeFirst(); 516 m_pageBackups.removeFirst();
523 } 517 }
524 518
525 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 519 m_pageBackups.append(new QPixmap(*(m_pages.current())));
526 520
527 emit pageBackupsChanged(); 521 emit pageBackupsChanged();
528} 522}
529 523
530void DrawPadCanvas::contentsMouseMoveEvent(QMouseEvent* e) 524void DrawPadCanvas::contentsMouseMoveEvent(QMouseEvent* e)
531{ 525{
532 m_pDrawPad->tool()->mouseMoveEvent(e); 526 m_pDrawPad->tool()->mouseMoveEvent(e);
533} 527}
534 528
535void DrawPadCanvas::drawContents(QPainter* p, int cx, int cy, int cw, int ch) 529void DrawPadCanvas::drawContents(QPainter* p, int cx, int cy, int cw, int ch)
536{ 530{
537 QRect clipRect(cx, cy, cw, ch); 531 QRect clipRect(cx, cy, cw, ch);
538 532
539 p->drawPixmap(clipRect.topLeft(), *(m_pages.current()), clipRect); 533 p->drawPixmap(clipRect.topLeft(), *(m_pages.current()), clipRect);
540} 534}