Introduce CreateFlag for all the ooxmlfile

This commit is contained in:
Debao Zhang
2014-02-27 14:07:38 +08:00
parent 12129cebdc
commit 34c645ed76
41 changed files with 140 additions and 119 deletions
+4 -4
View File
@@ -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))
{
}
+8 -1
View File
@@ -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;
+2 -1
View File
@@ -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;
};
+2 -2
View File
@@ -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;
+1 -1
View File
@@ -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;
+4 -4
View File
@@ -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;
}
+1 -1
View File
@@ -80,7 +80,7 @@ private:
friend class Chartsheet;
friend class DrawingAnchor;
Chart(AbstractSheet *parent);
Chart(AbstractSheet *parent, CreateFlag flag);
};
QT_END_NAMESPACE_XLSX
+1 -1
View File
@@ -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);
+5 -5
View File
@@ -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);
}
}
+1 -1
View File
@@ -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;
+1 -1
View File
@@ -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;
+2 -1
View File
@@ -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.");
+1 -1
View File
@@ -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);
+2 -1
View File
@@ -34,7 +34,8 @@
namespace QXlsx {
DocPropsApp::DocPropsApp()
DocPropsApp::DocPropsApp(CreateFlag flag)
:AbstractOOXmlFile(flag)
{
}
+1 -1
View File
@@ -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);
+2 -1
View File
@@ -34,7 +34,8 @@
namespace QXlsx {
DocPropsCore::DocPropsCore()
DocPropsCore::DocPropsCore(CreateFlag flag)
:AbstractOOXmlFile(flag)
{
}
+1 -1
View File
@@ -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;
+27 -20
View File
@@ -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;
+1 -1
View File
@@ -61,7 +61,7 @@ public:
QMap<QString, QString> documentProperties; //core, app and custom properties
QSharedPointer<Workbook> workbook;
mutable ContentTypes contentTypes;
QSharedPointer<ContentTypes> contentTypes;
};
}
+2 -2
View File
@@ -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();
}
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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);
}
+2 -1
View File
@@ -37,7 +37,8 @@
namespace QXlsx {
SharedStrings::SharedStrings()
SharedStrings::SharedStrings(CreateFlag flag)
:AbstractOOXmlFile(flag)
{
m_stringCount = 0;
}
+1 -1
View File
@@ -64,7 +64,7 @@ public:
class XLSX_AUTOTEST_EXPORT SharedStrings : public AbstractOOXmlFile
{
public:
SharedStrings();
SharedStrings(CreateFlag flag);
int count() const;
bool isEmpty() const;
+2 -1
View File
@@ -26,7 +26,8 @@
#include <QIODevice>
namespace QXlsx {
SimpleOOXmlFile::SimpleOOXmlFile()
SimpleOOXmlFile::SimpleOOXmlFile(CreateFlag flag)
:AbstractOOXmlFile(flag)
{
}
+1 -1
View File
@@ -45,7 +45,7 @@ namespace QXlsx {
class SimpleOOXmlFile : public AbstractOOXmlFile
{
public:
SimpleOOXmlFile();
SimpleOOXmlFile(CreateFlag flag);
void saveToXmlFile(QIODevice *device) const;
QByteArray saveToXmlData() const;
+3 -3
View File
@@ -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);
+1 -1
View File
@@ -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;
+2 -1
View File
@@ -201,7 +201,8 @@ const char *defaultXmlData =
"</a:theme>"
;
Theme::Theme()
Theme::Theme(CreateFlag flag)
:AbstractOOXmlFile(flag)
{
}
+1 -1
View File
@@ -45,7 +45,7 @@ namespace QXlsx {
class Theme : public AbstractOOXmlFile
{
public:
Theme();
Theme(CreateFlag flag);
void saveToXmlFile(QIODevice *device) const;
QByteArray saveToXmlData() const;
+10 -10
View File
@@ -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);
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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;
+10 -10
View File
@@ -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);
}
}
+1 -1
View File
@@ -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;
+1 -1
View File
@@ -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;
+2 -2
View File
@@ -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"));
+2 -2
View File
@@ -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"));
@@ -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");
+9 -9
View File
@@ -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);
+14 -14
View File
@@ -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);