agrobot_base/AgroBase/AgroBase/Forms/IHM/Operacao/ucOperacaoParametros.cs

237 lines
7.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using AgroBase.Forms.IHM.Controls;
using AgroBase.Forms.IHM.Operacao.Parametros;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using static AgroBase.Models.Enums;
namespace AgroBase.Forms.IHM.Operacao
{
public partial class ucOperacaoParametros : UserControl
{
private readonly Dictionary<TipoAbaParametros, UserControl> _abas;
private TipoAbaParametros _abaAtual;
private readonly ucParametrosMovimento _ucMovimento;
private readonly ucParametrosDirecional _ucDirecional;
private readonly ucParametrosAtuador _ucAtuador;
private readonly ucParametrosMapa _ucMapa;
public event EventHandler RedefinirSolicitado;
public event EventHandler SalvarSolicitado;
public event EventHandler ModoOperacaoAlterado;
public event EventHandler RegistrarPosProcessamentoAlterado;
public ucOperacaoParametros()
{
InitializeComponent();
_ucMovimento = new ucParametrosMovimento();
_ucDirecional = new ucParametrosDirecional();
_ucAtuador = new ucParametrosAtuador();
_ucMapa = new ucParametrosMapa();
_abas = new Dictionary<TipoAbaParametros, UserControl>();
_abas.Add(TipoAbaParametros.Movimento, _ucMovimento);
_abas.Add(TipoAbaParametros.Direcional, _ucDirecional);
_abas.Add(TipoAbaParametros.Atuador, _ucAtuador);
_abas.Add(TipoAbaParametros.Mapa, _ucMapa);
ConfigurarSubControles();
ConfigurarEstadoInicial();
VincularEventos();
}
private void ConfigurarSubControles()
{
foreach (KeyValuePair<TipoAbaParametros, UserControl> item in _abas)
{
item.Value.Dock = DockStyle.Fill;
item.Value.Margin = Padding.Empty;
item.Value.Visible = false;
pnlConteudo.Controls.Add(item.Value);
}
}
private void ConfigurarEstadoInicial()
{
cmbModoOperacao.Items.Clear();
cmbModoOperacao.Items.AddRange(Enum.GetNames(typeof(ModoOperacao)));
if (cmbModoOperacao.Items.Count > 1)
cmbModoOperacao.SelectedIndex = 1;
checkPosProcessamento.Checked = true;
AtualizarAparenciaCheck(checkPosProcessamento);
AbrirAba(TipoAbaParametros.Movimento);
}
private void VincularEventos()
{
btnAbaMovimento.Click += delegate { AbrirAba(TipoAbaParametros.Movimento); };
btnAbaDirecional.Click += delegate { AbrirAba(TipoAbaParametros.Direcional); };
btnAbaAtuador.Click += delegate { AbrirAba(TipoAbaParametros.Atuador); };
btnAbaMapa.Click += delegate { AbrirAba(TipoAbaParametros.Mapa); };
btnRedefinir.Click += delegate
{
if (RedefinirSolicitado != null)
RedefinirSolicitado(this, EventArgs.Empty);
};
btnSalvar.Click += delegate
{
if (SalvarSolicitado != null)
SalvarSolicitado(this, EventArgs.Empty);
};
cmbModoOperacao.SelectedIndexChanged += delegate
{
if (ModoOperacaoAlterado != null)
ModoOperacaoAlterado(this, EventArgs.Empty);
};
checkPosProcessamento.CheckedChanged += delegate
{
AtualizarAparenciaCheck(checkPosProcessamento);
if (RegistrarPosProcessamentoAlterado != null)
RegistrarPosProcessamentoAlterado(this, EventArgs.Empty);
};
}
private void AbrirAba(TipoAbaParametros aba)
{
_abaAtual = aba;
foreach (KeyValuePair<TipoAbaParametros, UserControl> item in _abas)
item.Value.Visible = item.Key == aba;
UserControl controleAtual;
if (_abas.TryGetValue(aba, out controleAtual))
{
controleAtual.BringToFront();
controleAtual.Visible = true;
}
AplicarEstadoBotaoAba(btnAbaMovimento, aba == TipoAbaParametros.Movimento);
AplicarEstadoBotaoAba(btnAbaDirecional, aba == TipoAbaParametros.Direcional);
AplicarEstadoBotaoAba(btnAbaAtuador, aba == TipoAbaParametros.Atuador);
AplicarEstadoBotaoAba(btnAbaMapa, aba == TipoAbaParametros.Mapa);
AtualizarDescricaoAba(aba);
}
private void AtualizarDescricaoAba(TipoAbaParametros aba)
{
switch (aba)
{
case TipoAbaParametros.Movimento:
lblDescricaoAba.Text = "Automação, assistências e velocidades de deslocamento";
break;
case TipoAbaParametros.Direcional:
lblDescricaoAba.Text = "Controle direcional, assistências, ângulo e velocidade";
break;
case TipoAbaParametros.Atuador:
lblDescricaoAba.Text = "Pulverizador, agitador, reservatório e critérios de atuação";
break;
case TipoAbaParametros.Mapa:
lblDescricaoAba.Text = "Mapa da operação, seleção de ruas e parâmetros de navegação";
break;
default:
lblDescricaoAba.Text = string.Empty;
break;
}
}
private static void AplicarEstadoBotaoAba(Button button, bool selecionado)
{
if (selecionado)
{
button.BackColor = Color.FromArgb(46, 31, 63);
button.ForeColor = Color.FromArgb(190, 121, 255);
button.FlatAppearance.BorderColor = Color.FromArgb(170, 90, 240);
}
else
{
button.BackColor = HmiTheme.Surface;
button.ForeColor = HmiTheme.TextMuted;
button.FlatAppearance.BorderColor = HmiTheme.Border;
}
}
private static void AtualizarAparenciaCheck(CheckBox check)
{
if (check.Checked)
{
check.Text = "✓";
check.ForeColor = HmiTheme.Success;
check.BackColor = Color.FromArgb(30, 90, 46);
check.FlatAppearance.BorderColor = HmiTheme.Success;
}
else
{
check.Text = "×";
check.ForeColor = HmiTheme.Danger;
check.BackColor = HmiTheme.Surface;
check.FlatAppearance.BorderColor = HmiTheme.Danger;
}
}
public string ModoOperacaoSelecionado
{
get { return Convert.ToString(cmbModoOperacao.SelectedItem); }
set
{
if (string.IsNullOrWhiteSpace(value))
return;
int index = cmbModoOperacao.FindStringExact(value);
if (index >= 0)
cmbModoOperacao.SelectedIndex = index;
}
}
public bool RegistrarPosProcessamento
{
get { return checkPosProcessamento.Checked; }
set { checkPosProcessamento.Checked = value; }
}
public TipoAbaParametros AbaAtual
{
get { return _abaAtual; }
}
public ucParametrosMovimento Movimento
{
get { return _ucMovimento; }
}
public ucParametrosDirecional Direcional
{
get { return _ucDirecional; }
}
public ucParametrosAtuador Atuador
{
get { return _ucAtuador; }
}
public ucParametrosMapa Mapa
{
get { return _ucMapa; }
}
}
public enum TipoAbaParametros
{
Movimento = 0,
Direcional = 1,
Atuador = 2,
Mapa = 3
}
}