agrobot_base/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoCenterViewModel.cs

152 lines
5.1 KiB
C#

using OperationControl.Controls;
using OperationControl.Models;
using System.ComponentModel;
namespace OperationControl.ViewModels.Views.Operacao
{
public class OperacaoCenterViewModel : INotifyPropertyChanged
{
public OperacaoCenterViewModel()
{
}
public event Action<string> RoverSelecionadoChanged;
public event PropertyChangedEventHandler? PropertyChanged;
private RoverCardModel? roverSelecionado;
private bool _comRoverSelecionado;
public bool ComRoverSelecionado
{
get => _comRoverSelecionado;
set
{
if (_comRoverSelecionado != value)
{
_comRoverSelecionado = value;
OnPropertyChanged(nameof(ComRoverSelecionado));
}
}
}
private OperacaoCenterConteudo _conteudoAtual = OperacaoCenterConteudo.Mapa;
public OperacaoCenterConteudo ConteudoAtual
{
get => _conteudoAtual;
set
{
_conteudoAtual = value;
OnPropertyChanged(nameof(ConteudoAtual));
OnPropertyChanged(nameof(ExibirMapa));
OnPropertyChanged(nameof(ExibirDiagnostico));
OnPropertyChanged(nameof(ExibirMonitoramento));
OnPropertyChanged(nameof(ExibirHistorico));
OnPropertyChanged(nameof(TituloCentro));
OnPropertyChanged(nameof(SubtituloCentro));
}
}
public bool ExibirMapa => ConteudoAtual == OperacaoCenterConteudo.Mapa;
public bool ExibirDiagnostico => ConteudoAtual == OperacaoCenterConteudo.Diagnostico;
public bool ExibirMonitoramento => ConteudoAtual == OperacaoCenterConteudo.Monitoramento;
public bool ExibirHistorico => ConteudoAtual == OperacaoCenterConteudo.Historico;
public string TituloCentro
{
get
{
if (!ComRoverSelecionado)
return "Nenhum rover selecionado";
return ConteudoAtual switch
{
OperacaoCenterConteudo.Diagnostico => "Diagnóstico do Rover",
OperacaoCenterConteudo.Monitoramento => "Monitoramento do Rover",
OperacaoCenterConteudo.Mapa => "Mapa da Operação",
_ => "Área Principal da Operação"
};
}
}
public string SubtituloCentro
{
get
{
if (!ComRoverSelecionado)
return "Selecione um rover para visualizar os dados.";
return ConteudoAtual switch
{
OperacaoCenterConteudo.Diagnostico => "Aqui serão exibidos os dados de diagnóstico do rover selecionado.",
OperacaoCenterConteudo.Monitoramento => "Aqui serão exibidos os dados de monitoramento em tempo real do rover.",
OperacaoCenterConteudo.Mapa => "Aqui será exibido o mapa e os dados operacionais do rover selecionado.",
_ => "Conteúdo da operação."
};
}
}
public void SelecionarRoverLista(RoverCardModel? rover)
{
roverSelecionado = rover;
ComRoverSelecionado = roverSelecionado != null;
DefinirSecao(ComRoverSelecionado ? SecaoRightBar.Menu : SecaoRightBar.SemRoverSelecionado);
}
public void DefinirSecao(SecaoRightBar secao)
{
ConteudoAtual = secao switch
{
SecaoRightBar.Diagnostico => OperacaoCenterConteudo.Diagnostico,
SecaoRightBar.Resumo => OperacaoCenterConteudo.Monitoramento,
SecaoRightBar.Controle => OperacaoCenterConteudo.Monitoramento,
SecaoRightBar.Parametrizacao => OperacaoCenterConteudo.Mapa,
SecaoRightBar.Menu => OperacaoCenterConteudo.Monitoramento,
SecaoRightBar.Historico => OperacaoCenterConteudo.Historico,
_ => OperacaoCenterConteudo.Mapa
};
}
private void OnPropertyChanged(string nome)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nome));
}
public void ProcessarMarkerClicked(MapMarkerManager.MarkerClickedEventArgs e)
{
if (string.IsNullOrEmpty(e.MarkerId))
{
Variaveis.MostrarLog("Sem rover em foco");
RoverSelecionadoChanged?.Invoke(null);
}
else
{
Variaveis.MostrarLog($"Rover em foco: {e.MarkerId}");
RoverSelecionadoChanged?.Invoke(e.MarkerId);
}
}
public void ProcessarStreetMapClicked(MapViewControl.StreetMapClickedEventArgs e)
{
Variaveis.MostrarLog($"Rua clicada: {e.StreetId}. Ruas selecionadas: {string.Join(",", e.SelectedStreetsIds)}");
}
}
public enum OperacaoCenterConteudo
{
Mapa = 1,
Diagnostico = 2,
Monitoramento = 3,
Historico = 4,
}
}