Mesen2/UI/Windows/ControllerConfigWindow.axaml.cs
Sour 716227c0a7 UI: Update to Avalonia11-preview6
Notes:
-Uses a copy of VirtualizingStackPanel (to include fixes done after preview6) + fix another issue in lists
-Fixes memory leaks when closing windows (by setting DataContext to null, etc.)
2023-04-10 22:59:48 -04:00

155 lines
4.2 KiB
C#

using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using Mesen.Config;
using Avalonia.Interactivity;
using Mesen.ViewModels;
using Mesen.Utilities;
using Avalonia.Input;
using System.ComponentModel;
namespace Mesen.Windows
{
public class ControllerConfigWindow : MesenWindow
{
private ControllerConfigViewModel Model => (ControllerConfigViewModel)DataContext!;
private bool _promptToSave = true;
public ControllerConfigWindow()
{
InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if(e.Key == Key.Escape) {
Close();
}
}
private async void DisplaySaveChangesPrompt()
{
DialogResult result = await MesenMsgBox.Show(this, "PromptKeepChanges", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
switch(result) {
case DialogResult.Yes: _promptToSave = false; Close(true); break;
case DialogResult.No: _promptToSave = false; Close(false); break;
default: break;
}
}
protected override void OnClosing(WindowClosingEventArgs e)
{
base.OnClosing(e);
if(Design.IsDesignMode) {
return;
}
if(_promptToSave && !Model.Config.IsIdentical(Model.OriginalConfig)) {
e.Cancel = true;
DisplaySaveChangesPrompt();
return;
}
}
private void btnOk_OnClick(object sender, RoutedEventArgs e)
{
_promptToSave = false;
Close(true);
}
private void btnCancel_OnClick(object sender, RoutedEventArgs e)
{
_promptToSave = false;
Close(false);
}
private void btnPreset_OnClick(object sender, RoutedEventArgs e)
{
((Button)sender).ContextMenu?.Open();
}
private void SetDefaultMappings(KeyPresetType? preset)
{
int index = this.GetControl<TabControl>("tabMain").SelectedIndex;
ControllerConfig cfg = Model.Config;
switch(index) {
case 0: cfg.Mapping1.SetDefaultKeys(Model.Type, preset); Model.KeyMapping1.RefreshCustomKeys(); break;
case 1: cfg.Mapping2.SetDefaultKeys(Model.Type, preset); Model.KeyMapping2.RefreshCustomKeys(); break;
case 2: cfg.Mapping3.SetDefaultKeys(Model.Type, preset); Model.KeyMapping3.RefreshCustomKeys(); break;
case 3: cfg.Mapping4.SetDefaultKeys(Model.Type, preset); Model.KeyMapping4.RefreshCustomKeys(); break;
}
}
private void btnClearBindings_OnClick(object sender, RoutedEventArgs e)
{
int index = this.GetControl<TabControl>("tabMain").SelectedIndex;
ControllerConfig cfg = Model.Config;
switch(index) {
case 0: cfg.Mapping1.ClearKeys(Model.Type); Model.KeyMapping1.RefreshCustomKeys(); break;
case 1: cfg.Mapping2.ClearKeys(Model.Type); Model.KeyMapping2.RefreshCustomKeys(); break;
case 2: cfg.Mapping3.ClearKeys(Model.Type); Model.KeyMapping3.RefreshCustomKeys(); break;
case 3: cfg.Mapping4.ClearKeys(Model.Type); Model.KeyMapping4.RefreshCustomKeys(); break;
}
}
private void mnuWasdLayout_OnClick(object sender, RoutedEventArgs e)
{
SetDefaultMappings(KeyPresetType.WasdKeys);
}
private void mnuArrowLayout_OnClick(object sender, RoutedEventArgs e)
{
SetDefaultMappings(KeyPresetType.ArrowKeys);
}
private void mnuXboxLayout1_OnClick(object sender, RoutedEventArgs e)
{
SetDefaultMappings(KeyPresetType.XboxP1);
}
private void mnuXboxLayout1Alt_OnClick(object sender, RoutedEventArgs e)
{
SetDefaultMappings(KeyPresetType.XboxP1Alt);
}
private void mnuXboxLayout2_OnClick(object sender, RoutedEventArgs e)
{
SetDefaultMappings(KeyPresetType.XboxP2);
}
private void mnuXboxLayout2Alt_OnClick(object sender, RoutedEventArgs e)
{
SetDefaultMappings(KeyPresetType.XboxP2Alt);
}
private void mnuPs4Layout1_OnClick(object sender, RoutedEventArgs e)
{
SetDefaultMappings(KeyPresetType.Ps4P1);
}
private void mnuPs4Layout1Alt_OnClick(object sender, RoutedEventArgs e)
{
SetDefaultMappings(KeyPresetType.Ps4P1Alt);
}
private void mnuPs4Layout2_OnClick(object sender, RoutedEventArgs e)
{
SetDefaultMappings(KeyPresetType.Ps4P2);
}
private void mnuPs4Layout2Alt_OnClick(object sender, RoutedEventArgs e)
{
SetDefaultMappings(KeyPresetType.Ps4P2Alt);
}
private void btnSetDefaultBindings_OnClick(object sender, RoutedEventArgs e)
{
SetDefaultMappings(null);
}
}
}