agrobot_base/AgroBase/OperationControl/Mapas/Editing/Views/MapaEditorOverlay.xaml

804 lines
27 KiB
XML

<UserControl x:Class="OperationControl.Mapas.Editing.Views.MapaEditorOverlay"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Visibility="Collapsed"
HorizontalAlignment="Left"
VerticalAlignment="Stretch">
<UserControl.Resources>
<Style x:Key="ToolButtonStyle" TargetType="ToggleButton">
<Setter Property="Height"
Value="36"/>
<Setter Property="MinWidth"
Value="105"/>
<Setter Property="Padding"
Value="12,5"/>
<Setter Property="Margin"
Value="0,0,8,0"/>
<Setter Property="Foreground"
Value="#D0D0D0"/>
<Setter Property="Background"
Value="#2A2A2A"/>
<Setter Property="BorderBrush"
Value="#505050"/>
<Setter Property="BorderThickness"
Value="1"/>
<Setter Property="Cursor"
Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Border
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="7">
<ContentPresenter
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsChecked"
Value="True">
<Setter Property="Background"
Value="#27573A"/>
<Setter Property="BorderBrush"
Value="#48A868"/>
<Setter Property="Foreground"
Value="White"/>
</Trigger>
<Trigger Property="IsMouseOver"
Value="True">
<Setter Property="BorderBrush"
Value="#707070"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="EditorButtonStyle" TargetType="Button">
<Setter Property="Height"
Value="36"/>
<Setter Property="MinWidth"
Value="105"/>
<Setter Property="Padding"
Value="12,5"/>
<Setter Property="Foreground"
Value="#D8D8D8"/>
<Setter Property="Background"
Value="#2A2A2A"/>
<Setter Property="BorderBrush"
Value="#505050"/>
<Setter Property="BorderThickness"
Value="1"/>
<Setter Property="Cursor"
Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="7">
<ContentPresenter
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver"
Value="True">
<Setter Property="Background"
Value="#343434"/>
<Setter Property="BorderBrush"
Value="#707070"/>
</Trigger>
<Trigger Property="IsEnabled"
Value="False">
<Setter Property="Opacity"
Value="0.4"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="DangerButtonStyle" TargetType="Button" BasedOn="{StaticResource EditorButtonStyle}">
<Setter
Property="Foreground"
Value="#FFB8B8"/>
<Setter
Property="Background"
Value="#382020"/>
<Setter
Property="BorderBrush"
Value="#704040"/>
<Style.Triggers>
<Trigger
Property="IsMouseOver"
Value="True">
<Setter
Property="Background"
Value="#4A2525"/>
<Setter
Property="BorderBrush"
Value="#B55050"/>
<Setter
Property="Foreground"
Value="White"/>
</Trigger>
<Trigger
Property="IsEnabled"
Value="False">
<Setter
Property="Opacity"
Value="0.35"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="ApplyButtonStyle" TargetType="Button" BasedOn="{StaticResource EditorButtonStyle}">
<Setter
Property="Foreground"
Value="#CFFFE0"/>
<Setter
Property="Background"
Value="#183526"/>
<Setter
Property="BorderBrush"
Value="#356A49"/>
<Style.Triggers>
<Trigger
Property="IsMouseOver"
Value="True">
<Setter
Property="Background"
Value="#204A31"/>
<Setter
Property="BorderBrush"
Value="#51A66F"/>
<Setter
Property="Foreground"
Value="White"/>
</Trigger>
<Trigger
Property="IsEnabled"
Value="False">
<Setter
Property="Opacity"
Value="0.35"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="ThinScrollBar" TargetType="ScrollBar">
<Setter Property="Width" Value="8"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ScrollBar">
<Grid Width="8" Background="Transparent">
<Border Margin="2,0,2,0" Background="#2F2F2F" CornerRadius="3"/>
<Track x:Name="PART_Track" Margin="2,0,2,0" IsDirectionReversed="True">
<Track.DecreaseRepeatButton>
<RepeatButton Opacity="0" IsHitTestVisible="False"/>
</Track.DecreaseRepeatButton>
<Track.Thumb>
<Thumb>
<Thumb.Template>
<ControlTemplate TargetType="Thumb">
<Border Background="#6B7280" CornerRadius="3" MinHeight="30"/>
</ControlTemplate>
</Thumb.Template>
</Thumb>
</Track.Thumb>
<Track.IncreaseRepeatButton>
<RepeatButton Opacity="0" IsHitTestVisible="False"/>
</Track.IncreaseRepeatButton>
</Track>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Border
Width="370"
Margin="12"
Padding="14"
VerticalAlignment="Stretch"
CornerRadius="10"
Background="#EE202020"
BorderBrush="#4A4A4A"
BorderThickness="1">
<ScrollViewer
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
CanContentScroll="False"
PanningMode="VerticalOnly">
<ScrollViewer.Resources>
<Style
TargetType="ScrollBar"
BasedOn="{StaticResource ThinScrollBar}" />
</ScrollViewer.Resources>
<StackPanel Margin="0,0,4,0">
<!-- CABEÇALHO -->
<Grid Margin="0,0,0,12">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel
Grid.Column="0"
Orientation="Horizontal"
VerticalAlignment="Center">
<TextBlock
Text="✎"
Foreground="#5FCF80"
FontSize="16"
Margin="0,0,7,0"/>
<TextBlock
Text="EDITANDO MAPA"
Foreground="White"
FontSize="14"
FontWeight="SemiBold"/>
</StackPanel>
<Border
Grid.Column="1"
Background="#244E32"
BorderBrush="#3D8E57"
BorderThickness="1"
CornerRadius="10"
Padding="8,3">
<TextBlock
Text="ATIVO"
Foreground="#7DE19A"
FontSize="10"
FontWeight="Bold"/>
</Border>
</Grid>
<!-- FERRAMENTAS -->
<Grid Margin="0,0,0,12">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="8"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="8"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="8"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="8"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ToggleButton
x:Name="btnSelecionar"
Grid.Row="0"
Grid.Column="0"
Content="◎ Selecionar"
Margin="0"
Style="{StaticResource ToolButtonStyle}"
Click="btnSelecionar_Click"/>
<ToggleButton
x:Name="btnSelecionarRetangulo"
Grid.Row="0"
Grid.Column="2"
Content="▭ Retângulo"
Margin="0"
Style="{StaticResource ToolButtonStyle}"
Click="btnSelecionarRetangulo_Click"/>
<ToggleButton
x:Name="btnRecorteLivre"
Grid.Row="2"
Grid.Column="0"
Content="✂ Livre"
Margin="0"
Style="{StaticResource ToolButtonStyle}"
Click="btnRecorteLivre_Click"/>
<ToggleButton
x:Name="btnRecortePorPontos"
Grid.Row="2"
Grid.Column="2"
Content="⬡ Por pontos"
Margin="0"
Style="{StaticResource ToolButtonStyle}"
Click="btnRecortePorPontos_Click"/>
<ToggleButton
x:Name="btnRecorteBordaGnss"
Grid.Row="4"
Grid.Column="0"
Grid.ColumnSpan="3"
Content="📡 Borda GNSS"
Margin="0"
Style="{StaticResource ToolButtonStyle}"
Click="btnRecorteBordaGnss_Click"/>
<Button
x:Name="btnLimparSelecao"
Grid.Row="6"
Grid.Column="0"
Grid.ColumnSpan="3"
Content="Limpar seleção"
HorizontalAlignment="Stretch"
Style="{StaticResource EditorButtonStyle}"
Click="btnLimparSelecao_Click"/>
</Grid>
<!-- ESCOPO DO RECORTE -->
<Border
x:Name="pnlEscopoRecorte"
Visibility="Collapsed"
Background="#181818"
BorderBrush="#363636"
BorderThickness="1"
CornerRadius="7"
Padding="10"
Margin="0,0,0,12">
<StackPanel>
<TextBlock
Text="Aplicar recorte em"
Foreground="#CFCFCF"
FontSize="11"
FontWeight="SemiBold"
Margin="0,0,0,7"/>
<RadioButton
x:Name="rbRecorteTodas"
GroupName="EscopoRecorteMapa"
Content="Todas as ruas atingidas"
Foreground="#D0D0D0"
FontSize="11"
Margin="0,0,0,6"
IsChecked="True"
Checked="rbRecorteTodas_Checked"/>
<RadioButton
x:Name="rbRecorteSelecionadas"
GroupName="EscopoRecorteMapa"
Content="Somente ruas selecionadas"
Foreground="#D0D0D0"
FontSize="11"
Checked="rbRecorteSelecionadas_Checked"/>
<TextBlock
x:Name="txtEscopoRecorteAviso"
Visibility="Collapsed"
Text="⚠ Nenhuma rua está selecionada."
Foreground="#F0B45B"
FontSize="10"
Margin="0,7,0,0"
TextWrapping="Wrap"/>
</StackPanel>
</Border>
<!-- BORDA GNSS -->
<Border
x:Name="pnlBordaGnss"
Visibility="Collapsed"
Background="#142126"
BorderBrush="#315D68"
BorderThickness="1"
CornerRadius="7"
Padding="10"
Margin="0,0,0,12">
<StackPanel>
<Grid Margin="0,0,0,8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock
Text="📡 Levantamento GNSS"
Foreground="#BFEFFF"
FontSize="11"
FontWeight="SemiBold"/>
<TextBlock
x:Name="txtBordaGnssEstado"
Grid.Column="1"
Text="CAPTURANDO"
Foreground="#5FCF80"
FontSize="9"
FontWeight="Bold"/>
</Grid>
<StackPanel
Orientation="Horizontal"
Margin="0,0,0,8">
<RadioButton
x:Name="rbGnssManual"
Content="Manual"
IsChecked="True"
Foreground="#D0D0D0"
FontSize="11"
Margin="0,0,16,0"
Checked="rbGnssManual_Checked"/>
<RadioButton
x:Name="rbGnssAutomatico"
Content="Automático"
IsEnabled="True"
Foreground="#D0D0D0"
FontSize="11"
Checked="rbGnssAutomatico_Checked"/>
</StackPanel>
<TextBlock
x:Name="txtBordaGnssStatus"
Text="GNSS sem leitura."
Foreground="#F0B45B"
FontSize="10"
Margin="0,0,0,5"
TextWrapping="Wrap"/>
<TextBlock
x:Name="txtBordaGnssResumo"
Text="0 pontos • 0,00 m"
Foreground="White"
FontSize="12"
FontWeight="SemiBold"
Margin="0,0,0,10"/>
<TextBlock
x:Name="txtGnssAutomaticoInfo"
Visibility="Collapsed"
Text="Registro automático a cada 0,50 m"
Foreground="#8EBAC5"
FontSize="10"
Margin="0,0,0,8"/>
<Grid Margin="0,0,0,8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button
x:Name="btnGnssRegistrarPonto"
Grid.Column="0"
Content="+ Registrar ponto"
Style="{StaticResource ApplyButtonStyle}"
Click="btnGnssRegistrarPonto_Click"/>
<Button
x:Name="btnGnssIniciarAutomatico"
Grid.Column="0"
Visibility="Collapsed"
Content="● Iniciar gravação"
Style="{StaticResource ApplyButtonStyle}"
Click="btnGnssIniciarAutomatico_Click"/>
<Button
x:Name="btnGnssRemoverUltimo"
Grid.Column="2"
Content="↶ Remover último"
Style="{StaticResource EditorButtonStyle}"
Click="btnGnssRemoverUltimo_Click"/>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button
x:Name="btnGnssDescartar"
Grid.Column="0"
Content="✕ Descartar"
Style="{StaticResource DangerButtonStyle}"
Click="btnGnssDescartar_Click"/>
<Button
x:Name="btnGnssFinalizar"
Grid.Column="2"
Content="✓ Finalizar borda"
Style="{StaticResource ApplyButtonStyle}"
Click="btnGnssFinalizar_Click"/>
<Button
x:Name="btnGnssContinuar"
Grid.Column="2"
Visibility="Collapsed"
Content="✎ Continuar"
Style="{StaticResource ApplyButtonStyle}"
Click="btnGnssContinuar_Click"/>
</Grid>
<Button
x:Name="btnGnssAplicarBorda"
Visibility="Collapsed"
Content="✂ Aplicar borda no mapa"
Height="40"
Margin="0,8,0,0"
HorizontalAlignment="Stretch"
Style="{StaticResource ApplyButtonStyle}"
Click="btnGnssAplicarBorda_Click"/>
</StackPanel>
</Border>
<!-- HISTÓRICO -->
<StackPanel
Orientation="Horizontal"
Margin="0,0,0,12">
<Button
x:Name="btnDesfazer"
Content="↶ Desfazer"
Width="160"
Margin="0,0,8,0"
ToolTip="Ctrl+Z"
Style="{StaticResource EditorButtonStyle}"
Click="btnDesfazer_Click"/>
<Button
x:Name="btnRefazer"
Content="↷ Refazer"
Width="160"
ToolTip="Ctrl+Y"
Style="{StaticResource EditorButtonStyle}"
Click="btnRefazer_Click"/>
</StackPanel>
<!-- OPERAÇÕES -->
<StackPanel Margin="0,0,0,12">
<Button
x:Name="btnExcluirSelecionadas"
Content="🗑 Excluir ruas selecionadas"
Height="36"
HorizontalAlignment="Stretch"
Style="{StaticResource DangerButtonStyle}"
ToolTip="Delete"
Click="btnExcluirSelecionadas_Click"/>
<Button
x:Name="btnRestaurarMapaFonte"
Content="↺ Restaurar mapa original"
Height="38"
Margin="0,8,0,0"
HorizontalAlignment="Stretch"
Style="{StaticResource EditorButtonStyle}"
Foreground="#FFD77A"
Background="#352F20"
BorderBrush="#78642E"
ToolTip="Restaura no editor o mapa que entrou originalmente no sistema. Ctrl+Z desfaz."
Click="btnRestaurarMapaFonte_Click"/>
<Button
x:Name="btnSalvarMapaEditado"
Content="💾 Salvar versão editada"
Height="40"
Margin="0,8,0,0"
HorizontalAlignment="Stretch"
Style="{StaticResource ApplyButtonStyle}"
ToolTip="Salva a geometria atual do editor em GeoJSON sem aplicar nem encerrar a edição."
Click="btnSalvarMapaEditado_Click"/>
</StackPanel>
<!-- STATUS -->
<Border
Background="#181818"
BorderBrush="#363636"
BorderThickness="1"
CornerRadius="7"
Padding="10">
<StackPanel>
<TextBlock
x:Name="txtSelecionadas"
Text="0 ruas selecionadas"
Foreground="#FF70CA"
FontSize="12"
FontWeight="SemiBold"/>
<TextBlock
x:Name="txtInstrucao"
Text="Clique nas ruas que deseja editar."
Foreground="#AFAFAF"
FontSize="11"
Margin="0,5,0,0"
TextWrapping="Wrap"/>
</StackPanel>
</Border>
<!-- FINALIZAÇÃO DA EDIÇÃO -->
<Grid Margin="0,14,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button
x:Name="btnCancelarEdicao"
Grid.Column="0"
Content="✕ Cancelar"
Height="38"
Style="{StaticResource EditorButtonStyle}"
Click="btnCancelarEdicao_Click"/>
<Button
x:Name="btnAplicarEdicao"
Grid.Column="2"
Content="✓ Aplicar alterações"
Height="38"
ToolTip="Ctrl+Enter"
Style="{StaticResource ApplyButtonStyle}"
Click="btnAplicarEdicao_Click"/>
</Grid>
</StackPanel>
</ScrollViewer>
</Border>
</UserControl>