Code refactor: Remove private class XlsxFormatFontData
This commit is contained in:
+67
-73
@@ -31,23 +31,20 @@
|
|||||||
QT_BEGIN_NAMESPACE_XLSX
|
QT_BEGIN_NAMESPACE_XLSX
|
||||||
|
|
||||||
FormatPrivate::FormatPrivate()
|
FormatPrivate::FormatPrivate()
|
||||||
|
: dirty(true)
|
||||||
|
, font_dirty(true), font_index_valid(false), font_index(-1)
|
||||||
|
, xf_index(-1), xf_indexValid(false)
|
||||||
|
, is_dxf_fomat(false), dxf_index(-1), dxf_indexValid(false)
|
||||||
|
, theme(0)
|
||||||
{
|
{
|
||||||
dirty = true;
|
|
||||||
|
|
||||||
is_dxf_fomat = false;
|
|
||||||
xf_index = -1;
|
|
||||||
dxf_index = -1;
|
|
||||||
xf_indexValid = false;
|
|
||||||
dxf_indexValid = false;
|
|
||||||
|
|
||||||
theme = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FormatPrivate::FormatPrivate(const FormatPrivate &other)
|
FormatPrivate::FormatPrivate(const FormatPrivate &other)
|
||||||
: QSharedData(other)
|
: QSharedData(other)
|
||||||
, fontData(other.fontData), alignmentData(other.alignmentData)
|
, alignmentData(other.alignmentData)
|
||||||
, borderData(other.borderData), fillData(other.fillData), protectionData(other.protectionData)
|
, borderData(other.borderData), fillData(other.fillData), protectionData(other.protectionData)
|
||||||
, dirty(other.dirty), formatKey(other.formatKey)
|
, dirty(other.dirty), formatKey(other.formatKey)
|
||||||
|
, font_dirty(other.dirty), font_index_valid(other.font_index_valid), font_key(other.font_key), font_index(other.font_index)
|
||||||
, xf_index(other.xf_index), xf_indexValid(other.xf_indexValid)
|
, xf_index(other.xf_index), xf_indexValid(other.xf_indexValid)
|
||||||
, is_dxf_fomat(other.is_dxf_fomat), dxf_index(other.dxf_index), dxf_indexValid(other.dxf_indexValid)
|
, is_dxf_fomat(other.is_dxf_fomat), dxf_index(other.dxf_index), dxf_indexValid(other.dxf_indexValid)
|
||||||
, theme(other.theme)
|
, theme(other.theme)
|
||||||
@@ -181,7 +178,7 @@ void Format::setNumberFormat(int id, const QString &format)
|
|||||||
*/
|
*/
|
||||||
int Format::fontSize() const
|
int Format::fontSize() const
|
||||||
{
|
{
|
||||||
return d->fontData.size;
|
return intProperty(FormatPrivate::P_Font_Size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -189,8 +186,7 @@ int Format::fontSize() const
|
|||||||
*/
|
*/
|
||||||
void Format::setFontSize(int size)
|
void Format::setFontSize(int size)
|
||||||
{
|
{
|
||||||
d->fontData.size = size;
|
setProperty(FormatPrivate::P_Font_Size, size);
|
||||||
d->fontData._dirty = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -198,7 +194,7 @@ void Format::setFontSize(int size)
|
|||||||
*/
|
*/
|
||||||
bool Format::fontItalic() const
|
bool Format::fontItalic() const
|
||||||
{
|
{
|
||||||
return d->fontData.italic;
|
return boolProperty(FormatPrivate::P_Font_Italic);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -206,8 +202,7 @@ bool Format::fontItalic() const
|
|||||||
*/
|
*/
|
||||||
void Format::setFontItalic(bool italic)
|
void Format::setFontItalic(bool italic)
|
||||||
{
|
{
|
||||||
d->fontData.italic = italic;
|
setProperty(FormatPrivate::P_Font_Italic, italic);
|
||||||
d->fontData._dirty = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -215,7 +210,7 @@ void Format::setFontItalic(bool italic)
|
|||||||
*/
|
*/
|
||||||
bool Format::fontStrikeOut() const
|
bool Format::fontStrikeOut() const
|
||||||
{
|
{
|
||||||
return d->fontData.strikeOut;
|
return boolProperty(FormatPrivate::P_Font_StrikeOut);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -223,8 +218,7 @@ bool Format::fontStrikeOut() const
|
|||||||
*/
|
*/
|
||||||
void Format::setFontStrikeOut(bool strikeOut)
|
void Format::setFontStrikeOut(bool strikeOut)
|
||||||
{
|
{
|
||||||
d->fontData.strikeOut = strikeOut;
|
setProperty(FormatPrivate::P_Font_StrikeOut, strikeOut);
|
||||||
d->fontData._dirty = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -232,12 +226,15 @@ void Format::setFontStrikeOut(bool strikeOut)
|
|||||||
*/
|
*/
|
||||||
QColor Format::fontColor() const
|
QColor Format::fontColor() const
|
||||||
{
|
{
|
||||||
if (!d->fontData.color.isValid() && !d->fontData.themeColor.isEmpty()) {
|
if (hasProperty(FormatPrivate::P_Font_Color))
|
||||||
|
return colorProperty(FormatPrivate::P_Font_Color);
|
||||||
|
|
||||||
|
if (hasProperty(FormatPrivate::P_Font_ThemeColor)) {
|
||||||
//!Todo, get the real color from the theme{1}.xml file
|
//!Todo, get the real color from the theme{1}.xml file
|
||||||
//The same is ture for border and fill colord
|
//The same is ture for border and fill colord
|
||||||
return QColor();
|
return QColor();
|
||||||
}
|
}
|
||||||
return d->fontData.color;
|
return QColor();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -245,8 +242,7 @@ QColor Format::fontColor() const
|
|||||||
*/
|
*/
|
||||||
void Format::setFontColor(const QColor &color)
|
void Format::setFontColor(const QColor &color)
|
||||||
{
|
{
|
||||||
d->fontData.color = color;
|
setProperty(FormatPrivate::P_Font_Color, color);
|
||||||
d->fontData._dirty = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -254,7 +250,7 @@ void Format::setFontColor(const QColor &color)
|
|||||||
*/
|
*/
|
||||||
bool Format::fontBold() const
|
bool Format::fontBold() const
|
||||||
{
|
{
|
||||||
return d->fontData.bold;
|
return boolProperty(FormatPrivate::P_Font_Bold);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -262,8 +258,7 @@ bool Format::fontBold() const
|
|||||||
*/
|
*/
|
||||||
void Format::setFontBold(bool bold)
|
void Format::setFontBold(bool bold)
|
||||||
{
|
{
|
||||||
d->fontData.bold = bold;
|
setProperty(FormatPrivate::P_Font_Bold, bold);
|
||||||
d->fontData._dirty = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -271,7 +266,7 @@ void Format::setFontBold(bool bold)
|
|||||||
*/
|
*/
|
||||||
Format::FontScript Format::fontScript() const
|
Format::FontScript Format::fontScript() const
|
||||||
{
|
{
|
||||||
return d->fontData.scirpt;
|
return static_cast<Format::FontScript>(intProperty(FormatPrivate::P_Font_Script));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -279,8 +274,7 @@ Format::FontScript Format::fontScript() const
|
|||||||
*/
|
*/
|
||||||
void Format::setFontScript(FontScript script)
|
void Format::setFontScript(FontScript script)
|
||||||
{
|
{
|
||||||
d->fontData.scirpt = script;
|
setProperty(FormatPrivate::P_Font_Script, script);
|
||||||
d->fontData._dirty = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -288,7 +282,7 @@ void Format::setFontScript(FontScript script)
|
|||||||
*/
|
*/
|
||||||
Format::FontUnderline Format::fontUnderline() const
|
Format::FontUnderline Format::fontUnderline() const
|
||||||
{
|
{
|
||||||
return d->fontData.underline;
|
return static_cast<Format::FontUnderline>(intProperty(FormatPrivate::P_Font_Underline));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -296,8 +290,7 @@ Format::FontUnderline Format::fontUnderline() const
|
|||||||
*/
|
*/
|
||||||
void Format::setFontUnderline(FontUnderline underline)
|
void Format::setFontUnderline(FontUnderline underline)
|
||||||
{
|
{
|
||||||
d->fontData.underline = underline;
|
setProperty(FormatPrivate::P_Font_Underline, underline);
|
||||||
d->fontData._dirty = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -305,7 +298,7 @@ void Format::setFontUnderline(FontUnderline underline)
|
|||||||
*/
|
*/
|
||||||
bool Format::fontOutline() const
|
bool Format::fontOutline() const
|
||||||
{
|
{
|
||||||
return d->fontData.outline;
|
return boolProperty(FormatPrivate::P_Font_Outline);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -313,8 +306,7 @@ bool Format::fontOutline() const
|
|||||||
*/
|
*/
|
||||||
void Format::setFontOutline(bool outline)
|
void Format::setFontOutline(bool outline)
|
||||||
{
|
{
|
||||||
d->fontData.outline = outline;
|
setProperty(FormatPrivate::P_Font_Outline, outline);
|
||||||
d->fontData._dirty = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -322,7 +314,7 @@ void Format::setFontOutline(bool outline)
|
|||||||
*/
|
*/
|
||||||
QString Format::fontName() const
|
QString Format::fontName() const
|
||||||
{
|
{
|
||||||
return d->fontData.name;
|
return stringProperty(FormatPrivate::P_Font_Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -330,8 +322,7 @@ QString Format::fontName() const
|
|||||||
*/
|
*/
|
||||||
void Format::setFontName(const QString &name)
|
void Format::setFontName(const QString &name)
|
||||||
{
|
{
|
||||||
d->fontData.name = name;
|
setProperty(FormatPrivate::P_Font_Name, name);
|
||||||
d->fontData._dirty = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -339,7 +330,7 @@ void Format::setFontName(const QString &name)
|
|||||||
*/
|
*/
|
||||||
bool Format::fontIndexValid() const
|
bool Format::fontIndexValid() const
|
||||||
{
|
{
|
||||||
return d->fontData.indexValid();
|
return d->font_index_valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -347,7 +338,10 @@ bool Format::fontIndexValid() const
|
|||||||
*/
|
*/
|
||||||
int Format::fontIndex() const
|
int Format::fontIndex() const
|
||||||
{
|
{
|
||||||
return d->fontData.index();
|
if (fontIndexValid())
|
||||||
|
return d->font_index;
|
||||||
|
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -355,40 +349,27 @@ int Format::fontIndex() const
|
|||||||
*/
|
*/
|
||||||
void Format::setFontIndex(int index)
|
void Format::setFontIndex(int index)
|
||||||
{
|
{
|
||||||
d->fontData.setIndex(index);
|
d->font_index = index;
|
||||||
}
|
d->font_index_valid = true;
|
||||||
|
|
||||||
/*!
|
|
||||||
* \internal
|
|
||||||
*/
|
|
||||||
int Format::fontFamily() const
|
|
||||||
{
|
|
||||||
return d->fontData.family;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \internal
|
|
||||||
*/
|
|
||||||
bool Format::fontShadow() const
|
|
||||||
{
|
|
||||||
return d->fontData.shadow;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \internal
|
|
||||||
*/
|
|
||||||
QString Format::fontScheme() const
|
|
||||||
{
|
|
||||||
return d->fontData.scheme;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Internal
|
/* Internal
|
||||||
*/
|
*/
|
||||||
QByteArray Format::fontKey() const
|
QByteArray Format::fontKey() const
|
||||||
{
|
{
|
||||||
if (d->fontData._dirty)
|
if (d->font_dirty) {
|
||||||
d->dirty = true; //Make sure formatKey() will be re-generated.
|
QByteArray key;
|
||||||
return d->fontData.key();
|
QDataStream stream(&key, QIODevice::WriteOnly);
|
||||||
|
for (int i=FormatPrivate::P_Font_STARTID; i<FormatPrivate::P_Font_ENDID; ++i) {
|
||||||
|
if (d->property.contains(i))
|
||||||
|
stream << i << d->property[i];
|
||||||
|
};
|
||||||
|
|
||||||
|
const_cast<Format*>(this)->d->font_key = key;
|
||||||
|
const_cast<Format*>(this)->d->font_dirty = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return d->font_key;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -849,7 +830,7 @@ void Format::setLocked(bool locked)
|
|||||||
|
|
||||||
QByteArray Format::formatKey() const
|
QByteArray Format::formatKey() const
|
||||||
{
|
{
|
||||||
if (d->dirty || d->fontData._dirty || d->borderData._dirty || d->fillData._dirty) {
|
if (d->dirty || d->borderData._dirty || d->fillData._dirty) {
|
||||||
QByteArray key;
|
QByteArray key;
|
||||||
QDataStream stream(&key, QIODevice::WriteOnly);
|
QDataStream stream(&key, QIODevice::WriteOnly);
|
||||||
stream<<fontKey()<<borderKey()<<fillKey()
|
stream<<fontKey()<<borderKey()<<fillKey()
|
||||||
@@ -933,11 +914,25 @@ QVariant Format::property(int propertyId) const
|
|||||||
*/
|
*/
|
||||||
void Format::setProperty(int propertyId, const QVariant &value)
|
void Format::setProperty(int propertyId, const QVariant &value)
|
||||||
{
|
{
|
||||||
if (value.isValid())
|
if (value.isValid()) {
|
||||||
|
if (d->property.contains(propertyId) && d->property[propertyId] == value)
|
||||||
|
return;
|
||||||
|
d.detach();
|
||||||
d->property[propertyId] = value;
|
d->property[propertyId] = value;
|
||||||
else
|
} else {
|
||||||
|
if (!d->property.contains(propertyId))
|
||||||
|
return;
|
||||||
|
d.detach();
|
||||||
d->property.remove(propertyId);
|
d->property.remove(propertyId);
|
||||||
|
}
|
||||||
|
|
||||||
d->dirty = true;
|
d->dirty = true;
|
||||||
|
d->xf_indexValid = false;
|
||||||
|
|
||||||
|
if (propertyId >= FormatPrivate::P_Font_STARTID && propertyId < FormatPrivate::P_Font_ENDID) {
|
||||||
|
d->font_dirty = true;
|
||||||
|
d->font_index_valid = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -945,8 +940,7 @@ void Format::setProperty(int propertyId, const QVariant &value)
|
|||||||
*/
|
*/
|
||||||
void Format::clearProperty(int propertyId)
|
void Format::clearProperty(int propertyId)
|
||||||
{
|
{
|
||||||
d->property.remove(propertyId);
|
setProperty(propertyId, QVariant());
|
||||||
d->dirty = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
#include <QColor>
|
#include <QColor>
|
||||||
#include <QByteArray>
|
#include <QByteArray>
|
||||||
#include <QList>
|
#include <QList>
|
||||||
#include <QSharedDataPointer>
|
#include <QExplicitlySharedDataPointer>
|
||||||
|
|
||||||
class FormatTest;
|
class FormatTest;
|
||||||
|
|
||||||
@@ -232,16 +232,12 @@ private:
|
|||||||
friend class Worksheet;
|
friend class Worksheet;
|
||||||
friend class WorksheetPrivate;
|
friend class WorksheetPrivate;
|
||||||
friend class RichString;
|
friend class RichString;
|
||||||
friend class SharedStrings;
|
|
||||||
friend class ::FormatTest;
|
friend class ::FormatTest;
|
||||||
|
|
||||||
bool fontIndexValid() const;
|
bool fontIndexValid() const;
|
||||||
int fontIndex() const;
|
int fontIndex() const;
|
||||||
void setFontIndex(int index);
|
void setFontIndex(int index);
|
||||||
QByteArray fontKey() const;
|
QByteArray fontKey() const;
|
||||||
int fontFamily() const;
|
|
||||||
bool fontShadow() const;
|
|
||||||
QString fontScheme() const;
|
|
||||||
|
|
||||||
bool alignmentChanged() const;
|
bool alignmentChanged() const;
|
||||||
QString horizontalAlignmentString() const;
|
QString horizontalAlignmentString() const;
|
||||||
@@ -268,7 +264,7 @@ private:
|
|||||||
|
|
||||||
int theme() const;
|
int theme() const;
|
||||||
|
|
||||||
QSharedDataPointer<FormatPrivate> d;
|
QExplicitlySharedDataPointer<FormatPrivate> d;
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE_XLSX
|
QT_END_NAMESPACE_XLSX
|
||||||
|
|||||||
+30
-79
@@ -30,76 +30,6 @@
|
|||||||
|
|
||||||
namespace QXlsx {
|
namespace QXlsx {
|
||||||
|
|
||||||
struct XlsxFormatFontData
|
|
||||||
{
|
|
||||||
XlsxFormatFontData() :
|
|
||||||
size(11), italic(false), strikeOut(false), color(QColor()), bold(false)
|
|
||||||
, scirpt(Format::FontScriptNormal), underline(Format::FontUnderlineNone)
|
|
||||||
, outline(false), shadow(false), name(QStringLiteral("Calibri")), family(2), charset(0)
|
|
||||||
, scheme(QStringLiteral("minor")), condense(0), extend(0)
|
|
||||||
, _dirty(true), _indexValid(false), _index(-1)
|
|
||||||
|
|
||||||
{}
|
|
||||||
|
|
||||||
int size;
|
|
||||||
bool italic;
|
|
||||||
bool strikeOut;
|
|
||||||
QColor color;
|
|
||||||
QString themeColor;
|
|
||||||
bool bold;
|
|
||||||
Format::FontScript scirpt;
|
|
||||||
Format::FontUnderline underline;
|
|
||||||
bool outline;
|
|
||||||
bool shadow;
|
|
||||||
QString name;
|
|
||||||
int family;
|
|
||||||
int charset;
|
|
||||||
QString scheme;
|
|
||||||
int condense;
|
|
||||||
int extend;
|
|
||||||
|
|
||||||
QByteArray key() const
|
|
||||||
{
|
|
||||||
if (_dirty) {
|
|
||||||
QByteArray key;
|
|
||||||
QDataStream stream(&key, QIODevice::WriteOnly);
|
|
||||||
stream<<bold<<charset<<color<<themeColor<<condense
|
|
||||||
<<extend<<family<<italic<<name
|
|
||||||
<<outline<<scheme<<scirpt<<shadow
|
|
||||||
<<size<<strikeOut<<underline;
|
|
||||||
|
|
||||||
const_cast<XlsxFormatFontData*>(this)->_key = key;
|
|
||||||
const_cast<XlsxFormatFontData*>(this)->_dirty = false;
|
|
||||||
const_cast<XlsxFormatFontData*>(this)->_indexValid = false;//dirty flag can not be simply cleared.
|
|
||||||
}
|
|
||||||
return _key;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool indexValid() const
|
|
||||||
{
|
|
||||||
return !_dirty && _indexValid;
|
|
||||||
}
|
|
||||||
|
|
||||||
int index() const
|
|
||||||
{
|
|
||||||
return _index;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setIndex(int index)
|
|
||||||
{
|
|
||||||
_index = index;
|
|
||||||
_indexValid = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//helper member
|
|
||||||
bool _dirty; //key re-generated and proper index assign is need.
|
|
||||||
|
|
||||||
private:
|
|
||||||
QByteArray _key;
|
|
||||||
bool _indexValid; //has a valid index, so no need to assign a new one
|
|
||||||
int _index; //index in the Font list
|
|
||||||
};
|
|
||||||
|
|
||||||
struct XlsxFormatAlignmentData
|
struct XlsxFormatAlignmentData
|
||||||
{
|
{
|
||||||
XlsxFormatAlignmentData() :
|
XlsxFormatAlignmentData() :
|
||||||
@@ -262,10 +192,24 @@ public:
|
|||||||
P_NumFmt_FormatCode,
|
P_NumFmt_FormatCode,
|
||||||
|
|
||||||
//font
|
//font
|
||||||
P_Font_,
|
P_Font_STARTID,
|
||||||
|
P_Font_Size = P_Font_STARTID,
|
||||||
//alignment
|
P_Font_Italic,
|
||||||
P_Alignment_,
|
P_Font_StrikeOut,
|
||||||
|
P_Font_Color,
|
||||||
|
P_Font_ThemeColor,
|
||||||
|
P_Font_Bold,
|
||||||
|
P_Font_Script,
|
||||||
|
P_Font_Underline,
|
||||||
|
P_Font_Outline,
|
||||||
|
P_Font_Shadow,
|
||||||
|
P_Font_Name,
|
||||||
|
P_Font_Family,
|
||||||
|
P_Font_Charset,
|
||||||
|
P_Font_Scheme,
|
||||||
|
P_Font_Condense,
|
||||||
|
P_Font_Extend,
|
||||||
|
P_Font_ENDID,
|
||||||
|
|
||||||
//border
|
//border
|
||||||
P_Border_,
|
P_Border_,
|
||||||
@@ -273,6 +217,9 @@ public:
|
|||||||
//fill
|
//fill
|
||||||
P_Fill_,
|
P_Fill_,
|
||||||
|
|
||||||
|
//alignment
|
||||||
|
P_Alignment_,
|
||||||
|
|
||||||
//protection
|
//protection
|
||||||
P_Protection_,
|
P_Protection_,
|
||||||
};
|
};
|
||||||
@@ -281,21 +228,25 @@ public:
|
|||||||
FormatPrivate(const FormatPrivate &other);
|
FormatPrivate(const FormatPrivate &other);
|
||||||
~FormatPrivate();
|
~FormatPrivate();
|
||||||
|
|
||||||
XlsxFormatFontData fontData;
|
|
||||||
XlsxFormatAlignmentData alignmentData;
|
XlsxFormatAlignmentData alignmentData;
|
||||||
XlsxFormatBorderData borderData;
|
XlsxFormatBorderData borderData;
|
||||||
XlsxFormatFillData fillData;
|
XlsxFormatFillData fillData;
|
||||||
XlsxFormatProtectionData protectionData;
|
XlsxFormatProtectionData protectionData;
|
||||||
|
|
||||||
mutable bool dirty; //The key re-generation is need.
|
bool dirty; //The key re-generation is need.
|
||||||
mutable QByteArray formatKey;
|
QByteArray formatKey;
|
||||||
|
|
||||||
|
bool font_dirty;
|
||||||
|
bool font_index_valid;
|
||||||
|
QByteArray font_key;
|
||||||
|
int font_index;
|
||||||
|
|
||||||
int xf_index;
|
int xf_index;
|
||||||
mutable bool xf_indexValid;
|
bool xf_indexValid;
|
||||||
|
|
||||||
bool is_dxf_fomat;
|
bool is_dxf_fomat;
|
||||||
int dxf_index;
|
int dxf_index;
|
||||||
mutable bool dxf_indexValid;
|
bool dxf_indexValid;
|
||||||
|
|
||||||
int theme;
|
int theme;
|
||||||
|
|
||||||
|
|||||||
@@ -130,57 +130,68 @@ void SharedStrings::writeRichStringPart_rPr(XmlStreamWriter &writer, Format *for
|
|||||||
if (!format)
|
if (!format)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
XlsxFormatFontData *font = &format->d->fontData;
|
if (format->fontBold())
|
||||||
|
|
||||||
if (font->bold)
|
|
||||||
writer.writeEmptyElement(QStringLiteral("b"));
|
writer.writeEmptyElement(QStringLiteral("b"));
|
||||||
if (font->italic)
|
if (format->fontItalic())
|
||||||
writer.writeEmptyElement(QStringLiteral("i"));
|
writer.writeEmptyElement(QStringLiteral("i"));
|
||||||
if (font->strikeOut)
|
if (format->fontStrikeOut())
|
||||||
writer.writeEmptyElement(QStringLiteral("strike"));
|
writer.writeEmptyElement(QStringLiteral("strike"));
|
||||||
if (font->outline)
|
if (format->fontOutline())
|
||||||
writer.writeEmptyElement(QStringLiteral("outline"));
|
writer.writeEmptyElement(QStringLiteral("outline"));
|
||||||
if (font->shadow)
|
if (format->boolProperty(FormatPrivate::P_Font_Shadow))
|
||||||
writer.writeEmptyElement(QStringLiteral("shadow"));
|
writer.writeEmptyElement(QStringLiteral("shadow"));
|
||||||
if (font->underline != Format::FontUnderlineNone) {
|
if (format->hasProperty(FormatPrivate::P_Font_Underline)) {
|
||||||
writer.writeEmptyElement(QStringLiteral("u"));
|
Format::FontUnderline u = format->fontUnderline();
|
||||||
if (font->underline == Format::FontUnderlineDouble)
|
if (u != Format::FontUnderlineNone) {
|
||||||
writer.writeAttribute(QStringLiteral("val"), QStringLiteral("double"));
|
writer.writeEmptyElement(QStringLiteral("u"));
|
||||||
else if (font->underline == Format::FontUnderlineSingleAccounting)
|
if (u== Format::FontUnderlineDouble)
|
||||||
writer.writeAttribute(QStringLiteral("val"), QStringLiteral("singleAccounting"));
|
writer.writeAttribute(QStringLiteral("val"), QStringLiteral("double"));
|
||||||
else if (font->underline == Format::FontUnderlineDoubleAccounting)
|
else if (u == Format::FontUnderlineSingleAccounting)
|
||||||
writer.writeAttribute(QStringLiteral("val"), QStringLiteral("doubleAccounting"));
|
writer.writeAttribute(QStringLiteral("val"), QStringLiteral("singleAccounting"));
|
||||||
|
else if (u == Format::FontUnderlineDoubleAccounting)
|
||||||
|
writer.writeAttribute(QStringLiteral("val"), QStringLiteral("doubleAccounting"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (font->scirpt != Format::FontScriptNormal) {
|
if (format->hasProperty(FormatPrivate::P_Font_Script)) {
|
||||||
writer.writeEmptyElement(QStringLiteral("vertAlign"));
|
Format::FontScript s = format->fontScript();
|
||||||
if (font->scirpt == Format::FontScriptSuper)
|
if (s != Format::FontScriptNormal) {
|
||||||
writer.writeAttribute(QStringLiteral("val"), QStringLiteral("superscript"));
|
writer.writeEmptyElement(QStringLiteral("vertAlign"));
|
||||||
else
|
if (s == Format::FontScriptSuper)
|
||||||
writer.writeAttribute(QStringLiteral("val"), QStringLiteral("subscript"));
|
writer.writeAttribute(QStringLiteral("val"), QStringLiteral("superscript"));
|
||||||
|
else
|
||||||
|
writer.writeAttribute(QStringLiteral("val"), QStringLiteral("subscript"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
writer.writeEmptyElement(QStringLiteral("sz"));
|
if (format->hasProperty(FormatPrivate::P_Font_Size)) {
|
||||||
writer.writeAttribute(QStringLiteral("val"), QString::number(font->size));
|
writer.writeEmptyElement(QStringLiteral("sz"));
|
||||||
|
writer.writeAttribute(QStringLiteral("val"), QString::number(format->fontSize()));
|
||||||
|
}
|
||||||
|
|
||||||
if (font->color.isValid()) {
|
if (format->fontColor().isValid()) {
|
||||||
writer.writeEmptyElement(QStringLiteral("color"));
|
writer.writeEmptyElement(QStringLiteral("color"));
|
||||||
QString color = font->color.name();
|
QString color = format->fontColor().name();
|
||||||
writer.writeAttribute(QStringLiteral("rgb"), QStringLiteral("FF")+color.mid(1));//remove #
|
writer.writeAttribute(QStringLiteral("rgb"), QStringLiteral("FF")+color.mid(1));//remove #
|
||||||
} else if (!font->themeColor.isEmpty()) {
|
} else if (format->hasProperty(FormatPrivate::P_Font_ThemeColor)) {
|
||||||
writer.writeEmptyElement(QStringLiteral("color"));
|
writer.writeEmptyElement(QStringLiteral("color"));
|
||||||
QStringList themes = font->themeColor.split(QLatin1Char(':'));
|
QStringList themes = format->stringProperty(FormatPrivate::P_Font_ThemeColor).split(QLatin1Char(':'));
|
||||||
writer.writeAttribute(QStringLiteral("theme"), themes[0]);
|
writer.writeAttribute(QStringLiteral("theme"), themes[0]);
|
||||||
if (!themes[1].isEmpty())
|
if (!themes[1].isEmpty())
|
||||||
writer.writeAttribute(QStringLiteral("tint"), themes[1]);
|
writer.writeAttribute(QStringLiteral("tint"), themes[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
writer.writeEmptyElement(QStringLiteral("rFont"));
|
if (!format->fontName().isEmpty()) {
|
||||||
writer.writeAttribute(QStringLiteral("val"), font->name);
|
writer.writeEmptyElement(QStringLiteral("rFont"));
|
||||||
writer.writeEmptyElement(QStringLiteral("family"));
|
writer.writeAttribute(QStringLiteral("val"), format->fontName());
|
||||||
writer.writeAttribute(QStringLiteral("val"), QString::number(font->family));
|
}
|
||||||
if (font->name == QLatin1String("Calibri")) {
|
if (format->hasProperty(FormatPrivate::P_Font_Family)) {
|
||||||
|
writer.writeEmptyElement(QStringLiteral("family"));
|
||||||
|
writer.writeAttribute(QStringLiteral("val"), QString::number(format->intProperty(FormatPrivate::P_Font_Family)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (format->hasProperty(FormatPrivate::P_Font_Scheme)) {
|
||||||
writer.writeEmptyElement(QStringLiteral("scheme"));
|
writer.writeEmptyElement(QStringLiteral("scheme"));
|
||||||
writer.writeAttribute(QStringLiteral("val"), font->scheme);
|
writer.writeAttribute(QStringLiteral("val"), format->stringProperty(FormatPrivate::P_Font_Scheme));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -303,24 +314,24 @@ Format *SharedStrings::readRichStringPart_rPr(XmlStreamReader &reader, RichStrin
|
|||||||
if (reader.name() == QLatin1String("rFont")) {
|
if (reader.name() == QLatin1String("rFont")) {
|
||||||
format->setFontName(attributes.value(QLatin1String("val")).toString());
|
format->setFontName(attributes.value(QLatin1String("val")).toString());
|
||||||
} else if (reader.name() == QLatin1String("charset")) {
|
} else if (reader.name() == QLatin1String("charset")) {
|
||||||
format->d->fontData.charset = attributes.value(QLatin1String("val")).toString().toInt();
|
format->setProperty(FormatPrivate::P_Font_Charset, attributes.value(QLatin1String("val")).toString().toInt());
|
||||||
} else if (reader.name() == QLatin1String("family")) {
|
} else if (reader.name() == QLatin1String("family")) {
|
||||||
format->d->fontData.family = attributes.value(QLatin1String("val")).toString().toInt();
|
format->setProperty(FormatPrivate::P_Font_Family, attributes.value(QLatin1String("val")).toString().toInt());
|
||||||
} else if (reader.name() == QLatin1String("b")) {
|
} else if (reader.name() == QLatin1String("b")) {
|
||||||
format->setFontBold(true);
|
format->setFontBold(true);
|
||||||
} else if (reader.name() == QLatin1String("i")) {
|
} else if (reader.name() == QLatin1String("i")) {
|
||||||
format->setFontItalic(true);
|
format->setFontItalic(true);
|
||||||
} else if (reader.name() == QLatin1String("strike")) {
|
} else if (reader.name() == QLatin1String("strike")) {
|
||||||
format->setFontStrikeOut(true);
|
format->setFontStrikeOut(true);
|
||||||
} else if (reader.name() == QLatin1String("outline")) {
|
} else if (reader.name() == QLatin1String("outline")) {
|
||||||
format->setFontOutline(true);
|
format->setFontOutline(true);
|
||||||
} else if (reader.name() == QLatin1String("shadow")) {
|
} else if (reader.name() == QLatin1String("shadow")) {
|
||||||
format->d->fontData.shadow = true;
|
format->setProperty(FormatPrivate::P_Font_Shadow, true);
|
||||||
} else if (reader.name() == QLatin1String("condense")) {
|
} else if (reader.name() == QLatin1String("condense")) {
|
||||||
format->d->fontData.condense = attributes.value(QLatin1String("val")).toString().toInt();
|
format->setProperty(FormatPrivate::P_Font_Condense, attributes.value(QLatin1String("val")).toString().toInt());
|
||||||
} else if (reader.name() == QLatin1String("extend")) {
|
} else if (reader.name() == QLatin1String("extend")) {
|
||||||
format->d->fontData.extend = attributes.value(QLatin1String("val")).toString().toInt();
|
format->setProperty(FormatPrivate::P_Font_Extend, attributes.value(QLatin1String("val")).toString().toInt());
|
||||||
} else if (reader.name() == QLatin1String("color")) {
|
} else if (reader.name() == QLatin1String("color")) {
|
||||||
if (attributes.hasAttribute(QLatin1String("rgb"))) {
|
if (attributes.hasAttribute(QLatin1String("rgb"))) {
|
||||||
QString colorString = attributes.value(QLatin1String("rgb")).toString();
|
QString colorString = attributes.value(QLatin1String("rgb")).toString();
|
||||||
format->setFontColor(fromARGBString(colorString));
|
format->setFontColor(fromARGBString(colorString));
|
||||||
@@ -329,11 +340,11 @@ Format *SharedStrings::readRichStringPart_rPr(XmlStreamReader &reader, RichStrin
|
|||||||
} else if (attributes.hasAttribute(QLatin1String("theme"))) {
|
} else if (attributes.hasAttribute(QLatin1String("theme"))) {
|
||||||
QString theme = attributes.value(QLatin1String("theme")).toString();
|
QString theme = attributes.value(QLatin1String("theme")).toString();
|
||||||
QString tint = attributes.value(QLatin1String("tint")).toString();
|
QString tint = attributes.value(QLatin1String("tint")).toString();
|
||||||
format->d->fontData.themeColor = theme + QLatin1Char(':') + tint;
|
format->setProperty(FormatPrivate::P_Font_ThemeColor, QString(theme + QLatin1Char(':') + tint));
|
||||||
}
|
}
|
||||||
} else if (reader.name() == QLatin1String("sz")) {
|
} else if (reader.name() == QLatin1String("sz")) {
|
||||||
format->setFontSize(attributes.value(QLatin1String("val")).toString().toInt());
|
format->setFontSize(attributes.value(QLatin1String("val")).toString().toInt());
|
||||||
} else if (reader.name() == QLatin1String("u")) {
|
} else if (reader.name() == QLatin1String("u")) {
|
||||||
QString value = attributes.value(QLatin1String("val")).toString();
|
QString value = attributes.value(QLatin1String("val")).toString();
|
||||||
if (value == QLatin1String("double"))
|
if (value == QLatin1String("double"))
|
||||||
format->setFontUnderline(Format::FontUnderlineDouble);
|
format->setFontUnderline(Format::FontUnderlineDouble);
|
||||||
@@ -343,14 +354,14 @@ Format *SharedStrings::readRichStringPart_rPr(XmlStreamReader &reader, RichStrin
|
|||||||
format->setFontUnderline(Format::FontUnderlineSingleAccounting);
|
format->setFontUnderline(Format::FontUnderlineSingleAccounting);
|
||||||
else
|
else
|
||||||
format->setFontUnderline(Format::FontUnderlineSingle);
|
format->setFontUnderline(Format::FontUnderlineSingle);
|
||||||
} else if (reader.name() == QLatin1String("vertAlign")) {
|
} else if (reader.name() == QLatin1String("vertAlign")) {
|
||||||
QString value = attributes.value(QLatin1String("val")).toString();
|
QString value = attributes.value(QLatin1String("val")).toString();
|
||||||
if (value == QLatin1String("superscript"))
|
if (value == QLatin1String("superscript"))
|
||||||
format->setFontScript(Format::FontScriptSuper);
|
format->setFontScript(Format::FontScriptSuper);
|
||||||
else if (value == QLatin1String("subscript"))
|
else if (value == QLatin1String("subscript"))
|
||||||
format->setFontScript(Format::FontScriptSub);
|
format->setFontScript(Format::FontScriptSub);
|
||||||
} else if (reader.name() == QLatin1String("scheme")) {
|
} else if (reader.name() == QLatin1String("scheme")) {
|
||||||
format->d->fontData.scheme = attributes.value(QLatin1String("val")).toString();
|
format->setProperty(FormatPrivate::P_Font_Scheme, attributes.value(QLatin1String("val")).toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+103
-97
@@ -151,12 +151,12 @@ void Styles::addFormat(Format *format, bool force)
|
|||||||
//Font
|
//Font
|
||||||
if (!format->fontIndexValid()) {
|
if (!format->fontIndexValid()) {
|
||||||
if (!m_fontsHash.contains(format->fontKey())) {
|
if (!m_fontsHash.contains(format->fontKey())) {
|
||||||
QSharedPointer<XlsxFormatFontData> font = QSharedPointer<XlsxFormatFontData>(new XlsxFormatFontData(format->d->fontData));
|
format->setFontIndex(m_fontsList.size()); //Assign proper index
|
||||||
font->setIndex(m_fontsList.size()); //Assign proper index
|
m_fontsList.append(format);
|
||||||
m_fontsList.append(font);
|
m_fontsHash[format->fontKey()] = format;
|
||||||
m_fontsHash[font->key()] = font;
|
} else {
|
||||||
|
format->setFontIndex(m_fontsHash[format->fontKey()]->fontIndex());
|
||||||
}
|
}
|
||||||
format->setFontIndex(m_fontsHash[format->fontKey()]->index());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Fill
|
//Fill
|
||||||
@@ -287,81 +287,77 @@ void Styles::writeFonts(XmlStreamWriter &writer)
|
|||||||
writer.writeStartElement(QStringLiteral("fonts"));
|
writer.writeStartElement(QStringLiteral("fonts"));
|
||||||
writer.writeAttribute(QStringLiteral("count"), QString::number(m_fontsList.count()));
|
writer.writeAttribute(QStringLiteral("count"), QString::number(m_fontsList.count()));
|
||||||
for (int i=0; i<m_fontsList.size(); ++i) {
|
for (int i=0; i<m_fontsList.size(); ++i) {
|
||||||
QSharedPointer<XlsxFormatFontData> font = m_fontsList[i];
|
Format *format = m_fontsList[i];
|
||||||
|
|
||||||
writer.writeStartElement(QStringLiteral("font"));
|
writer.writeStartElement(QStringLiteral("font"));
|
||||||
if (font->bold)
|
|
||||||
|
if (format->fontBold())
|
||||||
writer.writeEmptyElement(QStringLiteral("b"));
|
writer.writeEmptyElement(QStringLiteral("b"));
|
||||||
if (font->italic)
|
if (format->fontItalic())
|
||||||
writer.writeEmptyElement(QStringLiteral("i"));
|
writer.writeEmptyElement(QStringLiteral("i"));
|
||||||
if (font->strikeOut)
|
if (format->fontStrikeOut())
|
||||||
writer.writeEmptyElement(QStringLiteral("strike"));
|
writer.writeEmptyElement(QStringLiteral("strike"));
|
||||||
if (font->outline)
|
if (format->fontOutline())
|
||||||
writer.writeEmptyElement(QStringLiteral("outline"));
|
writer.writeEmptyElement(QStringLiteral("outline"));
|
||||||
if (font->shadow)
|
if (format->boolProperty(FormatPrivate::P_Font_Shadow))
|
||||||
writer.writeEmptyElement(QStringLiteral("shadow"));
|
writer.writeEmptyElement(QStringLiteral("shadow"));
|
||||||
if (font->underline != Format::FontUnderlineNone) {
|
if (format->hasProperty(FormatPrivate::P_Font_Underline)) {
|
||||||
writer.writeEmptyElement(QStringLiteral("u"));
|
Format::FontUnderline u = format->fontUnderline();
|
||||||
if (font->underline == Format::FontUnderlineDouble)
|
if (u != Format::FontUnderlineNone) {
|
||||||
writer.writeAttribute(QStringLiteral("val"), QStringLiteral("double"));
|
writer.writeEmptyElement(QStringLiteral("u"));
|
||||||
else if (font->underline == Format::FontUnderlineSingleAccounting)
|
if (u== Format::FontUnderlineDouble)
|
||||||
writer.writeAttribute(QStringLiteral("val"), QStringLiteral("singleAccounting"));
|
writer.writeAttribute(QStringLiteral("val"), QStringLiteral("double"));
|
||||||
else if (font->underline == Format::FontUnderlineDoubleAccounting)
|
else if (u == Format::FontUnderlineSingleAccounting)
|
||||||
writer.writeAttribute(QStringLiteral("val"), QStringLiteral("doubleAccounting"));
|
writer.writeAttribute(QStringLiteral("val"), QStringLiteral("singleAccounting"));
|
||||||
|
else if (u == Format::FontUnderlineDoubleAccounting)
|
||||||
|
writer.writeAttribute(QStringLiteral("val"), QStringLiteral("doubleAccounting"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (font->scirpt != Format::FontScriptNormal) {
|
if (format->hasProperty(FormatPrivate::P_Font_Script)) {
|
||||||
writer.writeEmptyElement(QStringLiteral("vertAligh"));
|
Format::FontScript s = format->fontScript();
|
||||||
if (font->scirpt == Format::FontScriptSuper)
|
if (s != Format::FontScriptNormal) {
|
||||||
writer.writeAttribute(QStringLiteral("val"), QStringLiteral("superscript"));
|
writer.writeEmptyElement(QStringLiteral("vertAlign"));
|
||||||
else
|
if (s == Format::FontScriptSuper)
|
||||||
writer.writeAttribute(QStringLiteral("val"), QStringLiteral("subscript"));
|
writer.writeAttribute(QStringLiteral("val"), QStringLiteral("superscript"));
|
||||||
|
else
|
||||||
|
writer.writeAttribute(QStringLiteral("val"), QStringLiteral("subscript"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
writer.writeEmptyElement(QStringLiteral("sz"));
|
if (format->hasProperty(FormatPrivate::P_Font_Size)) {
|
||||||
writer.writeAttribute(QStringLiteral("val"), QString::number(font->size));
|
writer.writeEmptyElement(QStringLiteral("sz"));
|
||||||
|
writer.writeAttribute(QStringLiteral("val"), QString::number(format->fontSize()));
|
||||||
|
}
|
||||||
|
|
||||||
if (font->color.isValid()) {
|
if (format->fontColor().isValid()) {
|
||||||
writer.writeEmptyElement(QStringLiteral("color"));
|
writer.writeEmptyElement(QStringLiteral("color"));
|
||||||
QString color = font->color.name();
|
QString color = format->fontColor().name();
|
||||||
writer.writeAttribute(QStringLiteral("rgb"), QStringLiteral("FF")+color.mid(1));//remove #
|
writer.writeAttribute(QStringLiteral("rgb"), QStringLiteral("FF")+color.mid(1));//remove #
|
||||||
} else if (!font->themeColor.isEmpty()) {
|
} else if (format->hasProperty(FormatPrivate::P_Font_ThemeColor)) {
|
||||||
writer.writeEmptyElement(QStringLiteral("color"));
|
writer.writeEmptyElement(QStringLiteral("color"));
|
||||||
QStringList themes = font->themeColor.split(QLatin1Char(':'));
|
QStringList themes = format->stringProperty(FormatPrivate::P_Font_ThemeColor).split(QLatin1Char(':'));
|
||||||
writer.writeAttribute(QStringLiteral("theme"), themes[0]);
|
writer.writeAttribute(QStringLiteral("theme"), themes[0]);
|
||||||
if (!themes[1].isEmpty())
|
if (!themes[1].isEmpty())
|
||||||
writer.writeAttribute(QStringLiteral("tint"), themes[1]);
|
writer.writeAttribute(QStringLiteral("tint"), themes[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
writer.writeEmptyElement(QStringLiteral("name"));
|
if (!format->fontName().isEmpty()) {
|
||||||
writer.writeAttribute(QStringLiteral("val"), font->name);
|
writer.writeEmptyElement(QStringLiteral("name"));
|
||||||
writer.writeEmptyElement(QStringLiteral("family"));
|
writer.writeAttribute(QStringLiteral("val"), format->fontName());
|
||||||
writer.writeAttribute(QStringLiteral("val"), QString::number(font->family));
|
}
|
||||||
if (font->name == QLatin1String("Calibri")) {
|
if (format->hasProperty(FormatPrivate::P_Font_Family)) {
|
||||||
|
writer.writeEmptyElement(QStringLiteral("family"));
|
||||||
|
writer.writeAttribute(QStringLiteral("val"), QString::number(format->intProperty(FormatPrivate::P_Font_Family)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (format->hasProperty(FormatPrivate::P_Font_Scheme)) {
|
||||||
writer.writeEmptyElement(QStringLiteral("scheme"));
|
writer.writeEmptyElement(QStringLiteral("scheme"));
|
||||||
writer.writeAttribute(QStringLiteral("val"), font->scheme);
|
writer.writeAttribute(QStringLiteral("val"), format->stringProperty(FormatPrivate::P_Font_Scheme));
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (!format->isDxfFormat()) {
|
// if (!format->isDxfFormat()) {
|
||||||
// writer.writeEmptyElement(QStringLiteral("sz"));
|
// writer.writeEmptyElement(QStringLiteral("sz"));
|
||||||
// writer.writeAttribute(QStringLiteral("val"), QString::number(format->fontSize()));
|
// writer.writeAttribute(QStringLiteral("val"), QString::number(format->fontSize()));
|
||||||
// }
|
// }
|
||||||
//
|
|
||||||
// //font color
|
|
||||||
// if (format->theme()) {
|
|
||||||
// writer.writeEmptyElement(QStringLiteral("color"));
|
|
||||||
// writer.writeAttribute(QStringLiteral("theme"), QString::number(format->theme()));
|
|
||||||
// } else if (format->colorIndexed()) {
|
|
||||||
// writer.writeEmptyElement(QStringLiteral("color"));
|
|
||||||
// writer.writeAttribute(QStringLiteral("indexed"), QString::number(format->colorIndexed()));
|
|
||||||
// } else if (format->fontColor().isValid()) {
|
|
||||||
// writer.writeEmptyElement(QStringLiteral("color"));
|
|
||||||
// QString color = format->fontColor().name();
|
|
||||||
// writer.writeAttribute(QStringLiteral("rgb"), QStringLiteral("FF")+color.mid(1));//remove #
|
|
||||||
// } else if (!format->isDxfFormat()) {
|
|
||||||
// writer.writeEmptyElement(QStringLiteral("color"));
|
|
||||||
// writer.writeAttribute(QStringLiteral("theme"), QStringLiteral("1"));
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (!format->isDxfFormat()) {
|
// if (!format->isDxfFormat()) {
|
||||||
// writer.writeEmptyElement(QStringLiteral("name"));
|
// writer.writeEmptyElement(QStringLiteral("name"));
|
||||||
// writer.writeAttribute(QStringLiteral("val"), format->fontName());
|
// writer.writeAttribute(QStringLiteral("val"), format->fontName());
|
||||||
@@ -602,72 +598,78 @@ bool Styles::readNumFmts(XmlStreamReader &reader)
|
|||||||
bool Styles::readFonts(XmlStreamReader &reader)
|
bool Styles::readFonts(XmlStreamReader &reader)
|
||||||
{
|
{
|
||||||
Q_ASSERT(reader.name() == QLatin1String("fonts"));
|
Q_ASSERT(reader.name() == QLatin1String("fonts"));
|
||||||
QXmlStreamAttributes attributes = reader.attributes();
|
QXmlStreamAttributes attrs = reader.attributes();
|
||||||
int count = attributes.value(QLatin1String("count")).toString().toInt();
|
int count = attrs.value(QLatin1String("count")).toString().toInt();
|
||||||
for (int i=0; i<count; ++i) {
|
for (int i=0; i<count; ++i) {
|
||||||
reader.readNextStartElement();
|
reader.readNextStartElement();
|
||||||
if (reader.name() != QLatin1String("font"))
|
if (reader.name() != QLatin1String("font"))
|
||||||
return false;
|
return false;
|
||||||
QSharedPointer<XlsxFormatFontData> font(new XlsxFormatFontData);
|
Format *format = createFormat();
|
||||||
while((reader.readNextStartElement(),true)) { //read until font endelement.
|
while((reader.readNextStartElement(),true)) { //read until font endelement.
|
||||||
if (reader.tokenType() == QXmlStreamReader::StartElement) {
|
if (reader.tokenType() == QXmlStreamReader::StartElement) {
|
||||||
if (reader.name() == QLatin1String("b")) {
|
QXmlStreamAttributes attributes = reader.attributes();
|
||||||
font->bold = true;
|
if (reader.name() == QLatin1String("name")) {
|
||||||
|
format->setFontName(attributes.value(QLatin1String("val")).toString());
|
||||||
|
} else if (reader.name() == QLatin1String("charset")) {
|
||||||
|
format->setProperty(FormatPrivate::P_Font_Charset, attributes.value(QLatin1String("val")).toString().toInt());
|
||||||
|
} else if (reader.name() == QLatin1String("family")) {
|
||||||
|
format->setProperty(FormatPrivate::P_Font_Family, attributes.value(QLatin1String("val")).toString().toInt());
|
||||||
|
} else if (reader.name() == QLatin1String("b")) {
|
||||||
|
format->setFontBold(true);
|
||||||
} else if (reader.name() == QLatin1String("i")) {
|
} else if (reader.name() == QLatin1String("i")) {
|
||||||
font->italic = true;
|
format->setFontItalic(true);
|
||||||
} else if (reader.name() == QLatin1String("strike")) {
|
} else if (reader.name() == QLatin1String("strike")) {
|
||||||
font->strikeOut = true;
|
format->setFontStrikeOut(true);
|
||||||
} else if (reader.name() == QLatin1String("outline")) {
|
} else if (reader.name() == QLatin1String("outline")) {
|
||||||
font->outline = true;
|
format->setFontOutline(true);
|
||||||
} else if (reader.name() == QLatin1String("shadow")) {
|
} else if (reader.name() == QLatin1String("shadow")) {
|
||||||
font->shadow = true;
|
format->setProperty(FormatPrivate::P_Font_Shadow, true);
|
||||||
} else if (reader.name() == QLatin1String("u")) {
|
} else if (reader.name() == QLatin1String("condense")) {
|
||||||
QXmlStreamAttributes attributes = reader.attributes();
|
format->setProperty(FormatPrivate::P_Font_Condense, attributes.value(QLatin1String("val")).toString().toInt());
|
||||||
QString value = attributes.value(QLatin1String("val")).toString();
|
} else if (reader.name() == QLatin1String("extend")) {
|
||||||
if (value == QLatin1String("double"))
|
format->setProperty(FormatPrivate::P_Font_Extend, attributes.value(QLatin1String("val")).toString().toInt());
|
||||||
font->underline = Format::FontUnderlineDouble;
|
|
||||||
else if (value == QLatin1String("doubleAccounting"))
|
|
||||||
font->underline = Format::FontUnderlineDoubleAccounting;
|
|
||||||
else if (value == QLatin1String("singleAccounting"))
|
|
||||||
font->underline = Format::FontUnderlineSingleAccounting;
|
|
||||||
else
|
|
||||||
font->underline = Format::FontUnderlineSingle;
|
|
||||||
} else if (reader.name() == QLatin1String("vertAligh")) {
|
|
||||||
QXmlStreamAttributes attributes = reader.attributes();
|
|
||||||
QString value = attributes.value(QLatin1String("val")).toString();
|
|
||||||
if (value == QLatin1String("superscript"))
|
|
||||||
font->scirpt = Format::FontScriptSuper;
|
|
||||||
else
|
|
||||||
font->scirpt = Format::FontScriptSub;
|
|
||||||
} else if (reader.name() == QLatin1String("sz")) {
|
|
||||||
font->size = reader.attributes().value(QLatin1String("val")).toString().toInt();
|
|
||||||
} else if (reader.name() == QLatin1String("color")) {
|
} else if (reader.name() == QLatin1String("color")) {
|
||||||
QXmlStreamAttributes attributes = reader.attributes();
|
|
||||||
if (attributes.hasAttribute(QLatin1String("rgb"))) {
|
if (attributes.hasAttribute(QLatin1String("rgb"))) {
|
||||||
QString colorString = attributes.value(QLatin1String("rgb")).toString();
|
QString colorString = attributes.value(QLatin1String("rgb")).toString();
|
||||||
font->color = fromARGBString(colorString);
|
format->setFontColor(fromARGBString(colorString));
|
||||||
} else if (attributes.hasAttribute(QLatin1String("indexed"))) {
|
} else if (attributes.hasAttribute(QLatin1String("indexed"))) {
|
||||||
font->color = getColorByIndex(attributes.value(QLatin1String("indexed")).toString().toInt());
|
QColor color = getColorByIndex(attributes.value(QLatin1String("indexed")).toString().toInt());
|
||||||
|
format->setFontColor(color);
|
||||||
} else if (attributes.hasAttribute(QLatin1String("theme"))) {
|
} else if (attributes.hasAttribute(QLatin1String("theme"))) {
|
||||||
QString theme = attributes.value(QLatin1String("theme")).toString();
|
QString theme = attributes.value(QLatin1String("theme")).toString();
|
||||||
QString tint = attributes.value(QLatin1String("tint")).toString();
|
QString tint = attributes.value(QLatin1String("tint")).toString();
|
||||||
font->themeColor = theme + QLatin1Char(':') + tint;
|
format->setProperty(FormatPrivate::P_Font_ThemeColor, QString(theme + QLatin1Char(':') + tint));
|
||||||
}
|
}
|
||||||
} else if (reader.name() == QLatin1String("name")) {
|
} else if (reader.name() == QLatin1String("sz")) {
|
||||||
font->name = reader.attributes().value(QLatin1String("val")).toString();
|
int sz = attributes.value(QLatin1String("val")).toString().toInt();
|
||||||
} else if (reader.name() == QLatin1String("family")) {
|
format->setFontSize(sz);
|
||||||
font->family = reader.attributes().value(QLatin1String("val")).toString().toInt();
|
} else if (reader.name() == QLatin1String("u")) {
|
||||||
|
QString value = attributes.value(QLatin1String("val")).toString();
|
||||||
|
if (value == QLatin1String("double"))
|
||||||
|
format->setFontUnderline(Format::FontUnderlineDouble);
|
||||||
|
else if (value == QLatin1String("doubleAccounting"))
|
||||||
|
format->setFontUnderline(Format::FontUnderlineDoubleAccounting);
|
||||||
|
else if (value == QLatin1String("singleAccounting"))
|
||||||
|
format->setFontUnderline(Format::FontUnderlineSingleAccounting);
|
||||||
|
else
|
||||||
|
format->setFontUnderline(Format::FontUnderlineSingle);
|
||||||
|
} else if (reader.name() == QLatin1String("vertAlign")) {
|
||||||
|
QString value = attributes.value(QLatin1String("val")).toString();
|
||||||
|
if (value == QLatin1String("superscript"))
|
||||||
|
format->setFontScript(Format::FontScriptSuper);
|
||||||
|
else if (value == QLatin1String("subscript"))
|
||||||
|
format->setFontScript(Format::FontScriptSub);
|
||||||
} else if (reader.name() == QLatin1String("scheme")) {
|
} else if (reader.name() == QLatin1String("scheme")) {
|
||||||
font->scheme = reader.attributes().value(QLatin1String("val")).toString();
|
format->setProperty(FormatPrivate::P_Font_Scheme, attributes.value(QLatin1String("val")).toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reader.tokenType() == QXmlStreamReader::EndElement && reader.name() == QLatin1String("font"))
|
if (reader.tokenType() == QXmlStreamReader::EndElement && reader.name() == QLatin1String("font"))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
m_fontsList.append(font);
|
m_fontsList.append(format);
|
||||||
m_fontsHash.insert(font->key(), font);
|
m_fontsHash.insert(format->fontKey(), format);
|
||||||
font->setIndex(m_fontsList.size()-1);//first call key(), then setIndex()
|
format->setFontIndex(m_fontsList.size()-1);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -907,7 +909,11 @@ bool Styles::readCellXfs(XmlStreamReader &reader)
|
|||||||
if (fontIndex >= m_fontsList.size()) {
|
if (fontIndex >= m_fontsList.size()) {
|
||||||
qDebug("Error read styles.xml, cellXfs fontId");
|
qDebug("Error read styles.xml, cellXfs fontId");
|
||||||
} else {
|
} else {
|
||||||
format->d->fontData = *m_fontsList[fontIndex];
|
Format *fontFormat = m_fontsList[fontIndex];
|
||||||
|
for (int i=FormatPrivate::P_Font_STARTID; i<FormatPrivate::P_Font_ENDID; ++i) {
|
||||||
|
if (fontFormat->hasProperty(i))
|
||||||
|
format->setProperty(i, fontFormat->property(i));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ class StylesTest;
|
|||||||
namespace QXlsx {
|
namespace QXlsx {
|
||||||
|
|
||||||
class Format;
|
class Format;
|
||||||
struct XlsxFormatFontData;
|
|
||||||
struct XlsxFormatFillData;
|
struct XlsxFormatFillData;
|
||||||
struct XlsxFormatBorderData;
|
struct XlsxFormatBorderData;
|
||||||
class XmlStreamWriter;
|
class XmlStreamWriter;
|
||||||
@@ -98,10 +97,10 @@ private:
|
|||||||
QMap<int, QSharedPointer<XlsxFormatNumberData> > m_customNumFmtIdMap;
|
QMap<int, QSharedPointer<XlsxFormatNumberData> > m_customNumFmtIdMap;
|
||||||
QHash<QString, QSharedPointer<XlsxFormatNumberData> > m_customNumFmtsHash;
|
QHash<QString, QSharedPointer<XlsxFormatNumberData> > m_customNumFmtsHash;
|
||||||
int m_nextCustomNumFmtId;
|
int m_nextCustomNumFmtId;
|
||||||
QList<QSharedPointer<XlsxFormatFontData> > m_fontsList; //Keep a copy of unique fonts
|
QList<Format *> m_fontsList;
|
||||||
QList<QSharedPointer<XlsxFormatFillData> > m_fillsList; //Keep a copy of unique fills
|
QList<QSharedPointer<XlsxFormatFillData> > m_fillsList; //Keep a copy of unique fills
|
||||||
QList<QSharedPointer<XlsxFormatBorderData> > m_bordersList; //Keep a copy of unique borders
|
QList<QSharedPointer<XlsxFormatBorderData> > m_bordersList; //Keep a copy of unique borders
|
||||||
QHash<QByteArray, QSharedPointer<XlsxFormatFontData> > m_fontsHash;
|
QHash<QByteArray, Format *> m_fontsHash;
|
||||||
QHash<QByteArray, QSharedPointer<XlsxFormatFillData> > m_fillsHash;
|
QHash<QByteArray, QSharedPointer<XlsxFormatFillData> > m_fillsHash;
|
||||||
QHash<QByteArray, QSharedPointer<XlsxFormatBorderData> > m_bordersHash;
|
QHash<QByteArray, QSharedPointer<XlsxFormatBorderData> > m_bordersHash;
|
||||||
|
|
||||||
|
|||||||
@@ -95,6 +95,9 @@ void StylesTest::testReadFonts()
|
|||||||
styles.readFonts(reader);
|
styles.readFonts(reader);
|
||||||
|
|
||||||
QCOMPARE(styles.m_fontsList.size(), 3);
|
QCOMPARE(styles.m_fontsList.size(), 3);
|
||||||
|
QXlsx::Format *font0 = styles.m_fontsList[0];
|
||||||
|
QCOMPARE(font0->fontSize(), 11);
|
||||||
|
QCOMPARE(font0->fontName(), QString("Calibri"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void StylesTest::testReadFills()
|
void StylesTest::testReadFills()
|
||||||
|
|||||||
Reference in New Issue
Block a user