149 lines
4.7 KiB
C#
149 lines
4.7 KiB
C#
|
|
using OperationControl.Helpers;
|
|||
|
|
using System.ComponentModel;
|
|||
|
|
using System.Windows.Input;
|
|||
|
|
|
|||
|
|
namespace OperationControl.ViewModels
|
|||
|
|
{
|
|||
|
|
public class PreparacaoMapaBottomViewModel : INotifyPropertyChanged
|
|||
|
|
{
|
|||
|
|
public event Action<string>? CarregarMapaSolicitado;
|
|||
|
|
public event Action? FixarBaseSolicitado;
|
|||
|
|
|
|||
|
|
private bool _fixacaoEmAndamento;
|
|||
|
|
public bool FixacaoEmAndamento
|
|||
|
|
{
|
|||
|
|
get => _fixacaoEmAndamento;
|
|||
|
|
set
|
|||
|
|
{
|
|||
|
|
if (_fixacaoEmAndamento != value)
|
|||
|
|
{
|
|||
|
|
_fixacaoEmAndamento = value;
|
|||
|
|
OnPropertyChanged(nameof(FixacaoEmAndamento));
|
|||
|
|
OnPropertyChanged(nameof(PodeCarregarMapa));
|
|||
|
|
OnPropertyChanged(nameof(PodeFixarBase));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool PodeCarregarMapa => !FixacaoEmAndamento;
|
|||
|
|
public bool PodeFixarBase => true;
|
|||
|
|
|
|||
|
|
private double _progressoFixacao;
|
|||
|
|
public double ProgressoFixacao
|
|||
|
|
{
|
|||
|
|
get => _progressoFixacao;
|
|||
|
|
set
|
|||
|
|
{
|
|||
|
|
if (_progressoFixacao != value)
|
|||
|
|
{
|
|||
|
|
_progressoFixacao = value;
|
|||
|
|
OnPropertyChanged(nameof(ProgressoFixacao));
|
|||
|
|
OnPropertyChanged(nameof(ProgressoFixacaoTexto));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public string ProgressoFixacaoTexto => $"{ProgressoFixacao:F0}%";
|
|||
|
|
|
|||
|
|
private string _statusTexto = "Pronto para carregar o mapa e fixar a base.";
|
|||
|
|
public string StatusTexto
|
|||
|
|
{
|
|||
|
|
get => _statusTexto;
|
|||
|
|
set
|
|||
|
|
{
|
|||
|
|
if (_statusTexto != value)
|
|||
|
|
{
|
|||
|
|
_statusTexto = value;
|
|||
|
|
OnPropertyChanged(nameof(StatusTexto));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private string _textoBotaoFixarBase = "Fixar posição da base";
|
|||
|
|
public string TextoBotaoFixarBase
|
|||
|
|
{
|
|||
|
|
get => _textoBotaoFixarBase;
|
|||
|
|
set
|
|||
|
|
{
|
|||
|
|
if (_textoBotaoFixarBase != value)
|
|||
|
|
{
|
|||
|
|
_textoBotaoFixarBase = value;
|
|||
|
|
OnPropertyChanged(nameof(TextoBotaoFixarBase));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public ICommand CarregarMapaCommand { get; }
|
|||
|
|
public ICommand FixarBaseCommand { get; }
|
|||
|
|
|
|||
|
|
public PreparacaoMapaBottomViewModel()
|
|||
|
|
{
|
|||
|
|
CarregarMapaCommand = new RelayCommand(_ => ExecutarCarregarMapa(), _ => PodeCarregarMapa);
|
|||
|
|
FixarBaseCommand = new RelayCommand(_ => ExecutarFixarBase(), _ => PodeFixarBase);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void ExecutarCarregarMapa()
|
|||
|
|
{
|
|||
|
|
var dlg = new OpenFileDialog
|
|||
|
|
{
|
|||
|
|
Filter = "Arquivos de mapa|*.geojson;*.json;*.shp",
|
|||
|
|
Title = "Selecione o arquivo de mapa"
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
if (dlg.ShowDialog() == DialogResult.OK)
|
|||
|
|
{
|
|||
|
|
StatusTexto = $"Mapa selecionado: {System.IO.Path.GetFileName(dlg.FileName)}";
|
|||
|
|
CarregarMapaSolicitado?.Invoke(dlg.FileName);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void ExecutarFixarBase()
|
|||
|
|
{
|
|||
|
|
FixarBaseSolicitado?.Invoke();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void AtualizarProgresso(double progresso, string status)
|
|||
|
|
{
|
|||
|
|
ProgressoFixacao = progresso;
|
|||
|
|
StatusTexto = status;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void IniciarFixacao()
|
|||
|
|
{
|
|||
|
|
FixacaoEmAndamento = true;
|
|||
|
|
TextoBotaoFixarBase = "Parar";
|
|||
|
|
ProgressoFixacao = 0;
|
|||
|
|
StatusTexto = "Iniciando fixação da posição da base...";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void FinalizarFixacao(bool sucesso, string? mensagem = null)
|
|||
|
|
{
|
|||
|
|
FixacaoEmAndamento = false;
|
|||
|
|
TextoBotaoFixarBase = "Fixar posição da base";
|
|||
|
|
ProgressoFixacao = sucesso ? 100 : ProgressoFixacao;
|
|||
|
|
|
|||
|
|
if (!string.IsNullOrWhiteSpace(mensagem))
|
|||
|
|
StatusTexto = mensagem;
|
|||
|
|
else
|
|||
|
|
StatusTexto = sucesso
|
|||
|
|
? "Fixação da base concluída com sucesso."
|
|||
|
|
: "Fixação da base encerrada.";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void CancelarFixacao(string? mensagem = null)
|
|||
|
|
{
|
|||
|
|
FixacaoEmAndamento = false;
|
|||
|
|
TextoBotaoFixarBase = "Fixar posição da base";
|
|||
|
|
StatusTexto = mensagem ?? "Fixação da base cancelada.";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public event PropertyChangedEventHandler? PropertyChanged;
|
|||
|
|
|
|||
|
|
private void OnPropertyChanged(string nome)
|
|||
|
|
{
|
|||
|
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nome));
|
|||
|
|
System.Windows.Input.CommandManager.InvalidateRequerySuggested();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|