Skip to content

Commit

Permalink
explicit ID support restored
Browse files Browse the repository at this point in the history
to HeliosValue
to HeliosTrigger
to HeliosAction
  • Loading branch information
derammo authored and Todd1215 committed Nov 12, 2021
1 parent f0f9e63 commit 04188a9
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 40 deletions.
42 changes: 15 additions & 27 deletions Helios/HeliosAction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ namespace GadrocsWorkshop.Helios
/// </summary>
public class HeliosAction : NotificationObject, IBindingAction, INamedBindingElement
{
/// <summary>
/// an explicitly configured id that does not have to be equal to the name, or null to use the name as id
/// </summary>
private readonly string _explicitId;

private string _device;
private string _name;
private string _bindingDescription = "";
Expand All @@ -37,33 +42,16 @@ public class HeliosAction : NotificationObject, IBindingAction, INamedBindingEle
private WeakReference _context = new WeakReference(null);

public HeliosAction(HeliosObject target, string device, string name, string verb, string description)
: this(target, device, name, verb, description, "", BindingValueUnits.NoValue)
: this(target, device, null, name, verb, description, "", BindingValueUnits.NoValue)
{
// no additional code
// all code in referenced constructor
}

public HeliosAction(HeliosObject target, string device, string name, string verb, string description,
string valueDescription, BindingValueUnit unit)
: this(target, device, null, name, verb, description, valueDescription, unit)
{
ActionID = "";
_device = device;
_target = new WeakReference(target);
_name = name;
ActionVerb = verb;
ActionDescription = description;
ActionValueDescription = valueDescription;
Unit = unit;

UpdateId();

if (ActionRequiresValue)
{
ActionInputBindingDescription = "to %value%";
}

// NOTE: we do not subscribe to name changes on our target object, because we don't know when to unregister, as there is
// no explicit cleanup of action objects
RecalculateName();
// all code in referenced constructor
}

/// <summary>
Expand All @@ -79,7 +67,7 @@ public HeliosAction(HeliosObject target, string device, string name, string verb
/// <param name="unit"></param>
public HeliosAction(HeliosObject target, string device, string id, string name, string verb, string description, string valueDescription, BindingValueUnit unit)
{
ActionID = id;
_explicitId = id;
_device = device;
_target = new WeakReference(target);
_name = name;
Expand All @@ -90,11 +78,14 @@ public HeliosAction(HeliosObject target, string device, string id, string name,

UpdateId();

ActionBindingDescription = ActionVerb + (Device.Length > 0 ? " " + _device : "") + (_name.Length > 0 ? " " + _name + " on" : "") + " " + Target.Name + (ActionRequiresValue ? " to %value%" : "");
if (ActionRequiresValue)
{
ActionInputBindingDescription = "to %value%";
}

// NOTE: we do not subscribe to name changes on our target object, because we don't know when to unregister, as there is
// no explicit cleanup of action objects
RecalculateName();
}

public void RecalculateName()
Expand All @@ -107,10 +98,7 @@ public void RecalculateName()

private void UpdateId()
{
if (ActionID.Length < 1)
{
ActionID = _name;
}
ActionID = _explicitId ?? _name;
string prefix = "";
if (!string.IsNullOrEmpty(_device))
{
Expand Down
24 changes: 17 additions & 7 deletions Helios/HeliosTrigger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,21 +26,34 @@ public class HeliosTrigger : NotificationObject, IBindingTrigger, INamedBindingE
{
private string _device;
private string _name;

/// <summary>
/// an explicitly configured id that does not have to be equal to the name, or null to use the name as id
/// </summary>
private readonly string _explicitId;

private string _bindingDescription;

private readonly WeakReference _source;
private WeakReference _context = new WeakReference(null);

public HeliosTrigger(HeliosObject source, string device, string name, string verb, string description)
: this(source, device, name, verb, description, "", BindingValueUnits.NoValue)
: this(source, device, null, name, verb, description, "", BindingValueUnits.NoValue)
{
// no additional code
// all code in referenced constructor
}

public HeliosTrigger(HeliosObject source, string device, string name, string verb, string description,
string valueDescription, BindingValueUnit unit)
: this(source, device, null, name, verb, description, valueDescription, unit)
{
TriggerID = "";
// all code in referenced constructor
}

public HeliosTrigger(HeliosObject source, string device, string id, string name, string verb, string description,
string valueDescription, BindingValueUnit unit)
{
_explicitId = id;
_device = device;
_name = name;
TriggerVerb = verb;
Expand All @@ -65,10 +78,7 @@ public void RecalculateName()

private void UpdateId()
{
if (TriggerID.Length < 1)
{
TriggerID = _name;
}
TriggerID = _explicitId ?? _name;
string prefix = "";
if (!string.IsNullOrEmpty(_device))
{
Expand Down
14 changes: 8 additions & 6 deletions Helios/HeliosValue.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@ public class HeliosValue : NotificationObject, IBindingAction, IBindingTrigger,
private string _device;
private string _name;

/// <summary>
/// an explicitly configured id that does not have to be equal to the name, or null to use the name as id
/// </summary>
private readonly string _explicitId;

private readonly WeakReference _owner;
private WeakReference _context = new WeakReference(null);

Expand All @@ -35,7 +40,7 @@ public class HeliosValue : NotificationObject, IBindingAction, IBindingTrigger,

public HeliosValue(HeliosObject owner, BindingValue initialValue, string device, string name,
string description, string valueDescription, BindingValueUnit unit)
: this(owner, initialValue, device, "", name, description, valueDescription, unit)
: this(owner, initialValue, device, null, name, description, valueDescription, unit)
{
// all code in referenced constructor
}
Expand All @@ -53,7 +58,7 @@ public HeliosValue(HeliosObject owner, BindingValue initialValue, string device,
/// <param name="unit"></param>
public HeliosValue(HeliosObject owner, BindingValue initialValue, string device, string id, string name, string description, string valueDescription, BindingValueUnit unit)
{
ValueID = id;
_explicitId = id;
_device = device;
_name = name;
ActionDescription = description;
Expand All @@ -76,10 +81,7 @@ public void RecalculateName()

private void UpdateId()
{
if (ValueID.Length < 1)
{
ValueID = _name;
}
ValueID = _explicitId ?? _name;
if (!string.IsNullOrEmpty(_device))
{
ActionID = $"{_device}.set.{ValueID}";
Expand Down

0 comments on commit 04188a9

Please sign in to comment.