Files
HC_APTBS/Views/UserControls/BenchRpmCommandCard.xaml
LucianoDev 69bfda54e1 feat: redesign Bench page with Fluent card layout and radial advance monitor
Three-column layout replacing the old HMI grid:
- BenchRpmCommandCard: inline numeric input, 2×4 preset grid, Start/Stop
- BenchActuatorsCard: direction toggle, oil pump, temperature PID, misc relays
  with FluentStateToggle showing checked state via AccentFillColor
- BenchLiveDataCard: 2×5 KPI tiles (RPM, P1, P2, Q-Delivery, Q-Over, temps)
- BenchChartsCard: 2×2 compact chart grid (Delivery, Over, P1, P2)
- AdvanceMonitorCard: RadialAngleGauge custom FrameworkElement + PSG/INJ readouts,
  Δ° lock offset input, Zero PSG / Zero INJ buttons

Supporting changes:
- AngleDisplayViewModel: promote _currentManualDegrees, _isLockSet to
  [ObservableProperty]; add PsgRelativeDegrees, InjEncoderDegreesValue,
  TargetLockAngle, IsRunningMode (29/31 hysteresis); computed PrimaryGaugeAngle,
  TargetAngleForGauge, SecondaryGaugeAngle
- BenchControlViewModel: add IsDirectionLeft computed property,
  SetDirectionRightCommand, SetDirectionLeftCommand, ApplyRpmCommand
- FlowmeterChartView: add IsCompact DP (false default) for 90px compact height
- Styles.xaml: add IsChecked trigger to FluentStateToggle (accent fill + white text)
- Strings.en/es.xaml: add all new card and actuator string keys

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 17:45:59 +02:00

146 lines
9.0 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<UserControl x:Class="HC_APTBS.Views.UserControls.BenchRpmCommandCard"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
mc:Ignorable="d"
d:DesignHeight="440" d:DesignWidth="320">
<!--
RPM command card — inline numeric entry, 8 preset buttons, Start/Stop.
DataContext = BenchPageViewModel.
-->
<Border Style="{StaticResource PumpCard}">
<StackPanel>
<!-- ── Card header ─────────────────────────────────────────── -->
<DockPanel Margin="0,0,0,12">
<ui:SymbolIcon DockPanel.Dock="Left" Symbol="Gauge24" FontSize="16"
Foreground="{DynamicResource AccentTextFillColorPrimaryBrush}"
Margin="0,0,8,0" VerticalAlignment="Center"/>
<TextBlock Text="{DynamicResource Bench.RpmCommand.Title}"
Style="{StaticResource PumpCardHeader}" Margin="0"/>
</DockPanel>
<!-- ── Actual / Target mini readouts ───────────────────────── -->
<Grid Margin="0,0,0,10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0"
Background="{DynamicResource ControlFillColorSecondaryBrush}"
BorderBrush="{DynamicResource ControlStrokeColorDefaultBrush}"
BorderThickness="1" CornerRadius="6" Padding="10,8">
<StackPanel>
<TextBlock Text="{DynamicResource Bench.RpmCommand.Actual}"
FontSize="11"
Foreground="{DynamicResource TextFillColorSecondaryBrush}"
Margin="0,0,0,4"/>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="{Binding Root.BenchRpm, StringFormat=F0}"
FontFamily="Consolas" FontSize="26" FontWeight="SemiBold"
Foreground="{DynamicResource TextFillColorPrimaryBrush}"/>
<TextBlock Text=" rpm" FontSize="11"
Foreground="{DynamicResource TextFillColorTertiaryBrush}"
VerticalAlignment="Bottom" Margin="0,0,0,3"/>
</StackPanel>
</StackPanel>
</Border>
<Border Grid.Column="2"
Background="{DynamicResource ControlFillColorSecondaryBrush}"
BorderBrush="{DynamicResource ControlStrokeColorDefaultBrush}"
BorderThickness="1" CornerRadius="6" Padding="10,8">
<StackPanel>
<TextBlock Text="{DynamicResource Bench.RpmCommand.Target}"
FontSize="11"
Foreground="{DynamicResource TextFillColorSecondaryBrush}"
Margin="0,0,0,4"/>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="{Binding BenchControl.TargetRpm, StringFormat=F0}"
FontFamily="Consolas" FontSize="26" FontWeight="SemiBold"
Foreground="{DynamicResource AccentTextFillColorPrimaryBrush}"/>
<TextBlock Text=" rpm" FontSize="11"
Foreground="{DynamicResource TextFillColorTertiaryBrush}"
VerticalAlignment="Bottom" Margin="0,0,0,3"/>
</StackPanel>
<TextBlock Text="{Binding BenchControl.CommandVoltage, StringFormat='F3\u202FV'}"
FontFamily="Consolas" FontSize="10"
Foreground="{DynamicResource TextFillColorSecondaryBrush}"/>
</StackPanel>
</Border>
</Grid>
<!-- ── Manual RPM input ─────────────────────────────────────── -->
<Grid Margin="0,0,0,8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0"
Text="{Binding BenchControl.RpmInputText, UpdateSourceTrigger=PropertyChanged}"
FontFamily="Consolas" FontSize="20" FontWeight="SemiBold"
Height="40" VerticalContentAlignment="Center"
HorizontalContentAlignment="Right" Padding="8,0"/>
<TextBlock Grid.Column="1" Text="rpm"
VerticalAlignment="Center"
Foreground="{DynamicResource TextFillColorSecondaryBrush}"
FontSize="12" Margin="6,0,0,0"/>
</Grid>
<!-- ── Preset RPM buttons 2×4 ──────────────────────────────── -->
<UniformGrid Rows="2" Columns="4" Margin="0,0,0,10">
<ui:Button Content="100" CommandParameter="100"
Command="{Binding BenchControl.SetQuickRpmCommand}"
Appearance="Secondary" Height="40" Margin="2" FontSize="12"/>
<ui:Button Content="200" CommandParameter="200"
Command="{Binding BenchControl.SetQuickRpmCommand}"
Appearance="Secondary" Height="40" Margin="2" FontSize="12"/>
<ui:Button Content="500" CommandParameter="500"
Command="{Binding BenchControl.SetQuickRpmCommand}"
Appearance="Secondary" Height="40" Margin="2" FontSize="12"/>
<ui:Button Content="750" CommandParameter="750"
Command="{Binding BenchControl.SetQuickRpmCommand}"
Appearance="Secondary" Height="40" Margin="2" FontSize="12"/>
<ui:Button Content="1000" CommandParameter="1000"
Command="{Binding BenchControl.SetQuickRpmCommand}"
Appearance="Secondary" Height="40" Margin="2" FontSize="12"/>
<ui:Button Content="1250" CommandParameter="1250"
Command="{Binding BenchControl.SetQuickRpmCommand}"
Appearance="Secondary" Height="40" Margin="2" FontSize="12"/>
<ui:Button Content="1500" CommandParameter="1500"
Command="{Binding BenchControl.SetQuickRpmCommand}"
Appearance="Secondary" Height="40" Margin="2" FontSize="12"/>
<ui:Button Content="2000" CommandParameter="2000"
Command="{Binding BenchControl.SetQuickRpmCommand}"
Appearance="Secondary" Height="40" Margin="2" FontSize="12"/>
</UniformGrid>
<!-- ── Start / Stop ─────────────────────────────────────────── -->
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ui:Button Grid.Column="0"
Content="{DynamicResource Bench.Start}"
Command="{Binding BenchControl.StartBenchCommand}"
Appearance="Primary" Height="46" FontWeight="Bold" FontSize="14">
<ui:Button.Icon><ui:SymbolIcon Symbol="Play24"/></ui:Button.Icon>
</ui:Button>
<ui:Button Grid.Column="2"
Content="{DynamicResource Bench.Stop}"
Command="{Binding BenchControl.StopBenchCommand}"
Appearance="Danger" Height="46" FontWeight="Bold" FontSize="14">
<ui:Button.Icon><ui:SymbolIcon Symbol="Stop24"/></ui:Button.Icon>
</ui:Button>
</Grid>
</StackPanel>
</Border>
</UserControl>