using DataEntity.Device;
using DataRWDAL.Device;
using HxEnum;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using XCommon.Log;
using XCore;
using XHandler.Class.DataEx;
using XImagingXhandler.XDAL;
namespace XHandler.View.MethodProperty
{
///
/// Socket-TCP标准协议 属性页面
///
public partial class ThirdPartPropertySocketProperty : UserControl, IMethodProperty
{
#region 变量
private TransferFileBll m_transferFileBll = new TransferFileBll();
private int m_mark = 0;
private MethodEx m_mEx = null;
public MethodThirdPart methodProperty = null;
public string sendParamsData = string.Empty;
#endregion
#region 构造函数
///
/// 构造函数
///
///
public ThirdPartPropertySocketProperty(MethodEx mEx)
{
InitializeComponent();
m_mark = 0;
methodProperty = new MethodThirdPart();
methodProperty.strIndex = mEx.strIndex;
methodProperty.label = mEx.method_name; // 命令标签
methodProperty.name = mEx.method_name; // 命令名称
methodProperty.status = (mEx.isEnabled == true ? "enable" : "disable"); // 使能状态
methodProperty.device = mEx.device;
this.DataContext = methodProperty;
#region 设备方法
// 获取设备方法列表
var deviceConfigList = DeviceConfigMethodDB.GetListByDeviceconfigId(mEx.method_id.ToString());
DeviceConfigMethodModel item = new DeviceConfigMethodModel();
item.Id = "-1";
item.ParameterName = Properties.Resources.strPleaseSelect;
deviceConfigList.Insert(0, item);
cbDeviceMethod.ItemsSource = deviceConfigList;
cbDeviceMethod.SelectedIndex = 0;
#endregion
if (mEx.tag != null)
{
methodProperty = (MethodThirdPart)mEx.tag;
if(methodProperty.methodParametersData!=null)
{
foreach(var param in methodProperty.methodParametersData)
{
sendParamsData += param.ParameterName + ":" + param.Value + ";";
}
}
}
m_mEx = mEx;
m_mEx.method_Tipcontent = string.Format("{0},发送参数:{1}", methodProperty.deviceMethod==null?"": methodProperty.deviceMethod.ParameterName, sendParamsData);
}
#endregion
#region 界面初期表示事件
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
m_mark += 1;
try
{
if (m_mark > 1)
{
return;
}
#region 设备方法
if (!string.IsNullOrEmpty(methodProperty.deviceMethodValue))
{
cbDeviceMethod.SelectedValue = methodProperty.deviceMethodValue;
}
#endregion
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
}
#endregion
#region 方法标签文件更改事件
///
/// 方法标签文件更改事件
///
///
///
private void tbxCommandLabel_TextChanged(object sender, TextChangedEventArgs e)
{
try
{
if (m_mark != 0)
{
methodProperty.label = tbxCommandLabel.Text;
}
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
}
#endregion
#region 方法名称更改事件
///
/// 方法名称更改事件
///
///
///
private void tbxCommandName_TextChanged(object sender, TextChangedEventArgs e)
{
try
{
if (m_mark != 0)
{
methodProperty.name = tbxCommandName.Text;
}
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
}
#endregion
#region 设备方法选择变更事件
string sendParams = string.Empty;
///
/// 设备方法选择变更事件
///
///
///
private void cbDeviceMethod_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (cbDeviceMethod.SelectedIndex <= 0)
{
// 清空所有参数数据
panelSendParamters.Children.Clear();
panelReceiveParamters.Children.Clear();
return;
}
var methodModel = (DeviceConfigMethodModel)cbDeviceMethod.SelectedItem;
methodProperty.deviceMethodText = methodModel.ParameterName;
methodProperty.deviceMethodValue = methodModel.Id;
methodProperty.deviceMethod = methodModel;
// 获取设备方法参数列表
var methodParametersList = DeviceConfigMethodParametersDB.GetInfoByDeviceconfigMethodId(cbDeviceMethod.SelectedValue.ToString());
// 发送参数
var selSendParameters = methodParametersList.Where(it => it.Type == EnumManagement.GetEnumValue(ParameterTypeEnum.Send));
SetParamtersPanel(panelSendParamters, selSendParameters);
m_mEx.method_Tipcontent = string.Format("{0},发送参数:{1}", methodModel.ParameterName, sendParams);
// 接收参数
var selReceiveParameters = methodParametersList.Where(it => it.Type == EnumManagement.GetEnumValue(ParameterTypeEnum.Receive));
SetParamtersPanel(panelReceiveParamters, selReceiveParameters);
sendParams = string.Empty;
}
///
/// 动态生成参数列表
///
///
///
private void SetParamtersPanel(StackPanel sPanel, IEnumerable selParameters)
{
// 清空所有参数数据
sPanel.Children.Clear();
if (!selParameters.Any())
{
return;
}
List parametersData = new List(methodProperty.methodParametersData);
methodProperty.methodParametersData.Clear();
// 循环参数
List lstParameters = selParameters.ToList();
for (int i = 0; i < lstParameters.Count; i++)
{
var parametersModel = lstParameters[i];
SocketParamterItem item = new SocketParamterItem(methodProperty, m_mEx);
item.MethodParamterId = parametersModel.Id;
item.Title = parametersModel.ParameterName;
// 获取之前保存的参数值
var parameterSave = parametersData.FirstOrDefault(it => it.Id.Equals(parametersModel.Id));
item.Value = parameterSave != null ? parameterSave.Value : parametersModel.Value;
sPanel.Children.Add(item);
methodProperty.methodParametersData.Add(new DeviceConfigMethodParametersModel()
{ Id = parametersModel.Id, ParameterName = parametersModel.ParameterName, Value = parametersModel.Value });
sendParams += parametersModel.ParameterName + ":" + item.Value+";";
}
}
#endregion
#region 设置已选择的台面数据
public void SetTableName(string tableName, Labware lb)
{
//if (lb == null || string.IsNullOrEmpty(lb.labware_id))
//{
// return;
//}
//GetOrSetLattice latticeDB = new GetOrSetLattice();
//List latticeList = latticeDB.GetLatticeDataFromdb(App.softwareInformation.software_device_number, Convert.ToInt32(methodChoice.armValue));
//Lattice lattice = latticeList.Find(s => s.lattice_num == tableName);
//if (lattice == null)
//{
// LoggerHelper.InfoLog("Error: Can't find lattice with lattice_num=" + tableName);
// return;
//}
//if (gridLiquidParam.Visibility == Visibility.Visible)
//{
// if (gridChoiceAgoAspirateChild.Children.Count > 0)
// {
// ChoiceAgoAspirateChildProperty choiceAgoAspirateChildProperty = (ChoiceAgoAspirateChildProperty)gridChoiceAgoAspirateChild.Children[0];
// choiceAgoAspirateChildProperty.SetTableName(tableName, lb);
// }
//}
//else
//{
// if (labwareTextBox != null)
// {
// labwareTextBox.Tag = lb.labware_id;
// labwareTextBox.Text = lb.labware_name;
// }
//}
}
#endregion
}
}