Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
@@ -0,0 +1,215 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* PixelTextBoxData as Addon to GeometryModel
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
* Created by Norbert Thoden, SLSE, 2023-04-27
|
||||
*/
|
||||
|
||||
#include "geometry_pixelTextBox.h"
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonValue>
|
||||
#include <QJsonArray>
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
PixelTextBoxData::PixelTextBoxData(const QString &htmlText, const QColor &backgroundColor)
|
||||
: m_htmlText(htmlText), m_backgroundColor(backgroundColor)
|
||||
{
|
||||
}
|
||||
|
||||
void PixelTextBoxData::reset()
|
||||
{
|
||||
m_htmlText.clear();
|
||||
m_backgroundColor = QColor();
|
||||
m_position = QPoint();
|
||||
m_size = QSize();
|
||||
}
|
||||
|
||||
bool PixelTextBoxData::isEmpty() const
|
||||
{
|
||||
return m_htmlText.isEmpty();
|
||||
}
|
||||
|
||||
QString PixelTextBoxData::toDebugString() const
|
||||
{
|
||||
QJsonDocument jDoc(toJson());
|
||||
return QString::fromStdString(jDoc.toJson(QJsonDocument::JsonFormat::Compact).toStdString());
|
||||
}
|
||||
|
||||
bool PixelTextBoxData::operator==(const PixelTextBoxData &o) const
|
||||
{
|
||||
return m_htmlText == o.m_htmlText &&
|
||||
m_backgroundColor == o.m_backgroundColor &&
|
||||
m_position == o.m_position &&
|
||||
m_size == o.m_size;
|
||||
}
|
||||
|
||||
|
||||
QJsonObject PixelTextBoxData::toJson() const
|
||||
{
|
||||
QJsonObject obj;
|
||||
obj[QStringLiteral("text")] = m_htmlText;
|
||||
obj[QStringLiteral("backgroundColor")] = m_backgroundColor.name();
|
||||
|
||||
obj[QStringLiteral("position")] = QJsonObject({{QStringLiteral("x"), m_position.x()},
|
||||
{QStringLiteral("y"), m_position.y()},
|
||||
});
|
||||
|
||||
obj[QStringLiteral("size")] = QJsonObject({{QStringLiteral("width"), m_size.width()},
|
||||
{QStringLiteral("height"), m_size.height()},
|
||||
});
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
||||
bool get(const QJsonObject &obj, const QString &key, int &val)
|
||||
{
|
||||
const auto jVal = obj[key];
|
||||
if (!jVal.isDouble())
|
||||
{
|
||||
qCritical() << " isDouble failed";
|
||||
}
|
||||
val = jVal.toInt();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
PixelTextBoxData PixelTextBoxData::fromJson(const QJsonValue &json)
|
||||
{
|
||||
if (json.isUndefined())
|
||||
return {};
|
||||
if (!json.isObject())
|
||||
return {};
|
||||
|
||||
PixelTextBoxData ret;
|
||||
|
||||
// text
|
||||
ret.m_htmlText = json[QStringLiteral("text")].toString();
|
||||
|
||||
// backgroundColor
|
||||
QString temp = json[QStringLiteral("backgroundColor")].toString();
|
||||
ret.m_backgroundColor.setNamedColor(temp);
|
||||
|
||||
// position:
|
||||
{
|
||||
const auto jVal = json[QStringLiteral("position")];
|
||||
get(jVal.toObject(), QStringLiteral("x"), ret.m_position.rx());
|
||||
get(jVal.toObject(), QStringLiteral("y"), ret.m_position.ry());
|
||||
}
|
||||
|
||||
// size:
|
||||
{
|
||||
const auto jVal = json[QStringLiteral("size")];
|
||||
get(jVal.toObject(), QStringLiteral("width"), ret.m_size.rwidth());
|
||||
get(jVal.toObject(), QStringLiteral("height"), ret.m_size.rheight());
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
QString PixelTextBoxData::toJsonStr(QJsonDocument::JsonFormat format) const
|
||||
{
|
||||
QJsonObject obj = toJson();
|
||||
QJsonDocument jDoc(obj);
|
||||
return QString::fromStdString(jDoc.toJson(format).toStdString());
|
||||
}
|
||||
|
||||
PixelTextBoxData PixelTextBoxData::fromJsonStr(const QString &jsonStr)
|
||||
{
|
||||
if (jsonStr.isEmpty())
|
||||
return {};
|
||||
|
||||
QJsonParseError parseError;
|
||||
QJsonDocument jDoc(QJsonDocument::fromJson(jsonStr.toStdString().c_str(), &parseError));
|
||||
|
||||
if (parseError.error != QJsonParseError::NoError)
|
||||
{
|
||||
qCritical() << " QJsonParseError->errorString: '" << parseError.errorString() << "'"
|
||||
<< ", offset: " << parseError.offset;
|
||||
return {};
|
||||
}
|
||||
|
||||
QJsonObject jObj = jDoc.object();
|
||||
if (jObj.isEmpty())
|
||||
return {};
|
||||
|
||||
return PixelTextBoxData::fromJson(jObj);
|
||||
}
|
||||
|
||||
//
|
||||
// Container
|
||||
//
|
||||
|
||||
QJsonObject PixelTextBoxData::pixelTextBoxContainerToJson(const QVector<PixelTextBoxData> &ptbdCont)
|
||||
{
|
||||
QJsonArray arr;
|
||||
for (const PixelTextBoxData &item : qAsConst(ptbdCont))
|
||||
arr.push_back(item.toJson());
|
||||
|
||||
QJsonObject jObj;
|
||||
jObj[QStringLiteral("PixelTextBoxData")] = arr;
|
||||
return jObj;
|
||||
}
|
||||
QVector<PixelTextBoxData> PixelTextBoxData::pixelTextBoxContainerFromJson(const QJsonValue &json)
|
||||
{
|
||||
QVector<PixelTextBoxData> ret;
|
||||
|
||||
if (!json.isObject())
|
||||
return ret;
|
||||
|
||||
const QJsonObject jObj = json.toObject();
|
||||
if (!jObj.contains(QStringLiteral("PixelTextBoxData")))
|
||||
return ret;
|
||||
|
||||
const QJsonArray &array = jObj[QStringLiteral("PixelTextBoxData")].toArray();
|
||||
ret.reserve(array.size());
|
||||
for(int i = 0; i < array.size(); ++i)
|
||||
ret.push_back(PixelTextBoxData::fromJson(array.at(i)));
|
||||
return ret;
|
||||
}
|
||||
|
||||
QString PixelTextBoxData::pixelTextBoxContainerToJsonStr(const QVector<PixelTextBoxData> &ptbdCont, QJsonDocument::JsonFormat format)
|
||||
{
|
||||
QJsonObject obj = pixelTextBoxContainerToJson(ptbdCont);
|
||||
QJsonDocument jDoc(obj);
|
||||
return QString::fromStdString(jDoc.toJson(format).toStdString());
|
||||
}
|
||||
QVector<PixelTextBoxData> PixelTextBoxData::pixelTextBoxContainerFromJsonStr(const QString &jsonStr)
|
||||
{
|
||||
if (jsonStr.isEmpty())
|
||||
return {};
|
||||
|
||||
QJsonParseError parseError;
|
||||
QJsonDocument jDoc(QJsonDocument::fromJson(jsonStr.toStdString().c_str(), &parseError));
|
||||
|
||||
if (parseError.error != QJsonParseError::NoError)
|
||||
{
|
||||
qCritical() << " QJsonParseError->errorString: '" << parseError.errorString() << "'"
|
||||
<< ", offset: " << parseError.offset;
|
||||
return {};
|
||||
}
|
||||
|
||||
QJsonObject jObj = jDoc.object();
|
||||
if (jObj.isEmpty())
|
||||
return {};
|
||||
|
||||
return PixelTextBoxData::pixelTextBoxContainerFromJson(jObj);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// output operator:
|
||||
//-----------------------------------------------------------------------------
|
||||
GEOMETRYMODEL_EXPORT std::ostream &operator<<(std::ostream &stream, const PixelTextBoxData &value)
|
||||
{
|
||||
stream << value.toDebugString().toStdString().c_str();
|
||||
return stream;
|
||||
}
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
Reference in new issue
Block a user