From 7e3e4639830df13a8fa11599173b083c25eb0c3a Mon Sep 17 00:00:00 2001 From: Debao Zhang Date: Mon, 4 Nov 2013 10:51:59 +0800 Subject: [PATCH] Take use of existing theme file --- src/xlsx/xlsxpackage.cpp | 6 +- src/xlsx/xlsxtheme.cpp | 184 +++++++++++++++++++++++++++++++++++++- src/xlsx/xlsxtheme_p.h | 3 + src/xlsx/xlsxworkbook.cpp | 7 ++ src/xlsx/xlsxworkbook.h | 2 + src/xlsx/xlsxworkbook_p.h | 2 + 6 files changed, 199 insertions(+), 5 deletions(-) diff --git a/src/xlsx/xlsxpackage.cpp b/src/xlsx/xlsxpackage.cpp index 2798e34..b354179 100644 --- a/src/xlsx/xlsxpackage.cpp +++ b/src/xlsx/xlsxpackage.cpp @@ -168,7 +168,9 @@ bool Package::parsePackage(QIODevice *packageDevice) QList rels_theme = xlworkbook_Rels.documentRelationships(QStringLiteral("/theme")); if (!rels_theme.isEmpty()) { //In normal case this should be theme/theme1.xml which in xl - //:Todo + QString name = rels_theme[0].target; + QString path = xlworkbook_Dir + QLatin1String("/") + name; + m_document->workbook()->theme()->loadFromXmlData(zipReader.fileData(path)); } //load worksheets @@ -338,7 +340,7 @@ void Package::writeThemeFile(ZipWriter &zipWriter) QByteArray data; QBuffer buffer(&data); buffer.open(QIODevice::WriteOnly); - Theme().saveToXmlFile(&buffer); + m_workbook->theme()->saveToXmlFile(&buffer); zipWriter.addFile(QStringLiteral("xl/theme/theme1.xml"), data); } diff --git a/src/xlsx/xlsxtheme.cpp b/src/xlsx/xlsxtheme.cpp index a26e83f..076f53e 100755 --- a/src/xlsx/xlsxtheme.cpp +++ b/src/xlsx/xlsxtheme.cpp @@ -27,8 +27,178 @@ namespace QXlsx { -const char *contents = - "\x0a" +const char *defaultXmlData = + "\n" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" ; Theme::Theme() @@ -37,7 +207,15 @@ Theme::Theme() void Theme::saveToXmlFile(QIODevice *device) { - device->write(contents); + if (xmlData.isEmpty()) + device->write(defaultXmlData); + else + device->write(xmlData); +} + +void Theme::loadFromXmlData(const QByteArray &data) +{ + xmlData = data; } } diff --git a/src/xlsx/xlsxtheme_p.h b/src/xlsx/xlsxtheme_p.h index f9f87b8..bd012f1 100755 --- a/src/xlsx/xlsxtheme_p.h +++ b/src/xlsx/xlsxtheme_p.h @@ -36,6 +36,9 @@ public: Theme(); void saveToXmlFile(QIODevice *device); + void loadFromXmlData(const QByteArray &data); + + QByteArray xmlData; }; } diff --git a/src/xlsx/xlsxworkbook.cpp b/src/xlsx/xlsxworkbook.cpp index fb0e161..4322f3c 100755 --- a/src/xlsx/xlsxworkbook.cpp +++ b/src/xlsx/xlsxworkbook.cpp @@ -43,6 +43,7 @@ WorkbookPrivate::WorkbookPrivate(Workbook *q) : { sharedStrings = QSharedPointer (new SharedStrings); styles = QSharedPointer(new Styles); + theme = QSharedPointer(new Theme); x_window = 240; y_window = 15; @@ -247,6 +248,12 @@ Styles *Workbook::styles() return d->styles.data(); } +Theme *Workbook::theme() +{ + Q_D(Workbook); + return d->theme.data(); +} + QList Workbook::images() { Q_D(Workbook); diff --git a/src/xlsx/xlsxworkbook.h b/src/xlsx/xlsxworkbook.h index 2ba599b..97a437e 100755 --- a/src/xlsx/xlsxworkbook.h +++ b/src/xlsx/xlsxworkbook.h @@ -41,6 +41,7 @@ class Styles; class Package; class Drawing; class Document; +class Theme; class DocumentPrivate; class WorkbookPrivate; @@ -82,6 +83,7 @@ private: SharedStrings *sharedStrings() const; Styles *styles(); + Theme *theme(); QList images(); QList drawings(); void prepareDrawings(); diff --git a/src/xlsx/xlsxworkbook_p.h b/src/xlsx/xlsxworkbook_p.h index bf59dd8..0bdc737 100644 --- a/src/xlsx/xlsxworkbook_p.h +++ b/src/xlsx/xlsxworkbook_p.h @@ -25,6 +25,7 @@ #ifndef XLSXWORKBOOK_P_H #define XLSXWORKBOOK_P_H #include "xlsxworkbook.h" +#include "xlsxtheme_p.h" #include #include @@ -68,6 +69,7 @@ public: QSharedPointer sharedStrings; QList > worksheets; QSharedPointer styles; + QSharedPointer theme; QList images; QList drawings; QList definedNamesList;