You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
165 lines
5.3 KiB
165 lines
5.3 KiB
using System;
|
|
using System.ComponentModel;
|
|
using System.Windows;
|
|
using System.Windows.Input;
|
|
|
|
namespace HMIControl
|
|
{
|
|
|
|
public class SelectSwitch : ButtonBase
|
|
{
|
|
public static readonly DependencyProperty LeftLableProperty = DependencyProperty.Register("LeftLable", typeof(string), typeof(SelectSwitch));
|
|
public static readonly DependencyProperty RightLableProperty = DependencyProperty.Register("RightLable", typeof(string), typeof(SelectSwitch));
|
|
public static readonly DependencyProperty IsThreeStateProperty = DependencyProperty.Register("IsThreeState", typeof(bool), typeof(SelectSwitch),
|
|
new FrameworkPropertyMetadata(true));
|
|
|
|
static SelectSwitch()
|
|
{
|
|
DefaultStyleKeyProperty.OverrideMetadata(typeof(SelectSwitch), new FrameworkPropertyMetadata(typeof(SelectSwitch)));
|
|
}
|
|
|
|
[Category("HMI")]
|
|
public bool IsThreeState
|
|
{
|
|
get
|
|
{
|
|
return (bool)base.GetValue(IsThreeStateProperty);
|
|
}
|
|
set
|
|
{
|
|
base.SetValue(IsThreeStateProperty, value);
|
|
}
|
|
}
|
|
|
|
[Category("HMI")]
|
|
public string LeftLable
|
|
{
|
|
get
|
|
{
|
|
return (string)base.GetValue(LeftLableProperty);
|
|
}
|
|
set
|
|
{
|
|
base.SetValue(LeftLableProperty, value);
|
|
}
|
|
}
|
|
|
|
[Category("HMI")]
|
|
public string RightLable
|
|
{
|
|
get
|
|
{
|
|
return (string)base.GetValue(RightLableProperty);
|
|
}
|
|
set
|
|
{
|
|
base.SetValue(RightLableProperty, value);
|
|
}
|
|
}
|
|
|
|
public override string[] GetActions()
|
|
{
|
|
return new string[] { TagActions.ENABLE, TagActions.DISABLE, TagActions.STATE, TagActions.LEFT, TagActions.RIGHT, TagActions.MID };
|
|
}
|
|
|
|
protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
|
|
{
|
|
base.OnMouseLeftButtonUp(e);
|
|
if (IsPulse)
|
|
{
|
|
if (_funcWrites.Count > 0)
|
|
_funcWrites.ForEach(x => x(false));
|
|
}
|
|
e.Handled = false;
|
|
}
|
|
|
|
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
|
|
{
|
|
base.OnMouseLeftButtonDown(e);
|
|
if (IsPulse)
|
|
{
|
|
if (_funcWrites.Count > 0)
|
|
_funcWrites.ForEach(x => x(true));
|
|
}
|
|
}
|
|
|
|
protected override void OnMouseMove(MouseEventArgs e)
|
|
{
|
|
base.OnMouseMove(e);
|
|
if (!IsPulse)
|
|
{
|
|
if (base.IsMouseCaptured)
|
|
{
|
|
e.Handled = true;
|
|
double num = base.ActualWidth / 3.0;
|
|
Point position = Mouse.GetPosition(this);
|
|
if (position.X < num)
|
|
{
|
|
IsChecked = false;
|
|
}
|
|
else if (position.X > (2 * num))
|
|
{
|
|
IsChecked = true;
|
|
}
|
|
else if (IsThreeState)
|
|
{
|
|
IsChecked = null;
|
|
}
|
|
foreach (var item in _funcints)
|
|
{
|
|
_funcints.ForEach(x => x());
|
|
}
|
|
//if (_funcWrite != null)
|
|
//{
|
|
// if (!IsThreeState && IsChecked.HasValue)
|
|
// {
|
|
// _funcWrite(IsChecked);
|
|
// }
|
|
// else if (IsThreeState)
|
|
// {
|
|
// _funcWrite(!IsChecked.HasValue ? 0 : IsChecked.Value == true ? 1 : 2);
|
|
// }
|
|
//}
|
|
}
|
|
}
|
|
}
|
|
|
|
protected override void OnCheckedChanged(bool? oldstat, bool? newstat)
|
|
{
|
|
if (newstat.HasValue)
|
|
{
|
|
VisualStateManager.GoToState(this, newstat.Value == true ? "R" : "L", true);
|
|
}
|
|
else VisualStateManager.GoToState(this, "M", true);
|
|
}
|
|
|
|
public override Action SetTagReader(string key, Delegate tagChanged)
|
|
{
|
|
switch (key)
|
|
{
|
|
case TagActions.LEFT:
|
|
var _funcST1 = tagChanged as Func<bool>;
|
|
if (_funcST1 != null)
|
|
{
|
|
return delegate { if (_funcST1())IsChecked = true; };
|
|
}
|
|
else return null;
|
|
case TagActions.RIGHT:
|
|
var _funcST2 = tagChanged as Func<bool>;
|
|
if (_funcST2 != null)
|
|
{
|
|
return delegate { if (_funcST2())IsChecked = false; };
|
|
}
|
|
else return null;
|
|
case TagActions.MID:
|
|
var _funcST3 = tagChanged as Func<bool>;
|
|
if (_funcST3 != null)
|
|
{
|
|
return delegate { if (_funcST3())IsChecked = null; };
|
|
}
|
|
else return null;
|
|
}
|
|
return base.SetTagReader(key, tagChanged);
|
|
}
|
|
}
|
|
}
|
|
|