private void SaveSettings()
 {
     Config.InterpolationMode       = SelectedInterpolationMode;
     Config.SmoothingMode           = SelectedSmoothingMode;
     Config.PixelOffsetMode         = SelectedPixelOffsetMode;
     Config.FitImagesToScreen       = FitImagesToScreen;
     Config.IsScrollBarVisible      = IsScrollBarVisible;
     Config.OpenChapterOnLoadChoice = OpenChapterOnLoad;
     Config.Background  = SelectedBackground;
     Config.Theme       = SelectedTheme;
     Config.AccentColor = SelectedColor;
     Config.Save();
     if (_initialContextIntegrated != ContextIntegrated)
     {
         try
         {
             RegistryContextManager.ChangeContextIntegrated(ContextIntegrated);
         }
         catch (Exception e)
         {
             System.Diagnostics.Debug.Print(e.ToString());
         }
     }
 }
        public SettingViewModel(Action <SettingViewModel, bool> closeCallback, IUserConfig config)
        {
            Config                    = config ?? Locator.Current.GetService <IUserConfig>();
            ContextIntegrated         = RegistryContextManager.IsContextRegistry();
            _initialContextIntegrated = ContextIntegrated;
            FitImagesToScreen         = Config.FitImagesToScreen;
            IsScrollBarVisible        = Config.IsScrollBarVisible;
            OpenChapterOnLoad         = Config.OpenChapterOnLoadChoice;
            SelectedBackground        = Config.Background;
            SelectedTheme             = Config.Theme;

            try
            {
                SelectedInterpolationMode = Config.InterpolationMode;
                SelectedSmoothingMode     = Config.SmoothingMode;
                SelectedPixelOffsetMode   = Config.PixelOffsetMode;
            }
            catch (Exception)
            {
                SelectedInterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Default;
                SelectedSmoothingMode     = System.Drawing.Drawing2D.SmoothingMode.Default;
                SelectedPixelOffsetMode   = System.Drawing.Drawing2D.PixelOffsetMode.Default;
                Config.InterpolationMode  = SelectedInterpolationMode;
                Config.SmoothingMode      = SelectedSmoothingMode;
                Config.PixelOffsetMode    = SelectedPixelOffsetMode;
                Config.Save();
            }
            _closeCallback = closeCallback;

            Save = ReactiveCommand.Create(() =>
            {
                SaveSettings();
                _closeCallback(this, false);
            });

            SaveAndRefresh = ReactiveCommand.Create(() =>
            {
                SaveSettings();
                _closeCallback(this, true);
            });

            Close = ReactiveCommand.Create(() =>
            {
                _closeCallback(this, false);
                if (SelectedTheme != Config.Theme)
                {
                    // Restore theme
                    ThemeEditor.ModifyTheme(Config.Theme);
                }
                ThemeEditor.ChangePrimaryColor(Config.AccentColor);
            });

            SetAccentColor = ReactiveCommand.Create(() =>
            {
                InitialAccentColor = SelectedColor;
                ThemeEditor.ChangePrimaryColor(SelectedColor);
                IsPopupOpen = false;
            });

            CancelAccentColor = ReactiveCommand.Create(() =>
            {
                SelectedColor = Config.AccentColor;
                IsPopupOpen   = false;
            });

            ResetAccentColor = ReactiveCommand.Create(() =>
            {
                InitialAccentColor = Color.FromArgb(255, 154, 103, 234);
                SelectedColor      = InitialAccentColor;
                ThemeEditor.ChangePrimaryColor(InitialAccentColor);
                IsPopupOpen = false;
            });

            this.WhenValueChanged(x => x.SelectedTheme).Subscribe(x =>
            {
                ThemeEditor.ModifyTheme(x);
            });

            this.WhenAnyValue(x => x.SelectedColor).Subscribe(x =>
            {
                SelectedBrush = new SolidColorBrush(SelectedColor);
            });
        }