Skip to content

Commit ac9bc43

Browse files
committed
Added serialization (ini) of editor settings
* serialize/deserialize settings present in EditorSettings respectively on editor start and stop * doesn't cover all the settings yet, as some exposed in the menu bar don't rely on EditorSettings
1 parent 8892ec5 commit ac9bc43

File tree

3 files changed

+55
-1
lines changed

3 files changed

+55
-1
lines changed

Sources/Overload/OvEditor/include/OvEditor/Settings/EditorSettings.h

+10
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,16 @@ namespace OvEditor::Settings
7373
*/
7474
EditorSettings() = delete;
7575

76+
/**
77+
* Save the settings
78+
*/
79+
static void Save();
80+
81+
/**
82+
* Load the settings
83+
*/
84+
static void Load();
85+
7686
inline static Property<bool> ShowGeometryBounds = { false };
7787
inline static Property<bool> ShowLightBounds = { false };
7888
inline static Property<bool> EditorFrustumGeometryCulling = { true };

Sources/Overload/OvEditor/src/OvEditor/Core/Editor.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "OvEditor/Panels/MaterialEditor.h"
2424
#include "OvEditor/Panels/ProjectSettings.h"
2525
#include "OvEditor/Panels/AssetProperties.h"
26+
#include "OvEditor/Settings/EditorSettings.h"
2627

2728
using namespace OvCore::ResourceManagement;
2829
using namespace OvEditor::Panels;
@@ -34,13 +35,15 @@ OvEditor::Core::Editor::Editor(Context& p_context) :
3435
m_panelsManager(m_canvas),
3536
m_editorActions(m_context, m_panelsManager)
3637
{
38+
Settings::EditorSettings::Load();
3739
SetupUI();
3840

3941
m_context.sceneManager.LoadEmptyLightedScene();
4042
}
4143

4244
OvEditor::Core::Editor::~Editor()
4345
{
46+
Settings::EditorSettings::Save();
4447
m_context.sceneManager.UnloadCurrentScene();
4548
}
4649

Sources/Overload/OvEditor/src/OvEditor/Settings/EditorSettings.cpp

+42-1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,45 @@
44
* @licence: MIT
55
*/
66

7-
#include "OvEditor/Settings/EditorSettings.h"
7+
#include "OvEditor/Settings/EditorSettings.h"
8+
#include <OvTools/Filesystem/IniFile.h>
9+
10+
template<class T>
11+
void LoadIniEntry(OvTools::Filesystem::IniFile& iniFile, const std::string& entry, OvEditor::Settings::EditorSettings::Property<T>& out)
12+
{
13+
if (iniFile.IsKeyExisting(entry))
14+
{
15+
out = iniFile.Get<T>(entry);
16+
}
17+
}
18+
19+
void OvEditor::Settings::EditorSettings::Save()
20+
{
21+
std::string editorSettingsPath = std::string(getenv("APPDATA")) + "\\OverloadTech\\OvEditor\\editor.ini";
22+
OvTools::Filesystem::IniFile iniFile(editorSettingsPath);
23+
iniFile.RemoveAll();
24+
iniFile.Add("show_geometry_bounds", ShowGeometryBounds.Get());
25+
iniFile.Add("show_light_bounds", ShowLightBounds.Get());
26+
iniFile.Add("show_geometry_frustum_culling_in_scene_view", ShowGeometryFrustumCullingInSceneView.Get());
27+
iniFile.Add("show_light_frustum_culling_in_scene_view", ShowLightFrustumCullingInSceneView.Get());
28+
iniFile.Add("light_billboard_scale", LightBillboardScale.Get());
29+
iniFile.Add("translation_snap_unit", TranslationSnapUnit.Get());
30+
iniFile.Add("rotation_snap_unit", RotationSnapUnit.Get());
31+
iniFile.Add("scaling_snap_unit", ScalingSnapUnit.Get());
32+
iniFile.Rewrite();
33+
}
34+
35+
void OvEditor::Settings::EditorSettings::Load()
36+
{
37+
std::string editorSettingsPath = std::string(getenv("APPDATA")) + "\\OverloadTech\\OvEditor\\editor.ini";
38+
OvTools::Filesystem::IniFile iniFile(editorSettingsPath);
39+
40+
LoadIniEntry<bool>(iniFile, "show_geometry_bounds", ShowGeometryBounds);
41+
LoadIniEntry<bool>(iniFile, "show_light_bounds", ShowLightBounds);
42+
LoadIniEntry<bool>(iniFile, "show_geometry_frustum_culling_in_scene_view", ShowGeometryFrustumCullingInSceneView);
43+
LoadIniEntry<bool>(iniFile, "show_light_frustum_culling_in_scene_view", ShowLightFrustumCullingInSceneView);
44+
LoadIniEntry<float>(iniFile, "light_billboard_scale", LightBillboardScale);
45+
LoadIniEntry<float>(iniFile, "translation_snap_unit", TranslationSnapUnit);
46+
LoadIniEntry<float>(iniFile, "rotation_snap_unit", RotationSnapUnit);
47+
LoadIniEntry<float>(iniFile, "scaling_snap_unit", ScalingSnapUnit);
48+
}

0 commit comments

Comments
 (0)