RobotNet/RobotNet.WebApp/Robots/Components/Monitoring/MonitorToolbar.razor
2025-10-15 15:15:53 +07:00

97 lines
5.2 KiB
Plaintext

<div class="d-flex flex-row justify-content-between w-100 overflow-x-auto px-1">
<div class="d-flex flex-row">
<MudIconButton Class="mx-1 my-2" Icon="@Icons.Material.Filled.ZoomIn" Variant="Variant.Outlined" OnClick="(async () => await ButtonEventClick.InvokeAsync(MonitorToolbarButtonType.ZoomIn))" />
<MudIconButton Class="mx-1 my-2" Icon="@Icons.Material.Filled.ZoomOut" Variant="Variant.Outlined" OnClick="(async () => await ButtonEventClick.InvokeAsync(MonitorToolbarButtonType.ZoomOut))" />
<MudIconButton Class="mx-1 my-2" Icon="@Icons.Material.Filled.FitScreen" Variant="Variant.Outlined" OnClick="(async () => await ButtonEventClick.InvokeAsync(MonitorToolbarButtonType.Fit))" />
<MudIconButton Class="mx-1 my-2" Icon="@Icons.Material.Filled.MyLocation" Variant="Variant.Outlined" OnClick="(async () => await ButtonEventClick.InvokeAsync(MonitorToolbarButtonType.Focus))" />
<div class="mt-1 d-flex flex-row">
<MudCheckBox @bind-Value="Model.FocusRobot" Label="Focus" T="bool" UncheckedColor="Color.Default" Color="Color.Success" @bind-Value:after="(() => CheckedClick(MonitorToolbarCheckedType.FocusRobot, Model.FocusRobot))"></MudCheckBox>
<MudCheckBox @bind-Value="Model.ShowPath" Label="Path" T="bool" UncheckedColor="Color.Default" Color="Color.Success" @bind-Value:after="(() => CheckedClick(MonitorToolbarCheckedType.ShowPath, Model.ShowPath))"></MudCheckBox>
<MudCheckBox @bind-Value="Model.ShowName" Label="Name" T="bool" UncheckedColor="Color.Default" Color="Color.Success" @bind-Value:after="(() => CheckedClick(MonitorToolbarCheckedType.ShowName, Model.ShowName))"></MudCheckBox>
<MudCheckBox @bind-Value="Model.ShowElement" Label="Element" T="bool" UncheckedColor="Color.Default" Color="Color.Success" @bind-Value:after="(() => CheckedClick(MonitorToolbarCheckedType.ShowElement, Model.ShowElement))"></MudCheckBox>
<MudCheckBox @bind-Value="Model.ShowGrid" Label="Grid" T="bool" UncheckedColor="Color.Default" Color="Color.Success" @bind-Value:after="(() => CheckedClick(MonitorToolbarCheckedType.ShowGrid, Model.ShowGrid))"></MudCheckBox>
<MudCheckBox @bind-Value="Model.ShowLaser" Label="Laser" T="bool" UncheckedColor="Color.Default" Color="Color.Success" @bind-Value:after="(() => CheckedClick(MonitorToolbarCheckedType.ShowLaser, Model.ShowLaser))"></MudCheckBox>
</div>
</div>
<div class="d-flex flex-row">
<MudSelect Class="ms-2" Label="Map Name" Variant="Variant.Outlined" T="MapInfoDto" Margin="Margin.Dense" Dense @bind-Value="MapSelected" Style="width: 200px" @bind-Value:after="(async () => await MapChanged.InvokeAsync(MapSelected))">
@foreach(var map in Maps)
{
<MudSelectItem Value="@map">@map.Name</MudSelectItem>
}
</MudSelect>
<MudSelect Class="ms-2" @bind-Value="@RobotSelected" T="RobotInfomationDto" @bind-Value:after="(async () => await RobotChanged.InvokeAsync(RobotSelected))" Margin="Margin.Dense" Dense Variant="Variant.Outlined" Label="Robot Name" Style="width: 200px">
@foreach (var robot in Robots)
{
<MudSelectItem Value="@robot">@robot.Name</MudSelectItem>
}
</MudSelect>
<MudIconButton Icon="@ExpandIcon" Color="Color.Success" OnClick="ExpandedClick" />
</div>
</div>
@code {
[Parameter]
public MonitorToolBarModel Model { get; set; } = null!;
[Parameter]
public EventCallback<MonitorToolbarButtonType> ButtonEventClick { get; set; }
[Parameter]
public EventCallback<bool> ExpandChanged { get; set; }
[Parameter]
public EventCallback<MapInfoDto> MapChanged { get; set; }
[Parameter]
public EventCallback<RobotInfomationDto> RobotChanged { get; set; }
[Parameter]
public Func<MonitorToolbarCheckedType, bool, Task>? CheckedEventClick { get; set; }
public List<MapInfoDto> Maps = [];
private MapInfoDto? MapSelected = default!;
private bool isExpand = true;
private string ExpandIcon = @Icons.Material.Filled.ArrowForwardIos;
public List<RobotInfomationDto> Robots = [];
private RobotInfomationDto? RobotSelected = null;
public void LoadMaps(List<MapInfoDto> maps, MapInfoDto mapSelected)
{
Maps = maps;
MapSelected = mapSelected;
StateHasChanged();
}
public void LoadRobots(List<RobotInfomationDto> robots)
{
Robots = robots;
if(Robots.Count > 0 && (RobotSelected is null || !Robots.Any(r => r.RobotId == RobotSelected.RobotId)))
{
RobotSelected = Robots.First();
_ = RobotChanged.InvokeAsync(RobotSelected);
}
StateHasChanged();
}
private async Task ExpandedClick()
{
if (isExpand)
{
ExpandIcon = @Icons.Material.Filled.ArrowBackIos;
isExpand = false;
}
else
{
ExpandIcon = @Icons.Material.Filled.ArrowForwardIos;
isExpand = true;
}
await ExpandChanged.InvokeAsync(isExpand);
StateHasChanged();
}
private void CheckedClick(MonitorToolbarCheckedType type, bool value) => CheckedEventClick?.Invoke(type, value);
}