Changes for vlt Format version

This commit is contained in:
Ronan Le Tiec 2020-04-19 10:38:28 +02:00
parent 9e2c0e9cc5
commit c83ac5e493
4 changed files with 43 additions and 5 deletions

View file

@ -28,6 +28,7 @@
#include <QXmlStreamAttributes>
#include "vpuzzlelayoutfilereader.h"
#include "vpuzzlelayoutfilewriter.h"
VPuzzleLayoutFileReader::VPuzzleLayoutFileReader()
{
@ -53,14 +54,25 @@ bool VPuzzleLayoutFileReader::ReadFile(VPuzzleLayout *layout, QFile *file)
// if it doesn't start with layout, error
// if it starts with version > than current version, error
if (name() == QString("layout")
&& attributes().value(QString("version")) == QLatin1String("1.0.0"))
if (name() == QString("layout"))
{
ReadLayout(layout);
QString versionStr = attributes().value(QString("version")).toString();
QStringList versionStrParts = versionStr.split('.');
m_layoutFormatVersion = FORMAT_VERSION(versionStrParts.at(0).toInt(),versionStrParts.at(1).toInt(),versionStrParts.at(2).toInt());
if(VPuzzleLayoutFileWriter::LayoutFileFormatVersion >= m_layoutFormatVersion)
{
ReadLayout(layout);
}
else
{
// TODO better error handling
raiseError(QObject::tr("You're trying to open a layout that was created with a newer version of puzzle"));
}
}
else
{
raiseError(QObject::tr("The file is not a layout version 1.0.0 file."));
raiseError(QObject::tr("Wrong file structure"));
}
}
@ -218,6 +230,7 @@ void VPuzzleLayoutFileReader::ReadLayer(VPuzzleLayer *layer)
//---------------------------------------------------------------------------------------------------------------------
void VPuzzleLayoutFileReader::ReadPiece(VPuzzlePiece *piece)
{
Q_UNUSED(piece);
Q_ASSERT(isStartElement() && name() == QString("piece"));
// TODO read the attributes

View file

@ -30,6 +30,7 @@
#define VPUZZLELAYOUTFILEREADER_H
#include <QXmlStreamReader>
#include "../ifc/xml/vabstractconverter.h"
#include "vpuzzlelayout.h"
#include "vpuzzlelayer.h"
#include "vpuzzlepiece.h"
@ -43,6 +44,8 @@ public:
bool ReadFile(VPuzzleLayout *layout, QFile *file);
private:
int m_layoutFormatVersion;
void ReadLayout(VPuzzleLayout *layout);
void ReadProperties(VPuzzleLayout *layout);
void ReadTiles(VPuzzleLayout *layout);

View file

@ -34,6 +34,12 @@ VPuzzleLayoutFileWriter::VPuzzleLayoutFileWriter()
}
//---------------------------------------------------------------------------------------------------------------------
VPuzzleLayoutFileWriter::~VPuzzleLayoutFileWriter()
{
}
//---------------------------------------------------------------------------------------------------------------------
void VPuzzleLayoutFileWriter::WriteFile(VPuzzleLayout *layout, QFile *file)
{
@ -51,7 +57,7 @@ void VPuzzleLayoutFileWriter::WriteFile(VPuzzleLayout *layout, QFile *file)
void VPuzzleLayoutFileWriter::WriteLayout(VPuzzleLayout *layout)
{
writeStartElement("layout");
writeAttribute("version", "1.0.0"); // TODO / FIXME : get the version properly
writeAttribute("version", LayoutFileFormatVersionStr);
WriteProperties(layout);
WriteLayers(layout);

View file

@ -30,6 +30,7 @@
#define VPUZZLELAYOUTFILEWRITER_H
#include <QXmlStreamWriter>
#include "../ifc/xml/vabstractconverter.h"
#include "vpuzzlelayout.h"
#include "vpuzzlelayer.h"
#include "vpuzzlepiece.h"
@ -38,9 +39,24 @@ class VPuzzleLayoutFileWriter : public QXmlStreamWriter
{
public:
VPuzzleLayoutFileWriter();
~VPuzzleLayoutFileWriter();
void WriteFile(VPuzzleLayout *layout, QFile *file);
/*
* Version rules:
* 1. Version have three parts "major.minor.patch";
* 2. major part only for stable releases;
* 3. minor - 10 or more patch changes, or one big change;
* 4. patch - little change.
*/
/**
* @brief LayoutFileFormatVersion holds the version
*
*/
static Q_DECL_CONSTEXPR const int LayoutFileFormatVersion = FORMAT_VERSION(1, 0, 0);
const QString LayoutFileFormatVersionStr = QStringLiteral("1.0.0");
private:
void WriteLayout(VPuzzleLayout *layout);