public SettingsViewModel(UserSettings settings, IDialogManager dialogManager, IRestarter restarter) {
_dialogManager = dialogManager;
DisplayName = "Settings";
_settings = settings;
// create accent color menu items for the demo
Accents = ThemeInfo.Accents
.Select(
a => new AccentColorMenuData {Name = a.Name, ColorBrush = a.ColorBrush}).ToList();
// create metro theme color menu items for the demo
Themes = ThemeInfo.Themes
.Select(
a =>
new AppThemeMenuData {
Name = a.Name,
BorderColorBrush = a.BorderColorBrush,
ColorBrush = a.ColorBrush
}).ToList();
DiagnosticsMenu = new DiagnosticsMenu(_dialogManager, restarter);
// Task.Run because RXCommand does not throw exceptions in Subscribe.
ReactiveCommand.CreateAsyncTask(x => Task.Run(() => Logout()))
.SetNewCommand(this, x => x.LogoutCommand)
.Subscribe();
ReactiveCommand.CreateAsyncTask(
x => Cheat.PublishEventUi(new RequestGameSettingsOverlay(Guid.Empty)))
.SetNewCommand(this, x => x.GameSettingsCommand)
.Subscribe();
_settings.WhenAnyValue(x => x.GameOptions.SteamDirectory)
.BindTo(this, x => x.SteamDirectory);
this.WhenAnyValue(x => x.SteamDirectory)
.Select(x => x == DefaultSteamDirectory ? null : x)
.Where(x => x == null || x.IsValidAbsoluteDirectoryPath())
.BindTo(_settings.GameOptions, x => x.SteamDirectory);
this.WhenAnyValue(x => x.DefaultSteamDirectory)
.Where(x => string.IsNullOrWhiteSpace(SteamDirectory) && !string.IsNullOrWhiteSpace(x))
.Subscribe(x => SteamDirectory = x);
SetupPropertyGrid();
}