From f5411b9b5a37fbc4dff4a146a4149a5783f4a68b Mon Sep 17 00:00:00 2001 From: Debao Zhang Date: Fri, 6 Sep 2013 16:34:41 +0800 Subject: [PATCH] Try add a new class QXlsx::Document --- src/xlsx/qtxlsx.pri | 7 ++-- src/xlsx/xlsxdocument.cpp | 71 +++++++++++++++++++++++++++++++++++++++ src/xlsx/xlsxdocument.h | 35 +++++++++++++++++++ src/xlsx/xlsxdocument_p.h | 24 +++++++++++++ src/xlsx/xlsxpackage.cpp | 14 ++++++-- src/xlsx/xlsxpackage_p.h | 8 +++-- 6 files changed, 153 insertions(+), 6 deletions(-) create mode 100644 src/xlsx/xlsxdocument.cpp create mode 100644 src/xlsx/xlsxdocument.h create mode 100644 src/xlsx/xlsxdocument_p.h diff --git a/src/xlsx/qtxlsx.pri b/src/xlsx/qtxlsx.pri index 4829a9e..e5dffdb 100755 --- a/src/xlsx/qtxlsx.pri +++ b/src/xlsx/qtxlsx.pri @@ -24,7 +24,9 @@ HEADERS += $$PWD/xlsxdocpropscore_p.h \ $$PWD/xlsxglobal.h \ $$PWD/xlsxdrawing_p.h \ $$PWD/xlsxxmlreader_p.h \ - $$PWD/xlsxzipreader_p.h + $$PWD/xlsxzipreader_p.h \ + $$PWD/xlsxdocument.h \ + $$PWD/xlsxdocument_p.h SOURCES += $$PWD/xlsxdocpropscore.cpp \ $$PWD/xlsxdocpropsapp.cpp \ @@ -42,4 +44,5 @@ SOURCES += $$PWD/xlsxdocpropscore.cpp \ $$PWD/xlsxpackage.cpp \ $$PWD/xlsxdrawing.cpp \ $$PWD/xlsxxmlreader.cpp \ - $$PWD/xlsxzipreader.cpp + $$PWD/xlsxzipreader.cpp \ + $$PWD/xlsxdocument.cpp diff --git a/src/xlsx/xlsxdocument.cpp b/src/xlsx/xlsxdocument.cpp new file mode 100644 index 0000000..d6c3f70 --- /dev/null +++ b/src/xlsx/xlsxdocument.cpp @@ -0,0 +1,71 @@ +#include "xlsxdocument.h" +#include "xlsxdocument_p.h" +#include "xlsxworkbook.h" +#include "xlsxworksheet.h" + +#include + +namespace QXlsx { + +DocumentPrivate::DocumentPrivate(Document *p) : + q_ptr(p), defaultPackageName(QStringLiteral("Book1")) +{ + +} + +bool DocumentPrivate::loadPackage(QIODevice *device) +{ + + return false; +} + + +/*! + \class Document + +*/ + +Document::Document(QObject *parent) : + QObject(parent), d_ptr(new DocumentPrivate(this)) +{ +} + +Document::Document(const QString &name, QObject *parent) : + QObject(parent), d_ptr(new DocumentPrivate(this)) +{ + d_ptr->packageName = name; + if (QFile::exists(name)) { + QFile xlsx(name); + if (xlsx.open(QFile::ReadOnly)) + d_ptr->loadPackage(&xlsx); + } +} + +Document::Document(QIODevice *device, QObject *parent) : + QObject(parent), d_ptr(new DocumentPrivate(this)) +{ + if (device && device->isReadable()) + d_ptr->loadPackage(device); +} + +bool Document::save() +{ + return false; +} + +bool Document::saveAs(const QString &name) +{ + return false; +} + +bool Document::saveAs(QIODevice *device) +{ + return false; +} + +Document::~Document() +{ + delete d_ptr; +} + +} // namespace QXlsx diff --git a/src/xlsx/xlsxdocument.h b/src/xlsx/xlsxdocument.h new file mode 100644 index 0000000..592eb1e --- /dev/null +++ b/src/xlsx/xlsxdocument.h @@ -0,0 +1,35 @@ +#ifndef QXLSX_XLSXDOCUMENT_H +#define QXLSX_XLSXDOCUMENT_H + +#include "xlsxglobal.h" +#include +class QIODevice; + +namespace QXlsx { + +class Workbook; +class Worksheet; +class DocumentPrivate; +class Q_XLSX_EXPORT Document : public QObject +{ + Q_OBJECT + Q_DECLARE_PRIVATE(Document) + +public: + explicit Document(QObject *parent = 0); + Document(const QString &name, QObject *parent=0); + Document(QIODevice *device, QObject *parent=0); + ~Document(); + + bool save(); + bool saveAs(const QString &name); + bool saveAs(QIODevice *device); + +private: + Q_DISABLE_COPY(Document) + DocumentPrivate * const d_ptr; +}; + +} // namespace QXlsx + +#endif // QXLSX_XLSXDOCUMENT_H diff --git a/src/xlsx/xlsxdocument_p.h b/src/xlsx/xlsxdocument_p.h new file mode 100644 index 0000000..fa8ae51 --- /dev/null +++ b/src/xlsx/xlsxdocument_p.h @@ -0,0 +1,24 @@ +#ifndef XLSXDOCUMENT_P_H +#define XLSXDOCUMENT_P_H + +#include "xlsxdocument.h" + +namespace QXlsx { + +class DocumentPrivate +{ + Q_DECLARE_PUBLIC(Document) +public: + DocumentPrivate(Document *p); + + bool loadPackage(QIODevice *device); + + Document *q_ptr; + const QString defaultPackageName; //default name when package name not specified + QString packageName; //name of the .xlsx file + +}; + +} + +#endif // XLSXDOCUMENT_P_H diff --git a/src/xlsx/xlsxpackage.cpp b/src/xlsx/xlsxpackage.cpp index 60ec40a..59242fd 100644 --- a/src/xlsx/xlsxpackage.cpp +++ b/src/xlsx/xlsxpackage.cpp @@ -34,6 +34,8 @@ #include "xlsxrelationships_p.h" #include "xlsxzipwriter_p.h" #include "xlsxdrawing_p.h" +#include "xlsxzipreader_p.h" +#include "xlsxdocument.h" #include #include @@ -87,6 +89,14 @@ Package::Package(Workbook *workbook) : } } +bool Package::parsePackage(QIODevice *packageDevice, Document *document) +{ + ZipReader zipReader(packageDevice); + QStringList filePaths = zipReader.filePaths(); + + return false; +} + bool Package::createPackage(const QString &packageName) { ZipWriter zipWriter(packageName); @@ -107,7 +117,7 @@ bool Package::createPackage(const QString &packageName) writeSharedStringsFile(zipWriter); writeDocPropsAppFile(zipWriter); writeDocPropsCoreFile(zipWriter); - writeContentTypesFiles(zipWriter); + writeContentTypesFile(zipWriter); m_workbook->styles()->prepareStyles(); writeStylesFiles(zipWriter); writeThemeFile(zipWriter); @@ -161,7 +171,7 @@ void Package::writeDrawingFiles(ZipWriter &zipWriter) } } -void Package::writeContentTypesFiles(ZipWriter &zipWriter) +void Package::writeContentTypesFile(ZipWriter &zipWriter) { ContentTypes content; diff --git a/src/xlsx/xlsxpackage_p.h b/src/xlsx/xlsxpackage_p.h index 64973ab..b5b5f2b 100644 --- a/src/xlsx/xlsxpackage_p.h +++ b/src/xlsx/xlsxpackage_p.h @@ -25,18 +25,22 @@ #ifndef QXLSX_PACKAGE_H #define QXLSX_PACKAGE_H +#include "xlsxglobal.h" #include +class QIODevice; namespace QXlsx { class Workbook; class ZipWriter; +class Document; -class Package +class XLSX_AUTOTEST_EXPORT Package { public: Package(Workbook *workbook); + bool parsePackage(QIODevice *packageDevice, Document *document); bool createPackage(const QString &packageName); private: @@ -51,7 +55,7 @@ private: void writeSharedStringsFile(ZipWriter &zipWriter); void writeDocPropsAppFile(ZipWriter &zipWriter); void writeDocPropsCoreFile(ZipWriter &zipWriter); - void writeContentTypesFiles(ZipWriter &zipWriter); + void writeContentTypesFile(ZipWriter &zipWriter); void writeStylesFiles(ZipWriter &zipWriter); void writeThemeFile(ZipWriter &zipWriter); void writeRootRelsFile(ZipWriter &zipWriter);