Files
HawkeyeVision/VisionBuilder.UI.Blazor/Components/SingleCameraControl.razor.cs
EugeneTes 83597b8763 web UI
2026-03-19 09:03:41 +01:00

109 lines
2.8 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;
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)
{
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()
{
Unsubscribe();
}
}