agrobot_base/AgroBase/AgroBase/Forms/Direcional/frmDirConfig.cs

225 lines
10 KiB
C#

using AgroBase.Comum;
using AgroBase.Models;
using AgroBase.Models.Modules;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static AgroBase.Models.Enuns;
namespace AgroBase.Forms.Direcional
{
public partial class frmDirConfig : Form
{
DispositivosService<DirecionalModel> Disp = (DispositivosService<DirecionalModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Dir);
public frmDirConfig()
{
InitializeComponent();
}
private void frmDirConfig_Load(object sender, EventArgs e)
{
if (Disp == null)
{
return;
}
List<string> Pinos = new List<string>()
{
Enum.GetName(typeof(FuncoesPinout), FuncoesPinout.NaoConectado),
};
DirecionalModel.Funcoes.ForEach(x => Pinos.Add(Enum.GetName(typeof(FuncoesPinout), x)));
foreach (var Motor in ((DirecionalModel)(Disp.Dados)).Motores)
{
Motor.Funcoes.ForEach(x => Pinos.Add(Motor.ID + " " + Enum.GetName(typeof(FuncoesPinout), x)));
}
List<ComboBox> cmbs = this.Controls.OfType<ComboBox>().Where(x => x.Name.Contains("cmbGPIO") && x.Enabled).ToList();
foreach (var cmb in cmbs)
{
cmb.SelectedIndexChanged += Cmb_SelectedIndexChanged;
cmb.Items.Clear();
Pinos.ForEach(x => cmb.Items.Add(x));
int pino = int.Parse(cmb.Name.Replace("cmbGPIO", ""));
cmb.SelectedIndex = 0;
var Selecionado = DirecionalModel.Pinout.FirstOrDefault(x => x.Pino == pino);
if (Selecionado != null) cmb.SelectedItem = (Selecionado.Funcao != FuncoesPinout.Geral ? Selecionado.ComponenteID + " " : "") + Enum.GetName(typeof(FuncoesPinout), Selecionado.Funcao);
}
var cmbsSentido = gpbET.Controls.OfType<ComboBox>().ToList().Union(gpbEF.Controls.OfType<ComboBox>().ToList()).Union(gpbDT.Controls.OfType<ComboBox>().ToList()).Union(gpbDF.Controls.OfType<ComboBox>().ToList()).ToList();
foreach (var cmb in cmbsSentido)
{
cmb.Items.Clear();
cmb.Items.AddRange(Enum.GetNames(typeof(Sentido)).ToArray());
cmb.SelectedIndex = 0;
var Motor = ((DirecionalModel)Disp.Dados).Motores.FirstOrDefault(x => x.ID == cmb.Name.Substring(3, 2));
if (Motor != null)
{
Sentido sentido = Sentido.Parado;
if (cmb.Name.Contains("Frente"))
{
sentido = Motor.ConfigSentidos.Frente;
}
else if (cmb.Name.Contains("Tras"))
{
sentido = Motor.ConfigSentidos.Tras;
}
else if (cmb.Name.Contains("Esquerda"))
{
sentido = Motor.ConfigSentidos.Esquerda;
}
else if (cmb.Name.Contains("Direita"))
{
sentido = Motor.ConfigSentidos.Direita;
}
cmb.SelectedItem = Enum.GetName(typeof(Sentido), sentido);
}
}
var nudsOffsets = gpbET.Controls.OfType<NumericUpDown>().ToList().Union(gpbEF.Controls.OfType<NumericUpDown>().ToList()).Union(gpbDT.Controls.OfType<NumericUpDown>().ToList()).Union(gpbDF.Controls.OfType<NumericUpDown>().ToList()).ToList();
foreach (var nud in nudsOffsets)
{
var Motor = ((DirecionalModel)Disp.Dados).Motores.FirstOrDefault(x => x.ID == nud.Name.Substring(3, 2));
if (Motor != null)
{
nud.Value = Convert.ToInt32(Motor.Angulo_Offset);
}
}
var chbs = gpbET.Controls.OfType<CheckBox>().ToList().Union(gpbEF.Controls.OfType<CheckBox>().ToList()).Union(gpbDT.Controls.OfType<CheckBox>().ToList()).Union(gpbDF.Controls.OfType<CheckBox>().ToList()).ToList();
foreach (var chb in chbs)
{
var Motor = ((DirecionalModel)Disp.Dados).Motores.FirstOrDefault(x => x.ID == chb.Name.Substring(3, 2));
if (Motor != null)
{
var chbEstabilizar = chbs.FirstOrDefault(x => x.Name.Contains(Motor.ID + "Estabilizar"));
chbEstabilizar.Checked = Motor.Estabilizar;
var chbControlar = chbs.FirstOrDefault(x => x.Name.Contains(Motor.ID + "Controlar"));
chbControlar.Checked = Motor.Controlar;
var chbReferenciar = chbs.FirstOrDefault(x => x.Name.Contains(Motor.ID + "Referenciar"));
chbReferenciar.Checked = Motor.Referenciar;
var chbLivre = chbs.FirstOrDefault(x => x.Name.Contains(Motor.ID + "Livre"));
chbDFLivre.Checked = Motor.Livre;
}
}
chbAA_Ref0.Checked = ((DirecionalModel)Disp.Dados).AA_Ref000;
chbAA_Ref90.Checked = ((DirecionalModel)Disp.Dados).AA_Ref090;
chbAA_Ref270.Checked = ((DirecionalModel)Disp.Dados).AA_Ref270;
}
private void Cmb_SelectedIndexChanged(object sender, EventArgs e)
{
var cmb = (ComboBox)sender;
this.Controls.OfType<ComboBox>().Where(x => x.Name != cmb.Name && x.SelectedItem != null && x.SelectedItem.ToString() == cmb.SelectedItem.ToString()).ToList().ForEach(x => x.SelectedIndex = 0);
}
private void btnSalvar_Click(object sender, EventArgs e)
{
if (Disp == null)
{
return;
}
DirecionalModel.Pinout.ForEach(x =>
{
x.ComponenteID = "";
x.Funcao = FuncoesPinout.NaoConectado;
});
List<ComboBox> cmbs = this.Controls.OfType<ComboBox>().Where(x => x.Enabled).ToList();
foreach (var cmb in cmbs)
{
int pino = int.Parse(cmb.Name.Replace("cmbGPIO", ""));
string ComponenteID = cmb.SelectedItem.ToString().Split(' ').Length > 1 ? cmb.SelectedItem.ToString().Split(' ')[0] : "";
FuncoesPinout Funcao = (FuncoesPinout)Enum.Parse(typeof(FuncoesPinout), ComponenteID != "" ? (cmb.SelectedItem.ToString().Split(' ')[1]) : cmb.SelectedItem.ToString());
DirecionalModel.Pinout.FirstOrDefault(x => x.Pino == pino).Funcao = Funcao;
DirecionalModel.Pinout.FirstOrDefault(x => x.Pino == pino).ComponenteID = ComponenteID;
}
((DirecionalModel)(Disp.Dados)).SalvarPinout(DirecionalModel.Pinout, "pinout" + Enum.GetName(typeof(T_Code), Disp.Dispositivo) + ".pin");
}
private void btnSalvarSentido_Click(object sender, EventArgs e)
{
var cmbsSentido = gpbET.Controls.OfType<ComboBox>().ToList().Union(gpbEF.Controls.OfType<ComboBox>().ToList()).Union(gpbDT.Controls.OfType<ComboBox>().ToList()).Union(gpbDF.Controls.OfType<ComboBox>().ToList()).ToList();
foreach (var cmb in cmbsSentido)
{
var Motor = ((DirecionalModel)Disp.Dados).Motores.FirstOrDefault(x => x.ID == cmb.Name.Substring(3, 2));
if (Motor != null)
{
Sentido sentido = (Sentido)cmb.SelectedIndex;
if (cmb.Name.Contains("Frente"))
{
Motor.ConfigSentidos.Frente = sentido;
}
else if (cmb.Name.Contains("Tras"))
{
Motor.ConfigSentidos.Tras = sentido;
}
else if (cmb.Name.Contains("Esquerda"))
{
Motor.ConfigSentidos.Esquerda = sentido;
}
else if (cmb.Name.Contains("Direita"))
{
Motor.ConfigSentidos.Direita = sentido;
}
}
}
var nudsOffsets = gpbET.Controls.OfType<NumericUpDown>().ToList().Union(gpbEF.Controls.OfType<NumericUpDown>().ToList()).Union(gpbDT.Controls.OfType<NumericUpDown>().ToList()).Union(gpbDF.Controls.OfType<NumericUpDown>().ToList()).ToList();
foreach (var nud in nudsOffsets)
{
var Motor = ((DirecionalModel)Disp.Dados).Motores.FirstOrDefault(x => x.ID == nud.Name.Substring(3, 2));
if (Motor != null)
{
Motor.Angulo_Offset = Convert.ToDouble(nud.Value);
}
}
var chbs = gpbET.Controls.OfType<CheckBox>().ToList().Union(gpbEF.Controls.OfType<CheckBox>().ToList()).Union(gpbDT.Controls.OfType<CheckBox>().ToList()).Union(gpbDF.Controls.OfType<CheckBox>().ToList()).ToList();
foreach (var chb in chbs)
{
var Motor = ((DirecionalModel)Disp.Dados).Motores.FirstOrDefault(x => x.ID == chb.Name.Substring(3, 2));
if (Motor != null)
{
var chbEstabilizar = chbs.FirstOrDefault(x => x.Name.Contains(Motor.ID + "Estabilizar"));
Motor.Estabilizar = chbEstabilizar.Checked;
var chbControlar = chbs.FirstOrDefault(x => x.Name.Contains(Motor.ID + "Controlar"));
Motor.Controlar = chbControlar.Checked;
var chbReferenciar = chbs.FirstOrDefault(x => x.Name.Contains(Motor.ID + "Referenciar"));
Motor.Referenciar = chbReferenciar.Checked;
var chbLivre = chbs.FirstOrDefault(x => x.Name.Contains(Motor.ID + "Livre"));
Motor.Livre = chbLivre.Checked;
}
}
((DirecionalModel)Disp.Dados).AA_Ref000 = chbAA_Ref0.Checked;
((DirecionalModel)Disp.Dados).AA_Ref090 = chbAA_Ref90.Checked;
((DirecionalModel)Disp.Dados).AA_Ref270 = chbAA_Ref270.Checked;
Disp.SalvarParametros((DirecionalModel)Disp.Dados);
}
private void frmDirConfig_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
this.Visible = false;
}
}
}