agrobot_base/AgroBase/OperationControl/Controls/ManualControlPad.xaml

158 lines
10 KiB
Plaintext
Raw Normal View History

<UserControl x:Class="OperationControl.Controls.ManualControlPad"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="Root" Focusable="True" MinWidth="382">
<Border CornerRadius="8" Background="#111" BorderBrush="Black" BorderThickness="1" Width="382" MinHeight="66">
<Canvas x:Name="cnvFundo">
<Label Content="Controle" Foreground="White" Canvas.Left="0" HorizontalAlignment="Center" VerticalAlignment="Top" Canvas.Top="-5"/>
<Grid HorizontalAlignment="Center" Canvas.Top="15" Canvas.Left="9" VerticalAlignment="Top">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<!-- header -->
<RowDefinition Height="Auto"/>
<!-- painel manual (altura animada) -->
</Grid.RowDefinitions>
<!-- ===== HEADER COMPACTO ===== -->
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="180"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<!-- Leituras à esquerda -->
<Grid HorizontalAlignment="Center" Width="180" TextBlock.FontSize="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="Velocidade" Foreground="#ddd"/>
<TextBlock Grid.Row="0" Grid.Column="1" Foreground="#ddd" Text="{Binding SpeedSpKmh, ElementName=Root, StringFormat={}{0:0.00} km/h}"/>
<TextBlock Grid.Row="0" Grid.Column="2" Foreground="#bbb" Opacity=".85" Text="{Binding SpeedCurKmh, ElementName=Root, StringFormat={}{0:0.00} km/h}"/>
<TextBlock Grid.Row="1" Grid.Column="0" Text="Direcional" Foreground="#ddd" Margin="0,2,0,0"/>
<TextBlock Grid.Row="1" Grid.Column="1" Foreground="#ddd" Margin="0,2,0,0" Text="{Binding AngleSpDeg, ElementName=Root, StringFormat={}{0:0.00}°}"/>
<TextBlock Grid.Row="1" Grid.Column="2" Margin="0,2,0,15" Foreground="#bbb" Opacity=".85" Text="{Binding AngleCurDeg, ElementName=Root, StringFormat={}{0:0.00}°}" Grid.RowSpan="2"/>
<TextBlock Grid.Row="2" Grid.Column="0" Text="Movimento" Foreground="#ddd" Margin="0,2,0,0"/>
<TextBlock Grid.Row="2" Foreground="#ddd" Margin="0,2,0,0" Text="{Binding MoveType, ElementName=Root}" HorizontalAlignment="Left" Width="120" Grid.Column="1" Grid.ColumnSpan="2"/>
</Grid>
<!-- Botões + Modo Manual à direita -->
<Canvas Grid.Column="1" Margin="0,0,-184,0">
<!-- Emergência (ícone MDL2) -->
<Button Content="" FontFamily="Segoe MDL2 Assets" ToolTip="Parada de Emergência" Background="#E74C3C" Foreground="White" Width="70" Height="20" Click="OnEmergencyClick" HorizontalAlignment="Center" VerticalAlignment="Top" Canvas.Top="1"/>
<!-- Iniciar | Pausar -->
<ToggleButton x:Name="BtnRun" Width="108" Height="20" Checked="OnRunToggle" Unchecked="OnRunToggle" Canvas.Left="75" Canvas.Top="1" HorizontalAlignment="Left" VerticalAlignment="Top">
<ToggleButton.Style>
<Style TargetType="ToggleButton">
<Setter Property="Content" Value="Iniciar"/>
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Content" Value="Pausar"/>
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
<!-- Referenciar -->
<Button Content="Referenciar" Width="70" Height="20" Click="OnRefClick" Canvas.Top="23" HorizontalAlignment="Left" VerticalAlignment="Top"/>
<!-- Modo Manual (abre/fecha painel) -->
<ToggleButton x:Name="TgManual" Width="108" Height="20" Checked="OnManualToggle" Unchecked="OnManualToggle" Canvas.Left="75" Canvas.Top="23" HorizontalAlignment="Left" VerticalAlignment="Top">
<ToggleButton.Style>
<Style TargetType="ToggleButton">
<Setter Property="Content" Value="Modo Manual: OFF"/>
<Setter Property="Background" Value="#2c2c2c"/>
<Setter Property="Foreground" Value="#ddd"/>
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Content" Value="Modo Manual: ON"/>
<Setter Property="Background" Value="#2ECC71"/>
<Setter Property="Foreground" Value="Black"/>
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
</Canvas>
</Grid>
<!-- ===== PAINEL MANUAL (expandível) ===== -->
<Grid Grid.Row="1" ClipToBounds="True">
<!-- container com altura animada -->
<Border x:Name="ManualContainer" Height="0" Background="#00000000" HorizontalAlignment="Left" Width="366">
<Grid x:Name="ManualInner" Margin="0,10,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="190"/>
</Grid.ColumnDefinitions>
<!-- Ajustes -->
<Grid Margin="0,0,8,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<DockPanel>
<TextBlock Text="Velocidade " Foreground="#ddd"/>
<TextBlock Text="{Binding SpeedPercent, ElementName=Root, StringFormat={}{0:0}%}" Foreground="#ddd" DockPanel.Dock="Right"/>
</DockPanel>
<Slider Minimum="0" Maximum="100" Value="{Binding SpeedPercent, ElementName=Root, Mode=TwoWay}"/>
<DockPanel Margin="0 10 0 0">
<TextBlock Text="Ângulo Máx " Foreground="#ddd"/>
<TextBlock Text="{Binding MaxSteerDeg, ElementName=Root, StringFormat={}{0:0}°}" Foreground="#ddd" DockPanel.Dock="Right"/>
</DockPanel>
<Slider Minimum="0" Maximum="90" Value="{Binding MaxSteerDeg, ElementName=Root, Mode=TwoWay}"/>
<TextBlock Margin="0 10 0 0" Text="Tipo de Movimento" Foreground="#ddd"/>
<ComboBox ItemsSource="{Binding MoveModes, ElementName=Root}" SelectedItem="{Binding SelectedMoveMode, ElementName=Root, Mode=TwoWay}"/>
</StackPanel>
</Grid>
<!-- Joystick -->
<Grid Grid.Column="1" HorizontalAlignment="Center">
<Border CornerRadius="8" Background="#151515" BorderBrush="#333" BorderThickness="1" Padding="6" MouseDown="Pad_MouseDown" MouseMove="Pad_MouseMove" MouseUp="Pad_MouseUp">
<Grid Width="120" Height="120" x:Name="Pad">
<Ellipse Stroke="#444" StrokeThickness="1"/>
<Ellipse Width="85" Height="85" Stroke="#444" StrokeThickness="1"/>
<Ellipse Width="50" Height="50" Stroke="#444" StrokeThickness="1"/>
<Ellipse Width="6" Height="6" Fill="#666"/>
<Ellipse x:Name="Thumb" Width="18" Height="18" Fill="#2ECC71" Stroke="#0C0" StrokeThickness="2" HorizontalAlignment="Center" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5">
<Ellipse.RenderTransform>
<TranslateTransform x:Name="ThumbTT" />
</Ellipse.RenderTransform>
</Ellipse>
</Grid>
</Border>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,4,0,0">
<TextBlock Text="DIR:" Foreground="#bbb"/>
<TextBlock Text="{Binding SteerCmd, ElementName=Root, StringFormat={}{0:+0.00;-0.00;0.00}}" Foreground="#ddd"/>
<TextBlock Text="•" Foreground="#666"/>
<TextBlock Text="MOV:" Foreground="#bbb"/>
<TextBlock Text="{Binding ThrottleCmd, ElementName=Root, StringFormat={}{0:+0.00;-0.00;0.00}}" Foreground="#ddd"/>
</StackPanel>
</Grid>
</Grid>
</Border>
</Grid>
</Grid>
</Canvas>
</Border>
</UserControl>