mirror of
https://github.com/Ryujinx/Ryujinx.git
synced 2024-08-18 06:38:42 +02:00
* Restructure `Ryujinx.Ava` * Stylistic consistency * Update Ryujinx.Ava/UI/Controls/UserEditor.axaml.cs Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com> * Update Ryujinx.Ava/UI/Controls/UserEditor.axaml.cs Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com> * Update Ryujinx.Ava/UI/Controls/UserSelector.axaml.cs Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com> * Update Ryujinx.Ava/UI/Controls/SaveManager.axaml.cs Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com> * Update Ryujinx.Ava/UI/Controls/SaveManager.axaml.cs Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com> * Update Ryujinx.Ava/UI/Windows/SettingsWindow.axaml.cs Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com> * Update Ryujinx.Ava/UI/Helpers/EmbeddedWindow.cs Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com> * Update Ryujinx.Ava/UI/Helpers/EmbeddedWindow.cs Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com> * Update Ryujinx.Ava/UI/Helpers/EmbeddedWindow.cs Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com> * Update Ryujinx.Ava/UI/Helpers/EmbeddedWindow.cs Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com> * Update Ryujinx.Ava/UI/Windows/SettingsWindow.axaml.cs Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com> * Update Ryujinx.Ava/UI/ViewModels/UserProfileViewModel.cs Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com> * Update Ryujinx.Ava/UI/ViewModels/UserProfileViewModel.cs Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com> * Update Ryujinx.Ava/UI/Helpers/EmbeddedWindow.cs Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com> * Fix redundancies * Remove redunancies * Add back elses Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com>
71 lines
1.9 KiB
C#
71 lines
1.9 KiB
C#
using System;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Input;
|
|
|
|
namespace Ryujinx.Ava.UI.Helpers
|
|
{
|
|
public sealed class MiniCommand<T> : MiniCommand, ICommand
|
|
{
|
|
private readonly Action<T> _callback;
|
|
private bool _busy;
|
|
private Func<T, Task> _asyncCallback;
|
|
|
|
public MiniCommand(Action<T> callback)
|
|
{
|
|
_callback = callback;
|
|
}
|
|
|
|
public MiniCommand(Func<T, Task> callback)
|
|
{
|
|
_asyncCallback = callback;
|
|
}
|
|
|
|
private bool Busy
|
|
{
|
|
get => _busy;
|
|
set
|
|
{
|
|
_busy = value;
|
|
CanExecuteChanged?.Invoke(this, EventArgs.Empty);
|
|
}
|
|
}
|
|
|
|
public override event EventHandler CanExecuteChanged;
|
|
public override bool CanExecute(object parameter) => !_busy;
|
|
|
|
public override async void Execute(object parameter)
|
|
{
|
|
if (Busy)
|
|
{
|
|
return;
|
|
}
|
|
try
|
|
{
|
|
Busy = true;
|
|
if (_callback != null)
|
|
{
|
|
_callback((T)parameter);
|
|
}
|
|
else
|
|
{
|
|
await _asyncCallback((T)parameter);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
Busy = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
public abstract class MiniCommand : ICommand
|
|
{
|
|
public static MiniCommand Create(Action callback) => new MiniCommand<object>(_ => callback());
|
|
public static MiniCommand Create<TArg>(Action<TArg> callback) => new MiniCommand<TArg>(callback);
|
|
public static MiniCommand CreateFromTask(Func<Task> callback) => new MiniCommand<object>(_ => callback());
|
|
|
|
public abstract bool CanExecute(object parameter);
|
|
public abstract void Execute(object parameter);
|
|
public abstract event EventHandler CanExecuteChanged;
|
|
}
|
|
} |