Qsettings (#401)
* initial qsettings implementation * fix qsettings object constructor initialization * added sync method * added setValue method * implemented value method * pass actual app name and org name * accept any value that can be converted to QVariant in setValue method * implemented value method with proper QVariant wrap * added tests * removed testing data, fixed warning * fixed cpp linting
This commit is contained in:
parent
b09b1cf0e0
commit
07ac11c6ab
@ -55,6 +55,7 @@ add_library(${CORE_WIDGETS_ADDON} SHARED
|
||||
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QObject/qobject_wrap.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QVariant/qvariant_wrap.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QSize/qsize_wrap.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QSettings/qsettings_wrap.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QRect/qrect_wrap.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QPoint/qpoint_wrap.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QTime/qtime_wrap.cpp"
|
||||
|
||||
@ -56,7 +56,7 @@ class YOGA_EXPORT YGStyle {
|
||||
style.*Prop = values;
|
||||
return *this;
|
||||
}
|
||||
operator const Values<Idx>&() const { return style.*Prop; }
|
||||
operator const Values<Idx> &() const { return style.*Prop; }
|
||||
Ref operator[](Idx idx) { return {style, idx}; }
|
||||
CompactValue operator[](Idx idx) const { return (style.*Prop)[idx]; }
|
||||
};
|
||||
|
||||
25
src/cpp/include/nodegui/QtCore/QSettings/qsettings_wrap.h
Normal file
25
src/cpp/include/nodegui/QtCore/QSettings/qsettings_wrap.h
Normal file
@ -0,0 +1,25 @@
|
||||
#pragma once
|
||||
|
||||
#include <napi.h>
|
||||
|
||||
#include <QSettings>
|
||||
|
||||
#include "Extras/Utils/nutils.h"
|
||||
#include "core/Component/component_macro.h"
|
||||
|
||||
class DLL_EXPORT QSettingsWrap : public Napi::ObjectWrap<QSettingsWrap> {
|
||||
COMPONENT_WRAPPED_METHODS_DECLARATION
|
||||
|
||||
private:
|
||||
std::unique_ptr<QSettings> instance;
|
||||
|
||||
public:
|
||||
~QSettingsWrap();
|
||||
QSettings* getInternalInstance();
|
||||
QSettingsWrap(const Napi::CallbackInfo& info);
|
||||
Napi::Value sync(const Napi::CallbackInfo& info);
|
||||
Napi::Value setValue(const Napi::CallbackInfo& info);
|
||||
Napi::Value value(const Napi::CallbackInfo& info);
|
||||
static Napi::Object init(Napi::Env env, Napi::Object exports);
|
||||
static Napi::FunctionReference constructor;
|
||||
};
|
||||
68
src/cpp/lib/QtCore/QSettings/qsettings_wrap.cpp
Normal file
68
src/cpp/lib/QtCore/QSettings/qsettings_wrap.cpp
Normal file
@ -0,0 +1,68 @@
|
||||
#include "QtCore/QSettings/qsettings_wrap.h"
|
||||
|
||||
#include "Extras/Utils/nutils.h"
|
||||
#include "QtCore/QVariant/qvariant_wrap.h"
|
||||
|
||||
Napi::FunctionReference QSettingsWrap::constructor;
|
||||
|
||||
Napi::Object QSettingsWrap::init(Napi::Env env, Napi::Object exports) {
|
||||
Napi::HandleScope scope(env);
|
||||
char CLASSNAME[] = "QSettings";
|
||||
Napi::Function func =
|
||||
DefineClass(env, CLASSNAME,
|
||||
{InstanceMethod("sync", &QSettingsWrap::sync),
|
||||
InstanceMethod("setValue", &QSettingsWrap::setValue),
|
||||
InstanceMethod("value", &QSettingsWrap::value),
|
||||
COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QSettingsWrap)});
|
||||
constructor = Napi::Persistent(func);
|
||||
exports.Set(CLASSNAME, func);
|
||||
return exports;
|
||||
}
|
||||
|
||||
QSettingsWrap::QSettingsWrap(const Napi::CallbackInfo& info)
|
||||
: Napi::ObjectWrap<QSettingsWrap>(info) {
|
||||
Napi::Env env = info.Env();
|
||||
|
||||
QString organization =
|
||||
QString::fromUtf8(info[0].As<Napi::String>().Utf8Value().c_str());
|
||||
QString application =
|
||||
QString::fromUtf8(info[1].As<Napi::String>().Utf8Value().c_str());
|
||||
|
||||
this->instance = std::make_unique<QSettings>(organization, application);
|
||||
this->rawData = extrautils::configureQObject(this->getInternalInstance());
|
||||
}
|
||||
|
||||
Napi::Value QSettingsWrap::setValue(const Napi::CallbackInfo& info) {
|
||||
Napi::Env env = info.Env();
|
||||
|
||||
QString key =
|
||||
QString::fromUtf8(info[0].As<Napi::String>().Utf8Value().c_str());
|
||||
Napi::Value value = info[1];
|
||||
QVariant* valueVariant = extrautils::convertToQVariant(env, value);
|
||||
|
||||
this->instance.get()->setValue(key, *valueVariant);
|
||||
delete valueVariant;
|
||||
return env.Null();
|
||||
}
|
||||
|
||||
Napi::Value QSettingsWrap::value(const Napi::CallbackInfo& info) {
|
||||
Napi::Env env = info.Env();
|
||||
|
||||
QString key =
|
||||
QString::fromUtf8(info[0].As<Napi::String>().Utf8Value().c_str());
|
||||
QVariant value = this->instance.get()->value(key);
|
||||
|
||||
auto instance = QVariantWrap::constructor.New(
|
||||
{Napi::External<QVariant>::New(env, new QVariant(value))});
|
||||
return instance;
|
||||
}
|
||||
|
||||
Napi::Value QSettingsWrap::sync(const Napi::CallbackInfo& info) {
|
||||
Napi::Env env = info.Env();
|
||||
this->instance.get()->sync();
|
||||
return env.Null();
|
||||
}
|
||||
|
||||
QSettings* QSettingsWrap::getInternalInstance() { return this->instance.get(); }
|
||||
|
||||
QSettingsWrap::~QSettingsWrap() { this->instance.reset(); }
|
||||
@ -41,7 +41,8 @@ Napi::Value QFontDatabaseWrap::families(const Napi::CallbackInfo& info) {
|
||||
if (info.Length() == 1) {
|
||||
writingSystem = info[0].As<Napi::Number>().Int32Value();
|
||||
}
|
||||
QStringList families = this->instance->families(static_cast<QFontDatabase::WritingSystem>(writingSystem));
|
||||
QStringList families = this->instance->families(
|
||||
static_cast<QFontDatabase::WritingSystem>(writingSystem));
|
||||
Napi::Array familiesNapi = Napi::Array::New(env, families.size());
|
||||
for (int i = 0; i < families.size(); i++) {
|
||||
familiesNapi[i] = Napi::String::New(env, families[i].toStdString());
|
||||
|
||||
@ -7,6 +7,7 @@
|
||||
#include "QtCore/QObject/qobject_wrap.h"
|
||||
#include "QtCore/QPoint/qpoint_wrap.h"
|
||||
#include "QtCore/QRect/qrect_wrap.h"
|
||||
#include "QtCore/QSettings/qsettings_wrap.h"
|
||||
#include "QtCore/QSize/qsize_wrap.h"
|
||||
#include "QtCore/QTime/qtime_wrap.h"
|
||||
#include "QtCore/QUrl/qurl_wrap.h"
|
||||
@ -145,6 +146,7 @@ Napi::Object Main(Napi::Env env, Napi::Object exports) {
|
||||
QTimeEditWrap::init(env, exports);
|
||||
QButtonGroupWrap::init(env, exports);
|
||||
QStatusBarWrap::init(env, exports);
|
||||
QSettingsWrap::init(env, exports);
|
||||
return exports;
|
||||
}
|
||||
|
||||
|
||||
33
src/lib/QtCore/QSettings.ts
Normal file
33
src/lib/QtCore/QSettings.ts
Normal file
@ -0,0 +1,33 @@
|
||||
import { NativeElement, Component } from '../core/Component';
|
||||
import addon from '../utils/addon';
|
||||
import { QVariant } from './QVariant';
|
||||
|
||||
enum Format {
|
||||
NativeFormat = 0,
|
||||
Registry32Format = 2,
|
||||
Registry64Format = 3,
|
||||
IniFormat = 1,
|
||||
InvalidFormat = 16,
|
||||
}
|
||||
|
||||
enum Scope {
|
||||
UserScope = 0,
|
||||
SystemScope = 1,
|
||||
}
|
||||
|
||||
export class QSettings extends Component {
|
||||
native: NativeElement;
|
||||
constructor(organization: string, application: string) {
|
||||
super();
|
||||
this.native = new addon.QSettings(organization, application);
|
||||
}
|
||||
sync(): void {
|
||||
this.native.sync();
|
||||
}
|
||||
setValue(key: string, value: number | string | boolean): void {
|
||||
this.native.setValue(key, value);
|
||||
}
|
||||
value(key: string): QVariant {
|
||||
return this.native.value(key);
|
||||
}
|
||||
}
|
||||
15
src/lib/QtCore/__tests__/QSettings.test.ts
Normal file
15
src/lib/QtCore/__tests__/QSettings.test.ts
Normal file
@ -0,0 +1,15 @@
|
||||
import { QSettings } from '../QSettings';
|
||||
|
||||
describe('QSize', () => {
|
||||
it('initialize', () => {
|
||||
expect(() => new QSettings('testOrg', 'testApp')).not.toThrow();
|
||||
});
|
||||
|
||||
it('should save and load data correctly', () => {
|
||||
const value = Math.ceil(Math.random() * 100);
|
||||
const settings = new QSettings('testOrg', 'testApp');
|
||||
settings.setValue('randomNumber', value);
|
||||
settings.sync();
|
||||
expect(settings.value('randomNumber').toInt()).toBe(value);
|
||||
});
|
||||
});
|
||||
Loading…
Reference in New Issue
Block a user