Specialized methods to write attribute value.

Certain types must be treated in a certain way.
This commit is contained in:
Roman Telezhynskyi 2020-04-23 17:24:06 +03:00
parent b2f26f02bc
commit aeebd2a095
2 changed files with 63 additions and 21 deletions

View File

@ -61,7 +61,7 @@ void VPuzzleLayoutFileWriter::WriteFile(VPuzzleLayout *layout, QFile *file)
void VPuzzleLayoutFileWriter::WriteLayout(VPuzzleLayout *layout)
{
writeStartElement(ML::TagLayout);
writeAttribute(ML::AttrVersion, LayoutFileFormatVersionStr);
SetAttribute(ML::AttrVersion, LayoutFileFormatVersionStr);
WriteProperties(layout);
WriteLayers(layout);
@ -83,11 +83,11 @@ void VPuzzleLayoutFileWriter::WriteProperties(VPuzzleLayout *layout)
WriteMargins(layout->GetLayoutMargins());
writeStartElement(ML::TagControl);
writeAttribute(ML::AttrFollowGrainLine, "no"); // TODO / Fixme get the right value
writeAttribute(ML::AttrWarningSuperposition, QString(layout->GetWarningSuperpositionOfPieces() ? "true" : "false"));
writeAttribute(ML::AttrWarningOutOfBound, QString(layout->GetWarningPiecesOutOfBound() ? "true" : "false"));
writeAttribute(ML::AttrStickyEdges, QString(layout->GetStickyEdges() ? "true" : "false"));
writeAttribute(ML::AttrPiecesGap, QString::number(layout->GetPiecesGap()));
SetAttribute(ML::AttrFollowGrainLine, "no"); // TODO / Fixme get the right value
SetAttribute(ML::AttrWarningSuperposition, layout->GetWarningSuperpositionOfPieces());
SetAttribute(ML::AttrWarningOutOfBound, layout->GetWarningPiecesOutOfBound());
SetAttribute(ML::AttrStickyEdges, layout->GetStickyEdges());
SetAttribute(ML::AttrPiecesGap, layout->GetPiecesGap());
writeEndElement(); // control
// WriteTiles(layout); TODO: when tile functionality implemented, then uncomment this line
@ -101,8 +101,8 @@ void VPuzzleLayoutFileWriter::WriteTiles(VPuzzleLayout *layout)
Q_UNUSED(layout); // to be removed
writeStartElement(ML::TagTiles);
writeAttribute(ML::AttrVisible, QString(false ? "true" : "false")); // TODO / Fixme get the right value
writeAttribute(ML::AttrMatchingMarks, "standard"); // TODO / Fixme get the right value
SetAttribute(ML::AttrVisible, false); // TODO / Fixme get the right value
SetAttribute(ML::AttrMatchingMarks, "standard"); // TODO / Fixme get the right value
QSizeF size = QSizeF(); // TODO get the right size
WriteSize(size);
@ -141,10 +141,10 @@ void VPuzzleLayoutFileWriter::WriteLayer(VPuzzleLayer *layer)
void VPuzzleLayoutFileWriter::WriteLayer(VPuzzleLayer *layer, const QString &tagName)
{
writeStartElement(tagName); // layer
writeAttribute(ML::AttrName, layer->GetName());
writeAttribute(ML::AttrVisible, QString(layer->GetIsVisible()? "true" : "false"));
SetAttribute(ML::AttrName, layer->GetName());
SetAttribute(ML::AttrVisible, layer->GetIsVisible());
// TODO selected info. Not sure how it's saved yet
//writeAttribute("selected", QString(layer->GetIsSelected()? "true" : "false"));
//SetAttribute("selected", layer->GetIsSelected());
QList<VPuzzlePiece*> pieces = layer->GetPieces();
@ -162,10 +162,10 @@ void VPuzzleLayoutFileWriter::WritePiece(VPuzzlePiece *piece)
Q_UNUSED(piece);
writeStartElement(ML::TagPiece);
writeAttribute(ML::AttrID, "uuid1"); // TODO / Fixme get the right value
writeAttribute(ML::AttrName, "Piece name"); // TODO / Fixme get the right value
writeAttribute(ML::AttrMirrored, "false"); // TODO / Fixme get the right value
writeAttribute(ML::AttrTransform, "string representation of the transformation"); // TODO / Fixme get the right value
SetAttribute(ML::AttrID, "uuid1"); // TODO / Fixme get the right value
SetAttribute(ML::AttrName, "Piece name"); // TODO / Fixme get the right value
SetAttribute(ML::AttrMirrored, "false"); // TODO / Fixme get the right value
SetAttribute(ML::AttrTransform, "string representation of the transformation"); // TODO / Fixme get the right value
// TODO cuttingLine
// TODO seamLine
@ -183,10 +183,10 @@ void VPuzzleLayoutFileWriter::WritePiece(VPuzzlePiece *piece)
void VPuzzleLayoutFileWriter::WriteMargins(QMarginsF margins)
{
writeStartElement(ML::TagMargin);
writeAttribute(ML::AttrLeft, QString::number(margins.left()));
writeAttribute(ML::AttrTop, QString::number(margins.top()));
writeAttribute(ML::AttrRight, QString::number(margins.right()));
writeAttribute(ML::AttrBottom, QString::number(margins.bottom()));
SetAttribute(ML::AttrLeft, margins.left());
SetAttribute(ML::AttrTop, margins.top());
SetAttribute(ML::AttrRight, margins.right());
SetAttribute(ML::AttrBottom, margins.bottom());
writeEndElement(); // margin
}
@ -207,7 +207,7 @@ void VPuzzleLayoutFileWriter::WriteSize(QSizeF size)
}
writeStartElement(ML::TagSize);
writeAttribute(ML::AttrWidth, QString::number(width));
writeAttribute(ML::AttrLength, QString::number(length));
SetAttribute(ML::AttrWidth, width);
SetAttribute(ML::AttrLength, length);
writeEndElement(); // size
}

View File

@ -71,7 +71,49 @@ private:
void WriteMargins(QMarginsF margins);
void WriteSize(QSizeF size);
template <typename T>
void SetAttribute(const QString &name, const T &value);
template <size_t N>
void SetAttribute(const QString &name, const char (&value)[N]);
};
//---------------------------------------------------------------------------------------------------------------------
template<typename T>
void VPuzzleLayoutFileWriter::SetAttribute(const QString &name, const T &value)
{
// See specification for xs:decimal
const QLocale locale = QLocale::c();
writeAttribute(name, locale.toString(value).remove(locale.groupSeparator()));
}
//---------------------------------------------------------------------------------------------------------------------
template <>
inline void VPuzzleLayoutFileWriter::SetAttribute<QString>(const QString &name, const QString &value)
{
writeAttribute(name, value);
}
//---------------------------------------------------------------------------------------------------------------------
template <>
inline void VPuzzleLayoutFileWriter::SetAttribute<QChar>(const QString &name, const QChar &value)
{
writeAttribute(name, value);
}
//---------------------------------------------------------------------------------------------------------------------
template <>
inline void VPuzzleLayoutFileWriter::SetAttribute<bool>(const QString &name, const bool &value)
{
writeAttribute(name, value ? trueStr : falseStr);
}
//---------------------------------------------------------------------------------------------------------------------
template <size_t N>
inline void VPuzzleLayoutFileWriter::SetAttribute(const QString &name, const char (&value)[N])
{
writeAttribute(name, QString(value));
}
#endif // VPUZZLELAYOUTFILEWRITER_H