Mesen2/UI/Windows/ConfigWindow.axaml.cs

113 lines
No EOL
2.6 KiB
C#

using Avalonia;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using Avalonia.Threading;
using Mesen.ViewModels;
using System;
using System.ComponentModel;
using Mesen.Config;
using Mesen.Utilities;
using System.IO;
using Avalonia.Input;
using Avalonia.Styling;
namespace Mesen.Windows
{
public class ConfigWindow : MesenWindow
{
private ConfigViewModel _model;
private bool _promptToSave = true;
[Obsolete("For designer only")]
public ConfigWindow() : this(ConfigWindowTab.Audio) { }
public ConfigWindow(ConfigWindowTab tab)
{
InitializeComponent();
#if DEBUG
this.AttachDevTools();
#endif
_model = new ConfigViewModel(tab);
DataContext = _model;
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
private void Ok_OnClick(object sender, RoutedEventArgs e)
{
_promptToSave = false;
_model.SaveConfig();
Close();
}
private void Cancel_OnClick(object sender, RoutedEventArgs e)
{
_promptToSave = false;
_model.RevertConfig();
Close();
}
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if(e.Key == Key.Escape) {
Close();
}
}
private void OpenMesenFolder(object sender, RoutedEventArgs e)
{
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
FileName = ConfigManager.HomeFolder + Path.DirectorySeparatorChar,
UseShellExecute = true,
Verb = "open"
});
}
private async void ResetAllSettings(object sender, RoutedEventArgs e)
{
if(await MesenMsgBox.Show(VisualRoot, "ResetSettingsConfirmation", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK) {
ConfigManager.ResetSettings();
_promptToSave = false;
Close();
}
}
private async void DisplaySaveChangesPrompt()
{
DialogResult result = await MesenMsgBox.Show(this, "PromptSaveChanges", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
switch(result) {
case DialogResult.Yes: _promptToSave = false; _model.SaveConfig(); Close(); break;
case DialogResult.No: _promptToSave = false; _model.RevertConfig(); Close(); break;
default: break;
}
}
protected override void OnClosing(WindowClosingEventArgs e)
{
base.OnClosing(e);
if(Design.IsDesignMode) {
return;
}
if(_promptToSave && _model.IsDirty()) {
e.Cancel = true;
DisplaySaveChangesPrompt();
return;
}
ConfigManager.Config.ApplyConfig();
_model.Dispose();
PreferencesConfig.UpdateTheme();
//Ensure config isn't modified by the UI while closing
DataContext = null;
}
}
}