summaryrefslogtreecommitdiff
path: root/noncore/graphics/drawpad/drawpadcanvas.cpp
Unidiff
Diffstat (limited to 'noncore/graphics/drawpad/drawpadcanvas.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/graphics/drawpad/drawpadcanvas.cpp48
1 files changed, 37 insertions, 11 deletions
diff --git a/noncore/graphics/drawpad/drawpadcanvas.cpp b/noncore/graphics/drawpad/drawpadcanvas.cpp
index bcb6877..dcf0871 100644
--- a/noncore/graphics/drawpad/drawpadcanvas.cpp
+++ b/noncore/graphics/drawpad/drawpadcanvas.cpp
@@ -44,16 +44,20 @@ public:
44 const QString& qName); 44 const QString& qName);
45 bool characters(const QString& ch); 45 bool characters(const QString& ch);
46 46
47private: 47private:
48 enum State { 48 enum State {
49 Unknown, 49 Unknown,
50 InTitle,
51 InDate,
50 InData 52 InData
51 }; 53 };
52 54
53 State m_state; 55 State m_state;
56 QString m_title;
57 QDateTime m_date;
54 ulong m_dataLenght; 58 ulong m_dataLenght;
55 QString m_dataFormat; 59 QString m_dataFormat;
56 QList<Page> m_pages; 60 QList<Page> m_pages;
57}; 61};
58 62
59DrawPadCanvasXmlHandler::DrawPadCanvasXmlHandler() 63DrawPadCanvasXmlHandler::DrawPadCanvasXmlHandler()
@@ -73,13 +77,20 @@ QList<Page> DrawPadCanvasXmlHandler::pages()
73bool DrawPadCanvasXmlHandler::startElement(const QString& namespaceURI, const QString& localName, 77bool DrawPadCanvasXmlHandler::startElement(const QString& namespaceURI, const QString& localName,
74 const QString& qName, const QXmlAttributes& atts) 78 const QString& qName, const QXmlAttributes& atts)
75{ 79{
76 Q_CONST_UNUSED(namespaceURI) 80 Q_CONST_UNUSED(namespaceURI)
77 Q_CONST_UNUSED(localName) 81 Q_CONST_UNUSED(localName)
78 82
79 if (qName.compare("data") == 0) { 83 if (qName == "image") {
84 m_title = QString();
85 m_date = QDateTime(QDate(1970, 1, 1));
86 } else if (qName == "title") {
87 m_state = InTitle;
88 } else if (qName == "date") {
89 m_state = InDate;
90 } else if (qName == "data") {
80 m_state = InData; 91 m_state = InData;
81 m_dataLenght = atts.value("length").toULong(); 92 m_dataLenght = atts.value("length").toULong();
82 m_dataFormat = atts.value("format"); 93 m_dataFormat = atts.value("format");
83 94
84 if (m_dataFormat.isEmpty()) { 95 if (m_dataFormat.isEmpty()) {
85 m_dataFormat = "XPM"; 96 m_dataFormat = "XPM";
@@ -92,22 +103,30 @@ bool DrawPadCanvasXmlHandler::startElement(const QString& namespaceURI, const QS
92bool DrawPadCanvasXmlHandler::endElement(const QString& namespaceURI, const QString& localName, 103bool DrawPadCanvasXmlHandler::endElement(const QString& namespaceURI, const QString& localName,
93 const QString& qName) 104 const QString& qName)
94{ 105{
95 Q_CONST_UNUSED(namespaceURI) 106 Q_CONST_UNUSED(namespaceURI)
96 Q_CONST_UNUSED(localName) 107 Q_CONST_UNUSED(localName)
97 108
98 if (qName.compare("data") == 0) { 109 if (qName == "title") {
110 m_state = Unknown;
111 } else if (qName == "date") {
112 m_state = Unknown;
113 } else if (qName == "data") {
99 m_state = Unknown; 114 m_state = Unknown;
100 } 115 }
101 116
102 return true; 117 return true;
103} 118}
104 119
105bool DrawPadCanvasXmlHandler::characters(const QString& ch) 120bool DrawPadCanvasXmlHandler::characters(const QString& ch)
106{ 121{
107 if (m_state == InData) { 122 if (m_state == InTitle) {
123 m_title = ch;
124 } else if (m_state == InDate) {
125 m_date = m_date.addSecs(ch.toInt());
126 } else if (m_state == InData) {
108 QByteArray byteArray(ch.length() / 2); 127 QByteArray byteArray(ch.length() / 2);
109 128
110 for (int i = 0; i < (int)ch.length() / 2; i++) { 129 for (int i = 0; i < (int)ch.length() / 2; i++) {
111 char h = ch[2 * i].latin1(); 130 char h = ch[2 * i].latin1();
112 char l = ch[2 * i + 1].latin1(); 131 char l = ch[2 * i + 1].latin1();
113 uchar r = 0; 132 uchar r = 0;
@@ -142,13 +161,14 @@ bool DrawPadCanvasXmlHandler::characters(const QString& ch)
142 161
143 image.loadFromData((const uchar*)byteArrayUnzipped.data(), m_dataLenght, m_dataFormat); 162 image.loadFromData((const uchar*)byteArrayUnzipped.data(), m_dataLenght, m_dataFormat);
144 } else { 163 } else {
145 image.loadFromData((const uchar*)byteArray.data(), m_dataLenght, m_dataFormat); 164 image.loadFromData((const uchar*)byteArray.data(), m_dataLenght, m_dataFormat);
146 } 165 }
147 166
148 Page* page = new Page(image.width(), image.height()); 167 Page* page = new Page(m_title, image.width(), image.height());
168 page->setLastModified(m_date);
149 page->convertFromImage(image); 169 page->convertFromImage(image);
150 m_pages.append(page); 170 m_pages.append(page);
151 } 171 }
152 172
153 return true; 173 return true;
154} 174}
@@ -179,13 +199,13 @@ void DrawPadCanvas::load(QIODevice* ioDevice)
179 xmlSimpleReader.setContentHandler(&drawPadCanvasXmlHandler); 199 xmlSimpleReader.setContentHandler(&drawPadCanvasXmlHandler);
180 xmlSimpleReader.parse(xmlInputSource); 200 xmlSimpleReader.parse(xmlInputSource);
181 201
182 m_pages = drawPadCanvasXmlHandler.pages(); 202 m_pages = drawPadCanvasXmlHandler.pages();
183 203
184 if (m_pages.isEmpty()) { 204 if (m_pages.isEmpty()) {
185 m_pages.append(new Page(contentsRect().size())); 205 m_pages.append(new Page("", contentsRect().size()));
186 m_pages.current()->fill(Qt::white); 206 m_pages.current()->fill(Qt::white);
187 } 207 }
188 208
189 m_pageBackups.clear(); 209 m_pageBackups.clear();
190 m_pageBackups.append(new Page(*(m_pages.current()))); 210 m_pageBackups.append(new Page(*(m_pages.current())));
191 211
@@ -195,13 +215,13 @@ void DrawPadCanvas::load(QIODevice* ioDevice)
195 emit pagesChanged(); 215 emit pagesChanged();
196 emit pageBackupsChanged(); 216 emit pageBackupsChanged();
197} 217}
198 218
199void DrawPadCanvas::initialPage() 219void DrawPadCanvas::initialPage()
200{ 220{
201 m_pages.append(new Page(236, 232)); 221 m_pages.append(new Page("", 236, 232));
202 m_pages.current()->fill(Qt::white); 222 m_pages.current()->fill(Qt::white);
203 223
204 m_pageBackups.clear(); 224 m_pageBackups.clear();
205 m_pageBackups.append(new Page(*(m_pages.current()))); 225 m_pageBackups.append(new Page(*(m_pages.current())));
206 226
207 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 227 resizeContents(m_pages.current()->width(), m_pages.current()->height());
@@ -220,12 +240,16 @@ void DrawPadCanvas::save(QIODevice* ioDevice)
220 textStream << " <images>" << endl; 240 textStream << " <images>" << endl;
221 241
222 QListIterator<Page> bufferIterator(m_pages); 242 QListIterator<Page> bufferIterator(m_pages);
223 243
224 for (bufferIterator.toFirst(); bufferIterator.current() != 0; ++bufferIterator) { 244 for (bufferIterator.toFirst(); bufferIterator.current() != 0; ++bufferIterator) {
225 textStream << " <image>" << endl; 245 textStream << " <image>" << endl;
246 textStream << " <title>" << bufferIterator.current()->title() << "</title>" << endl;
247
248 int intDate = QDateTime(QDate(1970, 1, 1)).secsTo(bufferIterator.current()->lastModified());
249 textStream << " <date>" << intDate << "</date>" << endl;
226 250
227 QImage image = bufferIterator.current()->convertToImage(); 251 QImage image = bufferIterator.current()->convertToImage();
228 QByteArray byteArray; 252 QByteArray byteArray;
229 QBuffer buffer(byteArray); 253 QBuffer buffer(byteArray);
230 QImageIO imageIO(&buffer, "PNG"); 254 QImageIO imageIO(&buffer, "PNG");
231 255
@@ -338,13 +362,15 @@ void DrawPadCanvas::selectPage(Page* page)
338 emit pagesChanged(); 362 emit pagesChanged();
339 emit pageBackupsChanged(); 363 emit pageBackupsChanged();
340} 364}
341 365
342void DrawPadCanvas::backupPage() 366void DrawPadCanvas::backupPage()
343{ 367{
344 QPixmap* currentBackup = m_pageBackups.current(); 368 m_pages.current()->setLastModified(QDateTime::currentDateTime());
369
370 Page* currentBackup = m_pageBackups.current();
345 while (m_pageBackups.last() != currentBackup) { 371 while (m_pageBackups.last() != currentBackup) {
346 m_pageBackups.removeLast(); 372 m_pageBackups.removeLast();
347 } 373 }
348 374
349 while (m_pageBackups.count() >= (5 + 1)) { 375 while (m_pageBackups.count() >= (5 + 1)) {
350 m_pageBackups.removeFirst(); 376 m_pageBackups.removeFirst();
@@ -356,28 +382,28 @@ void DrawPadCanvas::backupPage()
356} 382}
357 383
358void DrawPadCanvas::deleteAll() 384void DrawPadCanvas::deleteAll()
359{ 385{
360 m_pages.clear(); 386 m_pages.clear();
361 387
362 m_pages.append(new Page(contentsRect().size())); 388 m_pages.append(new Page("", contentsRect().size()));
363 m_pages.current()->fill(Qt::white); 389 m_pages.current()->fill(Qt::white);
364 390
365 m_pageBackups.clear(); 391 m_pageBackups.clear();
366 m_pageBackups.append(new Page(*(m_pages.current()))); 392 m_pageBackups.append(new Page(*(m_pages.current())));
367 393
368 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 394 resizeContents(m_pages.current()->width(), m_pages.current()->height());
369 viewport()->update(); 395 viewport()->update();
370 396
371 emit pagesChanged(); 397 emit pagesChanged();
372 emit pageBackupsChanged(); 398 emit pageBackupsChanged();
373} 399}
374 400
375void DrawPadCanvas::newPage(uint width, uint height, const QColor& color) 401void DrawPadCanvas::newPage(QString title, uint width, uint height, const QColor& color)
376{ 402{
377 m_pages.insert(m_pages.at() + 1, new Page(width, height)); 403 m_pages.insert(m_pages.at() + 1, new Page(title, width, height));
378 m_pages.current()->fill(color); 404 m_pages.current()->fill(color);
379 405
380 m_pageBackups.clear(); 406 m_pageBackups.clear();
381 m_pageBackups.append(new Page(*(m_pages.current()))); 407 m_pageBackups.append(new Page(*(m_pages.current())));
382 408
383 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 409 resizeContents(m_pages.current()->width(), m_pages.current()->height());
@@ -402,13 +428,13 @@ void DrawPadCanvas::clearPage()
402 428
403void DrawPadCanvas::deletePage() 429void DrawPadCanvas::deletePage()
404{ 430{
405 m_pages.remove(m_pages.current()); 431 m_pages.remove(m_pages.current());
406 432
407 if (m_pages.isEmpty()) { 433 if (m_pages.isEmpty()) {
408 m_pages.append(new Page(contentsRect().size())); 434 m_pages.append(new Page("", contentsRect().size()));
409 m_pages.current()->fill(Qt::white); 435 m_pages.current()->fill(Qt::white);
410 } 436 }
411 437
412 m_pageBackups.clear(); 438 m_pageBackups.clear();
413 m_pageBackups.append(new Page(*(m_pages.current()))); 439 m_pageBackups.append(new Page(*(m_pages.current())));
414 440