179 lines
6.8 KiB
C#
179 lines
6.8 KiB
C#
using OperationControl.Mapas.Creation;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
|
|
namespace OperationControl.Mapas.Creation.Views
|
|
{
|
|
/// <summary>
|
|
/// Cockpit passivo da criação de mapas.
|
|
/// Exibe estado e emite intenções. Não altera mapa ou GNSS.
|
|
/// </summary>
|
|
public partial class MapaCriacaoOverlay : System.Windows.Controls.UserControl
|
|
{
|
|
public event Action<string>? NomeMapaAlterado;
|
|
public event Action<MapaModoCapturaCriacao>? ModoCapturaAlterado;
|
|
public event Action? RegistrarPontoSolicitado;
|
|
public event Action? RemoverUltimoPontoSolicitado;
|
|
public event Action? IniciarCapturaAutomaticaSolicitado;
|
|
public event Action? FinalizarCapturaAutomaticaSolicitado;
|
|
public event Action? NovaRuaSolicitada;
|
|
public event Action<int>? RuaSelecionada;
|
|
public event Action<int>? ExcluirRuaSolicitada;
|
|
public event Action? LimparSolicitado;
|
|
public event Action? SalvarSolicitado;
|
|
public event Action? CancelarSolicitado;
|
|
|
|
private bool _atualizandoEstado;
|
|
private MapaResumoCriacao? _ultimoResumo;
|
|
|
|
public MapaCriacaoOverlay()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
public void AtualizarEstado(MapaResumoCriacao? resumo)
|
|
{
|
|
_atualizandoEstado = true;
|
|
|
|
try
|
|
{
|
|
_ultimoResumo = resumo;
|
|
|
|
bool ativo = resumo?.EmCriacao == true;
|
|
Visibility = ativo ? Visibility.Visible : Visibility.Collapsed;
|
|
IsHitTestVisible = ativo;
|
|
|
|
if (!ativo)
|
|
return;
|
|
|
|
string nome = resumo!.Nome ?? string.Empty;
|
|
|
|
if (!string.Equals(txtNomeMapa.Text, nome, StringComparison.Ordinal))
|
|
{
|
|
int caret = txtNomeMapa.CaretIndex;
|
|
txtNomeMapa.Text = nome;
|
|
txtNomeMapa.CaretIndex = Math.Min(caret, txtNomeMapa.Text.Length);
|
|
}
|
|
|
|
txtRuaAtual.Text = resumo.RuaAtual > 0
|
|
? $"Rua {resumo.RuaAtual}"
|
|
: "Sem rua";
|
|
|
|
txtResumoRua.Text =
|
|
$"{resumo.PontosRuaAtual} pts • {resumo.ComprimentoRuaAtualMetros:F1} m";
|
|
|
|
txtStatusGnss.Text = string.IsNullOrWhiteSpace(resumo.StatusGnss)
|
|
? "GNSS sem leitura."
|
|
: resumo.StatusGnss;
|
|
|
|
rbManual.IsChecked = resumo.ModoCaptura == MapaModoCapturaCriacao.Manual;
|
|
rbAutomatico.IsChecked = resumo.ModoCaptura == MapaModoCapturaCriacao.Automatico;
|
|
|
|
cmbRuas.ItemsSource = resumo.Ruas;
|
|
cmbRuas.SelectedValue = resumo.RuaAtual;
|
|
|
|
bool gravando = resumo.GravacaoAutomaticaAtiva;
|
|
|
|
btnRegistrarPonto.Visibility =
|
|
resumo.ModoCaptura == MapaModoCapturaCriacao.Manual
|
|
? Visibility.Visible
|
|
: Visibility.Collapsed;
|
|
|
|
btnCapturaAutomatica.Visibility =
|
|
resumo.ModoCaptura == MapaModoCapturaCriacao.Automatico
|
|
? Visibility.Visible
|
|
: Visibility.Collapsed;
|
|
|
|
btnRegistrarPonto.IsEnabled = !gravando && resumo.LeituraGnssValida;
|
|
|
|
btnCapturaAutomatica.Content = gravando
|
|
? "■ Finalizar captura automática"
|
|
: "▶ Iniciar captura automática";
|
|
|
|
btnCapturaAutomatica.IsEnabled = gravando || resumo.LeituraGnssValida;
|
|
btnRemoverUltimoPonto.IsEnabled = !gravando && resumo.PontosRuaAtual > 0;
|
|
btnNovaRua.IsEnabled = resumo.PodeNovaRua;
|
|
btnExcluirRua.IsEnabled = !gravando && resumo.QuantidadeRuas > 0;
|
|
btnLimpar.IsEnabled = !gravando && resumo.PontosTotal > 0;
|
|
cmbRuas.IsEnabled = !gravando && resumo.QuantidadeRuas > 0;
|
|
rbManual.IsEnabled = !gravando;
|
|
rbAutomatico.IsEnabled = !gravando;
|
|
txtNomeMapa.IsEnabled = !gravando;
|
|
btnSalvar.IsEnabled = resumo.PodeSalvar;
|
|
|
|
txtResumoTotal.Text =
|
|
$"{resumo.QuantidadeRuas} {(resumo.QuantidadeRuas == 1 ? "rua" : "ruas")} • " +
|
|
$"{resumo.PontosTotal} {(resumo.PontosTotal == 1 ? "ponto" : "pontos")} • " +
|
|
$"{resumo.ComprimentoTotalMetros:F1} m" +
|
|
Environment.NewLine +
|
|
$"{resumo.QuantidadeRuasValidas}/{resumo.QuantidadeRuas} ruas válidas";
|
|
}
|
|
finally
|
|
{
|
|
_atualizandoEstado = false;
|
|
}
|
|
}
|
|
|
|
private void txtNomeMapa_TextChanged(object sender, TextChangedEventArgs e)
|
|
{
|
|
if (_atualizandoEstado)
|
|
return;
|
|
|
|
NomeMapaAlterado?.Invoke(txtNomeMapa.Text);
|
|
}
|
|
|
|
private void rbModo_Checked(object sender, RoutedEventArgs e)
|
|
{
|
|
if (_atualizandoEstado)
|
|
return;
|
|
|
|
if (rbAutomatico.IsChecked == true)
|
|
ModoCapturaAlterado?.Invoke(MapaModoCapturaCriacao.Automatico);
|
|
else if (rbManual.IsChecked == true)
|
|
ModoCapturaAlterado?.Invoke(MapaModoCapturaCriacao.Manual);
|
|
}
|
|
|
|
private void btnRegistrarPonto_Click(object sender, RoutedEventArgs e) =>
|
|
RegistrarPontoSolicitado?.Invoke();
|
|
|
|
private void btnRemoverUltimoPonto_Click(object sender, RoutedEventArgs e) =>
|
|
RemoverUltimoPontoSolicitado?.Invoke();
|
|
|
|
private void btnCapturaAutomatica_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
if (_ultimoResumo?.GravacaoAutomaticaAtiva == true)
|
|
FinalizarCapturaAutomaticaSolicitado?.Invoke();
|
|
else
|
|
IniciarCapturaAutomaticaSolicitado?.Invoke();
|
|
}
|
|
|
|
private void btnNovaRua_Click(object sender, RoutedEventArgs e) =>
|
|
NovaRuaSolicitada?.Invoke();
|
|
|
|
private void cmbRuas_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
|
{
|
|
if (_atualizandoEstado)
|
|
return;
|
|
|
|
if (cmbRuas.SelectedValue is int numeroRua)
|
|
RuaSelecionada?.Invoke(numeroRua);
|
|
}
|
|
|
|
private void btnExcluirRua_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
int numeroRua = _ultimoResumo?.RuaAtual ?? 0;
|
|
if (numeroRua > 0)
|
|
ExcluirRuaSolicitada?.Invoke(numeroRua);
|
|
}
|
|
|
|
private void btnLimpar_Click(object sender, RoutedEventArgs e) =>
|
|
LimparSolicitado?.Invoke();
|
|
|
|
private void btnSalvar_Click(object sender, RoutedEventArgs e) =>
|
|
SalvarSolicitado?.Invoke();
|
|
|
|
private void btnCancelar_Click(object sender, RoutedEventArgs e) =>
|
|
CancelarSolicitado?.Invoke();
|
|
}
|
|
}
|