summaryrefslogtreecommitdiff
path: root/noncore/graphics/drawpad/drawpadcanvas.cpp
Side-by-side diff
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:
const QString& qName);
bool characters(const QString& ch);
private:
enum State {
Unknown,
+ InTitle,
+ InDate,
InData
};
State m_state;
+ QString m_title;
+ QDateTime m_date;
ulong m_dataLenght;
QString m_dataFormat;
QList<Page> m_pages;
};
DrawPadCanvasXmlHandler::DrawPadCanvasXmlHandler()
@@ -73,13 +77,20 @@ QList<Page> DrawPadCanvasXmlHandler::pages()
bool DrawPadCanvasXmlHandler::startElement(const QString& namespaceURI, const QString& localName,
const QString& qName, const QXmlAttributes& atts)
{
Q_CONST_UNUSED(namespaceURI)
Q_CONST_UNUSED(localName)
- if (qName.compare("data") == 0) {
+ if (qName == "image") {
+ m_title = QString();
+ m_date = QDateTime(QDate(1970, 1, 1));
+ } else if (qName == "title") {
+ m_state = InTitle;
+ } else if (qName == "date") {
+ m_state = InDate;
+ } else if (qName == "data") {
m_state = InData;
m_dataLenght = atts.value("length").toULong();
m_dataFormat = atts.value("format");
if (m_dataFormat.isEmpty()) {
m_dataFormat = "XPM";
@@ -92,22 +103,30 @@ bool DrawPadCanvasXmlHandler::startElement(const QString& namespaceURI, const QS
bool DrawPadCanvasXmlHandler::endElement(const QString& namespaceURI, const QString& localName,
const QString& qName)
{
Q_CONST_UNUSED(namespaceURI)
Q_CONST_UNUSED(localName)
- if (qName.compare("data") == 0) {
+ if (qName == "title") {
+ m_state = Unknown;
+ } else if (qName == "date") {
+ m_state = Unknown;
+ } else if (qName == "data") {
m_state = Unknown;
}
return true;
}
bool DrawPadCanvasXmlHandler::characters(const QString& ch)
{
- if (m_state == InData) {
+ if (m_state == InTitle) {
+ m_title = ch;
+ } else if (m_state == InDate) {
+ m_date = m_date.addSecs(ch.toInt());
+ } else if (m_state == InData) {
QByteArray byteArray(ch.length() / 2);
for (int i = 0; i < (int)ch.length() / 2; i++) {
char h = ch[2 * i].latin1();
char l = ch[2 * i + 1].latin1();
uchar r = 0;
@@ -142,13 +161,14 @@ bool DrawPadCanvasXmlHandler::characters(const QString& ch)
image.loadFromData((const uchar*)byteArrayUnzipped.data(), m_dataLenght, m_dataFormat);
} else {
image.loadFromData((const uchar*)byteArray.data(), m_dataLenght, m_dataFormat);
}
- Page* page = new Page(image.width(), image.height());
+ Page* page = new Page(m_title, image.width(), image.height());
+ page->setLastModified(m_date);
page->convertFromImage(image);
m_pages.append(page);
}
return true;
}
@@ -179,13 +199,13 @@ void DrawPadCanvas::load(QIODevice* ioDevice)
xmlSimpleReader.setContentHandler(&drawPadCanvasXmlHandler);
xmlSimpleReader.parse(xmlInputSource);
m_pages = drawPadCanvasXmlHandler.pages();
if (m_pages.isEmpty()) {
- m_pages.append(new Page(contentsRect().size()));
+ m_pages.append(new Page("", contentsRect().size()));
m_pages.current()->fill(Qt::white);
}
m_pageBackups.clear();
m_pageBackups.append(new Page(*(m_pages.current())));
@@ -195,13 +215,13 @@ void DrawPadCanvas::load(QIODevice* ioDevice)
emit pagesChanged();
emit pageBackupsChanged();
}
void DrawPadCanvas::initialPage()
{
- m_pages.append(new Page(236, 232));
+ m_pages.append(new Page("", 236, 232));
m_pages.current()->fill(Qt::white);
m_pageBackups.clear();
m_pageBackups.append(new Page(*(m_pages.current())));
resizeContents(m_pages.current()->width(), m_pages.current()->height());
@@ -220,12 +240,16 @@ void DrawPadCanvas::save(QIODevice* ioDevice)
textStream << " <images>" << endl;
QListIterator<Page> bufferIterator(m_pages);
for (bufferIterator.toFirst(); bufferIterator.current() != 0; ++bufferIterator) {
textStream << " <image>" << endl;
+ textStream << " <title>" << bufferIterator.current()->title() << "</title>" << endl;
+
+ int intDate = QDateTime(QDate(1970, 1, 1)).secsTo(bufferIterator.current()->lastModified());
+ textStream << " <date>" << intDate << "</date>" << endl;
QImage image = bufferIterator.current()->convertToImage();
QByteArray byteArray;
QBuffer buffer(byteArray);
QImageIO imageIO(&buffer, "PNG");
@@ -338,13 +362,15 @@ void DrawPadCanvas::selectPage(Page* page)
emit pagesChanged();
emit pageBackupsChanged();
}
void DrawPadCanvas::backupPage()
{
- QPixmap* currentBackup = m_pageBackups.current();
+ m_pages.current()->setLastModified(QDateTime::currentDateTime());
+
+ Page* currentBackup = m_pageBackups.current();
while (m_pageBackups.last() != currentBackup) {
m_pageBackups.removeLast();
}
while (m_pageBackups.count() >= (5 + 1)) {
m_pageBackups.removeFirst();
@@ -356,28 +382,28 @@ void DrawPadCanvas::backupPage()
}
void DrawPadCanvas::deleteAll()
{
m_pages.clear();
- m_pages.append(new Page(contentsRect().size()));
+ m_pages.append(new Page("", contentsRect().size()));
m_pages.current()->fill(Qt::white);
m_pageBackups.clear();
m_pageBackups.append(new Page(*(m_pages.current())));
resizeContents(m_pages.current()->width(), m_pages.current()->height());
viewport()->update();
emit pagesChanged();
emit pageBackupsChanged();
}
-void DrawPadCanvas::newPage(uint width, uint height, const QColor& color)
+void DrawPadCanvas::newPage(QString title, uint width, uint height, const QColor& color)
{
- m_pages.insert(m_pages.at() + 1, new Page(width, height));
+ m_pages.insert(m_pages.at() + 1, new Page(title, width, height));
m_pages.current()->fill(color);
m_pageBackups.clear();
m_pageBackups.append(new Page(*(m_pages.current())));
resizeContents(m_pages.current()->width(), m_pages.current()->height());
@@ -402,13 +428,13 @@ void DrawPadCanvas::clearPage()
void DrawPadCanvas::deletePage()
{
m_pages.remove(m_pages.current());
if (m_pages.isEmpty()) {
- m_pages.append(new Page(contentsRect().size()));
+ m_pages.append(new Page("", contentsRect().size()));
m_pages.current()->fill(Qt::white);
}
m_pageBackups.clear();
m_pageBackups.append(new Page(*(m_pages.current())));