Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions src/public/streammultiversion.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,16 @@ char StreamMultiversion::readVersion(QDataStream &stream) {
return version;

}

char StreamMultiversion::versionHeader(char, QDataStream &stream) {
return readVersion(stream);
}

char StreamMultiversion::versionHeader(char version, QDataStream &stream) const {
saveVersion(version, stream);
return version;

}


}
47 changes: 45 additions & 2 deletions src/public/streammultiversion.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,20 @@ namespace QH {
* class myClass: public StreamMultiversion {
* protected:
* QDataStream &fromStream(QDataStream &stream) override {
* char version = readVersion();
* char version = versionHeader(0, stream);
* readWrite(stream, data);
* return stream;
* }
*
* QDataStream &toStream(QDataStream &stream) const override {
* saveVersion(1, stream);
* char version = versionHeader(0, stream);
* readWrite(stream, data);
* return stream;
* }
*
* private:
* int data;
*
* }
*
*/
Expand All @@ -43,6 +48,8 @@ class HEARTSHARED_EXPORT StreamMultiversion: public StreamBase
~StreamMultiversion();
// StreamBase interface

protected:

/**
* @brief saveVersion save version of the object to the stream.
* @param version - version of the object.
Expand All @@ -62,6 +69,42 @@ class HEARTSHARED_EXPORT StreamMultiversion: public StreamBase
*/
char readVersion(QDataStream &stream);

/**
* @brief versionHeader this is new function that automaticaly choose what shuld be to-do (read/wirte).
* @param version this is a version of object.
* @param stream this is stream cheenel to save or read.
* @return version of object.
*/
char versionHeader(char version, QDataStream &stream);

/**
* @brief versionHeader this is new function that automaticaly choose what shuld be to-do (read/wirte).
* @param version this is a version of object.
* @param stream this is stream cheenel to save or read.
* @return version of object.
*/
char versionHeader(char version, QDataStream &stream) const;

/**
* @brief readWrite this method automaticaly choose what we need to-do read or write.
* @param stream
* @param data
*/
template <class T>
void readWrite(QDataStream &stream, const T& data) const {
stream << data;
}

/**
* @brief readWrite this method automaticaly choose what we need to-do read or write.
* @param stream
* @param data
*/
template <class T>
void readWrite(QDataStream &stream, T& data) {
stream >> data;

}

};
}
Expand Down
79 changes: 79 additions & 0 deletions src/public/translatablestring.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
//#
//# Copyright (C) 2025-2025 QuasarApp.
//# Distributed under the GPLv3 software license, see the accompanying
//# Everyone is permitted to copy and distribute verbatim copies
//# of this license document, but changing it is not allowed.
//#

#include "translatablestring.h"
#include "crc32constexper.h"
namespace QH {

TranslatableString::TranslatableString(const QString& data, bool isKey) {
_data = data;
_isKey = isKey;
}

bool TranslatableString::operator==(const TranslatableString &other) const {
return _data == other._data && _isKey == other._isKey && _args == other._args;
}

bool TranslatableString::isValid() const {
return true;
}

bool TranslatableString::isEmpty() const {
return _data.isEmpty();
}

QString TranslatableString::text() const {
if (_isKey) {
QString result = QObject::tr(_data.toLatin1());
for (const auto& arg: _args) {
result = result.arg(arg.text());
}

return result;
}

return _data;
}

const QString &TranslatableString::rawText() const {
return _data;
}

int TranslatableString::calcCrc32Hash() const {
return QuasarAppUtils::calculateCrc32(_data.toLatin1(), _data.size());
}

TranslatableString TranslatableString::tr(const QString &source) {
return {source, true};
}

QDataStream &TranslatableString::fromStream(QDataStream &stream) {
versionHeader(0, stream);

readWrite(stream, _isKey);
readWrite(stream, _data);
readWrite(stream, _args);

return stream;
}

QDataStream &TranslatableString::toStream(QDataStream &stream) const {
versionHeader(0, stream);

readWrite(stream, _isKey);
readWrite(stream, _data);
readWrite(stream, _args);

return stream;
}

TranslatableString &TranslatableString::setArgs(const QList<TranslatableString> &newArgs) {
_args = newArgs;

return *this;
}
}
92 changes: 92 additions & 0 deletions src/public/translatablestring.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
//#
//# Copyright (C) 2025-2025 QuasarApp.
//# Distributed under the GPLv3 software license, see the accompanying
//# Everyone is permitted to copy and distribute verbatim copies
//# of this license document, but changing it is not allowed.
//#



#ifndef TRANSLATABLESTRING_H
#define TRANSLATABLESTRING_H
#include <streammultiversion.h>


namespace QH {

/**
* @brief The TranslatableString class is a wrapper for The QString with boolean flag isKey.
* @note ise this class if you want to save text into file and want to get correct translations after reading.
*/
class HEARTSHARED_EXPORT TranslatableString: public StreamMultiversion
{
public:
TranslatableString(const QString& data = "",
bool isKey = false);

TranslatableString(const TranslatableString &) = default;
TranslatableString(TranslatableString &&) = default;
TranslatableString &operator=(const TranslatableString &) = default;
TranslatableString &operator=(TranslatableString &&) = default;

bool operator==(const TranslatableString& other) const;

// ValidableObject interface
bool isValid() const override;

bool isEmpty() const;

/**
* @brief text this method return translated text.
* @return
*/
QString text() const;

/**
* @brief rawText return raw key source.
* @return source text (key if object created with the qtTrId method)
*/
const QString& rawText() const;

/**
* @brief calcCrc32Hash this method calc hash from raw text.
* @return
*/
int calcCrc32Hash() const;

/**
* @brief tr this method create a string translation wrapper and save translation key for lupdate tool
* @param source this is text source.
* @return
*/
static TranslatableString tr(const QString& source);

/**
* @brief qtTrId this method create a string translation wrapper and save translation key for lupdate tool
* @param source this is a source text.
* @return translatable string.
* @see https://doc.qt.io/qt-6/qttranslation.html#qtTrId
*/
static TranslatableString qtTrId(const QString& source);

/**
* @brief setArgs this method set args for translation.
* @param newArgs this is a list of args.
* @return this object.
*/
TranslatableString& setArgs(const QList<TranslatableString> &newArgs);

protected:
QDataStream &fromStream(QDataStream &stream) override;
QDataStream &toStream(QDataStream &stream) const override;

private:
QString _data;
bool _isKey = false;
QList<TranslatableString> _args;

};
}


#endif // TRANSLATABLESTRING_H
2 changes: 1 addition & 1 deletion submodules/QuasarAppLib
Submodule QuasarAppLib updated 1 files
+1 −1 CMake