Don't lost custom indexedColors when edit exist file

This commit is contained in:
Debao Zhang
2014-03-06 10:54:52 +08:00
parent 770c104b2b
commit 88b43033c3
2 changed files with 28 additions and 1 deletions
+26 -1
View File
@@ -42,7 +42,8 @@ namespace QXlsx {
*/
Styles::Styles(CreateFlag flag)
: AbstractOOXmlFile(flag), m_nextCustomNumFmtId(176), m_emptyFormatAdded(false)
: AbstractOOXmlFile(flag), m_nextCustomNumFmtId(176), m_isIndexedColorsDefault(true)
, m_emptyFormatAdded(false)
{
//!Fix me. Should the custom num fmt Id starts with 164 or 176 or others??
@@ -307,6 +308,8 @@ void Styles::saveToXmlFile(QIODevice *device) const
writer.writeAttribute(QStringLiteral("defaultPivotStyle"), QStringLiteral("PivotStyleLight16"));
writer.writeEndElement();//tableStyles
writeColors(writer);
writer.writeEndElement();//styleSheet
writer.writeEndDocument();
}
@@ -671,6 +674,24 @@ void Styles::writeDxf(QXmlStreamWriter &writer, const Format &format) const
writer.writeEndElement();//dxf
}
void Styles::writeColors(QXmlStreamWriter &writer) const
{
if (m_isIndexedColorsDefault) //Don't output the default indexdeColors
return;
writer.writeStartElement(QStringLiteral("colors"));
writer.writeStartElement(QStringLiteral("indexedColors"));
foreach(QColor color, m_indexedColors) {
writer.writeEmptyElement(QStringLiteral("rgbColor"));
writer.writeAttribute(QStringLiteral("rgb"), XlsxColor::toARGBString(color));
}
writer.writeEndElement();//indexedColors
writer.writeEndElement();//colors
}
bool Styles::readNumFmts(QXmlStreamReader &reader)
{
Q_ASSERT(reader.name() == QLatin1String("numFmts"));
@@ -1203,6 +1224,7 @@ bool Styles::readColors(QXmlStreamReader &reader)
bool Styles::readIndexedColors(QXmlStreamReader &reader)
{
Q_ASSERT(reader.name() == QLatin1String("indexedColors"));
m_indexedColors.clear();
while (!reader.atEnd() && !(reader.name() == QLatin1String("indexedColors") && reader.tokenType() == QXmlStreamReader::EndElement)) {
reader.readNextStartElement();
if (reader.tokenType() == QXmlStreamReader::StartElement) {
@@ -1212,6 +1234,8 @@ bool Styles::readIndexedColors(QXmlStreamReader &reader)
}
}
}
if (!m_indexedColors.isEmpty())
m_isIndexedColorsDefault = false;
return true;
}
@@ -1268,6 +1292,7 @@ QColor Styles::getColorByIndex(int idx)
<<QColor("#FF9900") <<QColor("#FF6600") <<QColor("#666699") <<QColor("#969696")
<<QColor("#003366") <<QColor("#339966") <<QColor("#003300") <<QColor("#333300")
<<QColor("#993300") <<QColor("#993366") <<QColor("#333399") <<QColor("#333333");
m_isIndexedColorsDefault = true;
}
if (idx < 0 || idx >= m_indexedColors.size())
return QColor();
+2
View File
@@ -96,6 +96,7 @@ private:
void writeCellXfs(QXmlStreamWriter &writer) const;
void writeDxfs(QXmlStreamWriter &writer) const;
void writeDxf(QXmlStreamWriter &writer, const Format &format) const;
void writeColors(QXmlStreamWriter &writer) const;
bool readNumFmts(QXmlStreamReader &reader);
bool readFonts(QXmlStreamReader &reader);
@@ -123,6 +124,7 @@ private:
QHash<QByteArray, Format> m_bordersHash;
QVector<QColor> m_indexedColors;
bool m_isIndexedColorsDefault;
QList<Format> m_xf_formatsList;
QHash<QByteArray, Format> m_xf_formatsHash;