diff --git a/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs b/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs
index 76d6ac67b..d84c6fb3a 100644
--- a/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs
+++ b/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs
@@ -977,6 +977,7 @@ namespace AgroBase.Models
Variaveis.OperacaoEmAndamento.Parametros.RoverId = VariaveisEquipamento.Parametros.serial_number;
Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura = new OperacaoParametrosDadosModel();
Variaveis.OperacaoEmAndamento.Sensoriamento.AtualizarDados();
+ Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios.ForEach(m => m.ComponentesEmUso = Variaveis.OperacaoEmAndamento.PreencherComponentesEmUso(m.Dispositivo));
Variaveis.OperacaoEmAndamento.DefinirComponentesEmUso();
Variaveis.OperacaoEmAndamento.Descricao = Parametros.Descricao;
@@ -1109,6 +1110,7 @@ namespace AgroBase.Models
Console.WriteLine("Nenhuma calibragem foi iniciada.");
_Controle.TipoMovimento = tipoControle;
Variaveis.OperacaoEmAndamento.Calibrando = false;
+ Variaveis.OperacaoEmAndamento.Pausa = false;
return;
}
diff --git a/AgroBase/AgroBase/Models/Variaveis.cs b/AgroBase/AgroBase/Models/Variaveis.cs
index 71ebe8b71..4f6b8e28a 100644
--- a/AgroBase/AgroBase/Models/Variaveis.cs
+++ b/AgroBase/AgroBase/Models/Variaveis.cs
@@ -290,6 +290,7 @@ namespace AgroBase.Models
else if (disp == T_Code.Mov)
{
controle.Controle.PercentualVelocidadeSP = msg.P1 / 100.0;
+ controle.Controle.EmFreio = msg.P2 == 1;
}
}
diff --git a/AgroBase/OperationControl/Controls/ManualControlPad.xaml.cs b/AgroBase/OperationControl/Controls/ManualControlPad.xaml.cs
index b7f9f64c8..b4960a124 100644
--- a/AgroBase/OperationControl/Controls/ManualControlPad.xaml.cs
+++ b/AgroBase/OperationControl/Controls/ManualControlPad.xaml.cs
@@ -354,7 +354,7 @@ namespace OperationControl.Controls
if (_lastMovKey != mov)
{
//VariaveisControleOperacao.EnviarComandoMovimentacao(mov, Convert.ToInt32(SpeedControl));
- VariaveisControleOperacao.EnviarComandoMovimentacaoUDP(mov, Convert.ToInt32(SpeedControl));
+ VariaveisControleOperacao.EnviarComandoMovimentacaoUDP(mov, Convert.ToInt32(SpeedControl), false);
_lastMovKey = mov;
}
}
diff --git a/AgroBase/OperationControl/Models/AppShell.cs b/AgroBase/OperationControl/Models/AppShell.cs
index c0b5f2448..4ec42cdbb 100644
--- a/AgroBase/OperationControl/Models/AppShell.cs
+++ b/AgroBase/OperationControl/Models/AppShell.cs
@@ -9,6 +9,7 @@ namespace OperationControl.Models
public class AppShell
{
public static readonly bool Mock = true;
+ private static readonly bool AddRover = false;
private readonly System.Timers.Timer tmrComunicacao = new(1000) { AutoReset = true };
private int tmrComunicacaoTicks = 0;
@@ -36,18 +37,21 @@ namespace OperationControl.Models
Dock = new DockWindow();
Dock.Show();
- if (Mock && false)
+ if (Mock && AddRover)
{
Task.Run(async () =>
{
await Task.Delay(1000);
VariaveisControleOperacao.AdicionarNovoRoverNaRede("01", "192.168.1.100");
- VariaveisControleOperacao.RoversNaRede.FirstOrDefault().DadosLeitura = new AgroBase.Models.Operacoes.OperacaoParametrosDadosModel()
+ var r = VariaveisControleOperacao.RoversNaRede.FirstOrDefault();
+ r.Modo = AgroBase.Models.Enums.ModoOperacao.MapaGPS;
+ r.Descricao = "Operacao Mockada";
+ r.DadosLeitura = new AgroBase.Models.Operacoes.OperacaoParametrosDadosModel()
{
StatusRover = StatusModulo.Operante,
Operacao = new AgroBase.Models.Operacoes.OperacaoParametrosDadosOperacaoModel()
{
- Status = StatusOperacao.Parametrizando
+ Status = StatusOperacao.Parametrizando,
},
Atuador = new AgroBase.Models.Operacoes.OperacaoParametrosDadosAtuadorModel()
{
@@ -80,7 +84,7 @@ namespace OperationControl.Models
QtdAtuacoes = 5,
TempoAtuado = 300,
VazaoInstantaneaMLs = 15,
- VazaoMediaMLs = 30,
+ VazaoMediaMLs = 30,
VolumeVazadoML = 325
},
new AgroBase.Models.Operacoes.OperacaoParametrosDadosBicoModel()
@@ -118,8 +122,39 @@ namespace OperationControl.Models
VolumeVazadoML = 325
},
}
+ },
+ Controle = new AgroBase.Models.Operacoes.OperacaoParametrosDadosControleModel()
+ {
+ AlturaBarra = 50,
+ Angulo = 0,
+ PercentualVelocidadeSPKmh = 0,
+ TipoMovimento = TipoMovimentoDirecional.RodasDianteiras
}
};
+ r.Controle = new AgroBase.Models.Operacoes.OperacaoParametrosControleModel()
+ {
+ AtuAlturaAreaPulverizacao = 10,
+ AtuDuracaoAtuacao = 200,
+ AtuPercentualErvasBicoOff = 1,
+ AtuPercentualErvasBicoOn = 2,
+ AtuPercentualInicioPulverizacao = 70,
+ AtuPressaoLinha = 80,
+ DirAnguloMaximo = 30,
+ DirecionalAutomatico = true,
+ MovimentoAutomatico = true,
+ PulverizadorAutomatico = true,
+ DirTipoMovimento = TiposControladorDirecional.MPC,
+ DirVelocidadeMovimento = 40,
+ FrenagemAutomaticaAoParar = false,
+ ImuParadaPorInclinacao = false,
+ MovVelocidadeCErvasPercent = 20,
+ MovVelocidadeSErvasPercent = 50,
+ MpcHorizonte = 4,
+ MpcMatrizCusto = false,
+ OakParadaPorObstaculo = false,
+ RegistrarDadosPosProcessamento = false,
+ SonarAtivado = false
+ };
});
}
}
diff --git a/AgroBase/OperationControl/Models/Variaveis.cs b/AgroBase/OperationControl/Models/Variaveis.cs
index ff886b15b..224b08748 100644
--- a/AgroBase/OperationControl/Models/Variaveis.cs
+++ b/AgroBase/OperationControl/Models/Variaveis.cs
@@ -5,7 +5,6 @@ using OperationControl.Services;
using AgroMonitor;
using Application = System.Windows.Application;
using AgroBase.Models.Operacoes;
-using OperationControl.ViewModels;
namespace OperationControl.Models
{
@@ -494,7 +493,7 @@ namespace OperationControl.Models
});
}
- public static void EnviarComandoMovimentacaoUDP(AgroBase.Models.Enums.Direcao direcao, double velPct)
+ public static void EnviarComandoMovimentacaoUDP(AgroBase.Models.Enums.Direcao direcao, double velPct, bool emfreio)
{
var key = DeParaDirecaoTecla(direcao);
@@ -504,7 +503,7 @@ namespace OperationControl.Models
Flags = UdpCtrlFlags.HasKey | UdpCtrlFlags.HasPayload,
Key = key,
P1 = (short)Math.Max(short.MinValue, Math.Min(short.MaxValue, (int)Math.Round(velPct * 100.0))),
- P2 = 0
+ P2 = (short)(emfreio ? 1 : 0)
};
//return Variaveis.UdpChannel.SendBurstAsync(0x01, msg.ToBytes(), count: 6, intervalMs: 25, requestAck: false);
diff --git a/AgroBase/OperationControl/OperationControl.csproj.user b/AgroBase/OperationControl/OperationControl.csproj.user
index 2323a885a..642fee9a8 100644
--- a/AgroBase/OperationControl/OperationControl.csproj.user
+++ b/AgroBase/OperationControl/OperationControl.csproj.user
@@ -46,10 +46,16 @@
Code
-
+
Code
-
+
+ Code
+
+
+ Code
+
+
Code
@@ -67,6 +73,9 @@
Code
+
+ Code
+
Code
@@ -123,10 +132,16 @@
Designer
-
+
Designer
-
+
+ Designer
+
+
+ Designer
+
+
Designer
@@ -144,6 +159,9 @@
Designer
+
+ Designer
+
Designer
diff --git a/AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/ControleManualViewModel.cs b/AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/ControleManualViewModel.cs
new file mode 100644
index 000000000..a86372d8a
--- /dev/null
+++ b/AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/ControleManualViewModel.cs
@@ -0,0 +1,361 @@
+using OperationControl.Models;
+using System.ComponentModel;
+using System.Windows.Media;
+using static AgroBase.Models.Enums;
+using Brush = System.Windows.Media.Brush;
+using Color = System.Windows.Media.Color;
+using Key = System.Windows.Input.Key;
+
+namespace OperationControl.ViewModels.Views.Operacao.Monitoramento
+{
+ public class ControleManualViewModel : INotifyPropertyChanged
+ {
+ private bool _habilitado;
+ private double _velocidadePercentual = 40;
+ private double _anguloDirecional = 10;
+ private TipoMovimentoDirecional _tipoMovimentoSelecionado = TipoMovimentoDirecional.RodasDianteiras;
+
+ private bool _wPressionado;
+ private bool _aPressionado;
+ private bool _sPressionado;
+ private bool _dPressionado;
+ private bool _fPressionado;
+
+ private readonly HashSet _pressedKeys = new();
+
+ private Direcao _lastMovKey = Direcao.Parado;
+ private Direcao _lastDirKey = Direcao.Parado;
+ private bool _lastFreio = false;
+
+ public bool Habilitado
+ {
+ get => _habilitado;
+ set
+ {
+ if (_habilitado != value)
+ {
+ _habilitado = value;
+ OnPropertyChanged(nameof(StatusTexto));
+ OnPropertyChanged(nameof(TextoAjuda));
+ OnPropertyChanged(nameof(StatusBrush));
+
+ if (VariaveisControleOperacao.RoverEmFoco != null)
+ {
+ VariaveisControleOperacao.RoverEmFoco.Controle.MovimentoAutomatico = !value;
+ VariaveisControleOperacao.RoverEmFoco.Controle.DirecionalAutomatico = !value;
+ VariaveisControleOperacao.EnviarParametrosOperacao(new AgroBase.Models.Operacoes.OperacaoParametrosModel()
+ {
+ Controle = VariaveisControleOperacao.RoverEmFoco?.Controle
+ });
+ }
+
+ if (!value)
+ {
+ LimparTeclas();
+ EnviarNeutros();
+ }
+ }
+ }
+ }
+
+ public double VelocidadePercentual
+ {
+ get => _velocidadePercentual;
+ set
+ {
+ if (_velocidadePercentual != value)
+ {
+ _velocidadePercentual = value;
+ OnPropertyChanged(nameof(VelocidadePercentualTexto));
+
+ if (Habilitado)
+ RecalcularComandos();
+ }
+ }
+ }
+
+ public string VelocidadePercentualTexto => $"{VelocidadePercentual:0}%";
+
+ public double AnguloDirecional
+ {
+ get => _anguloDirecional;
+ set
+ {
+ if (_anguloDirecional != value)
+ {
+ _anguloDirecional = value;
+ OnPropertyChanged(nameof(AnguloTexto));
+
+ if (Habilitado)
+ RecalcularComandos();
+ }
+ }
+ }
+
+ public string AnguloTexto => $"{AnguloDirecional:+0;-0;0}°";
+
+ public TipoMovimentoDirecional TipoMovimentoSelecionado
+ {
+ get => _tipoMovimentoSelecionado;
+ set
+ {
+ if (_tipoMovimentoSelecionado != value)
+ {
+ _tipoMovimentoSelecionado = value;
+ if (Habilitado)
+ RecalcularComandos();
+ }
+ }
+ }
+
+ public List TiposMovimento { get; } =
+ Enum.GetValues(typeof(TipoMovimentoDirecional))
+ .Cast()
+ .ToList();
+
+ public bool WPressionado
+ {
+ get => _wPressionado;
+ private set
+ {
+ if (_wPressionado != value)
+ {
+ _wPressionado = value;
+ OnPropertyChanged(nameof(TeclaWBackground));
+ OnPropertyChanged(nameof(TeclaWBorder));
+ OnPropertyChanged(nameof(MovimentoAtualTexto));
+ }
+ }
+ }
+
+ public bool APressionado
+ {
+ get => _aPressionado;
+ private set
+ {
+ if (_aPressionado != value)
+ {
+ _aPressionado = value;
+ OnPropertyChanged(nameof(TeclaABackground));
+ OnPropertyChanged(nameof(TeclaABorder));
+ OnPropertyChanged(nameof(DirecaoAtualTexto));
+ }
+ }
+ }
+
+ public bool SPressionado
+ {
+ get => _sPressionado;
+ private set
+ {
+ if (_sPressionado != value)
+ {
+ _sPressionado = value;
+ OnPropertyChanged(nameof(TeclaSBackground));
+ OnPropertyChanged(nameof(TeclaSBorder));
+ OnPropertyChanged(nameof(MovimentoAtualTexto));
+ }
+ }
+ }
+
+ public bool DPressionado
+ {
+ get => _dPressionado;
+ private set
+ {
+ if (_dPressionado != value)
+ {
+ _dPressionado = value;
+ OnPropertyChanged(nameof(TeclaDBackground));
+ OnPropertyChanged(nameof(TeclaDBorder));
+ OnPropertyChanged(nameof(DirecaoAtualTexto));
+ }
+ }
+ }
+
+ public bool FPressionado
+ {
+ get => _fPressionado;
+ private set
+ {
+ if (_fPressionado != value)
+ {
+ _fPressionado = value;
+ OnPropertyChanged(nameof(TeclaFBackground));
+ OnPropertyChanged(nameof(TeclaFBorder));
+ OnPropertyChanged(nameof(FreioAtivoTexto));
+ OnPropertyChanged(nameof(FreioCardBackground));
+ OnPropertyChanged(nameof(FreioCardBorder));
+ OnPropertyChanged(nameof(MovimentoAtualTexto));
+ }
+ }
+ }
+
+ public Brush TeclaWBackground => WPressionado ? BrushFrom("#1D4ED8") : BrushFrom("#2D2D2D");
+ public Brush TeclaWBorder => WPressionado ? BrushFrom("#60A5FA") : BrushFrom("#555555");
+
+ public Brush TeclaABackground => APressionado ? BrushFrom("#1D4ED8") : BrushFrom("#2D2D2D");
+ public Brush TeclaABorder => APressionado ? BrushFrom("#60A5FA") : BrushFrom("#555555");
+
+ public Brush TeclaSBackground => SPressionado ? BrushFrom("#B45309") : BrushFrom("#2D2D2D");
+ public Brush TeclaSBorder => SPressionado ? BrushFrom("#F59E0B") : BrushFrom("#555555");
+
+ public Brush TeclaDBackground => DPressionado ? BrushFrom("#1D4ED8") : BrushFrom("#2D2D2D");
+ public Brush TeclaDBorder => DPressionado ? BrushFrom("#60A5FA") : BrushFrom("#555555");
+
+ public Brush TeclaFBackground => FPressionado ? BrushFrom("#7A2323") : BrushFrom("#2D2D2D");
+ public Brush TeclaFBorder => FPressionado ? BrushFrom("#D35B5B") : BrushFrom("#555555");
+
+ public Brush FreioCardBackground => FPressionado ? BrushFrom("#7A2323") : BrushFrom("#2B2B2B");
+ public Brush FreioCardBorder => FPressionado ? BrushFrom("#D35B5B") : BrushFrom("#555555");
+
+ public string MovimentoAtualTexto
+ {
+ get
+ {
+ if (FPressionado)
+ return "Freado";
+
+ if (WPressionado && !SPressionado) return "Frente";
+ if (SPressionado && !WPressionado) return "Ré";
+ if (WPressionado && SPressionado) return "Conflito";
+ return "Parado";
+ }
+ }
+
+ public string DirecaoAtualTexto
+ {
+ get
+ {
+ if (APressionado && !DPressionado) return "Esquerda";
+ if (DPressionado && !APressionado) return "Direita";
+ if (APressionado && DPressionado) return "Conflito";
+ return "Centralizado";
+ }
+ }
+
+ public string FreioAtivoTexto => FPressionado ? "Freio Ativo" : "Freio Inativo";
+
+ public string StatusTexto => !Habilitado ? "INATIVO" : "PRONTO";
+
+ public string TextoAjuda => !Habilitado
+ ? "Habilite o controle por teclado para começar."
+ : "Clique na tela de operação e use W, A, S, D e F para controlar o rover.";
+
+ public Brush StatusBrush => !Habilitado ? BrushFrom("#6B7280") : BrushFrom("#22C55E");
+
+ public void HandleKeyDown(Key key)
+ {
+ if (!Habilitado)
+ return;
+
+ if (_pressedKeys.Contains(key))
+ return;
+
+ _pressedKeys.Add(key);
+ AtualizarEstadoTeclas();
+ RecalcularComandos();
+ }
+
+ public void HandleKeyUp(Key key)
+ {
+ if (_pressedKeys.Remove(key))
+ {
+ AtualizarEstadoTeclas();
+ RecalcularComandos();
+ }
+ }
+
+ public void LimparTeclas()
+ {
+ _pressedKeys.Clear();
+ AtualizarEstadoTeclas();
+ }
+
+ private void AtualizarEstadoTeclas()
+ {
+ WPressionado = _pressedKeys.Contains(Key.W) || _pressedKeys.Contains(Key.Up);
+ APressionado = _pressedKeys.Contains(Key.A) || _pressedKeys.Contains(Key.Left);
+ SPressionado = _pressedKeys.Contains(Key.S) || _pressedKeys.Contains(Key.Down);
+ DPressionado = _pressedKeys.Contains(Key.D) || _pressedKeys.Contains(Key.Right);
+ FPressionado = _pressedKeys.Contains(Key.F) || _pressedKeys.Contains(Key.Space);
+ }
+
+ private void RecalcularComandos()
+ {
+ var dir = ObterDirecaoDirecional();
+ var mov = ObterDirecaoMovimentacao();
+ var freio = FPressionado;
+
+ if (_lastDirKey != dir)
+ {
+ VariaveisControleOperacao.EnviarComandoDirecionalUDP(dir, Convert.ToInt32(AnguloDirecional), TipoMovimentoSelecionado);
+
+ _lastDirKey = dir;
+ }
+
+ if (_lastMovKey != mov || _lastFreio != freio)
+ {
+ VariaveisControleOperacao.EnviarComandoMovimentacaoUDP(mov, Convert.ToInt32(VelocidadePercentual), freio);
+
+ _lastMovKey = mov;
+ _lastFreio = freio;
+ }
+ }
+
+ private Direcao ObterDirecaoDirecional()
+ {
+ if (APressionado && !DPressionado)
+ return Direcao.Esquerda;
+
+ if (DPressionado && !APressionado)
+ return Direcao.Direita;
+
+ return Direcao.Parado;
+ }
+
+ private Direcao ObterDirecaoMovimentacao()
+ {
+ if (FPressionado)
+ return Direcao.Parado;
+
+ if (WPressionado && !SPressionado)
+ return Direcao.Cima;
+
+ if (SPressionado && !WPressionado)
+ return Direcao.Baixo;
+
+ return Direcao.Parado;
+ }
+
+ private void EnviarNeutros()
+ {
+ if (_lastDirKey != Direcao.Parado)
+ {
+ VariaveisControleOperacao.EnviarComandoDirecionalUDP(Direcao.Parado, Convert.ToInt32(AnguloDirecional), TipoMovimentoSelecionado);
+
+ _lastDirKey = Direcao.Parado;
+ }
+
+ if (_lastMovKey != Direcao.Parado || _lastFreio)
+ {
+ VariaveisControleOperacao.EnviarComandoMovimentacaoUDP(Direcao.Parado, 0, false);
+
+ _lastMovKey = Direcao.Parado;
+ _lastFreio = false;
+ }
+ }
+
+ private Brush BrushFrom(string hex)
+ {
+ return new SolidColorBrush((Color)System.Windows.Media.ColorConverter.ConvertFromString(hex));
+ }
+
+
+ public event PropertyChangedEventHandler PropertyChanged;
+ private void OnPropertyChanged(string nome)
+ {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nome));
+ }
+ }
+}
\ No newline at end of file
diff --git a/AgroBase/OperationControl/ViewModels/Views/Operacao/Diagnostico/DiagnosticoGraficoSerieViewModel.cs b/AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/Diagnostico/DiagnosticoGraficoSerieViewModel.cs
similarity index 89%
rename from AgroBase/OperationControl/ViewModels/Views/Operacao/Diagnostico/DiagnosticoGraficoSerieViewModel.cs
rename to AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/Diagnostico/DiagnosticoGraficoSerieViewModel.cs
index 0bb12f821..0a2d351b2 100644
--- a/AgroBase/OperationControl/ViewModels/Views/Operacao/Diagnostico/DiagnosticoGraficoSerieViewModel.cs
+++ b/AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/Diagnostico/DiagnosticoGraficoSerieViewModel.cs
@@ -6,7 +6,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
-namespace OperationControl.ViewModels.Views.Operacao.Diagnostico
+namespace OperationControl.ViewModels.Views.Operacao.Monitoramento.Diagnostico
{
public class DiagnosticoGraficoSerieViewModel : NotifyBase
{
diff --git a/AgroBase/OperationControl/ViewModels/Views/Operacao/Diagnostico/DiagnosticoModuloItemViewModel.cs b/AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/Diagnostico/DiagnosticoModuloItemViewModel.cs
similarity index 97%
rename from AgroBase/OperationControl/ViewModels/Views/Operacao/Diagnostico/DiagnosticoModuloItemViewModel.cs
rename to AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/Diagnostico/DiagnosticoModuloItemViewModel.cs
index 53affd257..9c2517d23 100644
--- a/AgroBase/OperationControl/ViewModels/Views/Operacao/Diagnostico/DiagnosticoModuloItemViewModel.cs
+++ b/AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/Diagnostico/DiagnosticoModuloItemViewModel.cs
@@ -5,7 +5,7 @@ using static AgroBase.Models.Enums;
using Brush = System.Windows.Media.Brush;
using Brushes = System.Windows.Media.Brushes;
-namespace OperationControl.ViewModels.Views.Operacao.Diagnostico
+namespace OperationControl.ViewModels.Views.Operacao.Monitoramento.Diagnostico
{
public class DiagnosticoModuloItemViewModel : NotifyBase
{
diff --git a/AgroBase/OperationControl/ViewModels/Views/Operacao/Diagnostico/DiagnosticoOpcoesViewModel.cs b/AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/Diagnostico/DiagnosticoOpcoesViewModel.cs
similarity index 97%
rename from AgroBase/OperationControl/ViewModels/Views/Operacao/Diagnostico/DiagnosticoOpcoesViewModel.cs
rename to AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/Diagnostico/DiagnosticoOpcoesViewModel.cs
index cab6222c9..66b7a65dc 100644
--- a/AgroBase/OperationControl/ViewModels/Views/Operacao/Diagnostico/DiagnosticoOpcoesViewModel.cs
+++ b/AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/Diagnostico/DiagnosticoOpcoesViewModel.cs
@@ -7,7 +7,7 @@ using System.Windows.Input;
using OperationControl.Helpers;
using static AgroBase.Services.CoolerControlService;
-namespace OperationControl.ViewModels.Views.Operacao.Diagnostico
+namespace OperationControl.ViewModels.Views.Operacao.Monitoramento.Diagnostico
{
public class DiagnosticoOpcoesViewModel : NotifyBase
{
@@ -187,7 +187,7 @@ namespace OperationControl.ViewModels.Views.Operacao.Diagnostico
set
{
if (SetProperty(ref _gpsLeverArmLateral, value))
- GpsLeverArmLateralTexto = $"{(value * 10.0):00} cm";
+ GpsLeverArmLateralTexto = $"{value * 10.0:00} cm";
}
}
@@ -201,7 +201,7 @@ namespace OperationControl.ViewModels.Views.Operacao.Diagnostico
set
{
if (SetProperty(ref _gpsLeverArmFrontal, value))
- GpsLeverArmFrontalTexto = $"{(value * 10.0):00} cm";
+ GpsLeverArmFrontalTexto = $"{value * 10.0:00} cm";
}
}
@@ -550,8 +550,8 @@ namespace OperationControl.ViewModels.Views.Operacao.Diagnostico
{
var bico = rover?.Atuador?.Bicos?.FirstOrDefault(x => x.ID == _itemAtual.LabelModulo);
BicoTitulo = $"Bico {_itemAtual.LabelModulo} - Testes";
- TxtBicoComando = (bico?.ComandoEstado ?? false) ? "Ligado" : "Desligado";
- TxtBicoStatusReal = (bico?.LeituraEstado ?? false) ? "Ligado" : "Desligado";
+ TxtBicoComando = bico?.ComandoEstado ?? false ? "Ligado" : "Desligado";
+ TxtBicoStatusReal = bico?.LeituraEstado ?? false ? "Ligado" : "Desligado";
TxtBicoTempoLigado = $"{bico?.TempoAtuado ?? 0:0.##} ms";
TxtBicoVazao = $"{bico?.VazaoInstantaneaMLs ?? 0:0.##} mL/s";
TxtBicoPressao = $"{rover?.Atuador?.PressaoLinhaPsi ?? 0:0.##} psi";
@@ -567,8 +567,8 @@ namespace OperationControl.ViewModels.Views.Operacao.Diagnostico
{
var bomba = rover?.Atuador?.Bombas?.FirstOrDefault(x => x.ID == _itemAtual.LabelModulo);
BombaTitulo = $"Bomba {_itemAtual.LabelModulo} - Testes";
- TxtBombaComando = (bomba?.ComandoEstado ?? false) ? "Ligado" : "Desligado";
- TxtBombaStatusReal = (bomba?.LeituraEstado ?? false) ? "Ligado" : "Desligado";
+ TxtBombaComando = bomba?.ComandoEstado ?? false ? "Ligado" : "Desligado";
+ TxtBombaStatusReal = bomba?.LeituraEstado ?? false ? "Ligado" : "Desligado";
TxtBombaPressaoLinha = $"{rover?.Atuador?.PressaoLinhaPsi ?? 0:0.##} psi";
TxtBombaPotencia = $"{bomba?.Potencia ?? 0:0.#} %";
if (clicado)
@@ -614,8 +614,8 @@ namespace OperationControl.ViewModels.Views.Operacao.Diagnostico
TxtTrajetoriaDistBateria = $"{dados?.DistanciaSeguraBateria_m ?? 0:0.00} m";
TxtTrajetoriaDistPulverizador = $"{dados?.DistanciaSeguraHerbicida_m ?? 0:0.00} m";
TxtTrajetoriaStatus = $"{dados?.Status ?? AgroBase.Models.AutonomiaCorredorStatus.Desconhecido}";
- TxtTrajetoriaBatOk = (dados?.BateriaSuficiente ?? false) ? "Sim" : "Não";
- TxtTrajetoriaHerbOk = (dados?.HerbicidaSuficiente ?? false) ? "Sim" : "Não";
+ TxtTrajetoriaBatOk = dados?.BateriaSuficiente ?? false ? "Sim" : "Não";
+ TxtTrajetoriaHerbOk = dados?.HerbicidaSuficiente ?? false ? "Sim" : "Não";
TrajetoriaPodeConfirmar = !(dados?.Liberado ?? false);
if (clicado)
{
@@ -628,8 +628,8 @@ namespace OperationControl.ViewModels.Views.Operacao.Diagnostico
{
var rele = rover?.Sensoriamento?.Reles?.FirstOrDefault(x => x.ID == _itemAtual.LabelModulo);
ReleTitulo = $"Relé {_itemAtual.LabelModulo} - Testes";
- TxtReleComando = (rele?.ComandoEstado ?? false) ? "Ligado" : "Desligado";
- TxtReleStatusReal = (rele?.LeituraEstado ?? false) ? "Ligado" : "Desligado";
+ TxtReleComando = rele?.ComandoEstado ?? false ? "Ligado" : "Desligado";
+ TxtReleStatusReal = rele?.LeituraEstado ?? false ? "Ligado" : "Desligado";
}
private void PreencherServoSensoriamento(OperacaoParametrosDadosModel rover, bool clicado)
@@ -637,7 +637,7 @@ namespace OperationControl.ViewModels.Views.Operacao.Diagnostico
var servo = rover?.Sensoriamento?.Servos?.FirstOrDefault(x => x.ID == _itemAtual.LabelModulo);
TxtServoComando = $"{servo?.ComandoAngulo ?? 0}°";
TxtServoLeitura = $"{servo?.LeituraAngulo ?? 0}°";
- TxtServoIncremental = (servo?.Incremental ?? false) ? "Incremental" : "Decremental";
+ TxtServoIncremental = servo?.Incremental ?? false ? "Incremental" : "Decremental";
if (clicado)
{
ServoAngulo = servo?.ComandoAngulo ?? 0;
@@ -649,7 +649,7 @@ namespace OperationControl.ViewModels.Views.Operacao.Diagnostico
var servo = rover?.Atuador?.Servos?.FirstOrDefault(x => x.ID == _itemAtual.LabelModulo);
TxtServoComando = $"{servo?.ComandoAngulo ?? 0}°";
TxtServoLeitura = $"{servo?.LeituraAngulo ?? 0}°";
- TxtServoIncremental = (servo?.Incremental ?? false) ? "Incremental" : "Decremental";
+ TxtServoIncremental = servo?.Incremental ?? false ? "Incremental" : "Decremental";
if (clicado)
{
ServoAngulo = servo?.ComandoAngulo ?? 0;
diff --git a/AgroBase/OperationControl/ViewModels/Views/Operacao/Diagnostico/DiagnosticoViewModel.cs b/AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/Diagnostico/DiagnosticoViewModel.cs
similarity index 99%
rename from AgroBase/OperationControl/ViewModels/Views/Operacao/Diagnostico/DiagnosticoViewModel.cs
rename to AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/Diagnostico/DiagnosticoViewModel.cs
index f5ddadc35..898d0d39d 100644
--- a/AgroBase/OperationControl/ViewModels/Views/Operacao/Diagnostico/DiagnosticoViewModel.cs
+++ b/AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/Diagnostico/DiagnosticoViewModel.cs
@@ -7,7 +7,7 @@ using AgroBase.Models.Operacoes;
using OperationControl.Models;
using Newtonsoft.Json.Linq;
-namespace OperationControl.ViewModels.Views.Operacao.Diagnostico
+namespace OperationControl.ViewModels.Views.Operacao.Monitoramento.Diagnostico
{
public class DiagnosticoViewModel : NotifyBase
{
@@ -595,7 +595,7 @@ namespace OperationControl.ViewModels.Views.Operacao.Diagnostico
mod.ComponentesEmUso[label] = (MandatorioSelecionado, EmUsoSelecionado);
}
- VariaveisControleOperacao.EnviarParametrosOperacao(new AgroBase.Models.Operacoes.OperacaoParametrosModel()
+ VariaveisControleOperacao.EnviarParametrosOperacao(new OperacaoParametrosModel()
{
ModulosMandatorios = rover.ModulosMandatorios,
});
@@ -608,7 +608,7 @@ namespace OperationControl.ViewModels.Views.Operacao.Diagnostico
}
-
+
private void AtualizarGraficoModuloSelecionado()
@@ -697,13 +697,13 @@ namespace OperationControl.ViewModels.Views.Operacao.Diagnostico
{
case S_Code.sBIC:
var bico = rover.Atuador?.Bicos?.FirstOrDefault(x => x.ID == item.LabelModulo);
- AddOrAppendSerie("Cmd", "", (bico?.ComandoEstado ?? false) ? 100 : 0);
+ AddOrAppendSerie("Cmd", "", bico?.ComandoEstado ?? false ? 100 : 0);
AddOrAppendSerie("Vazão", "mL/s", bico?.VazaoInstantaneaMLs);
break;
case S_Code.sBMB:
var bomba = rover.Atuador?.Bombas?.FirstOrDefault(x => x.ID == item.LabelModulo);
- AddOrAppendSerie("Cmd", "", (bomba?.ComandoEstado ?? false) ? 100 : 0);
+ AddOrAppendSerie("Cmd", "", bomba?.ComandoEstado ?? false ? 100 : 0);
AddOrAppendSerie("Potência", "%", bomba?.Potencia);
AddOrAppendSerie("Pressão", "psi", rover.Atuador?.PressaoLinhaPsi);
break;
@@ -770,7 +770,7 @@ namespace OperationControl.ViewModels.Views.Operacao.Diagnostico
break;
}
}
-
+
#endregion
}
diff --git a/AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/ParametrizacaoViewModel.cs b/AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/ParametrizacaoViewModel.cs
new file mode 100644
index 000000000..0be7e039f
--- /dev/null
+++ b/AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/ParametrizacaoViewModel.cs
@@ -0,0 +1,61 @@
+using AgroBase.Models;
+using AgroBase.Models.Operacoes;
+using OperationControl.Helpers;
+using System.ComponentModel;
+using System.Windows.Input;
+
+namespace OperationControl.ViewModels.Views.Operacao.Monitoramento
+{
+ public class ParametrizacaoViewModel : INotifyPropertyChanged
+ {
+ private OperacaoParametrosModel _parametros = new OperacaoParametrosModel();
+ public OperacaoParametrosModel Parametros
+ {
+ get => _parametros;
+ set
+ {
+ if (_parametros != value)
+ {
+ _parametros = value;
+ OnPropertyChanged(nameof(Parametros));
+ }
+ }
+ }
+
+ public ParametrizacaoViewModel()
+ {
+ CarregarParametrosPadraoCommand = new RelayCommand(p => CarregarParametrosPadrao((AgroBase.Models.Enums.ModoOperacao)p));
+ LerParametrosCommand = new RelayCommand(_ => LerParametrosSolicitado?.Invoke());
+ SalvarParametrosCommand = new RelayCommand(_ => SalvarParametrosSolicitado?.Invoke(Parametros));
+ }
+
+
+ public event Action? LerParametrosSolicitado;
+ public event Action? SalvarParametrosSolicitado;
+ public ICommand LerParametrosCommand { get; }
+ public ICommand SalvarParametrosCommand { get; }
+ public ICommand CarregarParametrosPadraoCommand { get; }
+ public Array ModosOperacaoDisponiveis { get; } = Enum.GetValues(typeof(AgroBase.Models.Enums.ModoOperacao));
+
+
+ private void CarregarParametrosPadrao(AgroBase.Models.Enums.ModoOperacao modo)
+ {
+ var p = OperacaoModel.CarregarParametrosOperacaoPadrao(modo, false);
+ p.Descricao = $"{p.Modo} - Padrão";
+ Parametros = p;
+ }
+
+ public void AtualizarParametros(OperacaoParametrosModel origem)
+ {
+ if (origem == null) return;
+ Parametros = origem;
+ }
+
+
+ public event PropertyChangedEventHandler PropertyChanged;
+ private void OnPropertyChanged(string nome)
+ {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nome));
+ }
+ }
+}
diff --git a/AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/ResumoViewModel.cs b/AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/ResumoViewModel.cs
new file mode 100644
index 000000000..4f8de2500
--- /dev/null
+++ b/AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/ResumoViewModel.cs
@@ -0,0 +1,39 @@
+using OperationControl.Models.Operacao;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OperationControl.ViewModels.Views.Operacao.Monitoramento
+{
+ public class ResumoViewModel : INotifyPropertyChanged
+ {
+ public ResumoOperacionalModel Resumo { get; } = new ResumoOperacionalModel();
+
+ public ResumoViewModel()
+ {
+
+ }
+
+
+ public void AtualizarResumo(Action updateAction)
+ {
+ if (!System.Windows.Application.Current.Dispatcher.CheckAccess())
+ {
+ System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() => updateAction?.Invoke(Resumo)));
+ return;
+ }
+
+ updateAction?.Invoke(Resumo);
+ }
+
+
+ public event PropertyChangedEventHandler PropertyChanged;
+ private void OnPropertyChanged(string nome)
+ {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nome));
+ }
+ }
+}
diff --git a/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoLeftViewModel.cs b/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoLeftViewModel.cs
index e9552c912..c66ea5846 100644
--- a/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoLeftViewModel.cs
+++ b/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoLeftViewModel.cs
@@ -253,7 +253,7 @@ namespace OperationControl.ViewModels.Views.Operacao
OnPropertyChanged(nameof(CorGnss));
}
- public void AtualizarRover(string nomeRover, double velocidadeKmh, double anguloDirecionalGraus, TipoMovimentoDirecional tipoMovimento, double temperaturaC, double bateriaPct, double reservatorioPct, string saudeRede, string saudeGnss)
+ public void AtualizarRover(string nomeRover, double velocidadeKmh, double anguloDirecionalGraus, TipoMovimentoDirecional tipoMovimento, double temperaturaC, double bateriaPct, double reservatorioPct, string saudeRede, string saudeGnss, bool op_iniciada)
{
RoverSelecionado = true;
NomeRover = nomeRover;
@@ -271,11 +271,14 @@ namespace OperationControl.ViewModels.Views.Operacao
SaudeRede = saudeRede;
SaudeGnss = saudeGnss;
+ OperacaoEmExecucao = op_iniciada;
+
OnPropertyChanged(nameof(CorTemperatura));
OnPropertyChanged(nameof(CorBateria));
OnPropertyChanged(nameof(CorReservatorio));
OnPropertyChanged(nameof(CorRede));
OnPropertyChanged(nameof(CorGnss));
+ OnPropertyChanged(nameof(OperacaoEmExecucao));
}
private void AlternarOperacao()
@@ -300,8 +303,6 @@ namespace OperationControl.ViewModels.Views.Operacao
VariaveisControleOperacao.EnviarComandoIniciarOperacao(true, simulador);
}
}
-
- OperacaoEmExecucao = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Operacao?.Iniciada ?? false;
}
private void ExecutarParadaEmergencia()
@@ -317,7 +318,6 @@ namespace OperationControl.ViewModels.Views.Operacao
if (System.Windows.MessageBox.Show("Deseja finalizar a operação em andamento?", "Finalizar Operação", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
{
VariaveisControleOperacao.EnviarComandoIniciarOperacao(false);
- OperacaoEmExecucao = false;
}
}
diff --git a/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoRightViewModel.cs b/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoRightViewModel.cs
index d079450aa..67fb4ff3a 100644
--- a/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoRightViewModel.cs
+++ b/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoRightViewModel.cs
@@ -17,22 +17,7 @@ namespace OperationControl.ViewModels.Views.Operacao
{
private bool _isCollapsed;
private RoverCardModel _roverSelecionado;
- public ResumoOperacionalModel Resumo { get; } = new ResumoOperacionalModel();
- private OperacaoParametrosModel _parametros = new OperacaoParametrosModel();
- public OperacaoParametrosModel Parametros
- {
- get => _parametros;
- set
- {
- if (_parametros != value)
- {
- _parametros = value;
- OnPropertyChanged(nameof(Parametros));
- }
- }
- }
-
public OperacaoRightViewModel()
{
Rovers = new ObservableCollection();
@@ -47,16 +32,11 @@ namespace OperationControl.ViewModels.Views.Operacao
SelecionarSecao(secaoParseada);
});
AcaoBotaoTopoCommand = new RelayCommand(_ => ExecutarAcaoBotaoTopo());
- CarregarParametrosPadraoCommand = new RelayCommand(p => CarregarParametrosPadrao((AgroBase.Models.Enums.ModoOperacao)p));
- LerParametrosCommand = new RelayCommand(_ => LerParametrosSolicitado?.Invoke());
- SalvarParametrosCommand = new RelayCommand(_ => SalvarParametrosSolicitado?.Invoke(Parametros));
}
public event PropertyChangedEventHandler PropertyChanged;
public event Action SecaoSelecionadaChanged;
public event Action RoverSelecionadoChanged;
- public event Action? LerParametrosSolicitado;
- public event Action? SalvarParametrosSolicitado;
public ObservableCollection Rovers { get; }
@@ -64,9 +44,6 @@ namespace OperationControl.ViewModels.Views.Operacao
public ICommand SelecionarRoverCommand { get; }
public ICommand SelecionarSecaoCommand { get; }
public ICommand AcaoBotaoTopoCommand { get; }
- public ICommand LerParametrosCommand { get; }
- public ICommand SalvarParametrosCommand { get; }
- public ICommand CarregarParametrosPadraoCommand { get; }
public bool IsCollapsed
{
@@ -131,8 +108,6 @@ namespace OperationControl.ViewModels.Views.Operacao
public string TextoBotaoTopo => BotaoTopoEhVoltar ? "◀ Voltar" : "Trocar Rover";
- public Array ModosOperacaoDisponiveis { get; } = Enum.GetValues(typeof(AgroBase.Models.Enums.ModoOperacao));
-
private void ExecutarAcaoBotaoTopo()
{
if (BotaoTopoEhVoltar)
@@ -145,13 +120,7 @@ namespace OperationControl.ViewModels.Views.Operacao
}
}
- private void CarregarParametrosPadrao(AgroBase.Models.Enums.ModoOperacao modo)
- {
- var p = OperacaoModel.CarregarParametrosOperacaoPadrao(modo, false);
- p.Descricao = $"{p.Modo} - Padrão";
- Parametros = p;
- }
-
+
public void ToggleCollapse()
{
IsCollapsed = !IsCollapsed;
@@ -176,13 +145,6 @@ namespace OperationControl.ViewModels.Views.Operacao
public void SelecionarSecao(SecaoRightBar secao)
{
- switch (secao)
- {
- case SecaoRightBar.Parametrizacao:
- AtualizarParametros(VariaveisControleOperacao.RoverEmFoco);
- break;
- }
-
SecaoAtual = secao;
SecaoSelecionadaChanged?.Invoke(secao);
@@ -235,23 +197,6 @@ namespace OperationControl.ViewModels.Views.Operacao
OnPropertyChanged(nameof(ComRoverSelecionado));
}
- public void AtualizarResumo(Action updateAction)
- {
- if (!System.Windows.Application.Current.Dispatcher.CheckAccess())
- {
- System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() => updateAction?.Invoke(Resumo)));
- return;
- }
-
- updateAction?.Invoke(Resumo);
- }
-
-
- public void AtualizarParametros(OperacaoParametrosModel origem)
- {
- if (origem == null) return;
- Parametros = origem;
- }
private void OnPropertyChanged(string nome)
{
diff --git a/AgroBase/OperationControl/ViewModels/Windows/DockWindowViewModel.cs b/AgroBase/OperationControl/ViewModels/Windows/DockWindowViewModel.cs
index 8cad71d68..57c4974b9 100644
--- a/AgroBase/OperationControl/ViewModels/Windows/DockWindowViewModel.cs
+++ b/AgroBase/OperationControl/ViewModels/Windows/DockWindowViewModel.cs
@@ -56,8 +56,8 @@ namespace OperationControl.ViewModels
_viewOperacaoRight._vm.PropertyChanged += OperacaoRightVm_PropertyChanged;
_viewOperacaoRight._vm.RoverSelecionadoChanged += OnRoverSelecionadoChanged;
_viewOperacaoRight._vm.SecaoSelecionadaChanged += OnSecaoSelecionadaChanged;
- _viewOperacaoRight._vm.LerParametrosSolicitado += OnLerParametrosSolicitado;
- _viewOperacaoRight._vm.SalvarParametrosSolicitado += OnSalvarParametrosSolicitado;
+ _viewOperacaoRight.areaParametrizacao._vm.LerParametrosSolicitado += OnLerParametrosSolicitado;
+ _viewOperacaoRight.areaParametrizacao._vm.SalvarParametrosSolicitado += OnSalvarParametrosSolicitado;
_viewOperacaoBottom = new OperacaoBottomView();
_viewOperacaoBottom._vm.SolicitarAbrirDiagnostico += AbrirDiagnosticoPeloAlerta;
@@ -198,7 +198,7 @@ namespace OperationControl.ViewModels
{
return CurrentStep switch
{
- DockStep.ParametrizacaoRover => (_viewOperacaoRight?.DataContext as OperacaoRightViewModel)?.IsCollapsed == true
+ DockStep.ParametrizacaoRover => _viewOperacaoRight?._vm?.IsCollapsed == true
? new GridLength(44)
: new GridLength(320),
@@ -616,7 +616,7 @@ namespace OperationControl.ViewModels
public void AtualizarParametrosRover(OperacaoParametrosModel? rover)
{
- _viewOperacaoRight?._vm?.AtualizarParametros(rover);
+ _viewOperacaoRight?.areaParametrizacao?._vm?.AtualizarParametros(rover);
AtualizarDadosMapa(rover);
}
@@ -800,11 +800,12 @@ namespace OperationControl.ViewModels
obj.Bateria?.PercentualBateria ?? 0,
obj.Atuador?.PercentualReservatorio ?? 0,
$"{c}%",
- $"{obj.Gnss?.QualidadeFix ?? TiposCorrecaoGPS.SemCorrecao} {obj.Gnss?.PrecisaoCm:F2} cm"
+ $"{obj.Gnss?.QualidadeFix ?? TiposCorrecaoGPS.SemCorrecao} {obj.Gnss?.PrecisaoCm:F2} cm",
+ obj.Operacao?.Iniciada ?? false
);
// DIREITA (RESUMO)
- _viewOperacaoRight?._vm?.AtualizarResumo(r =>
+ _viewOperacaoRight?.areaResumo?._vm?.AtualizarResumo(r =>
{
r.Operacao = (obj.Operacao?.Liberada ?? false) ? "🔓 Liberada" : "🔒 Bloqueada";
r.Modo = obj.Operacao == null ? "-" : obj.Operacao.Modo.ToString();
@@ -934,7 +935,7 @@ namespace OperationControl.ViewModels
}
else
{
- VariaveisControleOperacao.SelectedRoverId = rover.NumeroSerie.ToString();
+ VariaveisControleOperacao.SelectedRoverId = (rover.NumeroSerie ?? "").ToString();
_viewOperacaoCenter?.Mapa?.markers?.SetMarkerFocused(VariaveisControleOperacao.SelectedRoverId, true);
AtualizarDadosTela(VariaveisControleOperacao.RoverEmFoco);
@@ -952,6 +953,8 @@ namespace OperationControl.ViewModels
}
private void OnSecaoSelecionadaChanged(SecaoRightBar secao)
{
+ if (secao == SecaoRightBar.Parametrizacao)
+ _viewOperacaoRight?.areaParametrizacao?._vm?.AtualizarParametros(VariaveisControleOperacao.RoverEmFoco);
_viewOperacaoCenter?._vm?.DefinirSecao(secao);
AtualizarDadosMapa(VariaveisControleOperacao.RoverEmFoco);
}
diff --git a/AgroBase/OperationControl/Views/Operacao/Monitoramento/ControleManualView.xaml b/AgroBase/OperationControl/Views/Operacao/Monitoramento/ControleManualView.xaml
new file mode 100644
index 000000000..2eadfecdb
--- /dev/null
+++ b/AgroBase/OperationControl/Views/Operacao/Monitoramento/ControleManualView.xaml
@@ -0,0 +1,330 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AgroBase/OperationControl/Views/Operacao/Monitoramento/ControleManualView.xaml.cs b/AgroBase/OperationControl/Views/Operacao/Monitoramento/ControleManualView.xaml.cs
new file mode 100644
index 000000000..df007f2a6
--- /dev/null
+++ b/AgroBase/OperationControl/Views/Operacao/Monitoramento/ControleManualView.xaml.cs
@@ -0,0 +1,39 @@
+using OperationControl.ViewModels.Views.Operacao.Monitoramento;
+
+namespace OperationControl.Views.Operacao.Monitoramento
+{
+ ///
+ /// Interação lógica para ControleManualView.xam
+ ///
+ public partial class ControleManualView : System.Windows.Controls.UserControl
+ {
+ public ControleManualViewModel _vm;
+
+ public ControleManualView()
+ {
+ InitializeComponent();
+
+ _vm = new ControleManualViewModel();
+ DataContext = _vm;
+
+ Loaded += (_, __) => Focus();
+ MouseDown += (_, __) => Focus();
+ }
+
+ protected override void OnPreviewKeyDown(System.Windows.Input.KeyEventArgs e)
+ {
+ base.OnPreviewKeyDown(e);
+
+ _vm.HandleKeyDown(e.Key);
+ e.Handled = true;
+ }
+
+ protected override void OnPreviewKeyUp(System.Windows.Input.KeyEventArgs e)
+ {
+ base.OnPreviewKeyUp(e);
+
+ _vm.HandleKeyUp(e.Key);
+ e.Handled = true;
+ }
+ }
+}
diff --git a/AgroBase/OperationControl/Views/Operacao/DiagnosticoView.xaml b/AgroBase/OperationControl/Views/Operacao/Monitoramento/DiagnosticoView.xaml
similarity index 99%
rename from AgroBase/OperationControl/Views/Operacao/DiagnosticoView.xaml
rename to AgroBase/OperationControl/Views/Operacao/Monitoramento/DiagnosticoView.xaml
index 8a3be1c80..c335b14be 100644
--- a/AgroBase/OperationControl/Views/Operacao/DiagnosticoView.xaml
+++ b/AgroBase/OperationControl/Views/Operacao/Monitoramento/DiagnosticoView.xaml
@@ -1,4 +1,4 @@
-
/// Interaction logic for DiagnosticoView.xaml
diff --git a/AgroBase/OperationControl/Views/Operacao/MonitoramentoView.xaml b/AgroBase/OperationControl/Views/Operacao/Monitoramento/MonitoramentoView.xaml
similarity index 99%
rename from AgroBase/OperationControl/Views/Operacao/MonitoramentoView.xaml
rename to AgroBase/OperationControl/Views/Operacao/Monitoramento/MonitoramentoView.xaml
index d25110826..0fd2bf1f0 100644
--- a/AgroBase/OperationControl/Views/Operacao/MonitoramentoView.xaml
+++ b/AgroBase/OperationControl/Views/Operacao/Monitoramento/MonitoramentoView.xaml
@@ -1,4 +1,4 @@
-
/// Interaction logic for MonitoramentoView.xaml
diff --git a/AgroBase/OperationControl/Views/Operacao/Monitoramento/ParametrizacaoView.xaml b/AgroBase/OperationControl/Views/Operacao/Monitoramento/ParametrizacaoView.xaml
new file mode 100644
index 000000000..6780cd970
--- /dev/null
+++ b/AgroBase/OperationControl/Views/Operacao/Monitoramento/ParametrizacaoView.xaml
@@ -0,0 +1,189 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/AgroBase/OperationControl/Views/Operacao/Monitoramento/ParametrizacaoView.xaml.cs b/AgroBase/OperationControl/Views/Operacao/Monitoramento/ParametrizacaoView.xaml.cs
new file mode 100644
index 000000000..e378b10e0
--- /dev/null
+++ b/AgroBase/OperationControl/Views/Operacao/Monitoramento/ParametrizacaoView.xaml.cs
@@ -0,0 +1,30 @@
+using OperationControl.ViewModels.Views.Operacao.Monitoramento;
+using System.Windows.Controls;
+
+namespace OperationControl.Views.Operacao.Monitoramento
+{
+ ///
+ /// Interação lógica para ParametrizacaoView.xam
+ ///
+ public partial class ParametrizacaoView : System.Windows.Controls.UserControl
+ {
+ public ParametrizacaoViewModel _vm;
+
+ public ParametrizacaoView()
+ {
+ InitializeComponent();
+
+ _vm = new ParametrizacaoViewModel();
+ DataContext = _vm;
+ }
+
+ private void cmbModoOperacao_SelectionChanged(object sender, SelectionChangedEventArgs e)
+ {
+ if (sender is System.Windows.Controls.ComboBox combo && combo.SelectedItem is AgroBase.Models.Enums.ModoOperacao modo)
+ {
+ if (_vm.CarregarParametrosPadraoCommand?.CanExecute(modo) == true)
+ _vm.CarregarParametrosPadraoCommand.Execute(modo);
+ }
+ }
+ }
+}
diff --git a/AgroBase/OperationControl/Views/Operacao/Monitoramento/ResumoView.xaml b/AgroBase/OperationControl/Views/Operacao/Monitoramento/ResumoView.xaml
new file mode 100644
index 000000000..6fa43a927
--- /dev/null
+++ b/AgroBase/OperationControl/Views/Operacao/Monitoramento/ResumoView.xaml
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/AgroBase/OperationControl/Views/Operacao/Monitoramento/ResumoView.xaml.cs b/AgroBase/OperationControl/Views/Operacao/Monitoramento/ResumoView.xaml.cs
new file mode 100644
index 000000000..83229ed50
--- /dev/null
+++ b/AgroBase/OperationControl/Views/Operacao/Monitoramento/ResumoView.xaml.cs
@@ -0,0 +1,20 @@
+using OperationControl.ViewModels.Views.Operacao.Monitoramento;
+
+namespace OperationControl.Views.Operacao.Monitoramento
+{
+ ///
+ /// Interação lógica para ResumoView.xam
+ ///
+ public partial class ResumoView : System.Windows.Controls.UserControl
+ {
+ public ResumoViewModel _vm;
+
+ public ResumoView()
+ {
+ InitializeComponent();
+
+ _vm = new ResumoViewModel();
+ DataContext = _vm;
+ }
+ }
+}
diff --git a/AgroBase/OperationControl/Views/Operacao/OperacaoCenterView.xaml b/AgroBase/OperationControl/Views/Operacao/OperacaoCenterView.xaml
index 326773144..f741b80a7 100644
--- a/AgroBase/OperationControl/Views/Operacao/OperacaoCenterView.xaml
+++ b/AgroBase/OperationControl/Views/Operacao/OperacaoCenterView.xaml
@@ -5,8 +5,7 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:OperationControl.Views.Operacao"
xmlns:controls="clr-namespace:OperationControl.Controls"
- xmlns:views="clr-namespace:OperationControl.Views.Operacao"
- xmlns:scott="clr-namespace:ScottPlot.WPF;assembly=ScottPlot.WPF"
+ xmlns:views="clr-namespace:OperationControl.Views.Operacao.Monitoramento"
mc:Ignorable="d"
d:DesignHeight="450"
d:DesignWidth="800">
diff --git a/AgroBase/OperationControl/Views/Operacao/OperacaoCenterView.xaml.cs b/AgroBase/OperationControl/Views/Operacao/OperacaoCenterView.xaml.cs
index eaf846bce..c5a3ead3f 100644
--- a/AgroBase/OperationControl/Views/Operacao/OperacaoCenterView.xaml.cs
+++ b/AgroBase/OperationControl/Views/Operacao/OperacaoCenterView.xaml.cs
@@ -1,5 +1,6 @@
using OperationControl.Controls;
using OperationControl.ViewModels.Views.Operacao;
+using OperationControl.Views.Operacao.Monitoramento;
namespace OperationControl.Views.Operacao
{
diff --git a/AgroBase/OperationControl/Views/Operacao/OperacaoRightView.xaml b/AgroBase/OperationControl/Views/Operacao/OperacaoRightView.xaml
index ab61016f4..1f84b7e69 100644
--- a/AgroBase/OperationControl/Views/Operacao/OperacaoRightView.xaml
+++ b/AgroBase/OperationControl/Views/Operacao/OperacaoRightView.xaml
@@ -3,9 +3,8 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:OperationControl.Views.Operacao"
- xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
+ xmlns:views="clr-namespace:OperationControl.Views.Operacao.Monitoramento"
mc:Ignorable="d">
@@ -218,280 +217,23 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
-
-
-
+
diff --git a/AgroBase/OperationControl/Views/Operacao/OperacaoRightView.xaml.cs b/AgroBase/OperationControl/Views/Operacao/OperacaoRightView.xaml.cs
index 03ba44d07..c04b335dd 100644
--- a/AgroBase/OperationControl/Views/Operacao/OperacaoRightView.xaml.cs
+++ b/AgroBase/OperationControl/Views/Operacao/OperacaoRightView.xaml.cs
@@ -1,18 +1,4 @@
using OperationControl.ViewModels.Views.Operacao;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Navigation;
-using System.Windows.Shapes;
namespace OperationControl.Views.Operacao
{
@@ -29,21 +15,5 @@ namespace OperationControl.Views.Operacao
_vm = new OperacaoRightViewModel();
DataContext = _vm;
}
-
- public OperacaoRightView(OperacaoRightViewModel vm)
- {
- InitializeComponent();
- _vm = vm;
- DataContext = _vm;
- }
-
- private void cmbModoOperacao_SelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- if (DataContext is OperacaoRightViewModel vm && sender is System.Windows.Controls.ComboBox combo && combo.SelectedItem is AgroBase.Models.Enums.ModoOperacao modo)
- {
- if (vm.CarregarParametrosPadraoCommand?.CanExecute(modo) == true)
- vm.CarregarParametrosPadraoCommand.Execute(modo);
- }
- }
}
}