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;
using XImagingXhandler.XDAL;
using DataEntity.Share;
using DataEntity;
using System.Collections.ObjectModel;
using XHandler.Class.DataEx;
using System.Runtime.Remoting.Channels;
using XCommon.Log;
using XHandler.Controls;
using DataRWDAL;
using HandyControl.Data;
using XCommon.Tip;
using System.Windows.Shell;
namespace XHandler.View.MethodProperty
{
///
/// SwitchLidProperty.xaml 的交互逻辑
///
public partial class SwitchLidProperty : UserControl,IMethodProperty
{
public MethodSwitchLid methodSwitchLid { get; set; }
public MethodEx method = null;
public MethodSwitchLid currmethodSwitchLid = null;
#region 变量
string isrun = "";
string status = "";
string name = "";
string label = "";
string labwareText = "";
string labwareValue = "";
string positionText = "";
string positionValue = "";
string armText = "";
string armValue = "";
string wellarray = "";
int switchState = 0;
double numOfCircle = 0;
double switchSpeed = 0;
int curArmSelectedIndex = -1;
private Labware selectedLabware = null;
int mark = 0;
#endregion
public SwitchLidProperty()
{
InitializeComponent();
}
public SwitchLidProperty(MethodEx method)
{
mark = 0;
InitializeComponent();
List armList = DataModule.getInstance().GetDeviceArm();
cbArm.ItemsSource = armList;
if (armList.Count == 2) //只有一个臂的情况下默认选中该臂
{
curArmSelectedIndex = 1;
}
else if (armList.Count == 5)
{
curArmSelectedIndex = 2;
}
else
{
curArmSelectedIndex = 0;
}
//加载台面
List list = new List();
List lattices = DataModule.getInstance().GetLattices();
TabletopTemplate tabletopTemplate = TabletopTemplateDB.GetCurrentAppTabletopTemplateCollectionFromdb(); //增加台面模板判断
if (tabletopTemplate == null)
{
for (int i = 0; i < Shared.SoftwareInformation.columns; i++)
{
for (int j = 0; j < Shared.SoftwareInformation.rows; j++)
{
int tmp = i * Shared.SoftwareInformation.rows + j;
Lattice latt = lattices[tmp];
if (latt.is_trash == 1)
continue;
list.Add(latt.lattice_num);
}
}
}
else
{
foreach (Lattice lattice in lattices)
{
if (lattice.is_trash == 1)
continue;
list.Add(lattice.lattice_num);
}
}
comboboxTablePos.ItemsSource = list;
comboboxTablePos.SelectedIndex = 0;
tbxCommandLabel.Text = method.method_name;
methodSwitchLid = new MethodSwitchLid();
methodSwitchLid.name = method.method_name;
methodSwitchLid.label = method.method_name;
methodSwitchLid.status = (method.isEnabled == true ? "enable" : "disable");
methodSwitchLid.strIndex = method.strIndex;
methodSwitchLid.wellarray = "";
this.method = method;
if (method.tag != null)
{
methodSwitchLid = (MethodSwitchLid)method.tag;
currmethodSwitchLid = methodSwitchLid;
isrun = methodSwitchLid.isrun;
status = methodSwitchLid.status;
name = methodSwitchLid.name;
label = methodSwitchLid.label;
labwareText = methodSwitchLid.labwareText;
labwareValue = methodSwitchLid.labwareValue;
positionText = methodSwitchLid.positionText;
positionValue = methodSwitchLid.positionValue;
armText = methodSwitchLid.armText;
armValue = methodSwitchLid.armValue;
switchState = methodSwitchLid.switchState;
numOfCircle=methodSwitchLid.numOfCircle;
switchSpeed= methodSwitchLid.switchSpeed;
wellarray = methodSwitchLid.wellarray;
if (this.method != null)
{
this.method.method_Tipcontent = string.Format("执行{0}盖;旋转速度:{1};旋转圈数:{2}", methodSwitchLid.switchState == 1 ? "关" : "开", methodSwitchLid.switchSpeed.ToString(), methodSwitchLid.numOfCircle.ToString());
}
}
this.DataContext = methodSwitchLid;
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
mark += 1;
try
{
if (mark > 1)
{
return;
}
if (!string.IsNullOrEmpty(armText))
{
tbxCommandName.Text = name;
cbArm.SelectedValue = armValue;
DeviceArm arm = cbArm.SelectedItem as DeviceArm;
comboboxTablePos.SelectedItem = positionText;
tbxWellPositionTips.Text = wellarray;
//根据板位上的耗材类型,显示耗材孔位示意图
Labware labwareA = DataRWDAL.LabwareDB.GetLabware(methodSwitchLid.labwareValue);
wellPlate.Rows = labwareA.number_row;
wellPlate.Columns = labwareA.number_column;
if (labwareA.labware_type_id.Equals("4"))
{
labwareA.labwareWellInfoList = DataRWDAL.LabwareDB.GetSpecialLabwareWellInfo(labwareA.labware_id);
wellPlate.labwareWellInfoList = labwareA.labwareWellInfoList;
wellPlate.LabwareRealWidth = labwareA.labware_length;
wellPlate.LabwareRealLength = labwareA.labware_width;
}
wellPlate.Selection = wellarray;
if(switchState==0)
{
radioBtnSwitchOpen.IsChecked = true;
}
else if(switchState==1)
{
radioBtnSwitchClose.IsChecked = true;
}
}
else
{
radioBtnSwitchOpen.IsChecked = true;
cbArm.SelectedIndex = curArmSelectedIndex;
}
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
}
private void radioBtnSwitchOpen_Checked(object sender, RoutedEventArgs e)
{
try
{
if (methodSwitchLid != null)
{
methodSwitchLid.switchState = 0;
if (this.method != null)
{
this.method.method_Tipcontent = string.Format("执行{0}盖;旋转速度:{1};旋转圈数:{2}","开", methodSwitchLid.switchSpeed.ToString(), methodSwitchLid.numOfCircle.ToString());
}
}
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
}
private void radioBtnSwitchClose_Checked(object sender, RoutedEventArgs e)
{
try
{
if (methodSwitchLid != null)
{
methodSwitchLid.switchState = 1;
if (this.method != null)
{
this.method.method_Tipcontent = string.Format("执行{0}盖;旋转速度:{1};旋转圈数:{2}", "关", methodSwitchLid.switchSpeed.ToString(), methodSwitchLid.numOfCircle.ToString());
}
}
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
}
private void tbxCommandLabel_TextChanged(object sender, TextChangedEventArgs e)
{
try
{
if (methodSwitchLid != null)
{
methodSwitchLid.label = tbxCommandLabel.Text;
methodSwitchLid.name = tbxCommandName.Text.ToString();
}
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
}
private void tbxCommandName_TextChanged(object sender, TextChangedEventArgs e)
{
try
{
if (methodSwitchLid != null)
{
methodSwitchLid.label = tbxCommandLabel.Text;
methodSwitchLid.name = tbxCommandName.Text.ToString();
}
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
}
private void cbArm_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
try
{
// 臂未选择
if (cbArm.SelectedIndex < 0 || cbArm.SelectedIndex == 0)
{
return;
}
string armName = ((DeviceArm)cbArm.SelectedItem).device_arm_name.ToString();
DeviceArm arm = cbArm.SelectedItem as DeviceArm;
methodSwitchLid.armText = arm.device_arm_name;
methodSwitchLid.armValue = arm.device_arm_id.ToString();
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
}
#region 设置某些属性信息值
public void SetTableName(string tableName, Labware lb)
{
try
{
if (lb == null)
return;
if (string.IsNullOrEmpty(lb.labware_id))
return;
selectedLabware = lb;
wellPlate.Rows = lb.number_row;
wellPlate.Columns = lb.number_column;
wellPlate.labwareWellInfoList = lb.labwareWellInfoList;
wellPlate.LabwareRealWidth = lb.labware_length;
wellPlate.LabwareRealLength = lb.labware_width;
wellPlate.DataContext = lb;
List latticeList = DataRWDAL.LatticeDB.GetGripperLatticeNumDataFromdb(Shared.SoftwareInformation.software_device_number, Convert.ToInt32(Shared.DeviceArmList.FirstOrDefault(x=>x.arm_type.Equals(1)).device_arm_id));
Lattice lattice = latticeList.Find(s => s.lattice_num == tableName);
if (lattice == null)
{
LoggerHelper.InfoLog("Error: Can't find lattice with lattice_num=" + tableName);
return;
}
comboboxTablePos.SelectedItem = tableName;
if (lb.labware_tubeshelf_type.Equals(1))//异形管架耗材
{
tbxWellPositionTips.Text = "";
wellPlate.Selection = "";
}
if (methodSwitchLid != null)
{
methodSwitchLid.positionText = tableName;
methodSwitchLid.positionValue = lattice.lattice_id; //Id 在运行时不能作为条件去查询板位夹爪的坐标,只能用lattice_num
methodSwitchLid.labwareText = lb.labware_name;
methodSwitchLid.labwareValue = lb.labware_id;
}
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
}
#endregion
private void comboboxTablePos_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
try
{
if (comboboxTablePos.SelectedItem == null)
return;
string name = comboboxTablePos.SelectedItem as string;
SetTableName(name, selectedLabware);
#region 验证台面耗材类型
if (TestDesign.SelectLabwares.Count() <= 0 || TestDesign.SelectLabwares.FirstOrDefault(m => m.Label.Equals(comboboxTablePos.SelectedValue.ToString())) == null)
return;
ControlLabware labware = TestDesign.SelectLabwares.FirstOrDefault(m => m.Label.Equals(comboboxTablePos.SelectedValue.ToString()));
if ("1,3,5,4".Contains(labware.LabwareType.ToString()))
{
tbkErrorWellPosition.Text = "";
}
else
{
tbkErrorWellPosition.Text = $"不能在耗材 [{labware.LabwareName}] 执行吸液";
}
#endregion
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
}
private void tbxNumOfCircleTransfer_TextChanged(object sender, TextChangedEventArgs e)
{
try
{
if (methodSwitchLid != null)
{
methodSwitchLid.numOfCircle = Convert.ToDouble(tbxNumOfCircleTransfer.Text);
if (this.method != null)
{
this.method.method_Tipcontent = string.Format("执行{0}盖;旋转速度:{1};旋转圈数:{2}", methodSwitchLid.switchState==1?"关":"开", methodSwitchLid.switchSpeed.ToString(), methodSwitchLid.numOfCircle.ToString());
}
}
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
return;
}
}
private void tbxSpeedOfCircleTransfer_TextChanged(object sender, TextChangedEventArgs e)
{
try
{
if (methodSwitchLid != null)
{
methodSwitchLid.switchSpeed = Convert.ToDouble(tbxSpeedOfCircleTransfer.Text);
if (this.method != null)
{
this.method.method_Tipcontent = string.Format("执行{0}盖;旋转速度:{1};旋转圈数:{2}", methodSwitchLid.switchState == 1 ? "关" : "开", methodSwitchLid.switchSpeed.ToString(), methodSwitchLid.numOfCircle.ToString());
}
}
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
return;
}
}
private void wellPlate_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
try
{
tbxWellPositionTips.Text = wellPlate.Selection;
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("wellPlate_MouseLeftButtonDown ERROR:", ex);
}
}
}
}