112 lines
2.9 KiB
C#
112 lines
2.9 KiB
C#
using System.ComponentModel;
|
|
using Microsoft.AspNetCore.Components;
|
|
using VisionBuilder.UI.Common;
|
|
|
|
namespace VisionBuilder.UI.Blazor.Components;
|
|
|
|
public partial class SingleCameraControl : ComponentBase, IDisposable
|
|
{
|
|
[Parameter] public SingleCameraVM? ViewModel { get; set; }
|
|
|
|
private string _cameraLabel = "";
|
|
private string _currentRecipeName = "Select recipe";
|
|
private bool _canSelectRecipe;
|
|
private bool _canStart;
|
|
private bool _canStop;
|
|
private bool _canPause;
|
|
private bool _canResume;
|
|
private bool _canHotReload;
|
|
private bool _showPauseButton;
|
|
private SingleCameraVM? _subscribedVm;
|
|
private bool _disposed;
|
|
|
|
protected override void OnParametersSet()
|
|
{
|
|
if (_subscribedVm != ViewModel)
|
|
{
|
|
Unsubscribe();
|
|
Subscribe();
|
|
}
|
|
}
|
|
|
|
private void Subscribe()
|
|
{
|
|
_subscribedVm = ViewModel;
|
|
if (ViewModel != null)
|
|
{
|
|
ViewModel.PropertyChanged += OnPropertyChanged;
|
|
UpdateState();
|
|
}
|
|
}
|
|
|
|
private void Unsubscribe()
|
|
{
|
|
if (_subscribedVm != null)
|
|
_subscribedVm.PropertyChanged -= OnPropertyChanged;
|
|
_subscribedVm = null;
|
|
}
|
|
|
|
private void UpdateState()
|
|
{
|
|
if (ViewModel == null) return;
|
|
_cameraLabel = ViewModel.CameraLabelAndStatus;
|
|
_currentRecipeName = ViewModel.CurrentRecipeName;
|
|
_canSelectRecipe = ViewModel.IsNotRunning;
|
|
_canStart = ViewModel.CanStart;
|
|
_canStop = ViewModel.CanStop;
|
|
_canPause = ViewModel.CanPause;
|
|
_canResume = ViewModel.CanResume;
|
|
_canHotReload = ViewModel.CanHotReload;
|
|
_showPauseButton = ViewModel.CanPause || ViewModel.CanResume;
|
|
}
|
|
|
|
private async void OnPropertyChanged(object? sender, PropertyChangedEventArgs e)
|
|
{
|
|
if (_disposed) return;
|
|
UpdateState();
|
|
await InvokeAsync(StateHasChanged);
|
|
}
|
|
|
|
private async Task OnSelectRecipe()
|
|
{
|
|
if (ViewModel?.SelectRecipeCommand.CanExecute(null) == true)
|
|
await ViewModel.SelectRecipe();
|
|
}
|
|
|
|
private async Task OnStart()
|
|
{
|
|
if (ViewModel?.StartCommand.CanExecute(null) == true)
|
|
await ViewModel.Start();
|
|
}
|
|
|
|
private async Task OnStop()
|
|
{
|
|
if (ViewModel?.StopCommand.CanExecute(null) == true)
|
|
await ViewModel.Stop();
|
|
}
|
|
|
|
private void OnPause()
|
|
{
|
|
if (ViewModel?.PauseCommand.CanExecute(null) == true)
|
|
ViewModel.PauseCommand.Execute(null);
|
|
}
|
|
|
|
private void OnResume()
|
|
{
|
|
if (ViewModel?.ResumeCommand.CanExecute(null) == true)
|
|
ViewModel.ResumeCommand.Execute(null);
|
|
}
|
|
|
|
private void OnHotReload()
|
|
{
|
|
if (ViewModel?.HotReloadCommand.CanExecute(null) == true)
|
|
ViewModel.HotReloadCommand.Execute(null);
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
_disposed = true;
|
|
Unsubscribe();
|
|
}
|
|
}
|