Esempio n. 1
0
        private void ToTheme(string themeName)
        {
            var     parser = new IniFileParser.IniFileParser();
            IniData data;

            using (var sr = new StreamReader(Config.PathToQtCreatorConfigFile))
            {
                data = parser.ReadData(sr);
            }
            data["Core"]["CreatorTheme"] = themeName;
            using (var sw = new StreamWriter(Config.PathToQtCreatorConfigFile))
            {
                parser.WriteData(sw, data);
            }
        }
Esempio n. 2
0
        /// <summary>
        ///     Loads up the config file and its default elements.
        /// </summary>
        private void LoadConfig()
        {
            const string name = "skin.ini";

            if (!File.Exists($"{Dir}/{name}"))
            {
                return;
            }

            Config = new IniFileParser.IniFileParser(new ConcatenateDuplicatedKeysIniDataParser()).ReadFile($"{Dir}/{name}");

            // Parse very general things in config.
            Name         = ConfigHelper.ReadString(Name, Config["General"]["Name"]);
            Author       = ConfigHelper.ReadString(Author, Config["General"]["Author"]);
            Version      = ConfigHelper.ReadString(Version, Config["General"]["Version"]);
            CenterCursor = ConfigHelper.ReadBool(false, Config["General"]["CenterCursor"]);
        }
Esempio n. 3
0
        /// <summary>
        ///     Reads config file for skin.ini elements.
        ///
        ///     REMEMBER TO SET YOUR DEFAULTS FOR BOTH 4K AND 7K
        ///     AND ALL DEFAULT SKINS (BARS/ARROWS)
        /// </summary>
        private void ReadConfig(bool loadFromResources)
        {
            IniData config;

            if (loadFromResources)
            {
                using (var stream = new StreamReader(GameBase.Game.Resources.GetStream($"Quaver.Resources/Textures/Skins/{ConfigManager.DefaultSkin.Value}/skin.ini")))
                    config = new IniFileParser.IniFileParser(new ConcatenateDuplicatedKeysIniDataParser()).ReadData(stream);
            }
            else
            {
                if (Store.Config == null)
                {
                    return;
                }

                config = Store.Config;
            }

            var ini = config[ModeHelper.ToShortHand(Mode).ToUpper()];

            StageReceptorPadding         = ConfigHelper.ReadInt32(StageReceptorPadding, ini["StageReceptorPadding"]);
            HitPosOffsetY                = ConfigHelper.ReadInt32(HitPosOffsetY, ini["HitPosOffsetY"]);
            NotePadding                  = ConfigHelper.ReadInt32(NotePadding, ini["NotePadding"]);
            ColumnLightingScale          = ConfigHelper.ReadFloat(ColumnLightingScale, ini["ColumnLightingScale"]);
            ColumnLightingOffsetY        = ConfigHelper.ReadInt32(ColumnLightingOffsetY, ini["ColumnLightingOffsetY"]);
            ColumnSize                   = ConfigHelper.ReadInt32(ColumnSize, ini["ColumnSize"]);
            ReceptorPosOffsetY           = ConfigHelper.ReadInt32(ReceptorPosOffsetY, ini["ReceptorPosOffsetY"]);
            ColumnAlignment              = ConfigHelper.ReadInt32(ColumnAlignment, ini["ColumnAlignment"]);
            ColorObjectsBySnapDistance   = ConfigHelper.ReadBool(ColorObjectsBySnapDistance, ini["ColorObjectsBySnapDistance"]);
            JudgementHitBurstScale       = ConfigHelper.ReadByte(JudgementHitBurstScale, ini["JudgementHitBurstScale"]);
            ReceptorsOverHitObjects      = ConfigHelper.ReadBool(ReceptorsOverHitObjects, ini["ReceptorsOverHitObjects"]);
            JudgeColors[Judgement.Marv]  = ConfigHelper.ReadColor(JudgeColors[Judgement.Marv], ini["JudgeColorMarv"]);
            JudgeColors[Judgement.Perf]  = ConfigHelper.ReadColor(JudgeColors[Judgement.Perf], ini["JudgeColorPerf"]);
            JudgeColors[Judgement.Great] = ConfigHelper.ReadColor(JudgeColors[Judgement.Great], ini["JudgeColorGreat"]);
            JudgeColors[Judgement.Good]  = ConfigHelper.ReadColor(JudgeColors[Judgement.Good], ini["JudgeColorGood"]);
            JudgeColors[Judgement.Okay]  = ConfigHelper.ReadColor(JudgeColors[Judgement.Okay], ini["JudgeColorOkay"]);
            JudgeColors[Judgement.Miss]  = ConfigHelper.ReadColor(JudgeColors[Judgement.Miss], ini["JudgeColorMiss"]);
            BgMaskAlpha                  = ConfigHelper.ReadFloat(BgMaskAlpha, ini["BgMaskAlpha"]);
            FlipNoteImagesOnUpscroll     = ConfigHelper.ReadBool(FlipNoteImagesOnUpscroll, ini["FlipNoteImagesOnUpscroll"]);
            FlipNoteEndImagesOnUpscroll  = ConfigHelper.ReadBool(FlipNoteEndImagesOnUpscroll, ini["FlipNoteEndImagesOnUpscroll"]);
            HitLightingY                 = ConfigHelper.ReadInt32(HitLightingY, ini["HitLightingY"]);
            HitLightingX                 = ConfigHelper.ReadInt32(HitLightingX, ini["HitLightingX"]);
            HitLightingFps               = ConfigHelper.ReadInt32(HitLightingFps, ini["HitLightingFps"]);
            HoldLightingFps              = ConfigHelper.ReadInt32(HoldLightingFps, ini["HoldLightingFps"]);
            HitLightingWidth             = ConfigHelper.ReadInt32(HitLightingWidth, ini["HitLightingWidth"]);
            HitLightingHeight            = ConfigHelper.ReadInt32(HitLightingHeight, ini["HitLightingHeight"]);
            ScoreDisplayPosX             = ConfigHelper.ReadInt32(ScoreDisplayPosX, ini["ScoreDisplayPosX"]);
            ScoreDisplayPosY             = ConfigHelper.ReadInt32(ScoreDisplayPosY, ini["ScoreDisplayPosY"]);
            RatingDisplayPosX            = ConfigHelper.ReadInt32(RatingDisplayPosX, ini["RatingDisplayPosX"]);
            RatingDisplayPosY            = ConfigHelper.ReadInt32(RatingDisplayPosY, ini["RatingDisplayPosY"]);
            AccuracyDisplayPosX          = ConfigHelper.ReadInt32(AccuracyDisplayPosX, ini["AccuracyDisplayPosX"]);
            AccuracyDisplayPosY          = ConfigHelper.ReadInt32(AccuracyDisplayPosY, ini["AccuracyDisplayPosY"]);
            KpsDisplayPosX               = ConfigHelper.ReadInt32(KpsDisplayPosX, ini["KpsDisplayPosX"]);
            KpsDisplayPosY               = ConfigHelper.ReadInt32(KpsDisplayPosY, ini["KpsDisplayPosY"]);
            ComboPosX                     = ConfigHelper.ReadInt32(ComboPosX, ini["ComboPosX"]);
            ComboPosY                     = ConfigHelper.ReadInt32(ComboPosY, ini["ComboPosY"]);
            JudgementBurstPosY            = ConfigHelper.ReadInt32(JudgementBurstPosY, ini["JudgementBurstPosY"]);
            HealthBarType                 = ConfigHelper.ReadEnum(HealthBarType, ini["HealthBarType"]);
            HealthBarKeysAlignment        = ConfigHelper.ReadEnum(HealthBarKeysAlignment, ini["HealthBarKeysAlignment"]);
            HitErrorPosX                  = ConfigHelper.ReadInt32(HitErrorPosX, ini["HitErrorPosX"]);
            HitErrorPosY                  = ConfigHelper.ReadInt32(HitErrorPosY, ini["HitErrorPosY"]);
            HitErrorHeight                = ConfigHelper.ReadInt32(HitErrorHeight, ini["HitErrorHeight"]);
            HitErrorChevronSize           = ConfigHelper.ReadInt32(HitErrorChevronSize, ini["HitErrorChevronSize"]);
            TimingLineColor               = ConfigHelper.ReadColor(TimingLineColor, ini["TimingLineColor"]);
            SongTimeProgressInactiveColor = ConfigHelper.ReadColor(SongTimeProgressInactiveColor, ini["SongTimeProgressInactiveColor"]);
            SongTimeProgressActiveColor   = ConfigHelper.ReadColor(SongTimeProgressActiveColor, ini["SongTimeProgressActiveColor"]);
            JudgementCounterAlpha         = ConfigHelper.ReadFloat(JudgementCounterAlpha, ini["JudgementCounterAlpha"]);
            JudgementCounterFontColor     = ConfigHelper.ReadColor(JudgementCounterFontColor, ini["JudgementCounterFontColor"]);
            JudgementCounterSize          = ConfigHelper.ReadInt32(JudgementCounterSize, ini["JudgementCounterSize"]);
            DrawLongNoteEnd               = ConfigHelper.ReadBool(DrawLongNoteEnd, ini["DrawLongNoteEnd"]);
            ScoreDisplayScale             = ConfigHelper.ReadInt32(ScoreDisplayScale, ini["ScoreDisplayScale"]);
            RatingDisplayScale            = ConfigHelper.ReadInt32(RatingDisplayScale, ini["RatingDisplayScale"]);
            AccuracyDisplayScale          = ConfigHelper.ReadInt32(AccuracyDisplayScale, ini["AccuracyDisplayScale"]);
            ComboDisplayScale             = ConfigHelper.ReadInt32(ComboDisplayScale, ini["ComboDisplayScale"]);
            KpsDisplayScale               = ConfigHelper.ReadInt32(KpsDisplayScale, ini["KpsDisplayScale"]);
            SongTimeProgressScale         = ConfigHelper.ReadInt32(SongTimeProgressScale, ini["SongTimeProgressScale"]);
            DeadNoteColor                 = ConfigHelper.ReadColor(DeadNoteColor, ini["DeadNoteColor"]);
            BattleRoyaleAlertPosX         = ConfigHelper.ReadInt32(BattleRoyaleAlertPosX, ini["BattleRoyaleAlertPosX"]);
            BattleRoyaleAlertPosY         = ConfigHelper.ReadInt32(BattleRoyaleAlertPosY, ini["BattleRoyaleAlertPosY"]);
            BattleRoyaleAlertScale        = ConfigHelper.ReadInt32(BattleRoyaleAlertScale, ini["BattleRoyaleAlertScale"]);
            BattleRoyaleEliminatedPosX    = ConfigHelper.ReadInt32(BattleRoyaleEliminatedPosX, ini["BattleRoyaleEliminatedPosX"]);
            BattleRoyaleEliminatedPosY    = ConfigHelper.ReadInt32(BattleRoyaleEliminatedPosY, ini["BattleRoyaleEliminatedPosY"]);
        }
Esempio n. 4
0
        /// <summary>
        ///     Reads a quaver.cfg file and sets all of the successfully read values.
        ///     At the end of reading, we write the config file, changing any invalid data/
        /// </summary>
        private static void ReadConfigFile()
        {
            // We'll want to write a quaver.cfg file if it doesn't already exist.
            // There's no need to read the config file afterwards, since we already have
            // all of the default values.
            if (!File.Exists(_gameDirectory + "/quaver.cfg"))
            {
                File.WriteAllText(_gameDirectory + "/quaver.cfg", "; Quaver Configuration File");
            }

            var data = new IniFileParser.IniFileParser(new ConcatenateDuplicatedKeysIniDataParser()).ReadFile(_gameDirectory + "/quaver.cfg")["Config"];

            // Read / Set Config Values
            // NOTE: MAKE SURE TO SET THE VALUE TO AUTO-SAVE WHEN CHANGING! THIS ISN'T DONE AUTOMATICALLY.
            // YOU CAN DO THIS DOWN BELOW, AFTER THE CONFIG HAS WRITTEN FOR THE FIRST TIME.
            GameDirectory       = ReadSpecialConfigType(SpecialConfigType.Directory, @"GameDirectory", _gameDirectory, data);
            SkinDirectory       = ReadSpecialConfigType(SpecialConfigType.Directory, @"SkinDirectory", _skinDirectory, data);
            ScreenshotDirectory = ReadSpecialConfigType(SpecialConfigType.Directory, @"ScreenshotDirectory",
                                                        _screenshotDirectory, data);
            ReplayDirectory =
                ReadSpecialConfigType(SpecialConfigType.Directory, @"ReplayDirectory", _replayDirectory, data);
            LogsDirectory           = ReadSpecialConfigType(SpecialConfigType.Directory, @"LogsDirectory", _logsDirectory, data);
            DataDirectory           = ReadSpecialConfigType(SpecialConfigType.Directory, @"DataDirectory", _dataDirectory, data);
            SongDirectory           = ReadSpecialConfigType(SpecialConfigType.Directory, @"SongDirectory", _songDirectory, data);
            SelectedGameMode        = ReadValue(@"SelectedGameMode", GameMode.Keys4, data);
            Username                = ReadValue(@"Username", "Player", data);
            VolumeGlobal            = ReadInt(@"VolumeGlobal", 50, 0, 100, data);
            VolumeEffect            = ReadInt(@"VolumeEffect", 20, 0, 100, data);
            VolumeMusic             = ReadInt(@"VolumeMusic", 50, 0, 100, data);
            BackgroundBrightness    = ReadInt(@"BackgroundBrightness", 50, 0, 100, data);
            WindowHeight            = ReadInt(@"WindowHeight", 768, 600, short.MaxValue, data);
            WindowWidth             = ReadInt(@"WindowWidth", 1366, 800, short.MaxValue, data);
            DisplaySongTimeProgress = ReadValue(@"DisplaySongTimeProgress", true, data);
            WindowFullScreen        = ReadValue(@"WindowFullScreen", false, data);
            FpsCounter              = ReadValue(@"FpsCounter", false, data);
            FpsLimiterType          = ReadValue(@"FpsLimiterType", FpsLimitType.Unlimited, data);
            CustomFpsLimit          = ReadInt(@"CustomFpsLimit", 240, 60, int.MaxValue, data);
            ScrollSpeed4K           = ReadInt(@"ScrollSpeed4K", 15, 5, 100, data);
            ScrollSpeed7K           = ReadInt(@"ScrollSpeed7K", 15, 5, 100, data);
            ScrollDirection4K       = ReadValue(@"ScrollDirection4K", ScrollDirection.Down, data);
            ScrollDirection7K       = ReadValue(@"ScrollDirection7K", ScrollDirection.Down, data);
            GlobalAudioOffset       = ReadInt(@"GlobalAudioOffset", 0, -300, 300, data);
            Skin                             = ReadSpecialConfigType(SpecialConfigType.Skin, @"Skin", "", data);
            DefaultSkin                      = ReadValue(@"DefaultSkin", DefaultSkins.Bar, data);
            Pitched                          = ReadValue(@"Pitched", true, data);
            ScoreboardVisible                = ReadValue(@"ScoreboardVisible", true, data);
            SelectOrderMapsetsBy             = ReadValue(@"SelectOrderMapsetsBy", OrderMapsetsBy.Artist, data);
            SelectedOnlineUserFilterType     = ReadValue(@"OnlineUserFilterType", OnlineUserFilterType.All, data);
            LeaderboardSection               = ReadValue(@"LeaderboardSection", LeaderboardType.Local, data);
            OsuDbPath                        = ReadSpecialConfigType(SpecialConfigType.Path, @"OsuDbPath", "", data);
            AutoLoadOsuBeatmaps              = ReadValue(@"AutoLoadOsuBeatmaps", false, data);
            AutoLoginToServer                = ReadValue(@"AutoLoginToServer", true, data);
            DisplayTimingLines               = ReadValue(@"DisplayTimingLines", true, data);
            DisplayMenuAudioVisualizer       = ReadValue(@"DisplayMenuAudioVisualizer", true, data);
            EnableHitsounds                  = ReadValue(@"EnableHitsounds", true, data);
            KeyNavigateLeft                  = ReadValue(@"KeyNavigateLeft", Keys.Left, data);
            KeyNavigateRight                 = ReadValue(@"KeyNavigateRight", Keys.Right, data);
            KeyNavigateUp                    = ReadValue(@"KeyNavigateUp", Keys.Up, data);
            KeyNavigateDown                  = ReadValue(@"KeyNavigateDown", Keys.Down, data);
            KeyNavigateBack                  = ReadValue(@"KeyNavigateBack", Keys.Escape, data);
            KeyNavigateSelect                = ReadValue(@"KeyNavigateSelect", Keys.Enter, data);
            KeyMania4K1                      = ReadValue(@"KeyMania4K1", Keys.A, data);
            KeyMania4K2                      = ReadValue(@"KeyMania4K2", Keys.S, data);
            KeyMania4K3                      = ReadValue(@"KeyMania4K3", Keys.K, data);
            KeyMania4K4                      = ReadValue(@"KeyMania4K4", Keys.L, data);
            KeyMania7K1                      = ReadValue(@"KeyMania7K1", Keys.A, data);
            KeyMania7K2                      = ReadValue(@"KeyMania7K2", Keys.S, data);
            KeyMania7K3                      = ReadValue(@"KeyMania7K3", Keys.D, data);
            KeyMania7K4                      = ReadValue(@"KeyMania7K4", Keys.Space, data);
            KeyMania7K5                      = ReadValue(@"KeyMania7K5", Keys.J, data);
            KeyMania7K6                      = ReadValue(@"KeyMania7K6", Keys.K, data);
            KeyMania7K7                      = ReadValue(@"KeyMania7K7", Keys.L, data);
            KeySkipIntro                     = ReadValue(@"KeySkipIntro", Keys.RightAlt, data);
            KeyPause                         = ReadValue(@"KeyPause", Keys.Escape, data);
            KeyToggleOverlay                 = ReadValue(@"KeyToggleOverlay", Keys.F8, data);
            KeyRestartMap                    = ReadValue(@"KeyRestartMap", Keys.OemTilde, data);
            KeyDecreaseScrollSpeed           = ReadValue(@"KeyDecreaseScrollSpeed", Keys.F3, data);
            KeyIncreaseScrollSpeed           = ReadValue(@"KeyIncreaseScrollSpeed", Keys.F4, data);
            KeyDecreaseMapOffset             = ReadValue(@"KeyDecreaseMapOffset", Keys.OemMinus, data);
            KeyIncreaseMapOffset             = ReadValue(@"KeyIncreaseMapOffset", Keys.OemPlus, data);
            KeyScoreboardVisible             = ReadValue(@"KeyHideScoreboard", Keys.Tab, data);
            KeyQuickExit                     = ReadValue(@"KeyQuickExit", Keys.F1, data);
            BlurBackgroundInGameplay         = ReadValue(@"BlurBackgroundInGameplay", false, data);
            TapToPause                       = ReadValue(@"TapToPause", false, data);
            DisplayFailedLocalScores         = ReadValue(@"DisplayFailedLocalScores", true, data);
            EditorScrollSpeedKeys            = ReadInt(@"EditorScrollSpeedKeys", 16, 5, 100, data);
            KeyEditorPausePlay               = ReadValue(@"KeyEditorPausePlay", Keys.Space, data);
            KeyEditorDecreaseAudioRate       = ReadValue(@"KeyEditorDecreaseAudioRate", Keys.OemMinus, data);
            KeyEditorIncreaseAudioRate       = ReadValue(@"KeyEditorIncreaseAudioRate", Keys.OemPlus, data);
            EditorEnableHitsounds            = ReadValue(@"EditorEnableHitsounds", true, data);
            EditorBeatSnapColorType          = ReadValue(@"EditorBeatSnapColorType", EditorBeatSnapColor.Default, data);
            EditorOnlyShowMeasureLines       = ReadValue(@"EditorOnlyShowMeasureLines", false, data);
            EditorShowLaneDividerLines       = ReadValue(@"EditorShowDividerLines", true, data);
            EditorHitObjectsMidpointAnchored = ReadValue(@"EditorHitObjectsMidpointAnchored", false, data);
            EditorPlayMetronome              = ReadValue(@"EditorPlayMetronome", true, data);
            EditorMetronomePlayHalfBeats     = ReadValue(@"EditorMetronomePlayHalfBeats", false, data);
            DisplaySongTimeProgressNumbers   = ReadValue(@"DisplaySongTimeProgressNumbers", true, data);
            DisplayJudgementCounter          = ReadValue(@"DisplayJudgementCounter", true, data);
            SkipResultsScreenAfterQuit       = ReadValue(@"SkipResultsScreenAfterQuit", false, data);
            DisplayComboAlerts               = ReadValue(@"DisplayComboAlerts", true, data);
            LaneCoverTopHeight               = ReadInt(@"LaneCoverTopHeight", 25, 0, 75, data);
            LaneCoverBottomHeight            = ReadInt(@"LaneCoverBottomHeight", 25, 0, 75, data);
            LaneCoverTop                     = ReadValue(@"LaneCoverTop", false, data);
            LaneCoverBottom                  = ReadValue(@"LaneCoverBottom", false, data);
            UIElementsOverLaneCover          = ReadValue(@"UIElementsOverLaneCover", true, data);
            EditorVisualizationGraph         = ReadValue(@"EditorVisualizationGraph", EditorVisualizationGraphType.Tick, data);
            EditorViewLayers                 = ReadValue(@"EditorViewLayers", false, data);

            // Have to do this manually.
            if (string.IsNullOrEmpty(Username.Value))
            {
                Username.Value = "Player";
            }

            // Write the config file with all of the changed/invalidated data.
            Task.Run(async() => await WriteConfigFileAsync())
            .ContinueWith(t =>
            {
                // SET AUTO-SAVE FUNCTIONALITY FOR EACH BINDED VALUE.
                // This is so shit tbcfh, lol.
                GameDirectory.ValueChanged           += AutoSaveConfiguration;
                SkinDirectory.ValueChanged           += AutoSaveConfiguration;
                ScreenshotDirectory.ValueChanged     += AutoSaveConfiguration;
                ReplayDirectory.ValueChanged         += AutoSaveConfiguration;
                LogsDirectory.ValueChanged           += AutoSaveConfiguration;
                DataDirectory.ValueChanged           += AutoSaveConfiguration;
                SongDirectory.ValueChanged           += AutoSaveConfiguration;
                OsuDbPath.ValueChanged               += AutoSaveConfiguration;
                AutoLoadOsuBeatmaps.ValueChanged     += AutoSaveConfiguration;
                Username.ValueChanged                += AutoSaveConfiguration;
                VolumeGlobal.ValueChanged            += AutoSaveConfiguration;
                VolumeEffect.ValueChanged            += AutoSaveConfiguration;
                VolumeMusic.ValueChanged             += AutoSaveConfiguration;
                BackgroundBrightness.ValueChanged    += AutoSaveConfiguration;
                WindowHeight.ValueChanged            += AutoSaveConfiguration;
                WindowWidth.ValueChanged             += AutoSaveConfiguration;
                WindowFullScreen.ValueChanged        += AutoSaveConfiguration;
                FpsCounter.ValueChanged              += AutoSaveConfiguration;
                FpsLimiterType.ValueChanged          += AutoSaveConfiguration;
                CustomFpsLimit.ValueChanged          += AutoSaveConfiguration;
                DisplaySongTimeProgress.ValueChanged += AutoSaveConfiguration;
                ScrollSpeed4K.ValueChanged           += AutoSaveConfiguration;
                ScrollSpeed7K.ValueChanged           += AutoSaveConfiguration;
                ScrollDirection4K.ValueChanged       += AutoSaveConfiguration;
                ScrollDirection7K.ValueChanged       += AutoSaveConfiguration;
                GlobalAudioOffset.ValueChanged       += AutoSaveConfiguration;
                Skin.ValueChanged                             += AutoSaveConfiguration;
                DefaultSkin.ValueChanged                      += AutoSaveConfiguration;
                Pitched.ValueChanged                          += AutoSaveConfiguration;
                ScoreboardVisible.ValueChanged                += AutoSaveConfiguration;
                AutoLoginToServer.ValueChanged                += AutoSaveConfiguration;
                DisplayTimingLines.ValueChanged               += AutoSaveConfiguration;
                DisplayMenuAudioVisualizer.ValueChanged       += AutoSaveConfiguration;
                EnableHitsounds.ValueChanged                  += AutoSaveConfiguration;
                KeyNavigateLeft.ValueChanged                  += AutoSaveConfiguration;
                KeyNavigateRight.ValueChanged                 += AutoSaveConfiguration;
                KeyNavigateUp.ValueChanged                    += AutoSaveConfiguration;
                KeyNavigateDown.ValueChanged                  += AutoSaveConfiguration;
                KeyNavigateBack.ValueChanged                  += AutoSaveConfiguration;
                KeyNavigateSelect.ValueChanged                += AutoSaveConfiguration;
                KeyMania4K1.ValueChanged                      += AutoSaveConfiguration;
                KeyMania4K2.ValueChanged                      += AutoSaveConfiguration;
                KeyMania4K3.ValueChanged                      += AutoSaveConfiguration;
                KeyMania4K4.ValueChanged                      += AutoSaveConfiguration;
                KeyMania7K1.ValueChanged                      += AutoSaveConfiguration;
                KeyMania7K2.ValueChanged                      += AutoSaveConfiguration;
                KeyMania7K3.ValueChanged                      += AutoSaveConfiguration;
                KeyMania7K4.ValueChanged                      += AutoSaveConfiguration;
                KeyMania7K5.ValueChanged                      += AutoSaveConfiguration;
                KeyMania7K6.ValueChanged                      += AutoSaveConfiguration;
                KeyMania7K7.ValueChanged                      += AutoSaveConfiguration;
                KeySkipIntro.ValueChanged                     += AutoSaveConfiguration;
                KeyPause.ValueChanged                         += AutoSaveConfiguration;
                KeyToggleOverlay.ValueChanged                 += AutoSaveConfiguration;
                KeyRestartMap.ValueChanged                    += AutoSaveConfiguration;
                KeyIncreaseScrollSpeed.ValueChanged           += AutoSaveConfiguration;
                KeyDecreaseScrollSpeed.ValueChanged           += AutoSaveConfiguration;
                KeyIncreaseMapOffset.ValueChanged             += AutoSaveConfiguration;
                KeyDecreaseMapOffset.ValueChanged             += AutoSaveConfiguration;
                KeyScoreboardVisible.ValueChanged             += AutoSaveConfiguration;
                SelectOrderMapsetsBy.ValueChanged             += AutoSaveConfiguration;
                KeyQuickExit.ValueChanged                     += AutoSaveConfiguration;
                SelectedGameMode.ValueChanged                 += AutoSaveConfiguration;
                SelectedOnlineUserFilterType.ValueChanged     += AutoSaveConfiguration;
                BlurBackgroundInGameplay.ValueChanged         += AutoSaveConfiguration;
                TapToPause.ValueChanged                       += AutoSaveConfiguration;
                DisplayFailedLocalScores.ValueChanged         += AutoSaveConfiguration;
                EditorScrollSpeedKeys.ValueChanged            += AutoSaveConfiguration;
                KeyEditorPausePlay.ValueChanged               += AutoSaveConfiguration;
                KeyEditorDecreaseAudioRate.ValueChanged       += AutoSaveConfiguration;
                KeyEditorIncreaseAudioRate.ValueChanged       += AutoSaveConfiguration;
                EditorBeatSnapColorType.ValueChanged          += AutoSaveConfiguration;
                EditorShowLaneDividerLines.ValueChanged       += AutoSaveConfiguration;
                EditorHitObjectsMidpointAnchored.ValueChanged += AutoSaveConfiguration;
                EditorPlayMetronome.ValueChanged              += AutoSaveConfiguration;
                EditorMetronomePlayHalfBeats.ValueChanged     += AutoSaveConfiguration;
                DisplaySongTimeProgressNumbers.ValueChanged   += AutoSaveConfiguration;
                DisplayJudgementCounter.ValueChanged          += AutoSaveConfiguration;
                SkipResultsScreenAfterQuit.ValueChanged       += AutoSaveConfiguration;
                DisplayComboAlerts.ValueChanged               += AutoSaveConfiguration;
                LaneCoverTopHeight.ValueChanged               += AutoSaveConfiguration;
                LaneCoverBottomHeight.ValueChanged            += AutoSaveConfiguration;
                LaneCoverTop.ValueChanged                     += AutoSaveConfiguration;
                LaneCoverBottom.ValueChanged                  += AutoSaveConfiguration;
                EditorViewLayers.ValueChanged                 += AutoSaveConfiguration;
                UIElementsOverLaneCover.ValueChanged          += AutoSaveConfiguration;
                EditorVisualizationGraph.ValueChanged         += AutoSaveConfiguration;
            });
        }