using MECF.Framework.Common.CommonData.Reservoir;
using MECF.Framework.Common.OperationCenter;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
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 static System.Net.Mime.MediaTypeNames;
namespace CyberX8_Themes.UserControls
{
///
/// CrossDoseControl.xaml 的交互逻辑
///
public partial class CrossDoseControl : UserControl
{
public CrossDoseControl()
{
InitializeComponent();
}
#region 属性
public static readonly DependencyProperty ModuleNameProperty = DependencyProperty.Register(
"ModuleName", typeof(string), typeof(CrossDoseControl), new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
///
/// ModuleName
///
public string ModuleName
{
get
{
return (string)this.GetValue(ModuleNameProperty);
}
set
{
this.SetValue(ModuleNameProperty, value);
}
}
public static readonly DependencyProperty ANTransferFlowProperty = DependencyProperty.Register(
"ANTransferFlow", typeof(double), typeof(CrossDoseControl), new FrameworkPropertyMetadata(0.00, FrameworkPropertyMetadataOptions.AffectsRender));
///
/// ANTransferFlow
///
public double ANTransferFlow
{
get
{
return (double)this.GetValue(ANTransferFlowProperty);
}
set
{
this.SetValue(ANTransferFlowProperty, value);
}
}
public static readonly DependencyProperty RemainingFlowProperty = DependencyProperty.Register(
"RemainingFlow", typeof(double), typeof(CrossDoseControl), new FrameworkPropertyMetadata(0.00, FrameworkPropertyMetadataOptions.AffectsRender));
///
/// RemainingFlow
///
public double RemainingFlow
{
get
{
return (double)this.GetValue(RemainingFlowProperty);
}
set
{
this.SetValue(RemainingFlowProperty, value);
}
}
public static readonly DependencyProperty ReservoirDataProperty = DependencyProperty.Register(
"ReservoirData", typeof(CompactMembranReservoirData), typeof(CrossDoseControl), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender));
///
/// ReservoirData
///
public CompactMembranReservoirData ReservoirData
{
get
{
return (CompactMembranReservoirData)this.GetValue(ReservoirDataProperty);
}
set
{
this.SetValue(ReservoirDataProperty, value);
}
}
public static readonly DependencyProperty PumpFactorProperty = DependencyProperty.Register(
"PumpFactor", typeof(double), typeof(CrossDoseControl), new FrameworkPropertyMetadata(0.000, FrameworkPropertyMetadataOptions.AffectsRender));
///
/// PumpFactor
///
public double PumpFactor
{
get
{
return (double)this.GetValue(PumpFactorProperty);
}
set
{
this.SetValue(PumpFactorProperty, value);
}
}
public static readonly DependencyProperty IsCalibrateEnableProperty = DependencyProperty.Register(
"IsCalibrateEnable", typeof(bool), typeof(CrossDoseControl), new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.AffectsRender));
///
/// IsCalibrateEnable
///
public bool IsCalibrateEnable
{
get
{
return (bool)this.GetValue(IsCalibrateEnableProperty);
}
set
{
this.SetValue(IsCalibrateEnableProperty, value);
}
}
public static readonly DependencyProperty TargetDosingVolumeProperty = DependencyProperty.Register(
"TargetDosingVolume", typeof(double), typeof(CrossDoseControl), new FrameworkPropertyMetadata(0.00, FrameworkPropertyMetadataOptions.AffectsRender));
///
/// TargetDosingVolume
///
public double TargetDosingVolume
{
get
{
return (double)this.GetValue(TargetDosingVolumeProperty);
}
set
{
this.SetValue(TargetDosingVolumeProperty, value);
}
}
public static readonly DependencyProperty IsAutoModeProperty = DependencyProperty.Register(
"IsAutoMode", typeof(bool), typeof(CrossDoseControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
///
/// IsAutoMode
///
public bool IsAutoMode
{
get
{
return (bool)this.GetValue(IsAutoModeProperty);
}
set
{
this.SetValue(IsAutoModeProperty, value);
}
}
#endregion
///
/// 手动Dosing开始
///
///
///
private void Start_Click(object sender, RoutedEventArgs e)
{
if (requestVolume.Text != "")
{
InvokeClient.Instance.Service.DoOperation($"{ModuleName}.StartDosing", double.Parse(requestVolume.Text));
}
}
///
/// 手动Dosing停止
///
///
///
private void Halt_Click(object sender, RoutedEventArgs e)
{
InvokeClient.Instance.Service.DoOperation($"{ModuleName}.HaltDosing");
}
///
/// 计算Pump Factor
///
///
///
private void Calibrate_Click(object sender, RoutedEventArgs e)
{
if (!string.IsNullOrEmpty(counterVolume.Text) && !string.IsNullOrEmpty(requestVolume.Text))
{
double request = double.Parse(requestVolume.Text);
if (request == 0) return;
double pumpFactor = double.Parse(counterVolume.Text) / request;
InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetPumpFactor", Math.Round(pumpFactor, 3));
}
}
///
/// Reset电机
///
///
///
private void Reset_Click(object sender, RoutedEventArgs e)
{
InvokeClient.Instance.Service.DoOperation($"{ModuleName}.ResetCrossDose");
}
///
/// 输入限制
///
///
///
///
private void OnPreviewTextInput(object sender, TextCompositionEventArgs e)
{
e.Handled = !IsTextAllowed(e.Text, ((TextBox) sender).Text);
}
private bool IsTextAllowed(string key, string text)
{
Regex regex = new Regex(@"^[0-9\.]+$");
return regex.IsMatch(key);
}
}
}