summaryrefslogtreecommitdiff
path: root/noncore/graphics/drawpad/drawpadcanvas.cpp
Unidiff
Diffstat (limited to 'noncore/graphics/drawpad/drawpadcanvas.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/graphics/drawpad/drawpadcanvas.cpp21
1 files changed, 1 insertions, 20 deletions
diff --git a/noncore/graphics/drawpad/drawpadcanvas.cpp b/noncore/graphics/drawpad/drawpadcanvas.cpp
index ae1b554..5437068 100644
--- a/noncore/graphics/drawpad/drawpadcanvas.cpp
+++ b/noncore/graphics/drawpad/drawpadcanvas.cpp
@@ -7,50 +7,48 @@
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>
32
33const int PAGE_BACKUPS = 99; 31const int PAGE_BACKUPS = 99;
34 32
35class DrawPadCanvasXmlHandler: public QXmlDefaultHandler 33class DrawPadCanvasXmlHandler: public QXmlDefaultHandler
36{ 34{
37public: 35public:
38 DrawPadCanvasXmlHandler(); 36 DrawPadCanvasXmlHandler();
39 ~DrawPadCanvasXmlHandler(); 37 ~DrawPadCanvasXmlHandler();
40 38
41 QList<Page> pages(); 39 QList<Page> pages();
42 40
43 bool startElement(const QString& namespaceURI, const QString& localName, 41 bool startElement(const QString& namespaceURI, const QString& localName,
44 const QString& qName, const QXmlAttributes& atts); 42 const QString& qName, const QXmlAttributes& atts);
45 bool endElement(const QString& namespaceURI, const QString& localName, 43 bool endElement(const QString& namespaceURI, const QString& localName,
46 const QString& qName); 44 const QString& qName);
47 bool characters(const QString& ch); 45 bool characters(const QString& ch);
48 46
49private: 47private:
50 enum State { 48 enum State {
51 Unknown, 49 Unknown,
52 InTitle, 50 InTitle,
53 InDate, 51 InDate,
54 InData 52 InData
55 }; 53 };
56 54
@@ -72,52 +70,48 @@ DrawPadCanvasXmlHandler::~DrawPadCanvasXmlHandler()
72} 70}
73 71
74QList<Page> DrawPadCanvasXmlHandler::pages() 72QList<Page> DrawPadCanvasXmlHandler::pages()
75{ 73{
76 return m_pages; 74 return m_pages;
77} 75}
78 76
79bool DrawPadCanvasXmlHandler::startElement(const QString& namespaceURI, const QString& localName, 77bool DrawPadCanvasXmlHandler::startElement(const QString& namespaceURI, const QString& localName,
80 const QString& qName, const QXmlAttributes& atts) 78 const QString& qName, const QXmlAttributes& atts)
81{ 79{
82 Q_CONST_UNUSED(namespaceURI) 80 Q_CONST_UNUSED(namespaceURI)
83 Q_CONST_UNUSED(localName) 81 Q_CONST_UNUSED(localName)
84 82
85 if (qName == "image") { 83 if (qName == "image") {
86 m_title = QString(); 84 m_title = QString();
87 m_date = QDateTime::currentDateTime(); 85 m_date = QDateTime::currentDateTime();
88 } else if (qName == "title") { 86 } else if (qName == "title") {
89 m_state = InTitle; 87 m_state = InTitle;
90 } else if (qName == "date") { 88 } else if (qName == "date") {
91 m_state = InDate; 89 m_state = InDate;
92 } else if (qName == "data") { 90 } else if (qName == "data") {
93 m_state = InData; 91 m_state = InData;
94 m_dataLenght = atts.value("length").toULong(); 92 m_dataLenght = atts.value("length").toULong();
95 m_dataFormat = atts.value("format"); 93 m_dataFormat = atts.value("format");
96
97 if (m_dataFormat.isEmpty()) {
98 m_dataFormat = "XPM";
99 }
100 } 94 }
101 95
102 return true; 96 return true;
103} 97}
104 98
105bool DrawPadCanvasXmlHandler::endElement(const QString& namespaceURI, const QString& localName, 99bool DrawPadCanvasXmlHandler::endElement(const QString& namespaceURI, const QString& localName,
106 const QString& qName) 100 const QString& qName)
107{ 101{
108 Q_CONST_UNUSED(namespaceURI) 102 Q_CONST_UNUSED(namespaceURI)
109 Q_CONST_UNUSED(localName) 103 Q_CONST_UNUSED(localName)
110 104
111 if (qName == "title") { 105 if (qName == "title") {
112 m_state = Unknown; 106 m_state = Unknown;
113 } else if (qName == "date") { 107 } else if (qName == "date") {
114 m_state = Unknown; 108 m_state = Unknown;
115 } else if (qName == "data") { 109 } else if (qName == "data") {
116 m_state = Unknown; 110 m_state = Unknown;
117 } 111 }
118 112
119 return true; 113 return true;
120} 114}
121 115
122bool DrawPadCanvasXmlHandler::characters(const QString& ch) 116bool DrawPadCanvasXmlHandler::characters(const QString& ch)
123{ 117{
@@ -129,63 +123,50 @@ bool DrawPadCanvasXmlHandler::characters(const QString& ch)
129 QByteArray byteArray(ch.length() / 2); 123 QByteArray byteArray(ch.length() / 2);
130 124
131 for (int i = 0; i < (int)ch.length() / 2; i++) { 125 for (int i = 0; i < (int)ch.length() / 2; i++) {
132 char h = ch[2 * i].latin1(); 126 char h = ch[2 * i].latin1();
133 char l = ch[2 * i + 1].latin1(); 127 char l = ch[2 * i + 1].latin1();
134 uchar r = 0; 128 uchar r = 0;
135 129
136 if (h <= '9') { 130 if (h <= '9') {
137 r += h - '0'; 131 r += h - '0';
138 } else { 132 } else {
139 r += h - 'a' + 10; 133 r += h - 'a' + 10;
140 } 134 }
141 135
142 r = r << 4; 136 r = r << 4;
143 137
144 if (l <= '9') { 138 if (l <= '9') {
145 r += l - '0'; 139 r += l - '0';
146 } else { 140 } else {
147 r += l - 'a' + 10; 141 r += l - 'a' + 10;
148 } 142 }
149 143
150 byteArray[i] = r; 144 byteArray[i] = r;
151 } 145 }
152 146
153
154 QImage image; 147 QImage image;
155 148 image.loadFromData((const uchar*)byteArray.data(), m_dataLenght, m_dataFormat);
156 if (m_dataFormat == "XPM") {
157 if (m_dataLenght < ch.length() * 5) {
158 m_dataLenght = ch.length() * 5;
159 }
160
161 QByteArray byteArrayUnzipped(m_dataLenght);
162 ::uncompress((uchar*)byteArrayUnzipped.data(), &m_dataLenght, (uchar*)byteArray.data(), byteArray.size());
163
164 image.loadFromData((const uchar*)byteArrayUnzipped.data(), m_dataLenght, m_dataFormat);
165 } else {
166 image.loadFromData((const uchar*)byteArray.data(), m_dataLenght, m_dataFormat);
167 }
168 149
169 Page* page = new Page(m_title, image.width(), image.height()); 150 Page* page = new Page(m_title, image.width(), image.height());
170 page->setLastModified(m_date); 151 page->setLastModified(m_date);
171 page->convertFromImage(image); 152 page->convertFromImage(image);
172 m_pages.append(page); 153 m_pages.append(page);
173 } 154 }
174 155
175 return true; 156 return true;
176} 157}
177 158
178DrawPadCanvas::DrawPadCanvas(DrawPad* drawPad, QWidget* parent, const char* name) 159DrawPadCanvas::DrawPadCanvas(DrawPad* drawPad, QWidget* parent, const char* name)
179 : QScrollView(parent, name) 160 : QScrollView(parent, name)
180{ 161{
181 m_pDrawPad = drawPad; 162 m_pDrawPad = drawPad;
182 m_pages.setAutoDelete(true); 163 m_pages.setAutoDelete(true);
183 m_pageBackups.setAutoDelete(true); 164 m_pageBackups.setAutoDelete(true);
184 165
185 viewport()->setBackgroundMode(QWidget::NoBackground); 166 viewport()->setBackgroundMode(QWidget::NoBackground);
186} 167}
187 168
188DrawPadCanvas::~DrawPadCanvas() 169DrawPadCanvas::~DrawPadCanvas()
189{ 170{
190} 171}
191 172