feat: track instance copies that use links
confirm deleations when other instances link to it Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com>
This commit is contained in:
@ -183,3 +183,21 @@ void INIFile::set(QString key, QVariant val)
|
||||
{
|
||||
this->operator[](key) = val;
|
||||
}
|
||||
|
||||
void INIFile::setList(QString key, QVariantList val)
|
||||
{
|
||||
QString stringList = QJsonDocument(QVariant(val).toJsonArray()).toJson(QJsonDocument::Compact);
|
||||
|
||||
this->operator[](key) = stringList;
|
||||
}
|
||||
|
||||
QVariantList INIFile::getList(QString key, QVariantList def) const
|
||||
{
|
||||
if (this->contains(key)) {
|
||||
auto src = this->operator[](key);
|
||||
|
||||
return QJsonDocument::fromJson(src.toByteArray()).toVariant().toList();
|
||||
}
|
||||
|
||||
return def;
|
||||
}
|
||||
|
@ -19,6 +19,9 @@
|
||||
#include <QVariant>
|
||||
#include <QIODevice>
|
||||
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonArray>
|
||||
|
||||
// Sectionless INI parser (for instance config files)
|
||||
class INIFile : public QMap<QString, QVariant>
|
||||
{
|
||||
@ -33,4 +36,36 @@ public:
|
||||
void set(QString key, QVariant val);
|
||||
static QString unescape(QString orig);
|
||||
static QString escape(QString orig);
|
||||
|
||||
void setList(QString key, QVariantList val);
|
||||
template <typename T> void setList(QString key, QList<T> val)
|
||||
{
|
||||
QVariantList variantList;
|
||||
variantList.reserve(val.size());
|
||||
for (const T& v : val)
|
||||
{
|
||||
variantList.append(v);
|
||||
}
|
||||
|
||||
this->setList(key, variantList);
|
||||
}
|
||||
|
||||
QVariantList getList(QString key, QVariantList def) const;
|
||||
template <typename T> QList<T> getList(QString key, QList<T> def) const
|
||||
{
|
||||
if (this->contains(key)) {
|
||||
QVariant src = this->operator[](key);
|
||||
QVariantList variantList = QJsonDocument::fromJson(src.toByteArray()).toVariant().toList();
|
||||
|
||||
QList<T>TList;
|
||||
TList.reserve(variantList.size());
|
||||
for (const QVariant& v : variantList)
|
||||
{
|
||||
TList.append(v.value<T>());
|
||||
}
|
||||
return TList;
|
||||
}
|
||||
|
||||
return def;
|
||||
}
|
||||
};
|
||||
|
@ -121,6 +121,19 @@ bool SettingsObject::contains(const QString &id)
|
||||
return m_settings.contains(id);
|
||||
}
|
||||
|
||||
bool SettingsObject::setList(const QString &id, QVariantList value)
|
||||
{
|
||||
QString stringList = QJsonDocument(QVariant(value).toJsonArray()).toJson(QJsonDocument::Compact);
|
||||
|
||||
return set(id, stringList);
|
||||
}
|
||||
|
||||
QVariantList SettingsObject::getList(const QString &id)
|
||||
{
|
||||
QVariant value = this->get(id);
|
||||
return QJsonDocument::fromJson(value.toByteArray()).toVariant().toList();
|
||||
}
|
||||
|
||||
bool SettingsObject::reload()
|
||||
{
|
||||
for (auto setting : m_settings.values())
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <QMap>
|
||||
#include <QStringList>
|
||||
#include <QVariant>
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonArray>
|
||||
#include <memory>
|
||||
|
||||
class Setting;
|
||||
@ -142,6 +144,45 @@ public:
|
||||
*/
|
||||
bool contains(const QString &id);
|
||||
|
||||
/*!
|
||||
* \brief Sets the value of the setting with the given ID with a json list.
|
||||
* If no setting with the given ID exists, returns false
|
||||
* \param id The ID of the setting to change.
|
||||
* \param value The new value of the setting.
|
||||
*/
|
||||
bool setList(const QString &id, QVariantList value);
|
||||
template <typename T> bool setList(const QString &id, QList<T> val)
|
||||
{
|
||||
QVariantList variantList;
|
||||
variantList.reserve(val.size());
|
||||
for (const T& v : val)
|
||||
{
|
||||
variantList.append(v);
|
||||
}
|
||||
|
||||
return setList(id, variantList);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Gets the value of the setting with the given ID as if it were a json list.
|
||||
* \param id The ID of the setting to change.
|
||||
* \return The setting's value as a QVariantList.
|
||||
* If no setting with the given ID exists, returns an empty QVariantList.
|
||||
*/
|
||||
QVariantList getList(const QString &id);
|
||||
template <typename T> QList<T> getList(const QString &id)
|
||||
{
|
||||
QVariantList variantList = this->getList(id);
|
||||
|
||||
QList<T>TList;
|
||||
TList.reserve(variantList.size());
|
||||
for (const QVariant& v : variantList)
|
||||
{
|
||||
TList.append(v.value<T>());
|
||||
}
|
||||
return TList;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Reloads the settings and emit signals for changed settings
|
||||
* \return True if reloading was successful
|
||||
|
Reference in New Issue
Block a user