agrobot_base/AgroBase/OperationControl/ViewModels/Views/PreparacaoMapa/PreparacaoMapaBottomViewMod...

149 lines
4.7 KiB
C#
Raw Normal View History

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();
}
}
}