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.
263 lines
8.6 KiB
263 lines
8.6 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Input;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Animation;
|
|
|
|
namespace HMIControl
|
|
{
|
|
public class HMIButton : Button, ITagReader, ITagWriter, ITagWindow
|
|
{
|
|
public static readonly DependencyProperty TagReadTextProperty = DependencyProperty.Register("TagReadText", typeof(string), typeof(HMIButton));
|
|
public static readonly DependencyProperty TagWriteTextProperty = DependencyProperty.Register("TagWriteText", typeof(string), typeof(HMIButton));
|
|
public static readonly DependencyProperty TagWindowTextProperty = DependencyProperty.Register("TagWindowText", typeof(string), typeof(HMIButton));
|
|
public static readonly DependencyProperty IsModelProperty = DependencyProperty.Register("IsModel", typeof(bool), typeof(HMIButton));
|
|
public static readonly DependencyProperty IsUniqueProperty = DependencyProperty.Register("IsUnique", typeof(bool), typeof(HMIButton));
|
|
public static readonly DependencyProperty IsPulseProperty = DependencyProperty.Register("IsPulse", typeof(bool), typeof(HMIButton));
|
|
public static readonly DependencyProperty PulseWriteInt16Property =
|
|
DependencyProperty.Register("PulseWriteInt16", typeof(bool), typeof(HMIButton));
|
|
|
|
public string[] GetActions()
|
|
{
|
|
return new string[] { TagActions.VISIBLE, TagActions.CAPTION, TagActions.ALARM, TagActions.DEVICENAME };
|
|
}
|
|
|
|
[Category("Common")]
|
|
public string TagWindowText
|
|
{
|
|
get
|
|
{
|
|
return (string)base.GetValue(TagWindowTextProperty);
|
|
}
|
|
set
|
|
{
|
|
base.SetValue(TagWindowTextProperty, value);
|
|
}
|
|
}
|
|
|
|
[Category("Common")]
|
|
public bool IsModel
|
|
{
|
|
get
|
|
{
|
|
return (bool)base.GetValue(IsModelProperty);
|
|
}
|
|
set
|
|
{
|
|
base.SetValue(IsModelProperty, value);
|
|
}
|
|
}
|
|
|
|
[Category("Common")]
|
|
public string TagReadText
|
|
{
|
|
get
|
|
{
|
|
return (string)base.GetValue(TagReadTextProperty);
|
|
}
|
|
set
|
|
{
|
|
base.SetValue(TagReadTextProperty, value);
|
|
}
|
|
}
|
|
|
|
[Category("Common")]
|
|
public string TagWriteText
|
|
{
|
|
get
|
|
{
|
|
return (string)base.GetValue(TagWriteTextProperty);
|
|
}
|
|
set
|
|
{
|
|
base.SetValue(TagWriteTextProperty, value);
|
|
}
|
|
}
|
|
|
|
[Category("HMI")]
|
|
public bool IsPulse
|
|
{
|
|
get
|
|
{
|
|
return (bool)base.GetValue(IsPulseProperty);
|
|
}
|
|
set
|
|
{
|
|
base.SetValue(IsPulseProperty, value);
|
|
}
|
|
}
|
|
|
|
[Category("HMI")]
|
|
public bool PulseWriteInt16
|
|
{
|
|
get
|
|
{
|
|
return (bool)base.GetValue(PulseWriteInt16Property);
|
|
}
|
|
set
|
|
{
|
|
base.SetValue(PulseWriteInt16Property, value);
|
|
}
|
|
}
|
|
|
|
[Category("HMI")]
|
|
public bool IsUnique
|
|
{
|
|
get
|
|
{
|
|
return (bool)base.GetValue(IsUniqueProperty);
|
|
}
|
|
set
|
|
{
|
|
base.SetValue(IsUniqueProperty, value);
|
|
}
|
|
}
|
|
|
|
protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
|
|
{
|
|
base.OnMouseLeftButtonUp(e);
|
|
if (PulseWriteInt16)
|
|
{
|
|
if (_funcWrites.Count > 0)
|
|
_funcWrites.ForEach(x => x(0x2));
|
|
}
|
|
else
|
|
{
|
|
if (_funcWrites.Count > 0)
|
|
_funcWrites.ForEach(x => x(false));
|
|
}
|
|
e.Handled = false;
|
|
}
|
|
|
|
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
|
|
{
|
|
base.OnMouseLeftButtonDown(e);
|
|
if (_funcints.Count > 0)
|
|
_funcints.ForEach(x => x());
|
|
if (PulseWriteInt16)
|
|
{
|
|
if (_funcWrites.Count > 0)
|
|
_funcWrites.ForEach(x => x(0x1));
|
|
}
|
|
else
|
|
{
|
|
if (_funcWrites.Count > 0)
|
|
_funcWrites.ForEach(x => x(true));
|
|
}
|
|
}
|
|
|
|
ColorAnimationUsingKeyFrames animation;
|
|
SolidColorBrush brush;
|
|
|
|
public Action SetTagReader(string key, Delegate tagChanged)
|
|
{
|
|
switch (key)
|
|
{
|
|
case TagActions.ALARM:
|
|
var _funcAlarm = tagChanged as Func<bool>;
|
|
if (_funcAlarm != null)
|
|
{
|
|
if (animation == null)
|
|
{
|
|
brush = Background as SolidColorBrush;
|
|
if (brush != null)
|
|
{
|
|
brush = brush.Clone();
|
|
animation = new ColorAnimationUsingKeyFrames
|
|
{
|
|
KeyFrames = new ColorKeyFrameCollection
|
|
{
|
|
new DiscreteColorKeyFrame(brush.Color, TimeSpan.FromSeconds(0.0)),
|
|
new DiscreteColorKeyFrame(Colors.Red, TimeSpan.FromSeconds(0.5)),
|
|
new DiscreteColorKeyFrame(brush.Color, TimeSpan.FromSeconds(1))
|
|
},
|
|
AutoReverse = true,
|
|
RepeatBehavior = RepeatBehavior.Forever
|
|
};
|
|
}
|
|
}
|
|
return delegate
|
|
{
|
|
if (brush != null)
|
|
{
|
|
if (_funcAlarm())
|
|
{
|
|
brush.BeginAnimation(SolidColorBrush.ColorProperty, animation);
|
|
Background = brush;
|
|
}
|
|
else
|
|
{
|
|
brush.BeginAnimation(SolidColorBrush.ColorProperty, null);
|
|
Background = brush;
|
|
}
|
|
}
|
|
};
|
|
}
|
|
else
|
|
return null;
|
|
case TagActions.VISIBLE:
|
|
var _funcVisible = tagChanged as Func<bool>;
|
|
if (_funcVisible != null)
|
|
{
|
|
return delegate
|
|
{
|
|
this.Visibility = _funcVisible() ? Visibility.Visible : Visibility.Hidden;
|
|
};
|
|
}
|
|
else
|
|
return null;
|
|
case TagActions.CAPTION:
|
|
var _funcCaption = tagChanged as Func<string>;
|
|
if (_funcCaption != null)
|
|
{
|
|
return delegate { this.Content = _funcCaption(); };
|
|
}
|
|
else
|
|
return null;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
List<Func<object, int>> _funcWrites = new List<Func<object,int>>();
|
|
List<Func<int>> _funcints = new List<Func<int>>();
|
|
public bool SetTagWriter(IEnumerable<Delegate> tagWriter)
|
|
{
|
|
bool ret = true;
|
|
_funcWrites.Clear();
|
|
_funcints.Clear();
|
|
foreach (var item in tagWriter)
|
|
{
|
|
Func<object, int> _funcWrite = item as Func<object, int>;
|
|
|
|
if (_funcWrite != null)
|
|
_funcWrites.Add(_funcWrite);
|
|
else
|
|
{
|
|
Func<int> _funcint = item as Func<int>;
|
|
if (_funcint != null)
|
|
_funcints.Add(_funcint);
|
|
else
|
|
{
|
|
ret = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
public IList<ITagLink> Children
|
|
{
|
|
get { return null; }
|
|
}
|
|
|
|
public string Node
|
|
{
|
|
get { return this.Name; }
|
|
}
|
|
}
|
|
|
|
}
|
|
|