73 lines
1.9 KiB
C#
73 lines
1.9 KiB
C#
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using CommunityToolkit.Mvvm.Input;
|
|
using TwinCAT.TypeSystem;
|
|
using Heisig.HMI.AdsManager;
|
|
|
|
namespace HMIToolkit;
|
|
|
|
public sealed partial class HMIControlButtonVM : ObservableObject, IDisposable
|
|
{
|
|
private IAdsManager? _adsManager;
|
|
private readonly string _variableName;
|
|
|
|
// Action triggered when the button is about to be clicked
|
|
public event EventHandler? ButtonClickedStarted;
|
|
|
|
// Action triggered when the button is done being clicked
|
|
public event EventHandler? ButtonClickedEnded;
|
|
|
|
// Event when button feedback changed
|
|
public event EventHandler? FeedbackChanged;
|
|
|
|
// Event when release changed
|
|
public event EventHandler? ReleaseChanged;
|
|
|
|
[ObservableProperty]
|
|
private bool xRelease;
|
|
|
|
// 0 = none, 1 = active, 2 = pending, 3 = waring, 4 = error
|
|
[ObservableProperty]
|
|
private short iFeedback;
|
|
|
|
public HMIControlButtonVM()
|
|
{
|
|
_variableName = string.Empty;
|
|
XRelease = false;
|
|
IFeedback = 4;
|
|
}
|
|
|
|
public HMIControlButtonVM(IAdsManager adsManager, string variableName)
|
|
{
|
|
_adsManager = adsManager;
|
|
_variableName = variableName;
|
|
|
|
_adsManager.Register(_variableName + ".xRelease", XReleaseCahnged);
|
|
_adsManager.Register(_variableName + ".eFeedback", IFeedbackChanged);
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
_adsManager?.Deregister(_variableName + ".xRelease", XReleaseCahnged);
|
|
_adsManager?.Deregister(_variableName + ".eFeedback", IFeedbackChanged);
|
|
}
|
|
|
|
[RelayCommand]
|
|
private void ButtonClicked()
|
|
{
|
|
ButtonClickedStarted?.Invoke(this, EventArgs.Empty);
|
|
_adsManager?.WriteValue(_variableName + ".xRequest", true);
|
|
ButtonClickedEnded?.Invoke(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void XReleaseCahnged(object? sender, ValueChangedEventArgs e)
|
|
{
|
|
XRelease = (bool)e.Value;
|
|
ReleaseChanged?.Invoke(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void IFeedbackChanged(object? sender, ValueChangedEventArgs e)
|
|
{
|
|
IFeedback = (short)e.Value;
|
|
FeedbackChanged?.Invoke(this, EventArgs.Empty);
|
|
}
|
|
} |