corelib/serialization examples: clang-tidy and coding style clean-up
I overrode clang-tidy where it uglified or obfuscated and did some clean-up provoked or made possible by its changes. Konrad pointed out, in review, a constructor that could be = default; it could, in fact, vanish entirely as a result. Task-number: QTBUG-111228 Change-Id: I9b7744a3abaa29e6f9e0689d0f6985bfd88cd0fd Reviewed-by: Konrad Kujawa <konrad.kujawa@qt.io> (cherry picked from commit d8517fb1ab83e7051b1d2c2152014e7ff1760426) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
d066497527
commit
ca9a3ba6c8
@ -144,11 +144,7 @@ enum {
|
|||||||
//! [0]
|
//! [0]
|
||||||
struct CborDumper
|
struct CborDumper
|
||||||
{
|
{
|
||||||
enum DumpOption {
|
enum DumpOption { ShowCompact = 0x01, ShowWidthIndicators = 0x02, ShowAnnotated = 0x04 };
|
||||||
ShowCompact = 0x01,
|
|
||||||
ShowWidthIndicators = 0x02,
|
|
||||||
ShowAnnotated = 0x04
|
|
||||||
};
|
|
||||||
Q_DECLARE_FLAGS(DumpOptions, DumpOption)
|
Q_DECLARE_FLAGS(DumpOptions, DumpOption)
|
||||||
|
|
||||||
CborDumper(QFile *f, DumpOptions opts_);
|
CborDumper(QFile *f, DumpOptions opts_);
|
||||||
@ -185,8 +181,7 @@ static int cborNumberSize(quint64 value)
|
|||||||
return normalSize;
|
return normalSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
CborDumper::CborDumper(QFile *f, DumpOptions opts_)
|
CborDumper::CborDumper(QFile *f, DumpOptions opts_) : opts(opts_)
|
||||||
: opts(opts_)
|
|
||||||
{
|
{
|
||||||
// try to mmap the file, this is faster
|
// try to mmap the file, this is faster
|
||||||
char *ptr = reinterpret_cast<char *>(f->map(0, f->size(), QFile::MapPrivateOption));
|
char *ptr = reinterpret_cast<char *>(f->map(0, f->size(), QFile::MapPrivateOption));
|
||||||
@ -233,7 +228,8 @@ QCborError CborDumper::dump()
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T> static inline bool canConvertTo(double v)
|
template<typename T>
|
||||||
|
static inline bool canConvertTo(double v)
|
||||||
{
|
{
|
||||||
using TypeInfo = std::numeric_limits<T>;
|
using TypeInfo = std::numeric_limits<T>;
|
||||||
// The [conv.fpint] (7.10 Floating-integral conversions) section of the
|
// The [conv.fpint] (7.10 Floating-integral conversions) section of the
|
||||||
@ -688,7 +684,9 @@ void CborDumper::printByteArray(const QByteArray &ba)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case quint8(QCborKnownTags::ExpectedBase64url):
|
case quint8(QCborKnownTags::ExpectedBase64url):
|
||||||
printf("b64'%s'", ba.toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals).constData());
|
printf("b64'%s'",
|
||||||
|
ba.toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals)
|
||||||
|
.constData());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -154,7 +154,8 @@ QVariant CborDiagnosticDumper::loadFile(QIODevice *f, Converter *&outputConverte
|
|||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CborDiagnosticDumper::saveFile(QIODevice *f, const QVariant &contents, const QStringList &options)
|
void CborDiagnosticDumper::saveFile(QIODevice *f, const QVariant &contents,
|
||||||
|
const QStringList &options)
|
||||||
{
|
{
|
||||||
QCborValue::DiagnosticNotationOptions opts = QCborValue::LineWrapped;
|
QCborValue::DiagnosticNotationOptions opts = QCborValue::LineWrapped;
|
||||||
for (const QString &s : options) {
|
for (const QString &s : options) {
|
||||||
@ -183,8 +184,7 @@ void CborDiagnosticDumper::saveFile(QIODevice *f, const QVariant &contents, cons
|
|||||||
}
|
}
|
||||||
|
|
||||||
QTextStream out(f);
|
QTextStream out(f);
|
||||||
out << convertFromVariant(contents, Double).toDiagnosticNotation(opts)
|
out << convertFromVariant(contents, Double).toDiagnosticNotation(opts) << Qt::endl;
|
||||||
<< Qt::endl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CborConverter::CborConverter()
|
CborConverter::CborConverter()
|
||||||
@ -320,8 +320,9 @@ void CborConverter::saveFile(QIODevice *f, const QVariant &contents, const QStri
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
//! [4]
|
//! [4]
|
||||||
QCborValue v = convertFromVariant(contents,
|
QCborValue v =
|
||||||
useFloat16 == Always ? Float16 : useFloat == Always ? Float : Double);
|
convertFromVariant(contents,
|
||||||
|
useFloat16 == Always ? Float16 : useFloat == Always ? Float : Double);
|
||||||
QCborStreamWriter writer(f);
|
QCborStreamWriter writer(f);
|
||||||
if (useSignature)
|
if (useSignature)
|
||||||
writer.append(QCborKnownTags::Signature);
|
writer.append(QCborKnownTags::Signature);
|
||||||
|
@ -32,13 +32,9 @@ protected:
|
|||||||
public:
|
public:
|
||||||
static Converter *null;
|
static Converter *null;
|
||||||
|
|
||||||
enum Direction {
|
enum Direction { In = 1, Out = 2, InOut = 3 };
|
||||||
In = 1, Out = 2, InOut = 3
|
|
||||||
};
|
|
||||||
|
|
||||||
enum Option {
|
enum Option { SupportsArbitraryMapKeys = 0x01 };
|
||||||
SupportsArbitraryMapKeys = 0x01
|
|
||||||
};
|
|
||||||
Q_DECLARE_FLAGS(Options, Option)
|
Q_DECLARE_FLAGS(Options, Option)
|
||||||
|
|
||||||
virtual ~Converter() = 0;
|
virtual ~Converter() = 0;
|
||||||
|
@ -44,7 +44,6 @@ QDataStream &operator>>(QDataStream &ds, VariantOrderedMap &map)
|
|||||||
return ds;
|
return ds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static QString dumpVariant(const QVariant &v, const QString &indent = "\n"_L1)
|
static QString dumpVariant(const QVariant &v, const QString &indent = "\n"_L1)
|
||||||
{
|
{
|
||||||
QString result;
|
QString result;
|
||||||
@ -52,15 +51,14 @@ static QString dumpVariant(const QVariant &v, const QString &indent = "\n"_L1)
|
|||||||
|
|
||||||
int type = v.userType();
|
int type = v.userType();
|
||||||
if (type == qMetaTypeId<VariantOrderedMap>() || type == QMetaType::QVariantMap) {
|
if (type == qMetaTypeId<VariantOrderedMap>() || type == QMetaType::QVariantMap) {
|
||||||
const auto map = (type == QMetaType::QVariantMap) ?
|
const auto map = (type == QMetaType::QVariantMap) ? VariantOrderedMap(v.toMap())
|
||||||
VariantOrderedMap(v.toMap()) : qvariant_cast<VariantOrderedMap>(v);
|
: qvariant_cast<VariantOrderedMap>(v);
|
||||||
|
|
||||||
result = "Map {"_L1;
|
result = "Map {"_L1;
|
||||||
for (const auto &pair : map) {
|
for (const auto &pair : map) {
|
||||||
result += indented + dumpVariant(pair.first, indented);
|
result += indented + dumpVariant(pair.first, indented);
|
||||||
result.chop(1); // remove comma
|
result.chop(1); // remove comma
|
||||||
result += " => "_L1 + dumpVariant(pair.second, indented);
|
result += " => "_L1 + dumpVariant(pair.second, indented);
|
||||||
|
|
||||||
}
|
}
|
||||||
result.chop(1); // remove comma
|
result.chop(1); // remove comma
|
||||||
result += indent + "},"_L1;
|
result += indent + "},"_L1;
|
||||||
@ -159,8 +157,7 @@ QVariant DataStreamConverter::loadFile(QIODevice *f, Converter *&outputConverter
|
|||||||
outputConverter = &dataStreamDumper;
|
outputConverter = &dataStreamDumper;
|
||||||
|
|
||||||
char c;
|
char c;
|
||||||
if (f->read(sizeof(signature) -1) != signature ||
|
if (f->read(sizeof(signature) - 1) != signature || !f->getChar(&c) || (c != 'l' && c != 'B')) {
|
||||||
!f->getChar(&c) || (c != 'l' && c != 'B')) {
|
|
||||||
fprintf(stderr, "Could not load QDataStream file: invalid signature.\n");
|
fprintf(stderr, "Could not load QDataStream file: invalid signature.\n");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
@ -177,7 +174,8 @@ QVariant DataStreamConverter::loadFile(QIODevice *f, Converter *&outputConverter
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DataStreamConverter::saveFile(QIODevice *f, const QVariant &contents, const QStringList &options)
|
void DataStreamConverter::saveFile(QIODevice *f, const QVariant &contents,
|
||||||
|
const QStringList &options)
|
||||||
{
|
{
|
||||||
QDataStream::Version version = QDataStream::Qt_6_0;
|
QDataStream::Version version = QDataStream::Qt_6_0;
|
||||||
auto order = QDataStream::ByteOrder(QSysInfo::ByteOrder);
|
auto order = QDataStream::ByteOrder(QSysInfo::ByteOrder);
|
||||||
|
@ -13,8 +13,7 @@ using namespace Qt::StringLiterals;
|
|||||||
|
|
||||||
static JsonConverter jsonConverter;
|
static JsonConverter jsonConverter;
|
||||||
|
|
||||||
static const char jsonOptionHelp[] =
|
static const char jsonOptionHelp[] = "compact=no|yes Use compact JSON form.\n";
|
||||||
"compact=no|yes Use compact JSON form.\n";
|
|
||||||
|
|
||||||
static QJsonDocument convertFromVariant(const QVariant &v)
|
static QJsonDocument convertFromVariant(const QVariant &v)
|
||||||
{
|
{
|
||||||
@ -26,10 +25,6 @@ static QJsonDocument convertFromVariant(const QVariant &v)
|
|||||||
return doc;
|
return doc;
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonConverter::JsonConverter()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
QString JsonConverter::name()
|
QString JsonConverter::name()
|
||||||
{
|
{
|
||||||
return "json"_L1;
|
return "json"_L1;
|
||||||
|
@ -8,9 +8,6 @@
|
|||||||
|
|
||||||
class JsonConverter : public Converter
|
class JsonConverter : public Converter
|
||||||
{
|
{
|
||||||
public:
|
|
||||||
JsonConverter();
|
|
||||||
|
|
||||||
// Converter interface
|
// Converter interface
|
||||||
public:
|
public:
|
||||||
QString name() override;
|
QString name() override;
|
||||||
|
@ -89,10 +89,12 @@ int main(int argc, char *argv[])
|
|||||||
for (Converter *conv : std::as_const(*availableConverters)) {
|
for (Converter *conv : std::as_const(*availableConverters)) {
|
||||||
if (conv->name() == format) {
|
if (conv->name() == format) {
|
||||||
const char *help = conv->optionsHelp();
|
const char *help = conv->optionsHelp();
|
||||||
if (help)
|
if (help) {
|
||||||
printf("The following options are available for format '%s':\n\n%s", qPrintable(format), help);
|
printf("The following options are available for format '%s':\n\n%s",
|
||||||
else
|
qPrintable(format), help);
|
||||||
|
} else {
|
||||||
printf("Format '%s' supports no options.\n", qPrintable(format));
|
printf("Format '%s' supports no options.\n", qPrintable(format));
|
||||||
|
}
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,8 @@ QVariant NullConverter::loadFile(QIODevice *f, Converter *&outputConverter)
|
|||||||
void NullConverter::saveFile(QIODevice *f, const QVariant &contents, const QStringList &options)
|
void NullConverter::saveFile(QIODevice *f, const QVariant &contents, const QStringList &options)
|
||||||
{
|
{
|
||||||
if (!options.isEmpty()) {
|
if (!options.isEmpty()) {
|
||||||
fprintf(stderr, "Unknown option '%s' to null output. This format has no options.\n", qPrintable(options.first()));
|
fprintf(stderr, "Unknown option '%s' to null output. This format has no options.\n",
|
||||||
|
qPrintable(options.first()));
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,7 +97,8 @@ QVariant TextConverter::loadFile(QIODevice *f, Converter *&outputConverter)
|
|||||||
void TextConverter::saveFile(QIODevice *f, const QVariant &contents, const QStringList &options)
|
void TextConverter::saveFile(QIODevice *f, const QVariant &contents, const QStringList &options)
|
||||||
{
|
{
|
||||||
if (!options.isEmpty()) {
|
if (!options.isEmpty()) {
|
||||||
fprintf(stderr, "Unknown option '%s' to text output. This format has no options.\n", qPrintable(options.first()));
|
fprintf(stderr, "Unknown option '%s' to text output. This format has no options.\n",
|
||||||
|
qPrintable(options.first()));
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
|
|
||||||
class TextConverter : public Converter
|
class TextConverter : public Converter
|
||||||
{
|
{
|
||||||
|
|
||||||
// Converter interface
|
// Converter interface
|
||||||
public:
|
public:
|
||||||
QString name() override;
|
QString name() override;
|
||||||
|
@ -15,8 +15,7 @@
|
|||||||
|
|
||||||
using namespace Qt::StringLiterals;
|
using namespace Qt::StringLiterals;
|
||||||
|
|
||||||
static const char xmlOptionHelp[] =
|
static const char xmlOptionHelp[] = "compact=no|yes Use compact XML form.\n";
|
||||||
"compact=no|yes Use compact XML form.\n";
|
|
||||||
|
|
||||||
static XmlConverter xmlConverter;
|
static XmlConverter xmlConverter;
|
||||||
|
|
||||||
@ -49,8 +48,7 @@ static QVariantList listFromXml(QXmlStreamReader &xml, Converter::Options option
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stderr, "%lld:%lld: Invalid XML %s '%s'.\n",
|
fprintf(stderr, "%lld:%lld: Invalid XML %s '%s'.\n", xml.lineNumber(), xml.columnNumber(),
|
||||||
xml.lineNumber(), xml.columnNumber(),
|
|
||||||
qPrintable(xml.tokenString()), qPrintable(xml.name().toString()));
|
qPrintable(xml.tokenString()), qPrintable(xml.name().toString()));
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
@ -59,7 +57,8 @@ static QVariantList listFromXml(QXmlStreamReader &xml, Converter::Options option
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VariantOrderedMap::value_type mapEntryFromXml(QXmlStreamReader &xml, Converter::Options options)
|
static VariantOrderedMap::value_type mapEntryFromXml(QXmlStreamReader &xml,
|
||||||
|
Converter::Options options)
|
||||||
{
|
{
|
||||||
QVariant key, value;
|
QVariant key, value;
|
||||||
while (!xml.atEnd() && !(xml.isEndElement() && xml.name() == "entry"_L1)) {
|
while (!xml.atEnd() && !(xml.isEndElement() && xml.name() == "entry"_L1)) {
|
||||||
@ -91,8 +90,7 @@ static VariantOrderedMap::value_type mapEntryFromXml(QXmlStreamReader &xml, Conv
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stderr, "%lld:%lld: Invalid XML %s '%s'.\n",
|
fprintf(stderr, "%lld:%lld: Invalid XML %s '%s'.\n", xml.lineNumber(), xml.columnNumber(),
|
||||||
xml.lineNumber(), xml.columnNumber(),
|
|
||||||
qPrintable(xml.tokenString()), qPrintable(xml.name().toString()));
|
qPrintable(xml.tokenString()), qPrintable(xml.name().toString()));
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
@ -136,8 +134,7 @@ static QVariant mapFromXml(QXmlStreamReader &xml, Converter::Options options)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stderr, "%lld:%lld: Invalid XML %s '%s'.\n",
|
fprintf(stderr, "%lld:%lld: Invalid XML %s '%s'.\n", xml.lineNumber(), xml.columnNumber(),
|
||||||
xml.lineNumber(), xml.columnNumber(),
|
|
||||||
qPrintable(xml.tokenString()), qPrintable(xml.name().toString()));
|
qPrintable(xml.tokenString()), qPrintable(xml.name().toString()));
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
@ -171,8 +168,7 @@ static QVariant variantFromXml(QXmlStreamReader &xml, Converter::Options options
|
|||||||
if (xml.isCDATA() || xml.isCharacters() || xml.isEndElement())
|
if (xml.isCDATA() || xml.isCharacters() || xml.isEndElement())
|
||||||
break;
|
break;
|
||||||
|
|
||||||
fprintf(stderr, "%lld:%lld: Invalid XML %s '%s'.\n",
|
fprintf(stderr, "%lld:%lld: Invalid XML %s '%s'.\n", xml.lineNumber(), xml.columnNumber(),
|
||||||
xml.lineNumber(), xml.columnNumber(),
|
|
||||||
qPrintable(xml.tokenString()), qPrintable(name.toString()));
|
qPrintable(xml.tokenString()), qPrintable(name.toString()));
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
@ -269,8 +265,7 @@ static QVariant variantFromXml(QXmlStreamReader &xml, Converter::Options options
|
|||||||
} while (xml.isComment() || xml.isWhitespace());
|
} while (xml.isComment() || xml.isWhitespace());
|
||||||
|
|
||||||
if (!xml.isEndElement()) {
|
if (!xml.isEndElement()) {
|
||||||
fprintf(stderr, "%lld:%lld: Invalid XML %s '%s'.\n",
|
fprintf(stderr, "%lld:%lld: Invalid XML %s '%s'.\n", xml.lineNumber(), xml.columnNumber(),
|
||||||
xml.lineNumber(), xml.columnNumber(),
|
|
||||||
qPrintable(xml.tokenString()), qPrintable(name.toString()));
|
qPrintable(xml.tokenString()), qPrintable(name.toString()));
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
@ -289,9 +284,9 @@ static void variantToXml(QXmlStreamWriter &xml, const QVariant &v)
|
|||||||
variantToXml(xml, v);
|
variantToXml(xml, v);
|
||||||
xml.writeEndElement();
|
xml.writeEndElement();
|
||||||
} else if (type == QMetaType::QVariantMap || type == qMetaTypeId<VariantOrderedMap>()) {
|
} else if (type == QMetaType::QVariantMap || type == qMetaTypeId<VariantOrderedMap>()) {
|
||||||
const VariantOrderedMap map = (type == QMetaType::QVariantMap) ?
|
const VariantOrderedMap map = (type == QMetaType::QVariantMap)
|
||||||
VariantOrderedMap(v.toMap()) :
|
? VariantOrderedMap(v.toMap())
|
||||||
qvariant_cast<VariantOrderedMap>(v);
|
: qvariant_cast<VariantOrderedMap>(v);
|
||||||
|
|
||||||
xml.writeStartElement("map");
|
xml.writeStartElement("map");
|
||||||
for (const auto &pair : map) {
|
for (const auto &pair : map) {
|
||||||
|
@ -6,15 +6,10 @@
|
|||||||
#include <QMetaEnum>
|
#include <QMetaEnum>
|
||||||
#include <QTextStream>
|
#include <QTextStream>
|
||||||
|
|
||||||
Character::Character()
|
Character::Character() = default;
|
||||||
= default;
|
|
||||||
|
|
||||||
Character::Character(const QString &name,
|
Character::Character(const QString &name, int level, Character::ClassType classType)
|
||||||
int level,
|
: mName(name), mLevel(level), mClassType(classType)
|
||||||
Character::ClassType classType) :
|
|
||||||
mName(name),
|
|
||||||
mLevel(level),
|
|
||||||
mClassType(classType)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,9 +16,7 @@ class Character
|
|||||||
Q_GADGET
|
Q_GADGET
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum ClassType {
|
enum ClassType { Warrior, Mage, Archer };
|
||||||
Warrior, Mage, Archer
|
|
||||||
};
|
|
||||||
Q_ENUM(ClassType)
|
Q_ENUM(ClassType)
|
||||||
|
|
||||||
Character();
|
Character();
|
||||||
@ -37,6 +35,7 @@ public:
|
|||||||
QJsonObject toJson() const;
|
QJsonObject toJson() const;
|
||||||
|
|
||||||
void print(QTextStream &s, int indentation = 0) const;
|
void print(QTextStream &s, int indentation = 0) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString mName;
|
QString mName;
|
||||||
int mLevel = 0;
|
int mLevel = 0;
|
||||||
|
@ -38,11 +38,9 @@ void Game::newGame()
|
|||||||
QList<Character> villageNpcs;
|
QList<Character> villageNpcs;
|
||||||
villageNpcs.reserve(2);
|
villageNpcs.reserve(2);
|
||||||
villageNpcs.append(Character("Barry the Blacksmith"_L1,
|
villageNpcs.append(Character("Barry the Blacksmith"_L1,
|
||||||
QRandomGenerator::global()->bounded(8, 11),
|
QRandomGenerator::global()->bounded(8, 11), Character::Warrior));
|
||||||
Character::Warrior));
|
|
||||||
villageNpcs.append(Character("Terry the Trader"_L1,
|
villageNpcs.append(Character("Terry the Trader"_L1,
|
||||||
QRandomGenerator::global()->bounded(6, 8),
|
QRandomGenerator::global()->bounded(6, 8), Character::Warrior));
|
||||||
Character::Warrior));
|
|
||||||
village.setNpcs(villageNpcs);
|
village.setNpcs(villageNpcs);
|
||||||
mLevels.append(village);
|
mLevels.append(village);
|
||||||
|
|
||||||
@ -50,14 +48,11 @@ void Game::newGame()
|
|||||||
QList<Character> dungeonNpcs;
|
QList<Character> dungeonNpcs;
|
||||||
dungeonNpcs.reserve(3);
|
dungeonNpcs.reserve(3);
|
||||||
dungeonNpcs.append(Character("Eric the Evil"_L1,
|
dungeonNpcs.append(Character("Eric the Evil"_L1,
|
||||||
QRandomGenerator::global()->bounded(18, 26),
|
QRandomGenerator::global()->bounded(18, 26), Character::Mage));
|
||||||
Character::Mage));
|
|
||||||
dungeonNpcs.append(Character("Eric's Left Minion"_L1,
|
dungeonNpcs.append(Character("Eric's Left Minion"_L1,
|
||||||
QRandomGenerator::global()->bounded(5, 7),
|
QRandomGenerator::global()->bounded(5, 7), Character::Warrior));
|
||||||
Character::Warrior));
|
|
||||||
dungeonNpcs.append(Character("Eric's Right Minion"_L1,
|
dungeonNpcs.append(Character("Eric's Right Minion"_L1,
|
||||||
QRandomGenerator::global()->bounded(4, 9),
|
QRandomGenerator::global()->bounded(4, 9), Character::Warrior));
|
||||||
Character::Warrior));
|
|
||||||
dungeon.setNpcs(dungeonNpcs);
|
dungeon.setNpcs(dungeonNpcs);
|
||||||
mLevels.append(dungeon);
|
mLevels.append(dungeon);
|
||||||
}
|
}
|
||||||
@ -81,10 +76,8 @@ bool Game::loadGame(Game::SaveFormat saveFormat)
|
|||||||
|
|
||||||
read(loadDoc.object());
|
read(loadDoc.object());
|
||||||
|
|
||||||
QTextStream(stdout) << "Loaded save for "
|
QTextStream(stdout) << "Loaded save for " << loadDoc["player"]["name"].toString()
|
||||||
<< loadDoc["player"]["name"].toString()
|
<< " using " << (saveFormat != Json ? "CBOR" : "JSON") << "...\n";
|
||||||
<< " using "
|
|
||||||
<< (saveFormat != Json ? "CBOR" : "JSON") << "...\n";
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//! [loadGame]
|
//! [loadGame]
|
||||||
@ -100,9 +93,8 @@ bool Game::saveGame(Game::SaveFormat saveFormat) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
QJsonObject gameObject = toJson();
|
QJsonObject gameObject = toJson();
|
||||||
saveFile.write(saveFormat == Json
|
saveFile.write(saveFormat == Json ? QJsonDocument(gameObject).toJson()
|
||||||
? QJsonDocument(gameObject).toJson()
|
: QCborValue::fromJsonValue(gameObject).toCbor());
|
||||||
: QCborValue::fromJsonValue(gameObject).toCbor());
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -16,9 +16,7 @@ QT_FORWARD_DECLARE_CLASS(QTextStream)
|
|||||||
class Game
|
class Game
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum SaveFormat {
|
enum SaveFormat { Json, Binary };
|
||||||
Json, Binary
|
|
||||||
};
|
|
||||||
|
|
||||||
Character player() const;
|
Character player() const;
|
||||||
QList<Level> levels() const;
|
QList<Level> levels() const;
|
||||||
@ -31,6 +29,7 @@ public:
|
|||||||
QJsonObject toJson() const;
|
QJsonObject toJson() const;
|
||||||
|
|
||||||
void print(QTextStream &s, int indentation = 0) const;
|
void print(QTextStream &s, int indentation = 0) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Character mPlayer;
|
Character mPlayer;
|
||||||
QList<Level> mLevels;
|
QList<Level> mLevels;
|
||||||
|
@ -6,9 +6,7 @@
|
|||||||
#include <QJsonArray>
|
#include <QJsonArray>
|
||||||
#include <QTextStream>
|
#include <QTextStream>
|
||||||
|
|
||||||
Level::Level(const QString &name) : mName(name)
|
Level::Level(const QString &name) : mName(name) { }
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
QString Level::name() const
|
QString Level::name() const
|
||||||
{
|
{
|
||||||
@ -61,8 +59,7 @@ void Level::print(QTextStream &s, int indentation) const
|
|||||||
{
|
{
|
||||||
const QString indent(indentation * 2, ' ');
|
const QString indent(indentation * 2, ' ');
|
||||||
|
|
||||||
s << indent << "Name:\t" << mName << "\n"
|
s << indent << "Name:\t" << mName << "\n" << indent << "NPCs:\n";
|
||||||
<< indent << "NPCs:\n";
|
|
||||||
for (const Character &character : mNpcs)
|
for (const Character &character : mNpcs)
|
||||||
character.print(s, indentation + 1);
|
character.print(s, indentation + 1);
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@ public:
|
|||||||
QJsonObject toJson() const;
|
QJsonObject toJson() const;
|
||||||
|
|
||||||
void print(QTextStream &s, int indentation = 0) const;
|
void print(QTextStream &s, int indentation = 0) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString mName;
|
QString mName;
|
||||||
QList<Character> mNpcs;
|
QList<Character> mNpcs;
|
||||||
|
@ -23,8 +23,7 @@
|
|||||||
using namespace Qt::StringLiterals;
|
using namespace Qt::StringLiterals;
|
||||||
|
|
||||||
//! [0]
|
//! [0]
|
||||||
MainWindow::MainWindow()
|
MainWindow::MainWindow() : treeWidget(new QTreeWidget)
|
||||||
: treeWidget(new QTreeWidget)
|
|
||||||
{
|
{
|
||||||
treeWidget->header()->setSectionResizeMode(QHeaderView::Stretch);
|
treeWidget->header()->setSectionResizeMode(QHeaderView::Stretch);
|
||||||
treeWidget->setHeaderLabels(QStringList{tr("Title"), tr("Location")});
|
treeWidget->setHeaderLabels(QStringList{tr("Title"), tr("Location")});
|
||||||
@ -101,21 +100,19 @@ void MainWindow::open()
|
|||||||
if (!file.open(QFile::ReadOnly | QFile::Text)) {
|
if (!file.open(QFile::ReadOnly | QFile::Text)) {
|
||||||
QMessageBox::warning(this, tr("QXmlStream Bookmarks"),
|
QMessageBox::warning(this, tr("QXmlStream Bookmarks"),
|
||||||
tr("Cannot read file %1:\n%2.")
|
tr("Cannot read file %1:\n%2.")
|
||||||
.arg(QDir::toNativeSeparators(fileName),
|
.arg(QDir::toNativeSeparators(fileName), file.errorString()));
|
||||||
file.errorString()));
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
XbelReader reader(treeWidget);
|
XbelReader reader(treeWidget);
|
||||||
if (!reader.read(&file)) {
|
if (!reader.read(&file)) {
|
||||||
QMessageBox::warning(this, tr("QXmlStream Bookmarks"),
|
QMessageBox::warning(
|
||||||
tr("Parse error in file %1:\n\n%2")
|
this, tr("QXmlStream Bookmarks"),
|
||||||
.arg(QDir::toNativeSeparators(fileName),
|
tr("Parse error in file %1:\n\n%2")
|
||||||
reader.errorString()));
|
.arg(QDir::toNativeSeparators(fileName), reader.errorString()));
|
||||||
} else {
|
} else {
|
||||||
statusBar()->showMessage(tr("File loaded"), 2000);
|
statusBar()->showMessage(tr("File loaded"), 2000);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
//! [3]
|
//! [3]
|
||||||
|
|
||||||
@ -134,8 +131,7 @@ void MainWindow::saveAs()
|
|||||||
if (!file.open(QFile::WriteOnly | QFile::Text)) {
|
if (!file.open(QFile::WriteOnly | QFile::Text)) {
|
||||||
QMessageBox::warning(this, tr("QXmlStream Bookmarks"),
|
QMessageBox::warning(this, tr("QXmlStream Bookmarks"),
|
||||||
tr("Cannot write file %1:\n%2.")
|
tr("Cannot write file %1:\n%2.")
|
||||||
.arg(QDir::toNativeSeparators(fileName),
|
.arg(QDir::toNativeSeparators(fileName), file.errorString()));
|
||||||
file.errorString()));
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,15 +9,13 @@
|
|||||||
using namespace Qt::StringLiterals;
|
using namespace Qt::StringLiterals;
|
||||||
|
|
||||||
//! [0]
|
//! [0]
|
||||||
XbelReader::XbelReader(QTreeWidget *treeWidget)
|
XbelReader::XbelReader(QTreeWidget *treeWidget) : treeWidget(treeWidget)
|
||||||
: treeWidget(treeWidget)
|
|
||||||
{
|
{
|
||||||
QStyle *style = treeWidget->style();
|
QStyle *style = treeWidget->style();
|
||||||
|
|
||||||
folderIcon.addPixmap(style->standardPixmap(QStyle::SP_DirClosedIcon),
|
folderIcon.addPixmap(style->standardPixmap(QStyle::SP_DirClosedIcon), QIcon::Normal,
|
||||||
QIcon::Normal, QIcon::Off);
|
QIcon::Off);
|
||||||
folderIcon.addPixmap(style->standardPixmap(QStyle::SP_DirOpenIcon),
|
folderIcon.addPixmap(style->standardPixmap(QStyle::SP_DirOpenIcon), QIcon::Normal, QIcon::On);
|
||||||
QIcon::Normal, QIcon::On);
|
|
||||||
bookmarkIcon.addPixmap(style->standardPixmap(QStyle::SP_FileIcon));
|
bookmarkIcon.addPixmap(style->standardPixmap(QStyle::SP_FileIcon));
|
||||||
}
|
}
|
||||||
//! [0]
|
//! [0]
|
||||||
@ -28,12 +26,10 @@ bool XbelReader::read(QIODevice *device)
|
|||||||
xml.setDevice(device);
|
xml.setDevice(device);
|
||||||
|
|
||||||
if (xml.readNextStartElement()) {
|
if (xml.readNextStartElement()) {
|
||||||
if (xml.name() == "xbel"_L1
|
if (xml.name() == "xbel"_L1 && xml.attributes().value("version"_L1) == "1.0"_L1)
|
||||||
&& xml.attributes().value("version"_L1) == "1.0"_L1) {
|
|
||||||
readXBEL();
|
readXBEL();
|
||||||
} else {
|
else
|
||||||
xml.raiseError(QObject::tr("The file is not an XBEL version 1.0 file."));
|
xml.raiseError(QObject::tr("The file is not an XBEL version 1.0 file."));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return !xml.error();
|
return !xml.error();
|
||||||
|
@ -9,8 +9,7 @@
|
|||||||
using namespace Qt::StringLiterals;
|
using namespace Qt::StringLiterals;
|
||||||
|
|
||||||
//! [0]
|
//! [0]
|
||||||
XbelWriter::XbelWriter(const QTreeWidget *treeWidget)
|
XbelWriter::XbelWriter(const QTreeWidget *treeWidget) : treeWidget(treeWidget)
|
||||||
: treeWidget(treeWidget)
|
|
||||||
{
|
{
|
||||||
xml.setAutoFormatting(true);
|
xml.setAutoFormatting(true);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user