mirror of
https://github.com/SourMesen/Mesen2.git
synced 2025-04-02 10:21:44 -04:00
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.)
155 lines
4.2 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|