Browse Source

Don't lost custom indexedColors when edit exist file

master
Debao Zhang 11 years ago
parent
commit
88b43033c3
  1. 27
      src/xlsx/xlsxstyles.cpp
  2. 2
      src/xlsx/xlsxstyles_p.h

27
src/xlsx/xlsxstyles.cpp

@ -42,7 +42,8 @@ namespace QXlsx {
*/ */
Styles::Styles(CreateFlag flag) 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?? //!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.writeAttribute(QStringLiteral("defaultPivotStyle"), QStringLiteral("PivotStyleLight16"));
writer.writeEndElement();//tableStyles writer.writeEndElement();//tableStyles
writeColors(writer);
writer.writeEndElement();//styleSheet writer.writeEndElement();//styleSheet
writer.writeEndDocument(); writer.writeEndDocument();
} }
@ -671,6 +674,24 @@ void Styles::writeDxf(QXmlStreamWriter &writer, const Format &format) const
writer.writeEndElement();//dxf 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) bool Styles::readNumFmts(QXmlStreamReader &reader)
{ {
Q_ASSERT(reader.name() == QLatin1String("numFmts")); Q_ASSERT(reader.name() == QLatin1String("numFmts"));
@ -1203,6 +1224,7 @@ bool Styles::readColors(QXmlStreamReader &reader)
bool Styles::readIndexedColors(QXmlStreamReader &reader) bool Styles::readIndexedColors(QXmlStreamReader &reader)
{ {
Q_ASSERT(reader.name() == QLatin1String("indexedColors")); Q_ASSERT(reader.name() == QLatin1String("indexedColors"));
m_indexedColors.clear();
while (!reader.atEnd() && !(reader.name() == QLatin1String("indexedColors") && reader.tokenType() == QXmlStreamReader::EndElement)) { while (!reader.atEnd() && !(reader.name() == QLatin1String("indexedColors") && reader.tokenType() == QXmlStreamReader::EndElement)) {
reader.readNextStartElement(); reader.readNextStartElement();
if (reader.tokenType() == QXmlStreamReader::StartElement) { if (reader.tokenType() == QXmlStreamReader::StartElement) {
@ -1212,6 +1234,8 @@ bool Styles::readIndexedColors(QXmlStreamReader &reader)
} }
} }
} }
if (!m_indexedColors.isEmpty())
m_isIndexedColorsDefault = false;
return true; return true;
} }
@ -1268,6 +1292,7 @@ QColor Styles::getColorByIndex(int idx)
<<QColor("#FF9900") <<QColor("#FF6600") <<QColor("#666699") <<QColor("#969696") <<QColor("#FF9900") <<QColor("#FF6600") <<QColor("#666699") <<QColor("#969696")
<<QColor("#003366") <<QColor("#339966") <<QColor("#003300") <<QColor("#333300") <<QColor("#003366") <<QColor("#339966") <<QColor("#003300") <<QColor("#333300")
<<QColor("#993300") <<QColor("#993366") <<QColor("#333399") <<QColor("#333333"); <<QColor("#993300") <<QColor("#993366") <<QColor("#333399") <<QColor("#333333");
m_isIndexedColorsDefault = true;
} }
if (idx < 0 || idx >= m_indexedColors.size()) if (idx < 0 || idx >= m_indexedColors.size())
return QColor(); return QColor();

2
src/xlsx/xlsxstyles_p.h

@ -96,6 +96,7 @@ private:
void writeCellXfs(QXmlStreamWriter &writer) const; void writeCellXfs(QXmlStreamWriter &writer) const;
void writeDxfs(QXmlStreamWriter &writer) const; void writeDxfs(QXmlStreamWriter &writer) const;
void writeDxf(QXmlStreamWriter &writer, const Format &format) const; void writeDxf(QXmlStreamWriter &writer, const Format &format) const;
void writeColors(QXmlStreamWriter &writer) const;
bool readNumFmts(QXmlStreamReader &reader); bool readNumFmts(QXmlStreamReader &reader);
bool readFonts(QXmlStreamReader &reader); bool readFonts(QXmlStreamReader &reader);
@ -123,6 +124,7 @@ private:
QHash<QByteArray, Format> m_bordersHash; QHash<QByteArray, Format> m_bordersHash;
QVector<QColor> m_indexedColors; QVector<QColor> m_indexedColors;
bool m_isIndexedColorsDefault;
QList<Format> m_xf_formatsList; QList<Format> m_xf_formatsList;
QHash<QByteArray, Format> m_xf_formatsHash; QHash<QByteArray, Format> m_xf_formatsHash;

Loading…
Cancel
Save