Skip to content
Merged
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
2 changes: 2 additions & 0 deletions engine/includes/editor/editorplatform.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ class ENGINE_EXPORT EditorPlatform : public PlatformAdaptor {

TString locationLocalDir() const override;

void syncConfiguration(VariantMap &map) const override;

protected:
QHash<int32_t, int32_t> m_keys;
QHash<int32_t, int32_t> m_mouseButtons;
Expand Down
23 changes: 22 additions & 1 deletion engine/src/editor/editorplatform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include <QMouseEvent>

#include <engine.h>
#include <json.h>

#include <editor/projectsettings.h>
#include <adapters/handlers/defaultfilehandler.h>
Expand Down Expand Up @@ -158,6 +159,16 @@ void EditorPlatform::setImportPath(const TString &path) {
}

bool EditorPlatform::init() {
File fp(locationLocalDir() + "/config.json");
if(fp.open(File::ReadOnly | File::Text)) {
ByteArray data = fp.readAll();
fp.close();

for(auto &it : Json::load(data).toMap()) {
Engine::setValue(it.first, it.second);
}
}

return true;
}

Expand Down Expand Up @@ -283,4 +294,14 @@ void EditorPlatform::mouseLockCursor(bool lock) {
m_mouseLock = lock;
}

TString EditorPlatform::locationLocalDir() const { return QStandardPaths::writableLocation(QStandardPaths::ConfigLocation).toStdString(); }
TString EditorPlatform::locationLocalDir() const {
return QStandardPaths::writableLocation(QStandardPaths::ConfigLocation).toStdString();
}

void EditorPlatform::syncConfiguration(VariantMap &map) const {
File fp(locationLocalDir() + "/config.json");
if(fp.open(File::WriteOnly)) {
fp.write(Json::save(map));
fp.close();
}
}
119 changes: 55 additions & 64 deletions engine/src/editor/editorsettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@
#include <QCoreApplication>
#include <QTranslator>

#define SETTINGS ".Settings"
namespace {
const char *gSettings(".Settings");
const char *gEditorSettings("EditorSettings");
}

EditorSettings *EditorSettings::m_pInstance = nullptr;

Expand Down Expand Up @@ -47,43 +50,55 @@ void EditorSettings::setValue(const TString &name, const Variant &value) {
}

void EditorSettings::loadSettings() {
QSettings settings(COMPANY_NAME, EDITOR_NAME);
QVariantMap data = settings.value(SETTINGS).toMap();

blockSignals(true);
for(const TString &it : dynamicPropertyNames()) {
TString info = propertyTag(dynamicPropertyInfo(it.data()), "editor=");
Variant propertyValue = property(it.data());

int userType = propertyValue.userType();
switch(userType) {
case MetaType::BOOLEAN: {
bool value = data[it.data()].toBool();
setProperty(it.data(), value);
} break;
case MetaType::INTEGER: {
int value = data[it.data()].toInt();
setProperty(it.data(), value);
} break;
case MetaType::FLOAT: {
float value = data[it.data()].toFloat();
setProperty(it.data(), value);
} break;
case MetaType::STRING: {
TString value(data[it.data()].toString().toStdString());
setProperty(it.data(), value);
} break;
case MetaType::VECTOR4: {
if(info == "Color") {
QString str(data[it.data()].toString());
if(!str.isEmpty()) {
QColor color(str);
Vector4 value(color.redF(), color.greenF(), color.blueF(), color.alphaF());
setProperty(it.data(), value);

if(Engine::value(gEditorSettings).isValid()) {
VariantMap data = Engine::value(gEditorSettings).toMap();

for(const TString &name : dynamicPropertyNames()) {
auto it = data.find(name);
if(it != data.end()) {
setProperty(name.data(), it->second);
}
}
} else { /// \todo To be removed in mid 2025
QSettings settings(COMPANY_NAME, EDITOR_NAME);
QVariantMap data = settings.value(gSettings).toMap();

for(const TString &it : dynamicPropertyNames()) {
TString info = propertyTag(dynamicPropertyInfo(it.data()), "editor=");
Variant propertyValue = property(it.data());

int userType = propertyValue.userType();
switch(userType) {
case MetaType::BOOLEAN: {
bool value = data[it.data()].toBool();
setProperty(it.data(), value);
} break;
case MetaType::INTEGER: {
int value = data[it.data()].toInt();
setProperty(it.data(), value);
} break;
case MetaType::FLOAT: {
float value = data[it.data()].toFloat();
setProperty(it.data(), value);
} break;
case MetaType::STRING: {
TString value(data[it.data()].toString().toStdString());
setProperty(it.data(), value);
} break;
case MetaType::VECTOR4: {
if(info == "Color") {
QString str(data[it.data()].toString());
if(!str.isEmpty()) {
QColor color(str);
Vector4 value(color.redF(), color.greenF(), color.blueF(), color.alphaF());
setProperty(it.data(), value);
}
}
}
} break;
default: break;
} break;
default: break;
}
}
}

Expand All @@ -95,37 +110,13 @@ void EditorSettings::saveSettings() {
return;
}

QVariantMap data;

VariantMap data;
for(const TString &it : dynamicPropertyNames()) {
Variant propertyValue = property(it.data());

int userType = propertyValue.userType();
switch(userType) {
case MetaType::BOOLEAN: {
data[it.data()] = propertyValue.toBool();
} break;
case MetaType::INTEGER: {
data[it.data()] = propertyValue.toInt();
} break;
case MetaType::FLOAT: {
data[it.data()] = propertyValue.toFloat();
} break;
case MetaType::STRING: {
data[it.data()] = propertyValue.toString().data();
} break;
case MetaType::VECTOR4: {
Vector4 v = propertyValue.toVector4();
QString str(QColor::fromRgbF(v.x, v.y, v.z, v.w).name(QColor::HexArgb));

data[it.data()] = str;
} break;
default: break;
}
data[it] = property(it.data());
}

QSettings settings(COMPANY_NAME, EDITOR_NAME);
settings.setValue(SETTINGS, data);
Engine::setValue(gEditorSettings, data);
Engine::syncValues();
}

void EditorSettings::setLanguage(const QLocale &locale) {
Expand Down
2 changes: 1 addition & 1 deletion engine/src/engine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,7 @@ void Engine::syncValues() {
}

VariantMap filtered;
for(auto it : m_values) {
for(auto &it : m_values) {
if(it.first.front() != '.') {
filtered[it.first] = it.second;
}
Expand Down
Loading