Sandboxie/SandboxiePlus/SandMan/Engine/IniObject.h

147 lines
5.6 KiB
C++

#pragma once
#include "BoxEngine.h"
#include "../SbiePlusAPI.h"
#include "../../MiscHelpers/Common/Settings.h"
class CIniObject : public QObject
{
Q_OBJECT
public:
CIniObject(const QSharedPointer<CSbieIni>& pIni, bool WithTemplate, QObject* parent) : QObject(parent), m_pIni(pIni), m_WithTemplate(WithTemplate) {}
CIniObject(const QSharedPointer<CSbieIni>& pIni, QObject* parent) : CIniObject(pIni, false, parent) {}
public slots:
virtual QString getName() const;
virtual QVariantMap getIniSection(const QVariantMap& Options = QVariantMap());
virtual bool setIniValue(const QString& Setting, const QVariant& Value);
virtual bool insertIniValue(const QString& Setting, const QString& Value);
virtual bool appendIniValue(const QString& Setting, const QString& Value);
virtual bool delIniValue(const QString& Setting, const QString& Value = "");
virtual QStringList getIniValues(const QString& Setting, const QVariantMap& Options = QVariantMap());
virtual QVariant getIniValue(const QString& Setting, const QVariantMap& Options = QVariantMap());
virtual bool removeSection();
protected:
QSharedPointer<CSbieIni> m_pIni;
bool m_WithTemplate;
};
class CSTmplObject : public CIniObject
{
Q_OBJECT
public:
CSTmplObject(const QSharedPointer<CSbieIni>& pIni, const QString& OriginalName, QObject* parent)
: CIniObject(pIni, parent), m_OriginalName(OriginalName) { }
public slots:
void ApplyChanges(bool bApply);
protected:
QString m_OriginalName;
};
//////////////////////////////////////////////////////////////////////////////////////////
// JIniObject
//
class JIniObject : public QObject
{
Q_OBJECT
public:
JIniObject(CIniObject* pObject, CBoxEngine* pEngine)
: m_pObject(pObject), m_pEngine(pEngine) {}
~JIniObject() { QMetaObject::invokeMethod(m_pObject, "deleteLater"); }
Q_INVOKABLE virtual QJSValue getName() const {
QString Name;
QMetaObject::invokeMethod(m_pObject, "getName", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QString, Name));
return Name;
}
Q_INVOKABLE virtual QJSValue getIniSection(const QVariantMap& Options = QVariantMap()) {
QVariantMap Data;
QMetaObject::invokeMethod(m_pObject, "getIniSection", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QVariantMap, Data), Q_ARG(const QVariantMap&, Options));
return m_pEngine->m_pEngine->toScriptValue(Data);
}
Q_INVOKABLE virtual bool setIniValue(const QString& Setting, const QVariant& Value) {
bool Success;
QMetaObject::invokeMethod(m_pObject, "setIniValue", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, Success), Q_ARG(QString, Setting), Q_ARG(QVariant, Value));
return Success;
}
Q_INVOKABLE virtual bool insertIniValue(const QString& Setting, const QString& Value) {
bool Success;
QMetaObject::invokeMethod(m_pObject, "insertIniValue", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, Success), Q_ARG(QString, Setting), Q_ARG(QString, Value));
return Success;
}
Q_INVOKABLE virtual bool appendIniValue(const QString& Setting, const QString& Value) {
bool Success;
QMetaObject::invokeMethod(m_pObject, "appendIniValue", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, Success), Q_ARG(QString, Setting), Q_ARG(QString, Value));
return Success;
}
Q_INVOKABLE virtual bool delIniValue(const QString& Setting, const QString& Value = "") {
bool Success;
QMetaObject::invokeMethod(m_pObject, "delIniValue", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, Success), Q_ARG(QString, Setting), Q_ARG(QString, Value));
return Success;
}
Q_INVOKABLE virtual QJSValue getIniValues(const QString& Setting, const QVariantMap& Options = QVariantMap()) {
QStringList List;
QMetaObject::invokeMethod(m_pObject, "getIniValues", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QStringList, List), Q_ARG(QString, Setting), Q_ARG(const QVariantMap&, Options));
return m_pEngine->m_pEngine->toScriptValue(List);
}
Q_INVOKABLE virtual QJSValue getIniValue(const QString& Setting, const QVariantMap& Options = QVariantMap()) {
QVariant Value;
QMetaObject::invokeMethod(m_pObject, "getIniValue", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QVariant, Value), Q_ARG(QString, Setting), Q_ARG(const QVariantMap&, Options));
return m_pEngine->m_pEngine->toScriptValue(Value);
}
Q_INVOKABLE virtual bool removeSection() {
bool Success;
QMetaObject::invokeMethod(m_pObject, "removeSection", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, Success));
return Success;
}
protected:
CBoxEngine* m_pEngine;
CIniObject* m_pObject;
};
//////////////////////////////////////////////////////////////////////////////////////////
// JTmplObject
//
class JTmplObject : public JIniObject
{
Q_OBJECT
public:
JTmplObject(CIniObject* pObject, CBoxEngine* pEngine)
: JIniObject(pObject, pEngine) {}
Q_INVOKABLE virtual QJSValue getName() const {
QString Name;
QMetaObject::invokeMethod(m_pObject, "GetName", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QString, Name));
return Name.mid(9);
}
};
//////////////////////////////////////////////////////////////////////////////////////////
// JSTmplObject
//
class JSTmplObject : public JTmplObject
{
Q_OBJECT
public:
JSTmplObject(CIniObject* pObject, CBoxEngine* pEngine)
: JTmplObject(pObject, pEngine) {}
Q_INVOKABLE void applyChanges(bool bApply = true) {
QMetaObject::invokeMethod(m_pObject, "ApplyChanges", Qt::BlockingQueuedConnection, Q_ARG(bool, bApply));
}
};