Code refactoring: Remove magic things for ContentTypes

This commit is contained in:
Debao Zhang
2014-01-11 23:26:46 +08:00
parent 945870596f
commit 86046c48dc
4 changed files with 46 additions and 16 deletions
+25 -12
View File
@@ -39,12 +39,6 @@ ContentTypes::ContentTypes()
m_defaults.insert(QStringLiteral("rels"), m_package_prefix + QStringLiteral("relationships+xml"));
m_defaults.insert(QStringLiteral("xml"), QStringLiteral("application/xml"));
m_overrides.insert(QStringLiteral("/docProps/app.xml"), m_document_prefix + QStringLiteral("extended-properties+xml"));
m_overrides.insert(QStringLiteral("/docProps/core.xml"), m_package_prefix + QStringLiteral("core-properties+xml"));
m_overrides.insert(QStringLiteral("/xl/styles.xml"), m_document_prefix + QStringLiteral("spreadsheetml.styles+xml"));
m_overrides.insert(QStringLiteral("/xl/theme/theme1.xml"), m_document_prefix + QStringLiteral("theme+xml"));
m_overrides.insert(QStringLiteral("/xl/workbook.xml"), m_document_prefix + QStringLiteral("spreadsheetml.sheet.main+xml"));
}
void ContentTypes::addDefault(const QString &key, const QString &value)
@@ -57,6 +51,31 @@ void ContentTypes::addOverride(const QString &key, const QString &value)
m_overrides.insert(key, value);
}
void ContentTypes::addDocPropApp()
{
addOverride(QStringLiteral("/docProps/app.xml"), m_document_prefix + QStringLiteral("extended-properties+xml"));
}
void ContentTypes::addDocPropCore()
{
addOverride(QStringLiteral("/docProps/core.xml"), m_package_prefix + QStringLiteral("core-properties+xml"));
}
void ContentTypes::addStyles()
{
addOverride(QStringLiteral("/xl/styles.xml"), m_document_prefix + QStringLiteral("spreadsheetml.styles+xml"));
}
void ContentTypes::addTheme()
{
addOverride(QStringLiteral("/xl/theme/theme1.xml"), m_document_prefix + QStringLiteral("theme+xml"));
}
void ContentTypes::addWorkbook()
{
addOverride(QStringLiteral("/xl/workbook.xml"), m_document_prefix + QStringLiteral("spreadsheetml.sheet.main+xml"));
}
void ContentTypes::addWorksheetName(const QString &name)
{
addOverride(QStringLiteral("/xl/worksheets/%1.xml").arg(name), m_document_prefix + QStringLiteral("spreadsheetml.worksheet+xml"));
@@ -82,12 +101,6 @@ void ContentTypes::addCommentName(const QString &name)
addOverride(QStringLiteral("/xl/%1.xml").arg(name), m_document_prefix + QStringLiteral("spreadsheetml.comments+xml"));
}
void ContentTypes::addImageTypes(const QStringList &imageTypes)
{
foreach (QString type, imageTypes)
addDefault(type, QStringLiteral("image/") + type);
}
void ContentTypes::addTableName(const QString &name)
{
addOverride(QStringLiteral("/xl/tables/%1.xml").arg(name), m_document_prefix + QStringLiteral("spreadsheetml.table+xml"));
+5 -1
View File
@@ -53,12 +53,16 @@ public:
void addOverride(const QString &key, const QString &value);
//Convenient funcation for addOverride()
void addDocPropCore();
void addDocPropApp();
void addStyles();
void addTheme();
void addWorkbook();
void addWorksheetName(const QString &name);
void addChartsheetName(const QString &name);
void addChartName(const QString &name);
void addDrawingName(const QString &name);
void addCommentName(const QString &name);
void addImageTypes(const QStringList &imageTypes);
void addTableName(const QString &name);
void addSharedString();
void addVmlName();
+14 -3
View File
@@ -99,9 +99,14 @@ bool DocumentPrivate::loadPackage(QIODevice *device)
ZipReader zipReader(device);
QStringList filePaths = zipReader.filePaths();
//Load the Content_Types file
if (!filePaths.contains(QLatin1String("[Content_Types].xml")))
return false;
contentTypes.loadFromXmlData(zipReader.fileData(QStringLiteral("[Content_Types].xml")));
//Load root rels file
if (!filePaths.contains(QLatin1String("_rels/.rels")))
return false;
Relationships rootRels;
rootRels.loadFromXmlData(zipReader.fileData(QStringLiteral("_rels/.rels")));
@@ -196,7 +201,8 @@ bool DocumentPrivate::savePackage(QIODevice *device) const
if (zipWriter.error())
return false;
ContentTypes contentTypes;
contentTypes.clearOverrides();
DocPropsApp docPropsApp;
DocPropsCore docPropsCore;
@@ -216,6 +222,7 @@ bool DocumentPrivate::savePackage(QIODevice *device) const
}
// save workbook xml file
contentTypes.addWorkbook();
zipWriter.addFile(QStringLiteral("xl/workbook.xml"), workbook->saveToXmlData());
zipWriter.addFile(QStringLiteral("xl/_rels/workbook.xml.rels"), workbook->relationships().saveToXmlData());
@@ -247,6 +254,8 @@ bool DocumentPrivate::savePackage(QIODevice *device) const
}
if (workbook->worksheetCount())
docPropsApp.addHeadingPair(QStringLiteral("Worksheets"), workbook->worksheetCount());
contentTypes.addDocPropApp();
contentTypes.addDocPropCore();
zipWriter.addFile(QStringLiteral("docProps/app.xml"), docPropsApp.saveToXmlData());
zipWriter.addFile(QStringLiteral("docProps/core.xml"), docPropsCore.saveToXmlData());
@@ -257,14 +266,16 @@ bool DocumentPrivate::savePackage(QIODevice *device) const
}
// save styles xml file
contentTypes.addStyles();
zipWriter.addFile(QStringLiteral("xl/styles.xml"), workbook->styles()->saveToXmlData());
// save theme xml file
contentTypes.addTheme();
zipWriter.addFile(QStringLiteral("xl/theme/theme1.xml"), workbook->theme()->saveToXmlData());
// save image files
if (!workbook->images().isEmpty())
contentTypes.addImageTypes(QStringList()<<QStringLiteral("png"));
contentTypes.addDefault(QStringLiteral("png"), QStringLiteral("image/png"));
for (int i=0; i<workbook->images().size(); ++i) {
QImage image = workbook->images()[i];
+2
View File
@@ -39,6 +39,7 @@
#include "xlsxdocument.h"
#include "xlsxworkbook.h"
#include "xlsxcontenttypes_p.h"
#include <QMap>
@@ -60,6 +61,7 @@ public:
QMap<QString, QString> documentProperties; //core, app and custom properties
QSharedPointer<Workbook> workbook;
mutable ContentTypes contentTypes;
};
}