#ifndef OPENMW_APPS_OPENCS_MODEL_PREFS_VALUES_H #define OPENMW_APPS_OPENCS_MODEL_PREFS_VALUES_H #include "enumvalueview.hpp" #include #include #include #include #include #include #include #include #include namespace CSMPrefs { class EnumSanitizer final : public Settings::Sanitizer { public: explicit EnumSanitizer(std::span values) : mValues(values) { } std::string apply(const std::string& value) const override { const auto hasValue = [&](const EnumValueView& v) { return v.mValue == value; }; if (std::find_if(mValues.begin(), mValues.end(), hasValue) == mValues.end()) { std::ostringstream message; message << "Invalid enum value: " << value; throw std::runtime_error(message.str()); } return value; } private: std::span mValues; }; inline std::unique_ptr> makeEnumSanitizerString( std::span values) { return std::make_unique(values); } class EnumSettingValue { public: explicit EnumSettingValue(Settings::Index& index, std::string_view category, std::string_view name, std::span values, std::size_t defaultValueIndex) : mValue( index, category, name, std::string(values[defaultValueIndex].mValue), makeEnumSanitizerString(values)) , mEnumValues(values) { } Settings::SettingValue& getValue() { return mValue; } std::span getEnumValues() const { return mEnumValues; } private: Settings::SettingValue mValue; std::span mEnumValues; }; struct WindowsCategory : Settings::WithIndex { using Settings::WithIndex::WithIndex; static constexpr std::string_view sName = "Windows"; static constexpr std::array sMainwindowScrollbarValues{ EnumValueView{ "Scrollbar Only", "Simple addition of scrollbars, the view window does not grow automatically." }, EnumValueView{ "Grow Only", "The view window grows as subviews are added. No scrollbars." }, EnumValueView{ "Grow then Scroll", "The view window grows. The scrollbar appears once it cannot grow any further." }, }; Settings::SettingValue mDefaultWidth{ mIndex, sName, "default-width", 800 }; Settings::SettingValue mDefaultHeight{ mIndex, sName, "default-height", 600 }; Settings::SettingValue mShowStatusbar{ mIndex, sName, "show-statusbar", true }; Settings::SettingValue mReuse{ mIndex, sName, "reuse", true }; Settings::SettingValue mMaxSubviews{ mIndex, sName, "max-subviews", 256 }; Settings::SettingValue mHideSubview{ mIndex, sName, "hide-subview", false }; Settings::SettingValue mMinimumWidth{ mIndex, sName, "minimum-width", 325 }; EnumSettingValue mMainwindowScrollbar{ mIndex, sName, "mainwindow-scrollbar", sMainwindowScrollbarValues, 0 }; Settings::SettingValue mGrowLimit{ mIndex, sName, "grow-limit", false }; }; struct RecordsCategory : Settings::WithIndex { using Settings::WithIndex::WithIndex; static constexpr std::string_view sName = "Records"; static constexpr std::array sRecordValues{ EnumValueView{ "Icon and Text", "" }, EnumValueView{ "Icon Only", "" }, EnumValueView{ "Text Only", "" }, }; EnumSettingValue mStatusFormat{ mIndex, sName, "status-format", sRecordValues, 0 }; EnumSettingValue mTypeFormat{ mIndex, sName, "type-format", sRecordValues, 0 }; }; struct IdTablesCategory : Settings::WithIndex { using Settings::WithIndex::WithIndex; static constexpr std::string_view sName = "ID Tables"; static constexpr std::array sDoubleClickValues{ EnumValueView{ "Edit in Place", "Edit the clicked cell" }, EnumValueView{ "Edit Record", "Open a dialogue subview for the clicked record" }, EnumValueView{ "View", "Open a scene subview for the clicked record (not available everywhere)" }, EnumValueView{ "Revert", "" }, EnumValueView{ "Delete", "" }, EnumValueView{ "Edit Record and Close", "" }, EnumValueView{ "View and Close", "Open a scene subview for the clicked record and close the table subview" }, }; static constexpr std::array sJumpAndSelectValues{ EnumValueView{ "Jump and Select", "Scroll new record into view and make it the selection" }, EnumValueView{ "Jump Only", "Scroll new record into view" }, EnumValueView{ "No Jump", "No special action" }, }; EnumSettingValue mDouble{ mIndex, sName, "double", sDoubleClickValues, 0 }; EnumSettingValue mDoubleS{ mIndex, sName, "double-s", sDoubleClickValues, 1 }; EnumSettingValue mDoubleC{ mIndex, sName, "double-c", sDoubleClickValues, 2 }; EnumSettingValue mDoubleSc{ mIndex, sName, "double-sc", sDoubleClickValues, 5 }; EnumSettingValue mJumpToAdded{ mIndex, sName, "jump-to-added", sJumpAndSelectValues, 0 }; Settings::SettingValue mExtendedConfig{ mIndex, sName, "extended-config", false }; Settings::SettingValue mSubviewNewWindow{ mIndex, sName, "subview-new-window", false }; }; struct IdDialoguesCategory : Settings::WithIndex { using Settings::WithIndex::WithIndex; static constexpr std::string_view sName = "ID Dialogues"; Settings::SettingValue mToolbar{ mIndex, sName, "toolbar", true }; }; struct ReportsCategory : Settings::WithIndex { using Settings::WithIndex::WithIndex; static constexpr std::string_view sName = "Reports"; static constexpr std::array sReportValues{ EnumValueView{ "None", "" }, EnumValueView{ "Edit", "Open a table or dialogue suitable for addressing the listed report" }, EnumValueView{ "Remove", "Remove the report from the report table" }, EnumValueView{ "Edit And Remove", "Open a table or dialogue suitable for addressing the listed report, then remove the report from the " "report table" }, }; EnumSettingValue mDouble{ mIndex, sName, "double", sReportValues, 1 }; EnumSettingValue mDoubleS{ mIndex, sName, "double-s", sReportValues, 2 }; EnumSettingValue mDoubleC{ mIndex, sName, "double-c", sReportValues, 3 }; EnumSettingValue mDoubleSc{ mIndex, sName, "double-sc", sReportValues, 0 }; Settings::SettingValue mIgnoreBaseRecords{ mIndex, sName, "ignore-base-records", false }; }; struct SearchAndReplaceCategory : Settings::WithIndex { using Settings::WithIndex::WithIndex; static constexpr std::string_view sName = "Search & Replace"; Settings::SettingValue mCharBefore{ mIndex, sName, "char-before", 10 }; Settings::SettingValue mCharAfter{ mIndex, sName, "char-after", 10 }; Settings::SettingValue mAutoDelete{ mIndex, sName, "auto-delete", true }; }; struct ScriptsCategory : Settings::WithIndex { using Settings::WithIndex::WithIndex; static constexpr std::string_view sName = "Scripts"; static constexpr std::array sWarningValues{ EnumValueView{ "Ignore", "Do not report warning" }, EnumValueView{ "Normal", "Report warnings as warning" }, EnumValueView{ "Strict", "Promote warning to an error" }, }; Settings::SettingValue mShowLinenum{ mIndex, sName, "show-linenum", true }; Settings::SettingValue mWrapLines{ mIndex, sName, "wrap-lines", false }; Settings::SettingValue mMonoFont{ mIndex, sName, "mono-font", true }; Settings::SettingValue mTabWidth{ mIndex, sName, "tab-width", 4 }; EnumSettingValue mWarnings{ mIndex, sName, "warnings", sWarningValues, 1 }; Settings::SettingValue mToolbar{ mIndex, sName, "toolbar", true }; Settings::SettingValue mCompileDelay{ mIndex, sName, "compile-delay", 100 }; Settings::SettingValue mErrorHeight{ mIndex, sName, "error-height", 100 }; Settings::SettingValue mHighlightOccurrences{ mIndex, sName, "highlight-occurrences", true }; Settings::SettingValue mColourHighlight{ mIndex, sName, "colour-highlight", "lightcyan" }; Settings::SettingValue mColourInt{ mIndex, sName, "colour-int", "darkmagenta" }; Settings::SettingValue mColourFloat{ mIndex, sName, "colour-float", "magenta" }; Settings::SettingValue mColourName{ mIndex, sName, "colour-name", "grey" }; Settings::SettingValue mColourKeyword{ mIndex, sName, "colour-keyword", "red" }; Settings::SettingValue mColourSpecial{ mIndex, sName, "colour-special", "darkorange" }; Settings::SettingValue mColourComment{ mIndex, sName, "colour-comment", "green" }; Settings::SettingValue mColourId{ mIndex, sName, "colour-id", "blue" }; }; struct GeneralInputCategory : Settings::WithIndex { using Settings::WithIndex::WithIndex; static constexpr std::string_view sName = "General Input"; Settings::SettingValue mCycle{ mIndex, sName, "cycle", false }; }; struct SceneInputCategory : Settings::WithIndex { using Settings::WithIndex::WithIndex; static constexpr std::string_view sName = "3D Scene Input"; Settings::SettingValue mNaviWheelFactor{ mIndex, sName, "navi-wheel-factor", 8 }; Settings::SettingValue mSNaviSensitivity{ mIndex, sName, "s-navi-sensitivity", 50 }; Settings::SettingValue mPNaviFreeSensitivity{ mIndex, sName, "p-navi-free-sensitivity", 1 / 650.0 }; Settings::SettingValue mPNaviFreeInvert{ mIndex, sName, "p-navi-free-invert", false }; Settings::SettingValue mNaviFreeLinSpeed{ mIndex, sName, "navi-free-lin-speed", 1000 }; Settings::SettingValue mNaviFreeRotSpeed{ mIndex, sName, "navi-free-rot-speed", 3.14 / 2 }; Settings::SettingValue mNaviFreeSpeedMult{ mIndex, sName, "navi-free-speed-mult", 8 }; Settings::SettingValue mPNaviOrbitSensitivity{ mIndex, sName, "p-navi-orbit-sensitivity", 1 / 650.0 }; Settings::SettingValue mPNaviOrbitInvert{ mIndex, sName, "p-navi-orbit-invert", false }; Settings::SettingValue mNaviOrbitRotSpeed{ mIndex, sName, "navi-orbit-rot-speed", 3.14 / 4 }; Settings::SettingValue mNaviOrbitSpeedMult{ mIndex, sName, "navi-orbit-speed-mult", 4 }; Settings::SettingValue mNaviOrbitConstRoll{ mIndex, sName, "navi-orbit-const-roll", true }; Settings::SettingValue mContextSelect{ mIndex, sName, "context-select", false }; Settings::SettingValue mDragFactor{ mIndex, sName, "drag-factor", 1 }; Settings::SettingValue mDragWheelFactor{ mIndex, sName, "drag-wheel-factor", 1 }; Settings::SettingValue mDragShiftFactor{ mIndex, sName, "drag-shift-factor", 4 }; Settings::SettingValue mRotateFactor{ mIndex, sName, "rotate-factor", 0.007 }; }; struct RenderingCategory : Settings::WithIndex { using Settings::WithIndex::WithIndex; static constexpr std::string_view sName = "Rendering"; Settings::SettingValue mFramerateLimit{ mIndex, sName, "framerate-limit", 60 }; Settings::SettingValue mCameraFov{ mIndex, sName, "camera-fov", 90 }; Settings::SettingValue mCameraOrtho{ mIndex, sName, "camera-ortho", false }; Settings::SettingValue mCameraOrthoSize{ mIndex, sName, "camera-ortho-size", 100 }; Settings::SettingValue mObjectMarkerAlpha{ mIndex, sName, "object-marker-alpha", 0.5 }; Settings::SettingValue mSceneUseGradient{ mIndex, sName, "scene-use-gradient", true }; Settings::SettingValue mSceneDayBackgroundColour{ mIndex, sName, "scene-day-background-colour", "#6e7880" }; Settings::SettingValue mSceneDayGradientColour{ mIndex, sName, "scene-day-gradient-colour", "#2f3333" }; Settings::SettingValue mSceneBrightBackgroundColour{ mIndex, sName, "scene-bright-background-colour", "#4f575c" }; Settings::SettingValue mSceneBrightGradientColour{ mIndex, sName, "scene-bright-gradient-colour", "#2f3333" }; Settings::SettingValue mSceneNightBackgroundColour{ mIndex, sName, "scene-night-background-colour", "#404d4f" }; Settings::SettingValue mSceneNightGradientColour{ mIndex, sName, "scene-night-gradient-colour", "#2f3333" }; Settings::SettingValue mSceneDayNightSwitchNodes{ mIndex, sName, "scene-day-night-switch-nodes", true }; }; struct TooltipsCategory : Settings::WithIndex { using Settings::WithIndex::WithIndex; static constexpr std::string_view sName = "Tooltips"; Settings::SettingValue mScene{ mIndex, sName, "scene", true }; Settings::SettingValue mSceneHideBasic{ mIndex, sName, "scene-hide-basic", false }; Settings::SettingValue mSceneDelay{ mIndex, sName, "scene-delay", 500 }; }; struct SceneEditingCategory : Settings::WithIndex { using Settings::WithIndex::WithIndex; static constexpr std::string_view sName = "3D Scene Editing"; static constexpr std::array sInsertOutsideCellValues{ EnumValueView{ "Create cell and insert", "" }, EnumValueView{ "Discard", "" }, EnumValueView{ "Insert anyway", "" }, }; static constexpr std::array sInsertOutsideVisibleCellValues{ EnumValueView{ "Show cell and insert", "" }, EnumValueView{ "Discard", "" }, EnumValueView{ "Insert anyway", "" }, }; static constexpr std::array sLandEditOutsideCellValues{ EnumValueView{ "Create cell and land, then edit", "" }, EnumValueView{ "Discard", "" }, }; static constexpr std::array sLandEditOutsideVisibleCellValues{ EnumValueView{ "Show cell and edit", "" }, EnumValueView{ "Discard", "" }, }; static constexpr std::array sSelectAction{ EnumValueView{ "Select only", "" }, EnumValueView{ "Add to selection", "" }, EnumValueView{ "Remove from selection", "" }, EnumValueView{ "Invert selection", "" }, }; Settings::SettingValue mGridsnapMovement{ mIndex, sName, "gridsnap-movement", 16 }; Settings::SettingValue mGridsnapRotation{ mIndex, sName, "gridsnap-rotation", 15 }; Settings::SettingValue mGridsnapScale{ mIndex, sName, "gridsnap-scale", 0.25 }; Settings::SettingValue mDistance{ mIndex, sName, "distance", 50 }; EnumSettingValue mOutsideDrop{ mIndex, sName, "outside-drop", sInsertOutsideCellValues, 0 }; EnumSettingValue mOutsideVisibleDrop{ mIndex, sName, "outside-visible-drop", sInsertOutsideVisibleCellValues, 0 }; EnumSettingValue mOutsideLandedit{ mIndex, sName, "outside-landedit", sLandEditOutsideCellValues, 0 }; EnumSettingValue mOutsideVisibleLandedit{ mIndex, sName, "outside-visible-landedit", sLandEditOutsideVisibleCellValues, 0 }; Settings::SettingValue mTexturebrushMaximumsize{ mIndex, sName, "texturebrush-maximumsize", 50 }; Settings::SettingValue mShapebrushMaximumsize{ mIndex, sName, "shapebrush-maximumsize", 100 }; Settings::SettingValue mLandeditPostSmoothpainting{ mIndex, sName, "landedit-post-smoothpainting", false }; Settings::SettingValue mLandeditPostSmoothstrength{ mIndex, sName, "landedit-post-smoothstrength", 0.25 }; Settings::SettingValue mOpenListView{ mIndex, sName, "open-list-view", false }; EnumSettingValue mPrimarySelectAction{ mIndex, sName, "primary-select-action", sSelectAction, 0 }; EnumSettingValue mSecondarySelectAction{ mIndex, sName, "secondary-select-action", sSelectAction, 1 }; }; struct KeyBindingsCategory : Settings::WithIndex { using Settings::WithIndex::WithIndex; static constexpr std::string_view sName = "Key Bindings"; Settings::SettingValue mDocumentFileNewgame{ mIndex, sName, "document-file-newgame", "Ctrl+N" }; Settings::SettingValue mDocumentFileNewaddon{ mIndex, sName, "document-file-newaddon", "" }; Settings::SettingValue mDocumentFileOpen{ mIndex, sName, "document-file-open", "Ctrl+O" }; Settings::SettingValue mDocumentFileSave{ mIndex, sName, "document-file-save", "Ctrl+S" }; Settings::SettingValue mDocumentHelpHelp{ mIndex, sName, "document-help-help", "F1" }; Settings::SettingValue mDocumentHelpTutorial{ mIndex, sName, "document-help-tutorial", "" }; Settings::SettingValue mDocumentFileVerify{ mIndex, sName, "document-file-verify", "" }; Settings::SettingValue mDocumentFileMerge{ mIndex, sName, "document-file-merge", "" }; Settings::SettingValue mDocumentFileErrorlog{ mIndex, sName, "document-file-errorlog", "" }; Settings::SettingValue mDocumentFileMetadata{ mIndex, sName, "document-file-metadata", "" }; Settings::SettingValue mDocumentFileClose{ mIndex, sName, "document-file-close", "Ctrl+W" }; Settings::SettingValue mDocumentFileExit{ mIndex, sName, "document-file-exit", "Ctrl+Q" }; Settings::SettingValue mDocumentEditUndo{ mIndex, sName, "document-edit-undo", "Ctrl+Z" }; Settings::SettingValue mDocumentEditRedo{ mIndex, sName, "document-edit-redo", "Ctrl+Shift+Z" }; Settings::SettingValue mDocumentEditPreferences{ mIndex, sName, "document-edit-preferences", "" }; Settings::SettingValue mDocumentEditSearch{ mIndex, sName, "document-edit-search", "Ctrl+F" }; Settings::SettingValue mDocumentViewNewview{ mIndex, sName, "document-view-newview", "" }; Settings::SettingValue mDocumentViewStatusbar{ mIndex, sName, "document-view-statusbar", "" }; Settings::SettingValue mDocumentViewFilters{ mIndex, sName, "document-view-filters", "" }; Settings::SettingValue mDocumentWorldRegions{ mIndex, sName, "document-world-regions", "" }; Settings::SettingValue mDocumentWorldCells{ mIndex, sName, "document-world-cells", "" }; Settings::SettingValue mDocumentWorldReferencables{ mIndex, sName, "document-world-referencables", "" }; Settings::SettingValue mDocumentWorldReferences{ mIndex, sName, "document-world-references", "" }; Settings::SettingValue mDocumentWorldLands{ mIndex, sName, "document-world-lands", "" }; Settings::SettingValue mDocumentWorldLandtextures{ mIndex, sName, "document-world-landtextures", "" }; Settings::SettingValue mDocumentWorldPathgrid{ mIndex, sName, "document-world-pathgrid", "" }; Settings::SettingValue mDocumentWorldRegionmap{ mIndex, sName, "document-world-regionmap", "" }; Settings::SettingValue mDocumentMechanicsGlobals{ mIndex, sName, "document-mechanics-globals", "" }; Settings::SettingValue mDocumentMechanicsGamesettings{ mIndex, sName, "document-mechanics-gamesettings", "" }; Settings::SettingValue mDocumentMechanicsScripts{ mIndex, sName, "document-mechanics-scripts", "" }; Settings::SettingValue mDocumentMechanicsSpells{ mIndex, sName, "document-mechanics-spells", "" }; Settings::SettingValue mDocumentMechanicsEnchantments{ mIndex, sName, "document-mechanics-enchantments", "" }; Settings::SettingValue mDocumentMechanicsMagiceffects{ mIndex, sName, "document-mechanics-magiceffects", "" }; Settings::SettingValue mDocumentMechanicsStartscripts{ mIndex, sName, "document-mechanics-startscripts", "" }; Settings::SettingValue mDocumentCharacterSkills{ mIndex, sName, "document-character-skills", "" }; Settings::SettingValue mDocumentCharacterClasses{ mIndex, sName, "document-character-classes", "" }; Settings::SettingValue mDocumentCharacterFactions{ mIndex, sName, "document-character-factions", "" }; Settings::SettingValue mDocumentCharacterRaces{ mIndex, sName, "document-character-races", "" }; Settings::SettingValue mDocumentCharacterBirthsigns{ mIndex, sName, "document-character-birthsigns", "" }; Settings::SettingValue mDocumentCharacterTopics{ mIndex, sName, "document-character-topics", "" }; Settings::SettingValue mDocumentCharacterJournals{ mIndex, sName, "document-character-journals", "" }; Settings::SettingValue mDocumentCharacterTopicinfos{ mIndex, sName, "document-character-topicinfos", "" }; Settings::SettingValue mDocumentCharacterJournalinfos{ mIndex, sName, "document-character-journalinfos", "" }; Settings::SettingValue mDocumentCharacterBodyparts{ mIndex, sName, "document-character-bodyparts", "" }; Settings::SettingValue mDocumentAssetsReload{ mIndex, sName, "document-assets-reload", "F5" }; Settings::SettingValue mDocumentAssetsSounds{ mIndex, sName, "document-assets-sounds", "" }; Settings::SettingValue mDocumentAssetsSoundgens{ mIndex, sName, "document-assets-soundgens", "" }; Settings::SettingValue mDocumentAssetsMeshes{ mIndex, sName, "document-assets-meshes", "" }; Settings::SettingValue mDocumentAssetsIcons{ mIndex, sName, "document-assets-icons", "" }; Settings::SettingValue mDocumentAssetsMusic{ mIndex, sName, "document-assets-music", "" }; Settings::SettingValue mDocumentAssetsSoundres{ mIndex, sName, "document-assets-soundres", "" }; Settings::SettingValue mDocumentAssetsTextures{ mIndex, sName, "document-assets-textures", "" }; Settings::SettingValue mDocumentAssetsVideos{ mIndex, sName, "document-assets-videos", "" }; Settings::SettingValue mDocumentDebugRun{ mIndex, sName, "document-debug-run", "" }; Settings::SettingValue mDocumentDebugShutdown{ mIndex, sName, "document-debug-shutdown", "" }; Settings::SettingValue mDocumentDebugProfiles{ mIndex, sName, "document-debug-profiles", "" }; Settings::SettingValue mDocumentDebugRunlog{ mIndex, sName, "document-debug-runlog", "" }; Settings::SettingValue mTableEdit{ mIndex, sName, "table-edit", "" }; Settings::SettingValue mTableAdd{ mIndex, sName, "table-add", "Shift+A" }; Settings::SettingValue mTableClone{ mIndex, sName, "table-clone", "Shift+D" }; Settings::SettingValue mTouchRecord{ mIndex, sName, "touch-record", "" }; Settings::SettingValue mTableRevert{ mIndex, sName, "table-revert", "" }; Settings::SettingValue mTableRemove{ mIndex, sName, "table-remove", "Delete" }; Settings::SettingValue mTableMoveup{ mIndex, sName, "table-moveup", "" }; Settings::SettingValue mTableMovedown{ mIndex, sName, "table-movedown", "" }; Settings::SettingValue mTableView{ mIndex, sName, "table-view", "Shift+C" }; Settings::SettingValue mTablePreview{ mIndex, sName, "table-preview", "Shift+V" }; Settings::SettingValue mTableExtendeddelete{ mIndex, sName, "table-extendeddelete", "" }; Settings::SettingValue mTableExtendedrevert{ mIndex, sName, "table-extendedrevert", "" }; Settings::SettingValue mReporttableShow{ mIndex, sName, "reporttable-show", "" }; Settings::SettingValue mReporttableRemove{ mIndex, sName, "reporttable-remove", "Delete" }; Settings::SettingValue mReporttableReplace{ mIndex, sName, "reporttable-replace", "" }; Settings::SettingValue mReporttableRefresh{ mIndex, sName, "reporttable-refresh", "" }; Settings::SettingValue mSceneNaviPrimary{ mIndex, sName, "scene-navi-primary", "LMB" }; Settings::SettingValue mSceneNaviSecondary{ mIndex, sName, "scene-navi-secondary", "Ctrl+LMB" }; Settings::SettingValue mSceneOpenPrimary{ mIndex, sName, "scene-open-primary", "Shift+LMB" }; Settings::SettingValue mSceneEditPrimary{ mIndex, sName, "scene-edit-primary", "RMB" }; Settings::SettingValue mSceneEditSecondary{ mIndex, sName, "scene-edit-secondary", "Ctrl+RMB" }; Settings::SettingValue mSceneSelectPrimary{ mIndex, sName, "scene-select-primary", "MMB" }; Settings::SettingValue mSceneSelectSecondary{ mIndex, sName, "scene-select-secondary", "Ctrl+MMB" }; Settings::SettingValue mSceneSelectTertiary{ mIndex, sName, "scene-select-tertiary", "Shift+MMB" }; Settings::SettingValue mSceneSpeedModifier{ mIndex, sName, "scene-speed-modifier", "Shift" }; Settings::SettingValue mSceneDelete{ mIndex, sName, "scene-delete", "Delete" }; Settings::SettingValue mSceneInstanceDropTerrain{ mIndex, sName, "scene-instance-drop-terrain", "G" }; Settings::SettingValue mSceneInstanceDropCollision{ mIndex, sName, "scene-instance-drop-collision", "H" }; Settings::SettingValue mSceneInstanceDropTerrainSeparately{ mIndex, sName, "scene-instance-drop-terrain-separately", "" }; Settings::SettingValue mSceneInstanceDropCollisionSeparately{ mIndex, sName, "scene-instance-drop-collision-separately", "" }; Settings::SettingValue mSceneDuplicate{ mIndex, sName, "scene-duplicate", "Shift+C" }; Settings::SettingValue mSceneLoadCamCell{ mIndex, sName, "scene-load-cam-cell", "Keypad+5" }; Settings::SettingValue mSceneLoadCamEastcell{ mIndex, sName, "scene-load-cam-eastcell", "Keypad+6" }; Settings::SettingValue mSceneLoadCamNorthcell{ mIndex, sName, "scene-load-cam-northcell", "Keypad+8" }; Settings::SettingValue mSceneLoadCamWestcell{ mIndex, sName, "scene-load-cam-westcell", "Keypad+4" }; Settings::SettingValue mSceneLoadCamSouthcell{ mIndex, sName, "scene-load-cam-southcell", "Keypad+2" }; Settings::SettingValue mSceneEditAbort{ mIndex, sName, "scene-edit-abort", "Escape" }; Settings::SettingValue mSceneFocusToolbar{ mIndex, sName, "scene-focus-toolbar", "T" }; Settings::SettingValue mSceneRenderStats{ mIndex, sName, "scene-render-stats", "F3" }; Settings::SettingValue mSceneClearSelection{ mIndex, sName, "scene-clear-selection", "Space" }; Settings::SettingValue mSceneUnhideAll{ mIndex, sName, "scene-unhide-all", "Alt+H" }; Settings::SettingValue mSceneToggleVisibility{ mIndex, sName, "scene-toggle-visibility", "H" }; Settings::SettingValue mSceneGroup0{ mIndex, sName, "scene-group-0", "0" }; Settings::SettingValue mSceneSave0{ mIndex, sName, "scene-save-0", "Ctrl+0" }; Settings::SettingValue mSceneGroup1{ mIndex, sName, "scene-group-1", "1" }; Settings::SettingValue mSceneSave1{ mIndex, sName, "scene-save-1", "Ctrl+1" }; Settings::SettingValue mSceneGroup2{ mIndex, sName, "scene-group-2", "2" }; Settings::SettingValue mSceneSave2{ mIndex, sName, "scene-save-2", "Ctrl+2" }; Settings::SettingValue mSceneGroup3{ mIndex, sName, "scene-group-3", "3" }; Settings::SettingValue mSceneSave3{ mIndex, sName, "scene-save-3", "Ctrl+3" }; Settings::SettingValue mSceneGroup4{ mIndex, sName, "scene-group-4", "4" }; Settings::SettingValue mSceneSave4{ mIndex, sName, "scene-save-4", "Ctrl+4" }; Settings::SettingValue mSceneGroup5{ mIndex, sName, "scene-group-5", "5" }; Settings::SettingValue mSceneSave5{ mIndex, sName, "scene-save-5", "Ctrl+5" }; Settings::SettingValue mSceneGroup6{ mIndex, sName, "scene-group-6", "6" }; Settings::SettingValue mSceneSave6{ mIndex, sName, "scene-save-6", "Ctrl+6" }; Settings::SettingValue mSceneGroup7{ mIndex, sName, "scene-group-7", "7" }; Settings::SettingValue mSceneSave7{ mIndex, sName, "scene-save-7", "Ctrl+7" }; Settings::SettingValue mSceneGroup8{ mIndex, sName, "scene-group-8", "8" }; Settings::SettingValue mSceneSave8{ mIndex, sName, "scene-save-8", "Ctrl+8" }; Settings::SettingValue mSceneGroup9{ mIndex, sName, "scene-group-9", "9" }; Settings::SettingValue mSceneSave9{ mIndex, sName, "scene-save-9", "Ctrl+9" }; Settings::SettingValue mFreeForward{ mIndex, sName, "free-forward", "W" }; Settings::SettingValue mFreeBackward{ mIndex, sName, "free-backward", "S" }; Settings::SettingValue mFreeLeft{ mIndex, sName, "free-left", "A" }; Settings::SettingValue mFreeRight{ mIndex, sName, "free-right", "D" }; Settings::SettingValue mFreeRollLeft{ mIndex, sName, "free-roll-left", "Q" }; Settings::SettingValue mFreeRollRight{ mIndex, sName, "free-roll-right", "E" }; Settings::SettingValue mFreeSpeedMode{ mIndex, sName, "free-speed-mode", "F" }; Settings::SettingValue mOrbitUp{ mIndex, sName, "orbit-up", "W" }; Settings::SettingValue mOrbitDown{ mIndex, sName, "orbit-down", "S" }; Settings::SettingValue mOrbitLeft{ mIndex, sName, "orbit-left", "A" }; Settings::SettingValue mOrbitRight{ mIndex, sName, "orbit-right", "D" }; Settings::SettingValue mOrbitRollLeft{ mIndex, sName, "orbit-roll-left", "Q" }; Settings::SettingValue mOrbitRollRight{ mIndex, sName, "orbit-roll-right", "E" }; Settings::SettingValue mOrbitSpeedMode{ mIndex, sName, "orbit-speed-mode", "F" }; Settings::SettingValue mOrbitCenterSelection{ mIndex, sName, "orbit-center-selection", "C" }; Settings::SettingValue mScriptEditorComment{ mIndex, sName, "script-editor-comment", "" }; Settings::SettingValue mScriptEditorUncomment{ mIndex, sName, "script-editor-uncomment", "" }; }; struct ModelsCategory : Settings::WithIndex { using Settings::WithIndex::WithIndex; static constexpr std::string_view sName = "Models"; Settings::SettingValue mBaseanim{ mIndex, sName, "baseanim", "meshes/base_anim.nif" }; Settings::SettingValue mBaseanimkna{ mIndex, sName, "baseanimkna", "meshes/base_animkna.nif" }; Settings::SettingValue mBaseanimfemale{ mIndex, sName, "baseanimfemale", "meshes/base_anim_female.nif" }; Settings::SettingValue mWolfskin{ mIndex, sName, "wolfskin", "meshes/wolf/skin.nif" }; }; struct Values : Settings::WithIndex { using Settings::WithIndex::WithIndex; WindowsCategory mWindows{ mIndex }; RecordsCategory mRecords{ mIndex }; IdTablesCategory mIdTables{ mIndex }; IdDialoguesCategory mIdDialogues{ mIndex }; ReportsCategory mReports{ mIndex }; SearchAndReplaceCategory mSearchAndReplace{ mIndex }; ScriptsCategory mScripts{ mIndex }; GeneralInputCategory mGeneralInput{ mIndex }; SceneInputCategory mSceneInput{ mIndex }; RenderingCategory mRendering{ mIndex }; TooltipsCategory mTooltips{ mIndex }; SceneEditingCategory mSceneEditing{ mIndex }; KeyBindingsCategory mKeyBindings{ mIndex }; ModelsCategory mModels{ mIndex }; }; } #endif