193 lines
12 KiB
XML
193 lines
12 KiB
XML
<UserControl x:Class="OperationControl.Controls.PulverizadorIndicator"
|
|
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:local="clr-namespace:OperationControl.Controls.Pulverizador"
|
|
mc:Ignorable="d" Width="458" Height="123">
|
|
<!-- ========= RECURSOS ========= -->
|
|
<UserControl.Resources>
|
|
<local:BicoPositionFisicaConverter x:Key="BicoPositionFisicaConverter" />
|
|
<local:AlturaBarraToMarginFisicaConverter x:Key="AlturaBarraToMarginFisicaConverter" GroundTop="80" Top80Px="7" AlturaMaxCm="80" />
|
|
<local:RuaWidthFisicaConverter x:Key="RuaWidthFisicaConverter" />
|
|
<local:RuaOffsetFisicaConverter x:Key="RuaOffsetFisicaConverter" />
|
|
|
|
<SolidColorBrush x:Key="BgBrush" Color="#FF101820"/>
|
|
<SolidColorBrush x:Key="CardBrush" Color="#FF1C2530"/>
|
|
<SolidColorBrush x:Key="LineBrush" Color="#FFB0BAC8"/>
|
|
<SolidColorBrush x:Key="AccentBrush" Color="#FF00A8E8"/>
|
|
<SolidColorBrush x:Key="CommandBrush" Color="#FFE74C3C"/>
|
|
<SolidColorBrush x:Key="SprayBrush" Color="#FF00A8E8"/>
|
|
<SolidColorBrush x:Key="TextPrimary" Color="#FFF5F7FA"/>
|
|
<SolidColorBrush x:Key="TextSecondary" Color="#FFB0BAC8"/>
|
|
|
|
<Style x:Key="Card" TargetType="Border">
|
|
<Setter Property="CornerRadius" Value="8"/>
|
|
<Setter Property="Background" Value="{StaticResource CardBrush}"/>
|
|
<Setter Property="Padding" Value="8"/>
|
|
<Setter Property="Margin" Value="0"/>
|
|
</Style>
|
|
|
|
<Style x:Key="SectionTitle" TargetType="TextBlock">
|
|
<Setter Property="Foreground" Value="{StaticResource TextSecondary}"/>
|
|
<Setter Property="FontSize" Value="12"/>
|
|
<Setter Property="FontWeight" Value="SemiBold"/>
|
|
<Setter Property="Margin" Value="0,0,0,6"/>
|
|
</Style>
|
|
</UserControl.Resources>
|
|
|
|
<!-- ========= LAYOUT ========= -->
|
|
<Grid Background="Transparent" Margin="0" ClipToBounds="True">
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="*"/>
|
|
<!-- Vista de trás -->
|
|
</Grid.RowDefinitions>
|
|
|
|
<!-- ===================== VISTA TRASEIRA / LEQUES ===================== -->
|
|
<Border Grid.Row="1" Style="{StaticResource Card}">
|
|
<Grid>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="Auto"/>
|
|
<RowDefinition Height="*"/>
|
|
</Grid.RowDefinitions>
|
|
|
|
<TextBlock Grid.Row="0" Text="" Style="{StaticResource SectionTitle}"/>
|
|
|
|
<Grid Grid.Row="1" Margin="10,0,10,-8">
|
|
<!-- Cota de altura à esquerda -->
|
|
<Canvas Width="50" HorizontalAlignment="Left">
|
|
<TextBlock Foreground="{StaticResource TextSecondary}" FontSize="10" Canvas.Top="-15" Canvas.Left="1" HorizontalAlignment="Left" VerticalAlignment="Center" Text="{Binding AlturaBarra, RelativeSource={RelativeSource AncestorType=UserControl}, StringFormat={}{0:F0} cm}" />
|
|
<Slider Minimum="50" Maximum="80" Value="{Binding AlturaBarra, RelativeSource={RelativeSource AncestorType=UserControl}, Mode=TwoWay}" Orientation="Vertical" Height="58" VerticalAlignment="Top" IsDirectionReversed="False" HorizontalAlignment="Center" Canvas.Left="5" />
|
|
</Canvas>
|
|
|
|
<!-- Bicos e leques (traseira) -->
|
|
<Canvas x:Name="canvasPai">
|
|
<Canvas.Margin>
|
|
<Binding Path="AlturaBarra" RelativeSource="{RelativeSource AncestorType=UserControl}" Converter="{StaticResource AlturaBarraToMarginFisicaConverter}" />
|
|
</Canvas.Margin>
|
|
|
|
<!-- Barra -->
|
|
<Line x:Name="linhaBarra" X1="4" Y1="10" X2="250" Y2="10" Stroke="{StaticResource LineBrush}" StrokeThickness="4" StrokeStartLineCap="Round" StrokeEndLineCap="Round" HorizontalAlignment="Left" VerticalAlignment="Center" Height="20" Canvas.Left="50" Canvas.Top="5" Width="256" />
|
|
|
|
<!-- Bicos dinâmicos -->
|
|
<ItemsControl ItemsSource="{Binding Bicos, RelativeSource={RelativeSource AncestorType=UserControl}}" AlternationCount="1000">
|
|
<ItemsControl.ItemsPanel>
|
|
<ItemsPanelTemplate>
|
|
<Canvas />
|
|
</ItemsPanelTemplate>
|
|
</ItemsControl.ItemsPanel>
|
|
|
|
<!-- Define onde cada item fica no Canvas -->
|
|
<ItemsControl.ItemContainerStyle>
|
|
<Style TargetType="ContentPresenter">
|
|
<Setter Property="Canvas.Top" Value="-27" />
|
|
<Setter Property="Canvas.Left">
|
|
<Setter.Value>
|
|
<MultiBinding Converter="{StaticResource BicoPositionFisicaConverter}">
|
|
<!-- largura visível da barra em px -->
|
|
<Binding ElementName="linhaBarra" Path="ActualWidth" />
|
|
<!-- índice do bico (do modelo) -->
|
|
<Binding Path="Index" />
|
|
<!-- quantidade total de bicos -->
|
|
<Binding Path="QtdBicos" RelativeSource="{RelativeSource AncestorType=UserControl}" />
|
|
<!-- distância entre bicos em cm -->
|
|
<Binding Path="DistanciaEntreBicosCm" RelativeSource="{RelativeSource AncestorType=UserControl}" />
|
|
<!-- comprimento da barra em cm -->
|
|
<Binding Path="ComprimentoBarraCm" RelativeSource="{RelativeSource AncestorType=UserControl}" />
|
|
</MultiBinding>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
</ItemsControl.ItemContainerStyle>
|
|
|
|
<!-- Como desenhar cada bico -->
|
|
<ItemsControl.ItemTemplate>
|
|
<DataTemplate DataType="{x:Type local:BicoModel}">
|
|
<local:BicoLequeIndicator AnguloControle="{Binding AnguloControle}" OpeningAngle="{Binding OpeningAngle}" IsCommandOn="{Binding IsCommandOn}" IsSpraying="{Binding IsSpraying}" Vazao="{Binding Vazao}" TempoAtuado="{Binding TempoAtuado}" Atuacoes="{Binding Atuacoes}" />
|
|
</DataTemplate>
|
|
</ItemsControl.ItemTemplate>
|
|
</ItemsControl>
|
|
</Canvas>
|
|
|
|
<!-- Bomba Pressurizadora -->
|
|
<Canvas Width="50" HorizontalAlignment="Right" Margin="0,0,0,0">
|
|
<!-- Título -->
|
|
<TextBlock Text="Bomba" FontSize="10" Canvas.Top="-30" Canvas.Left="10" TextAlignment="Right" Width="50">
|
|
<TextBlock.Style>
|
|
<Style TargetType="TextBlock" BasedOn="{StaticResource SectionTitle}">
|
|
<Setter Property="Foreground" Value="LightGray"/>
|
|
|
|
<Style.Triggers>
|
|
<!-- Quando a bomba estiver ligada -->
|
|
<DataTrigger Binding="{Binding IsBombaOn, RelativeSource={RelativeSource AncestorType=UserControl}}" Value="True">
|
|
<Setter Property="Foreground" Value="#4CD964"/>
|
|
</DataTrigger>
|
|
|
|
<!-- Quando desligada -->
|
|
<DataTrigger Binding="{Binding IsBombaOn, RelativeSource={RelativeSource AncestorType=UserControl}}" Value="False">
|
|
<Setter Property="Foreground" Value="#FFB0BAC8"/>
|
|
</DataTrigger>
|
|
</Style.Triggers>
|
|
</Style>
|
|
</TextBlock.Style>
|
|
</TextBlock>
|
|
|
|
<!-- Dados da bomba (pressão e tempo) -->
|
|
<StackPanel Orientation="Vertical" Canvas.Left="10" Canvas.Top="-18" TextBlock.TextAlignment="Right">
|
|
<!-- Linha 1: pressão -->
|
|
<TextBlock Text="Pressão" Foreground="{StaticResource TextSecondary}" FontSize="10"/>
|
|
<TextBlock Text="{Binding PressaoLinha, RelativeSource={RelativeSource AncestorType=UserControl}, StringFormat={}{0:F2} psi}" Foreground="{StaticResource TextPrimary}" FontSize="12" FontWeight="SemiBold" Margin="0,0,0,4"/>
|
|
|
|
<!-- Linha 2: tempo ligado -->
|
|
<TextBlock Text="Tempo" Foreground="{StaticResource TextSecondary}" FontSize="10"/>
|
|
<TextBlock Text="{Binding TempoAtuado, RelativeSource={RelativeSource AncestorType=UserControl}, StringFormat={}{0:F2} s}" Foreground="{StaticResource TextPrimary}" FontSize="12" FontWeight="SemiBold" Margin="0,0,0,4"/>
|
|
|
|
<!-- Linha 3: vazao -->
|
|
<TextBlock Text="Vazão" Foreground="{StaticResource TextSecondary}" FontSize="10"/>
|
|
<TextBlock Text="{Binding VazaoInstantanea, RelativeSource={RelativeSource AncestorType=UserControl}, StringFormat={}{0:F2} mL/s}" Foreground="{StaticResource TextPrimary}" FontSize="12" FontWeight="SemiBold"/>
|
|
</StackPanel>
|
|
</Canvas>
|
|
|
|
<!-- Solo + Rua -->
|
|
<Grid Height="13" VerticalAlignment="Top" Margin="-18,80,-18,0" ClipToBounds="True">
|
|
|
|
<!-- Cana (fundo) -->
|
|
<Border Background="#5F6A36" CornerRadius="0,0,8,8"/>
|
|
|
|
<!-- Rua (faixa vermelha que desliza) -->
|
|
<Border Height="13" HorizontalAlignment="Left" Background="#AA8B0000" CornerRadius="0,0,8,8">
|
|
|
|
<!-- Largura da rua em px -->
|
|
<Border.Width>
|
|
<MultiBinding Converter="{StaticResource RuaWidthFisicaConverter}">
|
|
<!-- largura em px da faixa do solo -->
|
|
<Binding RelativeSource="{RelativeSource AncestorType=Grid}" Path="ActualWidth"/>
|
|
<!-- largura da rua em cm -->
|
|
<Binding Path="LarguraRuaCm"/>
|
|
<!-- comprimento físico representado (cm) -->
|
|
<Binding Path="ComprimentoBarraCm"/>
|
|
</MultiBinding>
|
|
</Border.Width>
|
|
|
|
<!-- Deslocamento lateral da rua -->
|
|
<Border.Margin>
|
|
<MultiBinding Converter="{StaticResource RuaOffsetFisicaConverter}">
|
|
<!-- largura em px -->
|
|
<Binding RelativeSource="{RelativeSource AncestorType=Grid}" Path="ActualWidth"/>
|
|
<!-- erro lateral em cm (0 centro, - esquerda, + direita) -->
|
|
<Binding Path="ErroLateralCm"/>
|
|
<!-- largura rua cm -->
|
|
<Binding Path="LarguraRuaCm"/>
|
|
<!-- comprimento barra cm (escala px/cm) -->
|
|
<Binding Path="ComprimentoBarraCm"/>
|
|
</MultiBinding>
|
|
</Border.Margin>
|
|
</Border>
|
|
</Grid>
|
|
|
|
</Grid>
|
|
</Grid>
|
|
</Border>
|
|
</Grid>
|
|
</UserControl>
|