Initial Push
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
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 + ".iFeedback", IFeedbackChanged);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_adsManager?.Deregister(_variableName + ".xRelease", XReleaseCahnged);
|
||||
_adsManager?.Deregister(_variableName + ".iFeedback", 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user