--- a/src/main.cpp Tue Jun 14 17:55:50 2022 +0300 +++ b/src/main.cpp Tue Jun 14 19:50:31 2022 +0300 @@ -13,6 +13,7 @@ #include "document.h" #include "settingseditor/settingseditor.h" #include "widgets/colorselectdialog.h" +#include "settings.h" static const QDir LOCALE_DIR {":/locale"}; @@ -54,6 +55,8 @@ QCoreApplication::setOrganizationDomain("hecknology.net"); qRegisterMetaTypeStreamOperators<Library>("Library"); qRegisterMetaTypeStreamOperators<Libraries>("Libraries"); + qRegisterMetaTypeStreamOperators<gl::RenderStyle>(); + qRegisterMetaTypeStreamOperators<QMdiArea::ViewMode>(); } template<typename BaseType, typename MemberType, typename DataType> @@ -251,16 +254,16 @@ ui->actionDrawAxes->setChecked(renderPreferences->drawAxes); }; -static gl::RenderPreferences loadRenderPreferences(Configuration* settings) +static gl::RenderPreferences loadRenderPreferences() { return gl::RenderPreferences{ - .style = static_cast<gl::RenderStyle>(settings->renderStyle()), - .mainColor = settings->mainColor(), - .backgroundColor = settings->backgroundColor(), - .selectedColor = settings->selectedColor(), - .lineThickness = settings->lineThickness(), - .lineAntiAliasing = settings->lineAntiAliasing(), - .drawAxes = settings->drawAxes(), + .style = setting<Setting::RenderStyle>(), + .mainColor = setting<Setting::MainColor>(), + .backgroundColor = setting<Setting::BackgroundColor>(), + .selectedColor = setting<Setting::SelectedColor>(), + .lineThickness = setting<Setting::LineThickness>(), + .lineAntiAliasing = setting<Setting::LineAntiAliasing>(), + .drawAxes = setting<Setting::DrawAxes>(), }; } @@ -327,9 +330,7 @@ DocumentManager documents; QString currentLanguage = "en"; QTranslator translator{&mainWindow}; - Configuration settings; LibraryManager libraries{&mainWindow}; - QByteArray documentSplitterState; QStringList recentlyOpenedFiles; ColorTable colorTable; gl::RenderPreferences renderPreferences; @@ -337,12 +338,12 @@ const uiutilities::KeySequenceMap defaultKeyboardShortcuts = uiutilities::makeKeySequenceMap(uiutilities::collectActions(&mainWindow)); const auto saveSettings = [&]{ - settings.setMainWindowGeometry(mainWindow.saveGeometry()); - settings.setRecentFiles(recentlyOpenedFiles); - settings.setMainSplitterState(documentSplitterState); - settings.setRenderStyle(static_cast<int>(renderPreferences.style)); - settings.setDrawAxes(renderPreferences.drawAxes); - libraries.storeToSettings(&settings); + setSetting<Setting::MainWindowGeometry>(mainWindow.saveGeometry()); + setSetting<Setting::RecentFiles>(recentlyOpenedFiles); + setSetting<Setting::RenderStyle>(renderPreferences.style); + setSetting<Setting::DrawAxes>(renderPreferences.drawAxes); + setSetting<Setting::DrawAxes>("hello world"); + libraries.storeToSettings(); }; const auto updateRecentlyOpenedDocumentsMenu = [&]{ rebuildRecentFilesMenu(ui.menuRecentFiles, recentlyOpenedFiles, &mainWindow); @@ -370,15 +371,14 @@ }, action); }; const auto restoreSettings = [&]{ - recentlyOpenedFiles = settings.recentFiles(); - documentSplitterState = settings.mainSplitterState(); - renderPreferences = loadRenderPreferences(&settings); - changeLanguage(settings.locale(), &translator); - libraries.restoreFromSettings(&settings); + recentlyOpenedFiles = setting<Setting::RecentFiles>(); + renderPreferences = loadRenderPreferences(); + changeLanguage(setting<Setting::Locale>(), &translator); + libraries.restoreFromSettings(); updateRecentlyOpenedDocumentsMenu(); colorTable = loadColors(&libraries); updateRenderPreferences(&ui, &renderPreferences, &documents); - ui.mdiArea->setViewMode(static_cast<QMdiArea::ViewMode>(settings.viewMode())); + ui.mdiArea->setViewMode(setting<Setting::ViewMode>()); ui.retranslateUi(&mainWindow); }; const auto addRecentlyOpenedFile = [&](const QString& path){ @@ -407,7 +407,7 @@ data->tools->setGridMatrix(XZ); data->model = model; data->canvas->addRenderLayer(data->axesLayer.get()); - data->canvas->setLayerEnabled(data->axesLayer.get(), settings.drawAxes()); + data->canvas->setLayerEnabled(data->axesLayer.get(), setting<Setting::DrawAxes>()); data->canvas->addRenderLayer(data->gridLayer.get()); data->canvas->addRenderLayer(data->tools.get()); documents.setModelPayload(modelId, data); @@ -476,7 +476,7 @@ } }); QObject::connect(ui.actionSettingsEditor, &QAction::triggered, [&]{ - SettingsEditor settingsEditor{&settings, defaultKeyboardShortcuts, &mainWindow}; + SettingsEditor settingsEditor{defaultKeyboardShortcuts, &mainWindow}; const int result = settingsEditor.exec(); if (result == QDialog::Accepted) { @@ -600,7 +600,7 @@ } }); mainWindow.setWindowTitle(title()); - mainWindow.restoreGeometry(settings.mainWindowGeometry()); + mainWindow.restoreGeometry(setting<Setting::MainWindowGeometry>()); restoreSettings(); updateRenderPreferences(&ui, &renderPreferences, &documents); mainWindow.show();