using TeamsISO.Engine.Controller; using TeamsISO.Engine.Domain; namespace TeamsISO.App.ViewModels; /// /// Bindings for the global settings panel: framerate, resolution, aspect, audio. /// public sealed class GlobalSettingsViewModel : ObservableObject { private readonly IIsoController _controller; private TargetFramerate _framerate; private TargetResolution _resolution; private AspectMode _aspect; private AudioMode _audio; public GlobalSettingsViewModel(IIsoController controller) { _controller = controller; var current = controller.GlobalSettings; _framerate = current.Framerate; _resolution = current.Resolution; _aspect = current.Aspect; _audio = current.Audio; ApplyCommand = new AsyncRelayCommand(ApplyAsync); } public IEnumerable AvailableFramerates => Enum.GetValues(); public IEnumerable AvailableResolutions => Enum.GetValues(); public IEnumerable AvailableAspectModes => Enum.GetValues(); public IEnumerable AvailableAudioModes => Enum.GetValues(); public TargetFramerate Framerate { get => _framerate; set => SetField(ref _framerate, value); } public TargetResolution Resolution { get => _resolution; set => SetField(ref _resolution, value); } public AspectMode Aspect { get => _aspect; set => SetField(ref _aspect, value); } public AudioMode Audio { get => _audio; set => SetField(ref _audio, value); } public AsyncRelayCommand ApplyCommand { get; } private Task ApplyAsync() { var settings = new FrameProcessingSettings(_framerate, _resolution, _aspect, _audio); return _controller.SetGlobalSettingsAsync(settings, CancellationToken.None); } }