Browse Source

Introduce CreateFlag for all the ooxmlfile

master
Debao Zhang 11 years ago
parent
commit
34c645ed76
  1. 8
      src/xlsx/xlsxabstractooxmlfile.cpp
  2. 9
      src/xlsx/xlsxabstractooxmlfile.h
  3. 3
      src/xlsx/xlsxabstractooxmlfile_p.h
  4. 4
      src/xlsx/xlsxabstractsheet.cpp
  5. 2
      src/xlsx/xlsxabstractsheet_p.h
  6. 8
      src/xlsx/xlsxchart.cpp
  7. 2
      src/xlsx/xlsxchart.h
  8. 2
      src/xlsx/xlsxchart_p.h
  9. 10
      src/xlsx/xlsxchartsheet.cpp
  10. 2
      src/xlsx/xlsxchartsheet.h
  11. 2
      src/xlsx/xlsxchartsheet_p.h
  12. 3
      src/xlsx/xlsxcontenttypes.cpp
  13. 2
      src/xlsx/xlsxcontenttypes_p.h
  14. 3
      src/xlsx/xlsxdocpropsapp.cpp
  15. 2
      src/xlsx/xlsxdocpropsapp_p.h
  16. 3
      src/xlsx/xlsxdocpropscore.cpp
  17. 2
      src/xlsx/xlsxdocpropscore_p.h
  18. 47
      src/xlsx/xlsxdocument.cpp
  19. 2
      src/xlsx/xlsxdocument_p.h
  20. 4
      src/xlsx/xlsxdrawing.cpp
  21. 2
      src/xlsx/xlsxdrawing_p.h
  22. 2
      src/xlsx/xlsxdrawinganchor.cpp
  23. 3
      src/xlsx/xlsxsharedstrings.cpp
  24. 2
      src/xlsx/xlsxsharedstrings_p.h
  25. 3
      src/xlsx/xlsxsimpleooxmlfile.cpp
  26. 2
      src/xlsx/xlsxsimpleooxmlfile_p.h
  27. 6
      src/xlsx/xlsxstyles.cpp
  28. 2
      src/xlsx/xlsxstyles_p.h
  29. 3
      src/xlsx/xlsxtheme.cpp
  30. 2
      src/xlsx/xlsxtheme_p.h
  31. 20
      src/xlsx/xlsxworkbook.cpp
  32. 2
      src/xlsx/xlsxworkbook.h
  33. 2
      src/xlsx/xlsxworkbook_p.h
  34. 20
      src/xlsx/xlsxworksheet.cpp
  35. 2
      src/xlsx/xlsxworksheet.h
  36. 2
      src/xlsx/xlsxworksheet_p.h
  37. 4
      tests/auto/propsapp/tst_docpropsapptest.cpp
  38. 4
      tests/auto/propscore/tst_propscoretest.cpp
  39. 10
      tests/auto/sharedstrings/tst_sharedstringstest.cpp
  40. 18
      tests/auto/styles/tst_stylestest.cpp
  41. 28
      tests/auto/worksheet/tst_worksheet.cpp

8
src/xlsx/xlsxabstractooxmlfile.cpp

@ -31,8 +31,8 @@
QT_BEGIN_NAMESPACE_XLSX
AbstractOOXmlFilePrivate::AbstractOOXmlFilePrivate(AbstractOOXmlFile *q)
:relationships(new Relationships), q_ptr(q)
AbstractOOXmlFilePrivate::AbstractOOXmlFilePrivate(AbstractOOXmlFile *q, AbstractOOXmlFile::CreateFlag flag=AbstractOOXmlFile::F_NewFromScratch)
:relationships(new Relationships), flag(flag), q_ptr(q)
{
}
@ -50,8 +50,8 @@ AbstractOOXmlFilePrivate::~AbstractOOXmlFilePrivate()
* Base class of all the ooxml part file.
*/
AbstractOOXmlFile::AbstractOOXmlFile()
:d_ptr(new AbstractOOXmlFilePrivate(this))
AbstractOOXmlFile::AbstractOOXmlFile(CreateFlag flag)
:d_ptr(new AbstractOOXmlFilePrivate(this, flag))
{
}

9
src/xlsx/xlsxabstractooxmlfile.h

@ -39,6 +39,12 @@ class Q_XLSX_EXPORT AbstractOOXmlFile
{
Q_DECLARE_PRIVATE(AbstractOOXmlFile)
public:
enum CreateFlag
{
F_NewFromScratch,
F_LoadFromExists
};
virtual ~AbstractOOXmlFile();
virtual void saveToXmlFile(QIODevice *device) const = 0;
@ -51,8 +57,9 @@ public:
void setFilePath(const QString path);
QString filePath() const;
protected:
AbstractOOXmlFile();
AbstractOOXmlFile(CreateFlag flag);
AbstractOOXmlFile(AbstractOOXmlFilePrivate *d);
AbstractOOXmlFilePrivate *d_ptr;

3
src/xlsx/xlsxabstractooxmlfile_p.h

@ -49,12 +49,13 @@ class XLSX_AUTOTEST_EXPORT AbstractOOXmlFilePrivate
Q_DECLARE_PUBLIC(AbstractOOXmlFile)
public:
AbstractOOXmlFilePrivate(AbstractOOXmlFile *q);
AbstractOOXmlFilePrivate(AbstractOOXmlFile *q, AbstractOOXmlFile::CreateFlag flag);
virtual ~AbstractOOXmlFilePrivate();
QString filePathInPackage;//such as "xl/worksheets/sheet1.xml"
//used when load the .xlsx file
Relationships *relationships;
AbstractOOXmlFile::CreateFlag flag;
AbstractOOXmlFile *q_ptr;
};

4
src/xlsx/xlsxabstractsheet.cpp

@ -28,8 +28,8 @@
QT_BEGIN_NAMESPACE_XLSX
AbstractSheetPrivate::AbstractSheetPrivate(AbstractSheet *p)
: AbstractOOXmlFilePrivate(p)
AbstractSheetPrivate::AbstractSheetPrivate(AbstractSheet *p, AbstractSheet::CreateFlag flag)
: AbstractOOXmlFilePrivate(p, flag)
{
hidden = false;
type = AbstractSheet::ST_WorkSheet;

2
src/xlsx/xlsxabstractsheet_p.h

@ -48,7 +48,7 @@ class XLSX_AUTOTEST_EXPORT AbstractSheetPrivate : public AbstractOOXmlFilePrivat
{
Q_DECLARE_PUBLIC(AbstractSheet)
public:
AbstractSheetPrivate(AbstractSheet *p);
AbstractSheetPrivate(AbstractSheet *p, AbstractSheet::CreateFlag flag);
~AbstractSheetPrivate();
Workbook *workbook;

8
src/xlsx/xlsxchart.cpp

@ -35,8 +35,8 @@
QT_BEGIN_NAMESPACE_XLSX
ChartPrivate::ChartPrivate(Chart *q)
:AbstractOOXmlFilePrivate(q), chartType(static_cast<Chart::ChartType>(0))
ChartPrivate::ChartPrivate(Chart *q, Chart::CreateFlag flag)
:AbstractOOXmlFilePrivate(q, flag), chartType(static_cast<Chart::ChartType>(0))
{
}
@ -77,8 +77,8 @@ ChartPrivate::~ChartPrivate()
/*!
* \internal
*/
Chart::Chart(AbstractSheet *parent)
:AbstractOOXmlFile(new ChartPrivate(this))
Chart::Chart(AbstractSheet *parent, CreateFlag flag)
:AbstractOOXmlFile(new ChartPrivate(this, flag))
{
d_func()->sheet = parent;
}

2
src/xlsx/xlsxchart.h

@ -80,7 +80,7 @@ private:
friend class Chartsheet;
friend class DrawingAnchor;
Chart(AbstractSheet *parent);
Chart(AbstractSheet *parent, CreateFlag flag);
};
QT_END_NAMESPACE_XLSX

2
src/xlsx/xlsxchart_p.h

@ -92,7 +92,7 @@ class ChartPrivate : public AbstractOOXmlFilePrivate
Q_DECLARE_PUBLIC(Chart)
public:
ChartPrivate(Chart *q);
ChartPrivate(Chart *q, Chart::CreateFlag flag);
~ChartPrivate();
bool loadXmlChart(QXmlStreamReader &reader);

10
src/xlsx/xlsxchartsheet.cpp

@ -35,8 +35,8 @@
QT_BEGIN_NAMESPACE_XLSX
ChartsheetPrivate::ChartsheetPrivate(Chartsheet *p)
: AbstractSheetPrivate(p)
ChartsheetPrivate::ChartsheetPrivate(Chartsheet *p, Chartsheet::CreateFlag flag)
: AbstractSheetPrivate(p, flag)
{
}
@ -53,8 +53,8 @@ ChartsheetPrivate::~ChartsheetPrivate()
/*!
* \internal
*/
Chartsheet::Chartsheet(const QString &name, int id, Workbook *workbook)
:AbstractSheet(name, id, workbook, new ChartsheetPrivate(this))
Chartsheet::Chartsheet(const QString &name, int id, Workbook *workbook, CreateFlag flag)
:AbstractSheet(name, id, workbook, new ChartsheetPrivate(this, flag))
{
setSheetType(ST_ChartSheet);
}
@ -130,7 +130,7 @@ bool Chartsheet::loadFromXmlFile(QIODevice *device)
QString rId = reader.attributes().value(QStringLiteral("r:id")).toString();
QString name = d->relationships->getRelationshipById(rId).target;
QString path = QDir::cleanPath(splitPath(filePath())[0] + QLatin1String("/") + name);
d->drawing = QSharedPointer<Drawing>(new Drawing(this));
d->drawing = QSharedPointer<Drawing>(new Drawing(this, F_LoadFromExists));
d->drawing->setFilePath(path);
}
}

2
src/xlsx/xlsxchartsheet.h

@ -45,7 +45,7 @@ public:
private:
friend class DocumentPrivate;
friend class Workbook;
Chartsheet(const QString &sheetName, int sheetId, Workbook *book);
Chartsheet(const QString &sheetName, int sheetId, Workbook *book, CreateFlag flag);
Chartsheet *copy(const QString &distName, int distId) const;
void saveToXmlFile(QIODevice *device) const;

2
src/xlsx/xlsxchartsheet_p.h

@ -46,7 +46,7 @@ class XLSX_AUTOTEST_EXPORT ChartsheetPrivate : public AbstractSheetPrivate
{
Q_DECLARE_PUBLIC(Chartsheet)
public:
ChartsheetPrivate(Chartsheet *p);
ChartsheetPrivate(Chartsheet *p, Chartsheet::CreateFlag flag);
~ChartsheetPrivate();
Chart *chart;

3
src/xlsx/xlsxcontenttypes.cpp

@ -32,7 +32,8 @@
namespace QXlsx {
ContentTypes::ContentTypes()
ContentTypes::ContentTypes(CreateFlag flag)
:AbstractOOXmlFile(flag)
{
m_package_prefix = QStringLiteral("application/vnd.openxmlformats-package.");
m_document_prefix = QStringLiteral("application/vnd.openxmlformats-officedocument.");

2
src/xlsx/xlsxcontenttypes_p.h

@ -49,7 +49,7 @@ namespace QXlsx {
class ContentTypes : public AbstractOOXmlFile
{
public:
ContentTypes();
ContentTypes(CreateFlag flag);
void addDefault(const QString &key, const QString &value);
void addOverride(const QString &key, const QString &value);

3
src/xlsx/xlsxdocpropsapp.cpp

@ -34,7 +34,8 @@
namespace QXlsx {
DocPropsApp::DocPropsApp()
DocPropsApp::DocPropsApp(CreateFlag flag)
:AbstractOOXmlFile(flag)
{
}

2
src/xlsx/xlsxdocpropsapp_p.h

@ -50,7 +50,7 @@ namespace QXlsx {
class XLSX_AUTOTEST_EXPORT DocPropsApp : public AbstractOOXmlFile
{
public:
DocPropsApp();
DocPropsApp(CreateFlag flag);
void addPartTitle(const QString &title);
void addHeadingPair(const QString &name, int value);

3
src/xlsx/xlsxdocpropscore.cpp

@ -34,7 +34,8 @@
namespace QXlsx {
DocPropsCore::DocPropsCore()
DocPropsCore::DocPropsCore(CreateFlag flag)
:AbstractOOXmlFile(flag)
{
}

2
src/xlsx/xlsxdocpropscore_p.h

@ -48,7 +48,7 @@ namespace QXlsx {
class XLSX_AUTOTEST_EXPORT DocPropsCore : public AbstractOOXmlFile
{
public:
explicit DocPropsCore();
explicit DocPropsCore(CreateFlag flag);
bool setProperty(const QString &name, const QString &value);
QString property(const QString &name) const;

47
src/xlsx/xlsxdocument.cpp

@ -87,11 +87,16 @@ QT_BEGIN_NAMESPACE_XLSX
DocumentPrivate::DocumentPrivate(Document *p) :
q_ptr(p), defaultPackageName(QStringLiteral("Book1.xlsx"))
{
workbook = QSharedPointer<Workbook>(new Workbook);
}
void DocumentPrivate::init()
{
if (contentTypes.isNull())
contentTypes = QSharedPointer<ContentTypes>(new ContentTypes(ContentTypes::F_NewFromScratch));
if (workbook.isNull())
workbook = QSharedPointer<Workbook>(new Workbook(Workbook::F_NewFromScratch));
if (workbook->sheetCount() == 0)
workbook->addSheet();
}
@ -105,7 +110,8 @@ bool DocumentPrivate::loadPackage(QIODevice *device)
//Load the Content_Types file
if (!filePaths.contains(QLatin1String("[Content_Types].xml")))
return false;
contentTypes.loadFromXmlData(zipReader.fileData(QStringLiteral("[Content_Types].xml")));
contentTypes = QSharedPointer<ContentTypes>(new ContentTypes(ContentTypes::F_LoadFromExists));
contentTypes->loadFromXmlData(zipReader.fileData(QStringLiteral("[Content_Types].xml")));
//Load root rels file
if (!filePaths.contains(QLatin1String("_rels/.rels")))
@ -120,7 +126,7 @@ bool DocumentPrivate::loadPackage(QIODevice *device)
//In normal case, this should be "docProps/core.xml"
QString docPropsCore_Name = rels_core[0].target;
DocPropsCore props;
DocPropsCore props(DocPropsCore::F_LoadFromExists);
props.loadFromXmlData(zipReader.fileData(docPropsCore_Name));
foreach (QString name, props.propertyNames())
q->setDocumentProperty(name, props.property(name));
@ -133,7 +139,7 @@ bool DocumentPrivate::loadPackage(QIODevice *device)
//In normal case, this should be "docProps/app.xml"
QString docPropsApp_Name = rels_app[0].target;
DocPropsApp props;
DocPropsApp props(DocPropsApp::F_LoadFromExists);
props.loadFromXmlData(zipReader.fileData(docPropsApp_Name));
foreach (QString name, props.propertyNames())
q->setDocumentProperty(name, props.property(name));
@ -141,6 +147,7 @@ bool DocumentPrivate::loadPackage(QIODevice *device)
//load workbook now, Get the workbook file path from the root rels file
//In normal case, this should be "xl/workbook.xml"
workbook = QSharedPointer<Workbook>(new Workbook(Workbook::F_LoadFromExists));
QList<XlsxRelationship> rels_xl = rootRels.documentRelationships(QStringLiteral("/officeDocument"));
if (rels_xl.isEmpty())
return false;
@ -156,7 +163,7 @@ bool DocumentPrivate::loadPackage(QIODevice *device)
//In normal case this should be styles.xml which in xl
QString name = rels_styles[0].target;
QString path = xlworkbook_Dir + QLatin1String("/") + name;
QSharedPointer<Styles> styles (new Styles(true));
QSharedPointer<Styles> styles (new Styles(Styles::F_LoadFromExists));
styles->loadFromXmlData(zipReader.fileData(path));
workbook->d_func()->styles = styles;
}
@ -234,16 +241,16 @@ bool DocumentPrivate::savePackage(QIODevice *device) const
if (zipWriter.error())
return false;
contentTypes.clearOverrides();
contentTypes->clearOverrides();
DocPropsApp docPropsApp;
DocPropsCore docPropsCore;
DocPropsApp docPropsApp(DocPropsApp::F_NewFromScratch);
DocPropsCore docPropsCore(DocPropsCore::F_NewFromScratch);
// save sheet xml files
for (int i=0; i<workbook->sheetCount(); ++i) {
AbstractSheet *sheet = workbook->sheet(i);
if (sheet->sheetType() == AbstractSheet::ST_WorkSheet) {
contentTypes.addWorksheetName(QStringLiteral("sheet%1").arg(i+1));
contentTypes->addWorksheetName(QStringLiteral("sheet%1").arg(i+1));
docPropsApp.addPartTitle(sheet->sheetName());
zipWriter.addFile(QStringLiteral("xl/worksheets/sheet%1.xml").arg(i+1), sheet->saveToXmlData());
@ -256,7 +263,7 @@ bool DocumentPrivate::savePackage(QIODevice *device) const
// save external links xml files
for (int i=0; i<workbook->d_func()->externalLinks.count(); ++i) {
SimpleOOXmlFile *link = workbook->d_func()->externalLinks[i].data();
contentTypes.addExternalLinkName(QStringLiteral("externalLink%1").arg(i+1));
contentTypes->addExternalLinkName(QStringLiteral("externalLink%1").arg(i+1));
zipWriter.addFile(QStringLiteral("xl/externalLinks/externalLink%1.xml").arg(i+1), link->saveToXmlData());
Relationships *rel = link->relationships();
@ -265,13 +272,13 @@ bool DocumentPrivate::savePackage(QIODevice *device) const
}
// save workbook xml file
contentTypes.addWorkbook();
contentTypes->addWorkbook();
zipWriter.addFile(QStringLiteral("xl/workbook.xml"), workbook->saveToXmlData());
zipWriter.addFile(QStringLiteral("xl/_rels/workbook.xml.rels"), workbook->relationships()->saveToXmlData());
// save drawing xml files
for (int i=0; i<workbook->drawings().size(); ++i) {
contentTypes.addDrawingName(QStringLiteral("drawing%1").arg(i+1));
contentTypes->addDrawingName(QStringLiteral("drawing%1").arg(i+1));
Drawing *drawing = workbook->drawings()[i];
zipWriter.addFile(QStringLiteral("xl/drawings/drawing%1.xml").arg(i+1), drawing->saveToXmlData());
@ -286,28 +293,28 @@ bool DocumentPrivate::savePackage(QIODevice *device) const
}
if (workbook->sheetCount())
docPropsApp.addHeadingPair(QStringLiteral("Worksheets"), workbook->sheetCount());
contentTypes.addDocPropApp();
contentTypes.addDocPropCore();
contentTypes->addDocPropApp();
contentTypes->addDocPropCore();
zipWriter.addFile(QStringLiteral("docProps/app.xml"), docPropsApp.saveToXmlData());
zipWriter.addFile(QStringLiteral("docProps/core.xml"), docPropsCore.saveToXmlData());
// save sharedStrings xml file
if (!workbook->sharedStrings()->isEmpty()) {
contentTypes.addSharedString();
contentTypes->addSharedString();
zipWriter.addFile(QStringLiteral("xl/sharedStrings.xml"), workbook->sharedStrings()->saveToXmlData());
}
// save styles xml file
contentTypes.addStyles();
contentTypes->addStyles();
zipWriter.addFile(QStringLiteral("xl/styles.xml"), workbook->styles()->saveToXmlData());
// save theme xml file
contentTypes.addTheme();
contentTypes->addTheme();
zipWriter.addFile(QStringLiteral("xl/theme/theme1.xml"), workbook->theme()->saveToXmlData());
// save chart xml files
for (int i=0; i<workbook->chartFiles().size(); ++i) {
contentTypes.addChartName(QStringLiteral("chart%1").arg(i+1));
contentTypes->addChartName(QStringLiteral("chart%1").arg(i+1));
QSharedPointer<Chart> cf = workbook->chartFiles()[i];
zipWriter.addFile(QStringLiteral("xl/charts/chart%1.xml").arg(i+1), cf->saveToXmlData());
}
@ -316,7 +323,7 @@ bool DocumentPrivate::savePackage(QIODevice *device) const
for (int i=0; i<workbook->mediaFiles().size(); ++i) {
QSharedPointer<MediaFile> mf = workbook->mediaFiles()[i];
if (!mf->mimeType().isEmpty())
contentTypes.addDefault(mf->suffix(), mf->mimeType());
contentTypes->addDefault(mf->suffix(), mf->mimeType());
zipWriter.addFile(QStringLiteral("xl/media/image%1.%2").arg(i+1).arg(mf->suffix()), mf->contents());
}
@ -329,7 +336,7 @@ bool DocumentPrivate::savePackage(QIODevice *device) const
zipWriter.addFile(QStringLiteral("_rels/.rels"), rootrels.saveToXmlData());
// save content types xml file
zipWriter.addFile(QStringLiteral("[Content_Types].xml"), contentTypes.saveToXmlData());
zipWriter.addFile(QStringLiteral("[Content_Types].xml"), contentTypes->saveToXmlData());
zipWriter.close();
return true;

2
src/xlsx/xlsxdocument_p.h

@ -61,7 +61,7 @@ public:
QMap<QString, QString> documentProperties; //core, app and custom properties
QSharedPointer<Workbook> workbook;
mutable ContentTypes contentTypes;
QSharedPointer<ContentTypes> contentTypes;
};
}

4
src/xlsx/xlsxdrawing.cpp

@ -33,8 +33,8 @@
namespace QXlsx {
Drawing::Drawing(AbstractSheet *sheet)
:sheet(sheet)
Drawing::Drawing(AbstractSheet *sheet, CreateFlag flag)
:AbstractOOXmlFile(flag), sheet(sheet)
{
workbook = sheet->workbook();
}

2
src/xlsx/xlsxdrawing_p.h

@ -57,7 +57,7 @@ class MediaFile;
class Drawing : public AbstractOOXmlFile
{
public:
Drawing(AbstractSheet *sheet);
Drawing(AbstractSheet *sheet, CreateFlag flag);
~Drawing();
void saveToXmlFile(QIODevice *device) const;
bool loadFromXmlFile(QIODevice *device);

2
src/xlsx/xlsxdrawinganchor.cpp

@ -206,7 +206,7 @@ void DrawingAnchor::loadXmlObjectGraphicFrame(QXmlStreamReader &reader)
}
}
if (!exist) {
m_chartFile = QSharedPointer<Chart> (new Chart(m_drawing->sheet));
m_chartFile = QSharedPointer<Chart> (new Chart(m_drawing->sheet, Chart::F_LoadFromExists));
m_chartFile->setFilePath(path);
m_drawing->workbook->addChartFile(m_chartFile);
}

3
src/xlsx/xlsxsharedstrings.cpp

@ -37,7 +37,8 @@
namespace QXlsx {
SharedStrings::SharedStrings()
SharedStrings::SharedStrings(CreateFlag flag)
:AbstractOOXmlFile(flag)
{
m_stringCount = 0;
}

2
src/xlsx/xlsxsharedstrings_p.h

@ -64,7 +64,7 @@ public:
class XLSX_AUTOTEST_EXPORT SharedStrings : public AbstractOOXmlFile
{
public:
SharedStrings();
SharedStrings(CreateFlag flag);
int count() const;
bool isEmpty() const;

3
src/xlsx/xlsxsimpleooxmlfile.cpp

@ -26,7 +26,8 @@
#include <QIODevice>
namespace QXlsx {
SimpleOOXmlFile::SimpleOOXmlFile()
SimpleOOXmlFile::SimpleOOXmlFile(CreateFlag flag)
:AbstractOOXmlFile(flag)
{
}

2
src/xlsx/xlsxsimpleooxmlfile_p.h

@ -45,7 +45,7 @@ namespace QXlsx {
class SimpleOOXmlFile : public AbstractOOXmlFile
{
public:
SimpleOOXmlFile();
SimpleOOXmlFile(CreateFlag flag);
void saveToXmlFile(QIODevice *device) const;
QByteArray saveToXmlData() const;

6
src/xlsx/xlsxstyles.cpp

@ -41,12 +41,12 @@ namespace QXlsx {
otherwise, default formats should be added.
*/
Styles::Styles(bool createEmpty)
: m_nextCustomNumFmtId(176), m_emptyFormatAdded(false)
Styles::Styles(CreateFlag flag)
: AbstractOOXmlFile(flag), m_nextCustomNumFmtId(176), m_emptyFormatAdded(false)
{
//!Fix me. Should the custom num fmt Id starts with 164 or 176 or others??
if (!createEmpty) {
if (flag == F_NewFromScratch) {
//Add default Format
Format defaultFmt;
addXfFormat(defaultFmt);

2
src/xlsx/xlsxstyles_p.h

@ -67,7 +67,7 @@ struct XlsxFormatNumberData
class XLSX_AUTOTEST_EXPORT Styles : public AbstractOOXmlFile
{
public:
Styles(bool createEmpty=false);
Styles(CreateFlag flag);
~Styles();
void addXfFormat(const Format &format, bool force=false);
Format xfFormat(int idx) const;

3
src/xlsx/xlsxtheme.cpp

@ -201,7 +201,8 @@ const char *defaultXmlData =
"</a:theme>"
;
Theme::Theme()
Theme::Theme(CreateFlag flag)
:AbstractOOXmlFile(flag)
{
}

2
src/xlsx/xlsxtheme_p.h

@ -45,7 +45,7 @@ namespace QXlsx {
class Theme : public AbstractOOXmlFile
{
public:
Theme();
Theme(CreateFlag flag);
void saveToXmlFile(QIODevice *device) const;
QByteArray saveToXmlData() const;

20
src/xlsx/xlsxworkbook.cpp

@ -41,12 +41,12 @@
QT_BEGIN_NAMESPACE_XLSX
WorkbookPrivate::WorkbookPrivate(Workbook *q) :
AbstractOOXmlFilePrivate(q)
WorkbookPrivate::WorkbookPrivate(Workbook *q, Workbook::CreateFlag flag) :
AbstractOOXmlFilePrivate(q, flag)
{
sharedStrings = QSharedPointer<SharedStrings> (new SharedStrings);
styles = QSharedPointer<Styles>(new Styles);
theme = QSharedPointer<Theme>(new Theme);
sharedStrings = QSharedPointer<SharedStrings> (new SharedStrings(flag));
styles = QSharedPointer<Styles>(new Styles(flag));
theme = QSharedPointer<Theme>(new Theme(flag));
x_window = 240;
y_window = 15;
@ -65,8 +65,8 @@ WorkbookPrivate::WorkbookPrivate(Workbook *q) :
last_sheet_id = 0;
}
Workbook::Workbook()
: AbstractOOXmlFile(new WorkbookPrivate(this))
Workbook::Workbook(CreateFlag flag)
: AbstractOOXmlFile(new WorkbookPrivate(this, flag))
{
}
@ -196,7 +196,7 @@ AbstractSheet *Workbook::addSheet(const QString &name, int sheetId, AbstractShee
if (sheetId > d->last_sheet_id)
d->last_sheet_id = sheetId;
Worksheet *sheet = new Worksheet(name, sheetId, this);
Worksheet *sheet = new Worksheet(name, sheetId, this, F_LoadFromExists);
d->sheets.append(QSharedPointer<Worksheet>(sheet));
d->sheetNames.append(name);
return sheet;
@ -218,7 +218,7 @@ AbstractSheet *Workbook::insertSheet(int index, const QString &name, AbstractShe
}
++d->last_sheet_id;
Worksheet *sheet = new Worksheet(worksheetName, d->last_sheet_id, this);
Worksheet *sheet = new Worksheet(worksheetName, d->last_sheet_id, this, F_NewFromScratch);
d->sheets.insert(index, QSharedPointer<Worksheet>(sheet));
d->sheetNames.insert(index, worksheetName);
d->activesheetIndex = index;
@ -545,7 +545,7 @@ bool Workbook::loadFromXmlFile(QIODevice *device)
const QString rId = attributes.value(QLatin1String("r:id")).toString();
XlsxRelationship relationship = d->relationships->getRelationshipById(rId);
QSharedPointer<SimpleOOXmlFile> link(new SimpleOOXmlFile);
QSharedPointer<SimpleOOXmlFile> link(new SimpleOOXmlFile(F_LoadFromExists));
const QString fullPath = QDir::cleanPath(splitPath(filePath())[0] +QLatin1String("/")+ relationship.target);
link->setFilePath(fullPath);
d->externalLinks.append(link);

2
src/xlsx/xlsxworkbook.h

@ -92,7 +92,7 @@ private:
friend class Document;
friend class DocumentPrivate;
Workbook();
Workbook(Workbook::CreateFlag flag);
void saveToXmlFile(QIODevice *device) const;
bool loadFromXmlFile(QIODevice *device);

2
src/xlsx/xlsxworkbook_p.h

@ -69,7 +69,7 @@ class WorkbookPrivate : public AbstractOOXmlFilePrivate
{
Q_DECLARE_PUBLIC(Workbook)
public:
WorkbookPrivate(Workbook *q);
WorkbookPrivate(Workbook *q, Workbook::CreateFlag flag);
QSharedPointer<SharedStrings> sharedStrings;
QList<QSharedPointer<AbstractSheet> > sheets;

20
src/xlsx/xlsxworksheet.cpp

@ -56,8 +56,8 @@
QT_BEGIN_NAMESPACE_XLSX
WorksheetPrivate::WorksheetPrivate(Worksheet *p)
: AbstractSheetPrivate(p)
WorksheetPrivate::WorksheetPrivate(Worksheet *p, Worksheet::CreateFlag flag)
: AbstractSheetPrivate(p, flag)
, windowProtection(false), showFormulas(false), showGridLines(true), showRowColHeaders(true)
, showZeros(true), rightToLeft(false), tabSelected(false), showRuler(false)
, showOutlineSymbols(true), showWhiteSpace(true)
@ -171,11 +171,11 @@ int WorksheetPrivate::checkDimensions(int row, int col, bool ignore_row, bool ig
/*!
* \internal
*/
Worksheet::Worksheet(const QString &name, int id, Workbook *workbook)
:AbstractSheet(name, id, workbook, new WorksheetPrivate(this))
Worksheet::Worksheet(const QString &name, int id, Workbook *workbook, CreateFlag flag)
:AbstractSheet(name, id, workbook, new WorksheetPrivate(this, flag))
{
if (!workbook) //For unit test propose only. Ignore the memery leak.
d_func()->workbook = new Workbook;
d_func()->workbook = new Workbook(flag);
}
/*!
@ -187,7 +187,7 @@ Worksheet::Worksheet(const QString &name, int id, Workbook *workbook)
Worksheet *Worksheet::copy(const QString &distName, int distId) const
{
Q_D(const Worksheet);
Worksheet *sheet = new Worksheet(distName, distId, d->workbook);
Worksheet *sheet = new Worksheet(distName, distId, d->workbook, F_NewFromScratch);
WorksheetPrivate *sheet_d = sheet->d_func();
sheet_d->dimension = d->dimension;
@ -1028,7 +1028,7 @@ bool Worksheet::insertImage(int row, int column, const QImage &image)
return false;
if (!d->drawing)
d->drawing = QSharedPointer<Drawing>(new Drawing(this));
d->drawing = QSharedPointer<Drawing>(new Drawing(this, F_NewFromScratch));
DrawingOneCellAnchor *anchor = new DrawingOneCellAnchor(d->drawing.data(), DrawingAnchor::Picture);
@ -1054,7 +1054,7 @@ Chart *Worksheet::insertChart(int row, int column, const QSize &size)
Q_D(Worksheet);
if (!d->drawing)
d->drawing = QSharedPointer<Drawing>(new Drawing(this));
d->drawing = QSharedPointer<Drawing>(new Drawing(this, F_NewFromScratch));
DrawingOneCellAnchor *anchor = new DrawingOneCellAnchor(d->drawing.data(), DrawingAnchor::Picture);
@ -1066,7 +1066,7 @@ Chart *Worksheet::insertChart(int row, int column, const QSize &size)
anchor->from = XlsxMarker(row, column, 0, 0);
anchor->ext = size * 9525;
QSharedPointer<Chart> chart = QSharedPointer<Chart>(new Chart(this));
QSharedPointer<Chart> chart = QSharedPointer<Chart>(new Chart(this, F_NewFromScratch));
anchor->setObjectGraphicFrame(chart);
return chart.data();
@ -2116,7 +2116,7 @@ bool Worksheet::loadFromXmlFile(QIODevice *device)
QString rId = reader.attributes().value(QStringLiteral("r:id")).toString();
QString name = d->relationships->getRelationshipById(rId).target;
QString path = QDir::cleanPath(splitPath(filePath())[0] + QLatin1String("/") + name);
d->drawing = QSharedPointer<Drawing>(new Drawing(this));
d->drawing = QSharedPointer<Drawing>(new Drawing(this, F_LoadFromExists));
d->drawing->setFilePath(path);
}
}

2
src/xlsx/xlsxworksheet.h

@ -133,7 +133,7 @@ private:
friend class DocumentPrivate;
friend class Workbook;
friend class ::WorksheetTest;
Worksheet(const QString &sheetName, int sheetId, Workbook *book);
Worksheet(const QString &sheetName, int sheetId, Workbook *book, CreateFlag flag);
Worksheet *copy(const QString &distName, int distId) const;
void saveToXmlFile(QIODevice *device) const;

2
src/xlsx/xlsxworksheet_p.h

@ -115,7 +115,7 @@ class XLSX_AUTOTEST_EXPORT WorksheetPrivate : public AbstractSheetPrivate
{
Q_DECLARE_PUBLIC(Worksheet)
public:
WorksheetPrivate(Worksheet *p);
WorksheetPrivate(Worksheet *p, Worksheet::CreateFlag flag);
~WorksheetPrivate();
int checkDimensions(int row, int col, bool ignore_row=false, bool ignore_col=false);
Format cellFormat(int row, int col) const;

4
tests/auto/propsapp/tst_docpropsapptest.cpp

@ -20,7 +20,7 @@ DocPropsAppTest::DocPropsAppTest()
void DocPropsAppTest::testCase1()
{
QXlsx::DocPropsApp props;
QXlsx::DocPropsApp props(QXlsx::DocPropsApp::F_NewFromScratch);
props.setProperty("company", "HMI CN");
props.setProperty("manager", "Debao");
@ -31,7 +31,7 @@ void DocPropsAppTest::testCase1()
f1.close();
f1.open(QFile::ReadOnly);
QXlsx::DocPropsApp props2;
QXlsx::DocPropsApp props2(QXlsx::DocPropsApp::F_LoadFromExists);
props2.loadFromXmlFile(&f1);
QCOMPARE(props2.property("company"), QString("HMI CN"));

4
tests/auto/propscore/tst_propscoretest.cpp

@ -20,7 +20,7 @@ DocPropsCoreTest::DocPropsCoreTest()
void DocPropsCoreTest::testCase1()
{
QXlsx::DocPropsCore props;
QXlsx::DocPropsCore props(QXlsx::DocPropsCore::F_NewFromScratch);
props.setProperty("creator", "Debao");
props.setProperty("keywords", "Test, test, TEST");
@ -32,7 +32,7 @@ void DocPropsCoreTest::testCase1()
f1.close();
f1.open(QFile::ReadOnly);
QXlsx::DocPropsCore props2;
QXlsx::DocPropsCore props2(QXlsx::DocPropsCore::F_LoadFromExists);
props2.loadFromXmlFile(&f1);
QCOMPARE(props2.property("creator"), QString("Debao"));

10
tests/auto/sharedstrings/tst_sharedstringstest.cpp

@ -27,7 +27,7 @@ SharedStringsTest::SharedStringsTest()
void SharedStringsTest::testAddSharedString()
{
QXlsx::SharedStrings sst;
QXlsx::SharedStrings sst(QXlsx::SharedStrings::F_NewFromScratch);
sst.addSharedString("Hello Qt!");
sst.addSharedString("Xlsx Writer");
@ -68,7 +68,7 @@ void SharedStringsTest::testAddSharedString()
void SharedStringsTest::testRemoveSharedString()
{
QXlsx::SharedStrings sst;
QXlsx::SharedStrings sst(QXlsx::SharedStrings::F_NewFromScratch);
sst.addSharedString("Hello Qt!");
sst.addSharedString("Xlsx Writer");
sst.addSharedString("Hello World");
@ -101,7 +101,7 @@ void SharedStringsTest::testRemoveSharedString()
void SharedStringsTest::testLoadXmlData()
{
QXlsx::SharedStrings sst;
QXlsx::SharedStrings sst(QXlsx::SharedStrings::F_NewFromScratch);
sst.addSharedString("Hello Qt!");
sst.addSharedString("Xlsx Writer");
@ -119,7 +119,7 @@ void SharedStringsTest::testLoadXmlData()
sst.addSharedString("Hello Qt!");
QByteArray xmlData = sst.saveToXmlData();
QSharedPointer<QXlsx::SharedStrings> sst2(new QXlsx::SharedStrings);
QSharedPointer<QXlsx::SharedStrings> sst2(new QXlsx::SharedStrings(QXlsx::SharedStrings::F_LoadFromExists));
sst2->loadFromXmlData(xmlData);
QCOMPARE(sst2->getSharedString(0).toPlainString(), QStringLiteral("Hello Qt!"));
@ -147,7 +147,7 @@ void SharedStringsTest::testLoadRichStringXmlData()
"</si>"
"</sst>";
QSharedPointer<QXlsx::SharedStrings> sst(new QXlsx::SharedStrings);
QSharedPointer<QXlsx::SharedStrings> sst(new QXlsx::SharedStrings(QXlsx::SharedStrings::F_LoadFromExists));
sst->loadFromXmlData(xmlData);
QXlsx::RichString rs = sst->getSharedString(0);
QVERIFY(rs.fragmentText(0) == "e=mc");

18
tests/auto/styles/tst_stylestest.cpp

@ -32,7 +32,7 @@ StylesTest::StylesTest()
void StylesTest::testEmptyStyle()
{
QXlsx::Styles styles;
QXlsx::Styles styles(QXlsx::Styles::F_NewFromScratch);
QByteArray xmlData = styles.saveToXmlData();
QVERIFY2(xmlData.contains("<cellXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/></cellXfs>"), "Must have one cell style");
@ -41,7 +41,7 @@ void StylesTest::testEmptyStyle()
void StylesTest::testAddXfFormat()
{
QXlsx::Styles styles;
QXlsx::Styles styles(QXlsx::Styles::F_NewFromScratch);
for (int i=0; i<10; ++i) {
QXlsx::Format format;
@ -55,7 +55,7 @@ void StylesTest::testAddXfFormat()
void StylesTest::testAddXfFormat2()
{
QXlsx::Styles styles;
QXlsx::Styles styles(QXlsx::Styles::F_NewFromScratch);
QXlsx::Format format;
format.setNumberFormat("h:mm:ss AM/PM"); //builtin 19
@ -73,7 +73,7 @@ void StylesTest::testAddXfFormat2()
// For a solid fill, Excel reverses the role of foreground and background colours
void StylesTest::testSolidFillBackgroundColor()
{
QXlsx::Styles styles;
QXlsx::Styles styles(QXlsx::Styles::F_NewFromScratch);
QXlsx::Format format;
format.setPatternBackgroundColor(QColor(Qt::red));
styles.addXfFormat(format);
@ -85,7 +85,7 @@ void StylesTest::testSolidFillBackgroundColor()
void StylesTest::testWriteBorders()
{
QXlsx::Styles styles;
QXlsx::Styles styles(QXlsx::Styles::F_NewFromScratch);
QXlsx::Format format;
format.setRightBorderStyle(QXlsx::Format::BorderThin);
styles.addXfFormat(format);
@ -103,7 +103,7 @@ void StylesTest::testReadFonts()
"<font><sz val=\"15\"/><color rgb=\"FFff0000\"/><name val=\"Calibri\"/><family val=\"2\"/><scheme val=\"minor\"/></font>"
"<font><b/><u val=\"double\"/><sz val=\"11\"/><name val=\"Calibri\"/><family val=\"2\"/><scheme val=\"minor\"/></font>"
"</fonts>";
QXlsx::Styles styles(true);
QXlsx::Styles styles(QXlsx::Styles::F_LoadFromExists);
QXmlStreamReader reader(xmlData);
reader.readNextStartElement();//So current node is fonts
styles.readFonts(reader);
@ -122,7 +122,7 @@ void StylesTest::testReadFills()
"<fill><patternFill patternType=\"lightUp\"/></fill>"
"<fill><patternFill patternType=\"solid\"><fgColor rgb=\"FFa0a0a4\"/></patternFill></fill>"
"</fills>";
QXlsx::Styles styles(true);
QXlsx::Styles styles(QXlsx::Styles::F_LoadFromExists);
QXmlStreamReader reader(xmlData);
reader.readNextStartElement();//So current node is fills
styles.readFills(reader);
@ -139,7 +139,7 @@ void StylesTest::testReadBorders()
"<border><left style=\"dashDotDot\"><color auto=\"1\"/></left><right style=\"dashDotDot\"><color auto=\"1\"/></right><top style=\"dashDotDot\"><color auto=\"1\"/></top><bottom style=\"dashDotDot\"><color auto=\"1\"/></bottom><diagonal/></border>"
"</borders>";
QXlsx::Styles styles(true);
QXlsx::Styles styles(QXlsx::Styles::F_LoadFromExists);
QXmlStreamReader reader(xmlData);
reader.readNextStartElement();//So current node is borders
styles.readBorders(reader);
@ -154,7 +154,7 @@ void StylesTest::testReadNumFmts()
"<numFmt numFmtId=\"165\" formatCode=\"dd/mm/yyyy\"/>"
"</numFmts>";
QXlsx::Styles styles(true);
QXlsx::Styles styles(QXlsx::Styles::F_LoadFromExists);
QXmlStreamReader reader(xmlData);
reader.readNextStartElement();//So current node is numFmts
styles.readNumFmts(reader);

28
tests/auto/worksheet/tst_worksheet.cpp

@ -42,7 +42,7 @@ WorksheetTest::WorksheetTest()
void WorksheetTest::testEmptySheet()
{
QXlsx::Worksheet sheet("", 1, 0);
QXlsx::Worksheet sheet("", 1, 0, QXlsx::Worksheet::F_NewFromScratch);
sheet.write("B1", 123);
QByteArray xmldata = sheet.saveToXmlData();
@ -51,7 +51,7 @@ void WorksheetTest::testEmptySheet()
void WorksheetTest::testDimension()
{
QXlsx::Worksheet sheet("", 1, 0);
QXlsx::Worksheet sheet("", 1, 0, QXlsx::Worksheet::F_NewFromScratch);
QCOMPARE(sheet.dimension(), QXlsx::CellRange()); //Default
sheet.write("C3", "Test");
@ -70,7 +70,7 @@ void WorksheetTest::testDimension()
void WorksheetTest::testSheetView()
{
QXlsx::Worksheet sheet("", 1, 0);
QXlsx::Worksheet sheet("", 1, 0, QXlsx::Worksheet::F_NewFromScratch);
sheet.setGridLinesVisible(false);
sheet.setWindowProtected(true);
QByteArray xmldata = sheet.saveToXmlData();
@ -81,7 +81,7 @@ void WorksheetTest::testSheetView()
void WorksheetTest::testSetColumn()
{
QXlsx::Worksheet sheet("", 1, 0);
QXlsx::Worksheet sheet("", 1, 0, QXlsx::Worksheet::F_NewFromScratch);
sheet.setColumn(1, 11, 20.0); //"A:K"
sheet.setColumn(4, 8, 10.0); //"D:H"
sheet.setColumn(6, 6, 15.0); //"F:F"
@ -100,7 +100,7 @@ void WorksheetTest::testSetColumn()
void WorksheetTest::testWriteCells()
{
QXlsx::Worksheet sheet("", 1, 0);
QXlsx::Worksheet sheet("", 1, 0, QXlsx::Worksheet::F_NewFromScratch);
sheet.write("A1", 123);
sheet.write("A2", "Hello");
sheet.writeInlineString(3, 1, "Hello inline"); //A3
@ -122,7 +122,7 @@ void WorksheetTest::testWriteCells()
void WorksheetTest::testWriteHyperlinks()
{
QXlsx::Worksheet sheet("", 1, 0);
QXlsx::Worksheet sheet("", 1, 0, QXlsx::Worksheet::F_NewFromScratch);
sheet.write("A1", QUrl::fromUserInput("http://qt-project.org"));
sheet.write("B1", QUrl::fromUserInput("http://qt-project.org/abc"));
sheet.write("C1", QUrl::fromUserInput("http://qt-project.org/abc.html#test"));
@ -146,7 +146,7 @@ void WorksheetTest::testWriteHyperlinks()
void WorksheetTest::testWriteDataValidations()
{
QXlsx::Worksheet sheet("", 1, 0);
QXlsx::Worksheet sheet("", 1, 0, QXlsx::Worksheet::F_NewFromScratch);
QXlsx::DataValidation validation(QXlsx::DataValidation::Whole);
validation.setFormula1("10");
validation.setFormula2("100");
@ -160,7 +160,7 @@ void WorksheetTest::testWriteDataValidations()
void WorksheetTest::testMerge()
{
QXlsx::Worksheet sheet("", 1, 0);
QXlsx::Worksheet sheet("", 1, 0, QXlsx::Worksheet::F_NewFromScratch);
sheet.write("B1", 123);
sheet.mergeCells("B1:B5");
QByteArray xmldata = sheet.saveToXmlData();
@ -170,7 +170,7 @@ void WorksheetTest::testMerge()
void WorksheetTest::testUnMerge()
{
QXlsx::Worksheet sheet("", 1, 0);
QXlsx::Worksheet sheet("", 1, 0, QXlsx::Worksheet::F_NewFromScratch);
sheet.write("B1", 123);
sheet.mergeCells("B1:B5");
sheet.unmergeCells("B1:B5");
@ -197,7 +197,7 @@ void WorksheetTest::testReadSheetData()
QXmlStreamReader reader(xmlData);
reader.readNextStartElement();//current node is sheetData
QXlsx::Worksheet sheet("", 1, 0);
QXlsx::Worksheet sheet("", 1, 0, QXlsx::Worksheet::F_LoadFromExists);
sheet.d_func()->sharedStrings()->addSharedString("Hello");
sheet.d_func()->loadXmlSheetData(reader);
@ -238,7 +238,7 @@ void WorksheetTest::testReadColsInfo()
QXmlStreamReader reader(xmlData);
reader.readNextStartElement();//current node is cols
QXlsx::Worksheet sheet("", 1, 0);
QXlsx::Worksheet sheet("", 1, 0, QXlsx::Worksheet::F_LoadFromExists);
sheet.d_func()->loadXmlColumnsInfo(reader);
QCOMPARE(sheet.d_func()->colsInfo.size(), 1);
@ -258,7 +258,7 @@ void WorksheetTest::testReadRowsInfo()
QXmlStreamReader reader(xmlData);
reader.readNextStartElement();//current node is sheetData
QXlsx::Worksheet sheet("", 1, 0);
QXlsx::Worksheet sheet("", 1, 0, QXlsx::Worksheet::F_LoadFromExists);
sheet.d_func()->loadXmlSheetData(reader);
QCOMPARE(sheet.d_func()->rowsInfo.size(), 1);
@ -272,7 +272,7 @@ void WorksheetTest::testReadMergeCells()
QXmlStreamReader reader(xmlData);
reader.readNextStartElement();//current node is mergeCells
QXlsx::Worksheet sheet("", 1, 0);
QXlsx::Worksheet sheet("", 1, 0, QXlsx::Worksheet::F_LoadFromExists);
sheet.d_func()->loadXmlMergeCells(reader);
QCOMPARE(sheet.d_func()->merges.size(), 2);
@ -289,7 +289,7 @@ void WorksheetTest::testReadDataValidations()
QXmlStreamReader reader(xmlData);
reader.readNextStartElement();//current node is dataValidations
QXlsx::Worksheet sheet("", 1, 0);
QXlsx::Worksheet sheet("", 1, 0, QXlsx::Worksheet::F_LoadFromExists);
sheet.d_func()->loadXmlDataValidations(reader);
QCOMPARE(sheet.d_func()->dataValidationsList.size(), 2);

Loading…
Cancel
Save