summaryrefslogtreecommitdiff
authorleseb <leseb>2002-06-19 06:08:54 (UTC)
committer leseb <leseb>2002-06-19 06:08:54 (UTC)
commitb83e9d1f794fdd6089beda10697243bb087e3d0a (patch) (unidiff)
treebdd278f80903fcc9463c3623645967fef8e787fa
parent3e7ae42a203c31d44e0c24a29a9a63772ef56046 (diff)
downloadopie-b83e9d1f794fdd6089beda10697243bb087e3d0a.zip
opie-b83e9d1f794fdd6089beda10697243bb087e3d0a.tar.gz
opie-b83e9d1f794fdd6089beda10697243bb087e3d0a.tar.bz2
99 undo actions
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/graphics/drawpad/drawpadcanvas.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/noncore/graphics/drawpad/drawpadcanvas.cpp b/noncore/graphics/drawpad/drawpadcanvas.cpp
index 4547b41..ae1b554 100644
--- a/noncore/graphics/drawpad/drawpadcanvas.cpp
+++ b/noncore/graphics/drawpad/drawpadcanvas.cpp
@@ -1,586 +1,588 @@
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 "page.h" 17#include "page.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 <qpainter.h> 26#include <qpainter.h>
27#include <qtextcodec.h> 27#include <qtextcodec.h>
28#include <qtextstream.h> 28#include <qtextstream.h>
29#include <qxml.h> 29#include <qxml.h>
30 30
31#include <zlib.h> 31#include <zlib.h>
32 32
33const int PAGE_BACKUPS = 99;
34
33class DrawPadCanvasXmlHandler: public QXmlDefaultHandler 35class DrawPadCanvasXmlHandler: public QXmlDefaultHandler
34{ 36{
35public: 37public:
36 DrawPadCanvasXmlHandler(); 38 DrawPadCanvasXmlHandler();
37 ~DrawPadCanvasXmlHandler(); 39 ~DrawPadCanvasXmlHandler();
38 40
39 QList<Page> pages(); 41 QList<Page> pages();
40 42
41 bool startElement(const QString& namespaceURI, const QString& localName, 43 bool startElement(const QString& namespaceURI, const QString& localName,
42 const QString& qName, const QXmlAttributes& atts); 44 const QString& qName, const QXmlAttributes& atts);
43 bool endElement(const QString& namespaceURI, const QString& localName, 45 bool endElement(const QString& namespaceURI, const QString& localName,
44 const QString& qName); 46 const QString& qName);
45 bool characters(const QString& ch); 47 bool characters(const QString& ch);
46 48
47private: 49private:
48 enum State { 50 enum State {
49 Unknown, 51 Unknown,
50 InTitle, 52 InTitle,
51 InDate, 53 InDate,
52 InData 54 InData
53 }; 55 };
54 56
55 State m_state; 57 State m_state;
56 QString m_title; 58 QString m_title;
57 QDateTime m_date; 59 QDateTime m_date;
58 ulong m_dataLenght; 60 ulong m_dataLenght;
59 QString m_dataFormat; 61 QString m_dataFormat;
60 QList<Page> m_pages; 62 QList<Page> m_pages;
61}; 63};
62 64
63DrawPadCanvasXmlHandler::DrawPadCanvasXmlHandler() 65DrawPadCanvasXmlHandler::DrawPadCanvasXmlHandler()
64{ 66{
65 m_state = Unknown; 67 m_state = Unknown;
66} 68}
67 69
68DrawPadCanvasXmlHandler::~DrawPadCanvasXmlHandler() 70DrawPadCanvasXmlHandler::~DrawPadCanvasXmlHandler()
69{ 71{
70} 72}
71 73
72QList<Page> DrawPadCanvasXmlHandler::pages() 74QList<Page> DrawPadCanvasXmlHandler::pages()
73{ 75{
74 return m_pages; 76 return m_pages;
75} 77}
76 78
77bool DrawPadCanvasXmlHandler::startElement(const QString& namespaceURI, const QString& localName, 79bool DrawPadCanvasXmlHandler::startElement(const QString& namespaceURI, const QString& localName,
78 const QString& qName, const QXmlAttributes& atts) 80 const QString& qName, const QXmlAttributes& atts)
79{ 81{
80 Q_CONST_UNUSED(namespaceURI) 82 Q_CONST_UNUSED(namespaceURI)
81 Q_CONST_UNUSED(localName) 83 Q_CONST_UNUSED(localName)
82 84
83 if (qName == "image") { 85 if (qName == "image") {
84 m_title = QString(); 86 m_title = QString();
85 m_date = QDateTime::currentDateTime(); 87 m_date = QDateTime::currentDateTime();
86 } else if (qName == "title") { 88 } else if (qName == "title") {
87 m_state = InTitle; 89 m_state = InTitle;
88 } else if (qName == "date") { 90 } else if (qName == "date") {
89 m_state = InDate; 91 m_state = InDate;
90 } else if (qName == "data") { 92 } else if (qName == "data") {
91 m_state = InData; 93 m_state = InData;
92 m_dataLenght = atts.value("length").toULong(); 94 m_dataLenght = atts.value("length").toULong();
93 m_dataFormat = atts.value("format"); 95 m_dataFormat = atts.value("format");
94 96
95 if (m_dataFormat.isEmpty()) { 97 if (m_dataFormat.isEmpty()) {
96 m_dataFormat = "XPM"; 98 m_dataFormat = "XPM";
97 } 99 }
98 } 100 }
99 101
100 return true; 102 return true;
101} 103}
102 104
103bool DrawPadCanvasXmlHandler::endElement(const QString& namespaceURI, const QString& localName, 105bool DrawPadCanvasXmlHandler::endElement(const QString& namespaceURI, const QString& localName,
104 const QString& qName) 106 const QString& qName)
105{ 107{
106 Q_CONST_UNUSED(namespaceURI) 108 Q_CONST_UNUSED(namespaceURI)
107 Q_CONST_UNUSED(localName) 109 Q_CONST_UNUSED(localName)
108 110
109 if (qName == "title") { 111 if (qName == "title") {
110 m_state = Unknown; 112 m_state = Unknown;
111 } else if (qName == "date") { 113 } else if (qName == "date") {
112 m_state = Unknown; 114 m_state = Unknown;
113 } else if (qName == "data") { 115 } else if (qName == "data") {
114 m_state = Unknown; 116 m_state = Unknown;
115 } 117 }
116 118
117 return true; 119 return true;
118} 120}
119 121
120bool DrawPadCanvasXmlHandler::characters(const QString& ch) 122bool DrawPadCanvasXmlHandler::characters(const QString& ch)
121{ 123{
122 if (m_state == InTitle) { 124 if (m_state == InTitle) {
123 m_title = ch; 125 m_title = ch;
124 } else if (m_state == InDate) { 126 } else if (m_state == InDate) {
125 m_date = QDateTime(QDate(1970, 1, 1)).addSecs(ch.toInt()); 127 m_date = QDateTime(QDate(1970, 1, 1)).addSecs(ch.toInt());
126 } else if (m_state == InData) { 128 } else if (m_state == InData) {
127 QByteArray byteArray(ch.length() / 2); 129 QByteArray byteArray(ch.length() / 2);
128 130
129 for (int i = 0; i < (int)ch.length() / 2; i++) { 131 for (int i = 0; i < (int)ch.length() / 2; i++) {
130 char h = ch[2 * i].latin1(); 132 char h = ch[2 * i].latin1();
131 char l = ch[2 * i + 1].latin1(); 133 char l = ch[2 * i + 1].latin1();
132 uchar r = 0; 134 uchar r = 0;
133 135
134 if (h <= '9') { 136 if (h <= '9') {
135 r += h - '0'; 137 r += h - '0';
136 } else { 138 } else {
137 r += h - 'a' + 10; 139 r += h - 'a' + 10;
138 } 140 }
139 141
140 r = r << 4; 142 r = r << 4;
141 143
142 if (l <= '9') { 144 if (l <= '9') {
143 r += l - '0'; 145 r += l - '0';
144 } else { 146 } else {
145 r += l - 'a' + 10; 147 r += l - 'a' + 10;
146 } 148 }
147 149
148 byteArray[i] = r; 150 byteArray[i] = r;
149 } 151 }
150 152
151 153
152 QImage image; 154 QImage image;
153 155
154 if (m_dataFormat == "XPM") { 156 if (m_dataFormat == "XPM") {
155 if (m_dataLenght < ch.length() * 5) { 157 if (m_dataLenght < ch.length() * 5) {
156 m_dataLenght = ch.length() * 5; 158 m_dataLenght = ch.length() * 5;
157 } 159 }
158 160
159 QByteArray byteArrayUnzipped(m_dataLenght); 161 QByteArray byteArrayUnzipped(m_dataLenght);
160 ::uncompress((uchar*)byteArrayUnzipped.data(), &m_dataLenght, (uchar*)byteArray.data(), byteArray.size()); 162 ::uncompress((uchar*)byteArrayUnzipped.data(), &m_dataLenght, (uchar*)byteArray.data(), byteArray.size());
161 163
162 image.loadFromData((const uchar*)byteArrayUnzipped.data(), m_dataLenght, m_dataFormat); 164 image.loadFromData((const uchar*)byteArrayUnzipped.data(), m_dataLenght, m_dataFormat);
163 } else { 165 } else {
164 image.loadFromData((const uchar*)byteArray.data(), m_dataLenght, m_dataFormat); 166 image.loadFromData((const uchar*)byteArray.data(), m_dataLenght, m_dataFormat);
165 } 167 }
166 168
167 Page* page = new Page(m_title, image.width(), image.height()); 169 Page* page = new Page(m_title, image.width(), image.height());
168 page->setLastModified(m_date); 170 page->setLastModified(m_date);
169 page->convertFromImage(image); 171 page->convertFromImage(image);
170 m_pages.append(page); 172 m_pages.append(page);
171 } 173 }
172 174
173 return true; 175 return true;
174} 176}
175 177
176DrawPadCanvas::DrawPadCanvas(DrawPad* drawPad, QWidget* parent, const char* name) 178DrawPadCanvas::DrawPadCanvas(DrawPad* drawPad, QWidget* parent, const char* name)
177 : QScrollView(parent, name) 179 : QScrollView(parent, name)
178{ 180{
179 m_pDrawPad = drawPad; 181 m_pDrawPad = drawPad;
180 m_pages.setAutoDelete(true); 182 m_pages.setAutoDelete(true);
181 m_pageBackups.setAutoDelete(true); 183 m_pageBackups.setAutoDelete(true);
182 184
183 viewport()->setBackgroundMode(QWidget::NoBackground); 185 viewport()->setBackgroundMode(QWidget::NoBackground);
184} 186}
185 187
186DrawPadCanvas::~DrawPadCanvas() 188DrawPadCanvas::~DrawPadCanvas()
187{ 189{
188} 190}
189 191
190void DrawPadCanvas::load(QIODevice* ioDevice) 192void DrawPadCanvas::load(QIODevice* ioDevice)
191{ 193{
192 QTextStream textStream(ioDevice); 194 QTextStream textStream(ioDevice);
193 textStream.setCodec(QTextCodec::codecForName("UTF-8")); 195 textStream.setCodec(QTextCodec::codecForName("UTF-8"));
194 196
195 QXmlInputSource xmlInputSource(textStream); 197 QXmlInputSource xmlInputSource(textStream);
196 QXmlSimpleReader xmlSimpleReader; 198 QXmlSimpleReader xmlSimpleReader;
197 DrawPadCanvasXmlHandler drawPadCanvasXmlHandler; 199 DrawPadCanvasXmlHandler drawPadCanvasXmlHandler;
198 200
199 xmlSimpleReader.setContentHandler(&drawPadCanvasXmlHandler); 201 xmlSimpleReader.setContentHandler(&drawPadCanvasXmlHandler);
200 xmlSimpleReader.parse(xmlInputSource); 202 xmlSimpleReader.parse(xmlInputSource);
201 203
202 m_pages = drawPadCanvasXmlHandler.pages(); 204 m_pages = drawPadCanvasXmlHandler.pages();
203 205
204 if (m_pages.isEmpty()) { 206 if (m_pages.isEmpty()) {
205 m_pages.append(new Page("", contentsRect().size())); 207 m_pages.append(new Page("", contentsRect().size()));
206 m_pages.current()->fill(Qt::white); 208 m_pages.current()->fill(Qt::white);
207 } 209 }
208 210
209 m_pageBackups.clear(); 211 m_pageBackups.clear();
210 m_pageBackups.append(new Page(*(m_pages.current()))); 212 m_pageBackups.append(new Page(*(m_pages.current())));
211 213
212 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 214 resizeContents(m_pages.current()->width(), m_pages.current()->height());
213 viewport()->update(); 215 viewport()->update();
214 216
215 emit pagesChanged(); 217 emit pagesChanged();
216 emit pageBackupsChanged(); 218 emit pageBackupsChanged();
217} 219}
218 220
219void DrawPadCanvas::initialPage() 221void DrawPadCanvas::initialPage()
220{ 222{
221 m_pages.append(new Page("", 236, 232)); 223 m_pages.append(new Page("", 236, 232));
222 m_pages.current()->fill(Qt::white); 224 m_pages.current()->fill(Qt::white);
223 225
224 m_pageBackups.clear(); 226 m_pageBackups.clear();
225 m_pageBackups.append(new Page(*(m_pages.current()))); 227 m_pageBackups.append(new Page(*(m_pages.current())));
226 228
227 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 229 resizeContents(m_pages.current()->width(), m_pages.current()->height());
228 viewport()->update(); 230 viewport()->update();
229 231
230 emit pagesChanged(); 232 emit pagesChanged();
231 emit pageBackupsChanged(); 233 emit pageBackupsChanged();
232} 234}
233 235
234void DrawPadCanvas::save(QIODevice* ioDevice) 236void DrawPadCanvas::save(QIODevice* ioDevice)
235{ 237{
236 QTextStream textStream(ioDevice); 238 QTextStream textStream(ioDevice);
237 textStream.setCodec(QTextCodec::codecForName("UTF-8")); 239 textStream.setCodec(QTextCodec::codecForName("UTF-8"));
238 240
239 textStream << "<drawpad>" << endl; 241 textStream << "<drawpad>" << endl;
240 textStream << " <images>" << endl; 242 textStream << " <images>" << endl;
241 243
242 QListIterator<Page> bufferIterator(m_pages); 244 QListIterator<Page> bufferIterator(m_pages);
243 245
244 for (bufferIterator.toFirst(); bufferIterator.current() != 0; ++bufferIterator) { 246 for (bufferIterator.toFirst(); bufferIterator.current() != 0; ++bufferIterator) {
245 textStream << " <image>" << endl; 247 textStream << " <image>" << endl;
246 textStream << " <title>" << bufferIterator.current()->title() << "</title>" << endl; 248 textStream << " <title>" << bufferIterator.current()->title() << "</title>" << endl;
247 249
248 int intDate = QDateTime(QDate(1970, 1, 1)).secsTo(bufferIterator.current()->lastModified()); 250 int intDate = QDateTime(QDate(1970, 1, 1)).secsTo(bufferIterator.current()->lastModified());
249 textStream << " <date>" << intDate << "</date>" << endl; 251 textStream << " <date>" << intDate << "</date>" << endl;
250 252
251 QImage image = bufferIterator.current()->convertToImage(); 253 QImage image = bufferIterator.current()->convertToImage();
252 QByteArray byteArray; 254 QByteArray byteArray;
253 QBuffer buffer(byteArray); 255 QBuffer buffer(byteArray);
254 QImageIO imageIO(&buffer, "PNG"); 256 QImageIO imageIO(&buffer, "PNG");
255 257
256 buffer.open(IO_WriteOnly); 258 buffer.open(IO_WriteOnly);
257 imageIO.setImage(image); 259 imageIO.setImage(image);
258 imageIO.write(); 260 imageIO.write();
259 buffer.close(); 261 buffer.close();
260 262
261 textStream << " <data length=\"" << byteArray.size() << "\" format=\"PNG\">"; 263 textStream << " <data length=\"" << byteArray.size() << "\" format=\"PNG\">";
262 264
263 static const char hexchars[] = "0123456789abcdef"; 265 static const char hexchars[] = "0123456789abcdef";
264 266
265 for (int i = 0; i < (int)byteArray.size(); i++ ) { 267 for (int i = 0; i < (int)byteArray.size(); i++ ) {
266 uchar s = (uchar)byteArray[i]; 268 uchar s = (uchar)byteArray[i];
267 textStream << hexchars[s >> 4]; 269 textStream << hexchars[s >> 4];
268 textStream << hexchars[s & 0x0f]; 270 textStream << hexchars[s & 0x0f];
269 } 271 }
270 272
271 textStream << "</data>" << endl; 273 textStream << "</data>" << endl;
272 textStream << " </image>" << endl; 274 textStream << " </image>" << endl;
273 } 275 }
274 276
275 textStream << " </images>" << endl; 277 textStream << " </images>" << endl;
276 textStream << "</drawpad>"; 278 textStream << "</drawpad>";
277} 279}
278 280
279void DrawPadCanvas::importPage(const QString& fileName) 281void DrawPadCanvas::importPage(const QString& fileName)
280{ 282{
281 Page* importedPage = new Page(); 283 Page* importedPage = new Page();
282 284
283 importedPage->load(fileName); 285 importedPage->load(fileName);
284 m_pages.insert(m_pages.at() + 1, importedPage); 286 m_pages.insert(m_pages.at() + 1, importedPage);
285 287
286 m_pageBackups.clear(); 288 m_pageBackups.clear();
287 m_pageBackups.append(new Page(*(m_pages.current()))); 289 m_pageBackups.append(new Page(*(m_pages.current())));
288 290
289 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 291 resizeContents(m_pages.current()->width(), m_pages.current()->height());
290 viewport()->update(); 292 viewport()->update();
291 293
292 emit pagesChanged(); 294 emit pagesChanged();
293 emit pageBackupsChanged(); 295 emit pageBackupsChanged();
294} 296}
295 297
296void DrawPadCanvas::exportPage(uint fromPage, uint toPage, const QString& name,const QString& format) 298void DrawPadCanvas::exportPage(uint fromPage, uint toPage, const QString& name,const QString& format)
297{ 299{
298 if (fromPage == toPage) { 300 if (fromPage == toPage) {
299 DocLnk docLnk; 301 DocLnk docLnk;
300 MimeType mimeType(format); 302 MimeType mimeType(format);
301 303
302 docLnk.setName(name); 304 docLnk.setName(name);
303 docLnk.setType(mimeType.id()); 305 docLnk.setType(mimeType.id());
304 306
305 FileManager fileManager; 307 FileManager fileManager;
306 QIODevice* ioDevice = fileManager.saveFile(docLnk); 308 QIODevice* ioDevice = fileManager.saveFile(docLnk);
307 QImageIO imageIO(ioDevice, format); 309 QImageIO imageIO(ioDevice, format);
308 310
309 QImage image = m_pages.current()->convertToImage(); 311 QImage image = m_pages.current()->convertToImage();
310 imageIO.setImage(image); 312 imageIO.setImage(image);
311 imageIO.write(); 313 imageIO.write();
312 delete ioDevice; 314 delete ioDevice;
313 } else { 315 } else {
314 for (uint i = fromPage; i <= toPage; i++) { 316 for (uint i = fromPage; i <= toPage; i++) {
315 DocLnk docLnk; 317 DocLnk docLnk;
316 MimeType mimeType(format); 318 MimeType mimeType(format);
317 319
318 docLnk.setName(name + QString::number(i)); 320 docLnk.setName(name + QString::number(i));
319 docLnk.setType(mimeType.id()); 321 docLnk.setType(mimeType.id());
320 322
321 FileManager fileManager; 323 FileManager fileManager;
322 QIODevice* ioDevice = fileManager.saveFile(docLnk); 324 QIODevice* ioDevice = fileManager.saveFile(docLnk);
323 QImageIO imageIO(ioDevice, format); 325 QImageIO imageIO(ioDevice, format);
324 326
325 QImage image = m_pages.at(i - 1)->convertToImage(); 327 QImage image = m_pages.at(i - 1)->convertToImage();
326 imageIO.setImage(image); 328 imageIO.setImage(image);
327 imageIO.write(); 329 imageIO.write();
328 delete ioDevice; 330 delete ioDevice;
329 } 331 }
330 } 332 }
331} 333}
332 334
333Page* DrawPadCanvas::currentPage() 335Page* DrawPadCanvas::currentPage()
334{ 336{
335 return m_pages.current(); 337 return m_pages.current();
336} 338}
337 339
338QList<Page> DrawPadCanvas::pages() 340QList<Page> DrawPadCanvas::pages()
339{ 341{
340 return m_pages; 342 return m_pages;
341} 343}
342 344
343uint DrawPadCanvas::pagePosition() 345uint DrawPadCanvas::pagePosition()
344{ 346{
345 return (m_pages.at() + 1); 347 return (m_pages.at() + 1);
346} 348}
347 349
348uint DrawPadCanvas::pageCount() 350uint DrawPadCanvas::pageCount()
349{ 351{
350 return m_pages.count(); 352 return m_pages.count();
351} 353}
352 354
353void DrawPadCanvas::selectPage(Page* page) 355void DrawPadCanvas::selectPage(Page* page)
354{ 356{
355 m_pages.findRef(page); 357 m_pages.findRef(page);
356 m_pageBackups.clear(); 358 m_pageBackups.clear();
357 m_pageBackups.append(new Page(*(m_pages.current()))); 359 m_pageBackups.append(new Page(*(m_pages.current())));
358 360
359 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 361 resizeContents(m_pages.current()->width(), m_pages.current()->height());
360 viewport()->update(); 362 viewport()->update();
361 363
362 emit pagesChanged(); 364 emit pagesChanged();
363 emit pageBackupsChanged(); 365 emit pageBackupsChanged();
364} 366}
365 367
366void DrawPadCanvas::backupPage() 368void DrawPadCanvas::backupPage()
367{ 369{
368 m_pages.current()->setLastModified(QDateTime::currentDateTime()); 370 m_pages.current()->setLastModified(QDateTime::currentDateTime());
369 371
370 Page* currentBackup = m_pageBackups.current(); 372 Page* currentBackup = m_pageBackups.current();
371 while (m_pageBackups.last() != currentBackup) { 373 while (m_pageBackups.last() != currentBackup) {
372 m_pageBackups.removeLast(); 374 m_pageBackups.removeLast();
373 } 375 }
374 376
375 while (m_pageBackups.count() >= (5 + 1)) { 377 while (m_pageBackups.count() >= (PAGE_BACKUPS + 1)) {
376 m_pageBackups.removeFirst(); 378 m_pageBackups.removeFirst();
377 } 379 }
378 380
379 m_pageBackups.append(new Page(*(m_pages.current()))); 381 m_pageBackups.append(new Page(*(m_pages.current())));
380 382
381 emit pageBackupsChanged(); 383 emit pageBackupsChanged();
382} 384}
383 385
384void DrawPadCanvas::deleteAll() 386void DrawPadCanvas::deleteAll()
385{ 387{
386 m_pages.clear(); 388 m_pages.clear();
387 389
388 m_pages.append(new Page("", contentsRect().size())); 390 m_pages.append(new Page("", contentsRect().size()));
389 m_pages.current()->fill(Qt::white); 391 m_pages.current()->fill(Qt::white);
390 392
391 m_pageBackups.clear(); 393 m_pageBackups.clear();
392 m_pageBackups.append(new Page(*(m_pages.current()))); 394 m_pageBackups.append(new Page(*(m_pages.current())));
393 395
394 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 396 resizeContents(m_pages.current()->width(), m_pages.current()->height());
395 viewport()->update(); 397 viewport()->update();
396 398
397 emit pagesChanged(); 399 emit pagesChanged();
398 emit pageBackupsChanged(); 400 emit pageBackupsChanged();
399} 401}
400 402
401void DrawPadCanvas::newPage(QString title, uint width, uint height, const QColor& color) 403void DrawPadCanvas::newPage(QString title, uint width, uint height, const QColor& color)
402{ 404{
403 m_pages.insert(m_pages.at() + 1, new Page(title, width, height)); 405 m_pages.insert(m_pages.at() + 1, new Page(title, width, height));
404 m_pages.current()->fill(color); 406 m_pages.current()->fill(color);
405 407
406 m_pageBackups.clear(); 408 m_pageBackups.clear();
407 m_pageBackups.append(new Page(*(m_pages.current()))); 409 m_pageBackups.append(new Page(*(m_pages.current())));
408 410
409 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 411 resizeContents(m_pages.current()->width(), m_pages.current()->height());
410 viewport()->update(); 412 viewport()->update();
411 413
412 emit pagesChanged(); 414 emit pagesChanged();
413 emit pageBackupsChanged(); 415 emit pageBackupsChanged();
414} 416}
415 417
416void DrawPadCanvas::clearPage() 418void DrawPadCanvas::clearPage()
417{ 419{
418 m_pages.current()->fill(Qt::white); 420 m_pages.current()->fill(Qt::white);
419 421
420 m_pageBackups.clear(); 422 m_pageBackups.clear();
421 m_pageBackups.append(new Page(*(m_pages.current()))); 423 m_pageBackups.append(new Page(*(m_pages.current())));
422 424
423 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 425 resizeContents(m_pages.current()->width(), m_pages.current()->height());
424 viewport()->update(); 426 viewport()->update();
425 427
426 emit pageBackupsChanged(); 428 emit pageBackupsChanged();
427} 429}
428 430
429void DrawPadCanvas::deletePage() 431void DrawPadCanvas::deletePage()
430{ 432{
431 m_pages.remove(m_pages.current()); 433 m_pages.remove(m_pages.current());
432 434
433 if (m_pages.isEmpty()) { 435 if (m_pages.isEmpty()) {
434 m_pages.append(new Page("", contentsRect().size())); 436 m_pages.append(new Page("", contentsRect().size()));
435 m_pages.current()->fill(Qt::white); 437 m_pages.current()->fill(Qt::white);
436 } 438 }
437 439
438 m_pageBackups.clear(); 440 m_pageBackups.clear();
439 m_pageBackups.append(new Page(*(m_pages.current()))); 441 m_pageBackups.append(new Page(*(m_pages.current())));
440 442
441 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 443 resizeContents(m_pages.current()->width(), m_pages.current()->height());
442 viewport()->update(); 444 viewport()->update();
443 445
444 emit pagesChanged(); 446 emit pagesChanged();
445 emit pageBackupsChanged(); 447 emit pageBackupsChanged();
446} 448}
447 449
448void DrawPadCanvas::movePageUp() 450void DrawPadCanvas::movePageUp()
449{ 451{
450 int index = m_pages.at(); 452 int index = m_pages.at();
451 Page* page = m_pages.take(); 453 Page* page = m_pages.take();
452 m_pages.insert(index - 1, page); 454 m_pages.insert(index - 1, page);
453 455
454 emit pagesChanged(); 456 emit pagesChanged();
455} 457}
456 458
457void DrawPadCanvas::movePageDown() 459void DrawPadCanvas::movePageDown()
458{ 460{
459 int index = m_pages.at(); 461 int index = m_pages.at();
460 Page* page = m_pages.take(); 462 Page* page = m_pages.take();
461 m_pages.insert(index + 1, page); 463 m_pages.insert(index + 1, page);
462 464
463 emit pagesChanged(); 465 emit pagesChanged();
464} 466}
465 467
466bool DrawPadCanvas::undoEnabled() 468bool DrawPadCanvas::undoEnabled()
467{ 469{
468 return (m_pageBackups.current() != m_pageBackups.getFirst()); 470 return (m_pageBackups.current() != m_pageBackups.getFirst());
469} 471}
470 472
471bool DrawPadCanvas::redoEnabled() 473bool DrawPadCanvas::redoEnabled()
472{ 474{
473 return (m_pageBackups.current() != m_pageBackups.getLast()); 475 return (m_pageBackups.current() != m_pageBackups.getLast());
474} 476}
475 477
476bool DrawPadCanvas::goPreviousPageEnabled() 478bool DrawPadCanvas::goPreviousPageEnabled()
477{ 479{
478 return (m_pages.current() != m_pages.getFirst()); 480 return (m_pages.current() != m_pages.getFirst());
479} 481}
480 482
481bool DrawPadCanvas::goNextPageEnabled() 483bool DrawPadCanvas::goNextPageEnabled()
482{ 484{
483 return (m_pages.current() != m_pages.getLast()); 485 return (m_pages.current() != m_pages.getLast());
484} 486}
485 487
486void DrawPadCanvas::undo() 488void DrawPadCanvas::undo()
487{ 489{
488 *(m_pages.current()) = *(m_pageBackups.prev()); 490 *(m_pages.current()) = *(m_pageBackups.prev());
489 491
490 viewport()->update(); 492 viewport()->update();
491 493
492 emit pageBackupsChanged(); 494 emit pageBackupsChanged();
493} 495}
494 496
495void DrawPadCanvas::redo() 497void DrawPadCanvas::redo()
496{ 498{
497 *(m_pages.current()) = *(m_pageBackups.next()); 499 *(m_pages.current()) = *(m_pageBackups.next());
498 500
499 viewport()->update(); 501 viewport()->update();
500 502
501 emit pageBackupsChanged(); 503 emit pageBackupsChanged();
502} 504}
503 505
504void DrawPadCanvas::goFirstPage() 506void DrawPadCanvas::goFirstPage()
505{ 507{
506 m_pages.first(); 508 m_pages.first();
507 m_pageBackups.clear(); 509 m_pageBackups.clear();
508 m_pageBackups.append(new Page(*(m_pages.current()))); 510 m_pageBackups.append(new Page(*(m_pages.current())));
509 511
510 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 512 resizeContents(m_pages.current()->width(), m_pages.current()->height());
511 viewport()->update(); 513 viewport()->update();
512 514
513 emit pagesChanged(); 515 emit pagesChanged();
514 emit pageBackupsChanged(); 516 emit pageBackupsChanged();
515} 517}
516 518
517void DrawPadCanvas::goPreviousPage() 519void DrawPadCanvas::goPreviousPage()
518{ 520{
519 m_pages.prev(); 521 m_pages.prev();
520 m_pageBackups.clear(); 522 m_pageBackups.clear();
521 m_pageBackups.append(new Page(*(m_pages.current()))); 523 m_pageBackups.append(new Page(*(m_pages.current())));
522 524
523 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 525 resizeContents(m_pages.current()->width(), m_pages.current()->height());
524 viewport()->update(); 526 viewport()->update();
525 527
526 emit pagesChanged(); 528 emit pagesChanged();
527 emit pageBackupsChanged(); 529 emit pageBackupsChanged();
528} 530}
529 531
530void DrawPadCanvas::goNextPage() 532void DrawPadCanvas::goNextPage()
531{ 533{
532 m_pages.next(); 534 m_pages.next();
533 m_pageBackups.clear(); 535 m_pageBackups.clear();
534 m_pageBackups.append(new Page(*(m_pages.current()))); 536 m_pageBackups.append(new Page(*(m_pages.current())));
535 537
536 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 538 resizeContents(m_pages.current()->width(), m_pages.current()->height());
537 viewport()->update(); 539 viewport()->update();
538 540
539 emit pagesChanged(); 541 emit pagesChanged();
540 emit pageBackupsChanged(); 542 emit pageBackupsChanged();
541} 543}
542 544
543void DrawPadCanvas::goLastPage() 545void DrawPadCanvas::goLastPage()
544{ 546{
545 m_pages.last(); 547 m_pages.last();
546 m_pageBackups.clear(); 548 m_pageBackups.clear();
547 m_pageBackups.append(new Page(*(m_pages.current()))); 549 m_pageBackups.append(new Page(*(m_pages.current())));
548 550
549 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 551 resizeContents(m_pages.current()->width(), m_pages.current()->height());
550 viewport()->update(); 552 viewport()->update();
551 553
552 emit pagesChanged(); 554 emit pagesChanged();
553 emit pageBackupsChanged(); 555 emit pageBackupsChanged();
554} 556}
555 557
556void DrawPadCanvas::contentsMousePressEvent(QMouseEvent* e) 558void DrawPadCanvas::contentsMousePressEvent(QMouseEvent* e)
557{ 559{
558 m_pDrawPad->tool()->mousePressEvent(e); 560 m_pDrawPad->tool()->mousePressEvent(e);
559} 561}
560 562
561void DrawPadCanvas::contentsMouseReleaseEvent(QMouseEvent* e) 563void DrawPadCanvas::contentsMouseReleaseEvent(QMouseEvent* e)
562{ 564{
563 m_pDrawPad->tool()->mouseReleaseEvent(e); 565 m_pDrawPad->tool()->mouseReleaseEvent(e);
564} 566}
565 567
566void DrawPadCanvas::contentsMouseMoveEvent(QMouseEvent* e) 568void DrawPadCanvas::contentsMouseMoveEvent(QMouseEvent* e)
567{ 569{
568 m_pDrawPad->tool()->mouseMoveEvent(e); 570 m_pDrawPad->tool()->mouseMoveEvent(e);
569} 571}
570 572
571void DrawPadCanvas::drawContents(QPainter* p, int cx, int cy, int cw, int ch) 573void DrawPadCanvas::drawContents(QPainter* p, int cx, int cy, int cw, int ch)
572{ 574{
573 QRect clipRect(cx, cy, cw, ch); 575 QRect clipRect(cx, cy, cw, ch);
574 QRect pixmapRect(0, 0, m_pages.current()->width(), m_pages.current()->height()); 576 QRect pixmapRect(0, 0, m_pages.current()->width(), m_pages.current()->height());
575 QRect drawRect = pixmapRect.intersect(clipRect); 577 QRect drawRect = pixmapRect.intersect(clipRect);
576 578
577 p->drawPixmap(drawRect.topLeft(), *(m_pages.current()), drawRect); 579 p->drawPixmap(drawRect.topLeft(), *(m_pages.current()), drawRect);
578 580
579 if (drawRect.right() < clipRect.right()) { 581 if (drawRect.right() < clipRect.right()) {
580 p->fillRect(drawRect.right() + 1, cy, cw - drawRect.width(), ch, colorGroup().dark()); 582 p->fillRect(drawRect.right() + 1, cy, cw - drawRect.width(), ch, colorGroup().dark());
581 } 583 }
582 584
583 if (drawRect.bottom() < clipRect.bottom()) { 585 if (drawRect.bottom() < clipRect.bottom()) {
584 p->fillRect(cx, drawRect.bottom() + 1, cw, ch - drawRect.height(), colorGroup().dark()); 586 p->fillRect(cx, drawRect.bottom() + 1, cw, ch - drawRect.height(), colorGroup().dark());
585 } 587 }
586} 588}