Beispiel #1
0
        public HeliosValue(HeliosObject owner, BindingValue initialValue, string device, string name, string description, string valueDescription, BindingValueUnit unit)
        {
            _device = device;
            _name = name;
            _description = description;
            _valueDescription = valueDescription;
            _owner = new WeakReference(owner);
            _value = initialValue;
            _unit = unit;

            UpdateId();
        }
Beispiel #2
0
        public HeliosTrigger(HeliosObject source, string device, string name, string verb, string description, string valueDescription, BindingValueUnit unit)
        {
            _device           = device;
            _name             = name;
            _verb             = verb;
            _description      = description;
            _source           = new WeakReference(source);
            _valueDescription = valueDescription;
            _unit             = unit;
            UpdateId();

            TriggerBindingDescription = "when" + (Device.Length > 0 ? " " + _device : "") + (_name.Length > 0 ? " " + _name + " on" : "") + " " + Source.Name + " " + _verb;
        }
Beispiel #3
0
        public HeliosTrigger(HeliosObject source, string device, string name, string verb, string description, string valueDescription, BindingValueUnit unit)
        {
            _device = device;
            _name = name;
            _verb = verb;
            _description = description;
            _source = new WeakReference(source);
            _valueDescription = valueDescription;
            _unit = unit;
            UpdateId();

            TriggerBindingDescription = "when" + (Device.Length > 0 ? " " + _device : "") + (_name.Length > 0 ? " " + _name + " on" : "") + " " + Source.Name +  " " + _verb;
        }
Beispiel #4
0
        public HeliosValue(HeliosObject owner, BindingValue initialValue, string device, string name,
                           string description, string valueDescription, BindingValueUnit unit)
        {
            _device                = device;
            _name                  = name;
            ActionDescription      = description;
            ActionValueDescription = valueDescription;
            _owner                 = new WeakReference(owner);
            Value                  = initialValue;
            Unit = unit;

            UpdateId();
            RecalculateName();
        }
Beispiel #5
0
        /// <summary>
        /// generate a very expensive descriptive path to the object provided, not usable for
        /// binding or any functionality other than UI and logging
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static string GetDescriptivePath(HeliosObject source)
        {
            switch (source)
            {
            case HeliosVisual visual:
                return(GetVisualPath(visual));

            case HeliosInterface heliosInterface:
                return($"Interface '{heliosInterface.Name}'");

            default:
                return($"{source.TypeIdentifier} '{source.Name}'");
            }
        }
Beispiel #6
0
        public HeliosTrigger(HeliosObject source, string device, string name, string verb, string description,
                             string valueDescription, BindingValueUnit unit)
        {
            _device                 = device;
            _name                   = name;
            TriggerVerb             = verb;
            TriggerDescription      = description;
            _source                 = new WeakReference(source);
            TriggerValueDescription = valueDescription;
            Unit = unit;
            UpdateId();

            // 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();
        }
Beispiel #7
0
        public HeliosAction(HeliosObject target, string device, string name, string verb, string description, string valueDescription, BindingValueUnit unit)
        {
            _device           = device;
            _target           = new WeakReference(target);
            _name             = name;
            _verb             = verb;
            _description      = description;
            _valueDescription = valueDescription;
            _unit             = unit;

            UpdateId();

            ActionBindingDescription = _verb + (Device.Length > 0 ? " " + _device : "") + (_name.Length > 0 ? " " + _name + " on" : "") + " " + Target.Name + (ActionRequiresValue ? " to %value%" : "");
            if (ActionRequiresValue)
            {
                ActionInputBindingDescription = "to %value%";
            }
        }
Beispiel #8
0
        public HeliosAction(HeliosObject target, string device, string name, string verb, string description, string valueDescription, BindingValueUnit unit)
        {
            _device = device;
            _target = new WeakReference(target);
            _name = name;
            _verb = verb;
            _description = description;
            _valueDescription = valueDescription;
            _unit = unit;

            UpdateId();

            ActionBindingDescription = _verb + (Device.Length > 0 ? " " + _device : "") + (_name.Length > 0 ? " " + _name + " on" : "") + " " + Target.Name + ( ActionRequiresValue ? " to %value%" : "");
            if (ActionRequiresValue)
            {
                ActionInputBindingDescription = "to %value%";
            }
         }
Beispiel #9
0
        private void TraceTriggerFired()
        {
            // NOTE: deliberately crash if any of these are null
            HeliosObject target = (_targetAction.Target as IBindingAction).Target;

            if (target._tracing || _executing)
            {
                if (!_sTracesReported.Contains(Description))
                {
                    string loopType = _executing ? "Hard" : "Soft";
                    ConfigManager.LogManager.LogInfo($"{loopType} binding loop detected; Object {target.Name} may have triggered itself");
                    _sTraceLoop = true;
                    _sTracesReported.Add(Description);
                }
                _sTracingSource = target;
            }
            HeliosObject source = (_triggerSource.Target as IBindingTrigger).Source;

            source._tracing = true;
        }
Beispiel #10
0
        public HeliosAction(HeliosObject target, string device, string name, string verb, string description,
                            string valueDescription, BindingValueUnit unit)
        {
            _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();
        }
Beispiel #11
0
        private void EndTraceTriggerFired()
        {
            if (_sTraceLoop)
            {
                ConfigManager.LogManager.LogInfo($"  binding loop includes {Description}");
            }
            HeliosObject source = (_triggerSource.Target as IBindingTrigger).Source;

            if (source._tracing)
            {
                source._tracing = false;
                if (_sTracingSource == source)
                {
                    if (_sTraceLoop)
                    {
                        _sTraceLoop = false;
                        ConfigManager.LogManager.LogInfo("  binding loop trace complete");
                    }
                    _sTracingSource = null;
                }
            }
        }
Beispiel #12
0
        public static string GetReferenceName(HeliosObject refObject)
        {
            StringBuilder sb = new StringBuilder("");

            if (refObject is HeliosInterface refInterface)
            {
                sb.Append("Interface;;");
            }

            if (refObject is HeliosVisual refControl)
            {
                sb.Append("Visual;");
                sb.Append(GetVisualPath(refControl));
                sb.Append(";");
            }

            sb.Append(refObject.TypeIdentifier);
            sb.Append(";");
            sb.Append(refObject.Name);
            sb.Append("");

            return(sb.ToString());
        }
Beispiel #13
0
 public HeliosAction(HeliosObject target, string device, string name, string verb, string description)
     : this(target, device, name, verb, description, "", BindingValueUnits.NoValue)
 {
 }
Beispiel #14
0
        public static string GetReferenceName(HeliosObject refObject)
        {
            StringBuilder sb = new StringBuilder("");

            HeliosInterface refInterface = refObject as HeliosInterface;
            if (refInterface != null)
            {
                sb.Append("Interface;;");
            }

            HeliosVisual refControl = refObject as HeliosVisual;
            if (refControl != null)
            {
                sb.Append("Visual;");
                sb.Append(GetVisualPath(refControl));
                sb.Append(";");
            }

            sb.Append(refObject.TypeIdentifier);
            sb.Append(";");
            sb.Append(refObject.Name);
            sb.Append("");

            return sb.ToString();
        }
Beispiel #15
0
        private HeliosBinding DeserializeBinding(HeliosProfile profile, HeliosVisual root, string copyRoot, List <HeliosVisual> localObjects, XmlReader xmlReader)
        {
            TypeConverter boolConverter = TypeDescriptor.GetConverter(typeof(bool));

            HeliosBinding binding = (HeliosBinding)CreateNewObject("Binding", "");

            binding.BypassCascadingTriggers = (bool)boolConverter.ConvertFromString(null, CultureInfo.InvariantCulture, xmlReader.GetAttribute("BypassCascadingTriggers"));
            xmlReader.ReadStartElement("Binding");

            HeliosObject source = ResolveReferenceName(profile, root, copyRoot, localObjects, xmlReader.GetAttribute("Source"));

            if (source != null)
            {
                string trigger = xmlReader.GetAttribute("Name");
                if (source is IDynamicBindings dynamic)
                {
                    binding.Trigger = dynamic.ResolveTrigger(trigger);
                }
                else if (source.Triggers.ContainsKey(trigger))
                {
                    binding.Trigger = source.Triggers[trigger];
                }
                else if (source is HeliosVisual)
                {
                    HeliosVisual parent = ((HeliosVisual)source).Parent;
                    if (parent.Triggers.ContainsKey(trigger))
                    {
                        source          = parent;
                        binding.Trigger = source.Triggers[trigger];
                    }
                }
            }
            else
            {
                Logger.Error("Binding Source Reference Unresolved: " + xmlReader.GetAttribute("Source"));
            }
            xmlReader.Read();

            HeliosObject target = ResolveReferenceName(profile, root, copyRoot, localObjects, xmlReader.GetAttribute("Target"));

            if (target != null)
            {
                string action = xmlReader.GetAttribute("Name");
                if (target is IDynamicBindings dynamic)
                {
                    binding.Action = dynamic.ResolveAction(action);
                }
                else if (target.Actions.ContainsKey(action))
                {
                    binding.Action = target.Actions[action];
                }
                else if (target is HeliosVisual)
                {
                    HeliosVisual parent = ((HeliosVisual)target).Parent;
                    if (parent.Actions.ContainsKey(action))
                    {
                        target         = parent;
                        binding.Action = target.Actions[action];
                    }
                }
            }
            else
            {
                Logger.Error("Binding Target Reference Unresolved: " + xmlReader.GetAttribute("Target"));
            }
            xmlReader.Read();
            switch (xmlReader.Name)
            {
            case "StaticValue":
                binding.ValueSource = BindingValueSources.StaticValue;
                binding.Value       = xmlReader.ReadElementString("StaticValue");
                break;

            case "TriggerValue":
                binding.ValueSource = BindingValueSources.TriggerValue;
                xmlReader.Read();
                break;

            case "LuaScript":
                binding.ValueSource = BindingValueSources.LuaScript;
                binding.Value       = xmlReader.ReadElementString("LuaScript");
                break;
            }

            if (xmlReader.Name.Equals("Condition"))
            {
                binding.Condition = xmlReader.ReadElementString("Condition");
            }

            xmlReader.ReadEndElement();

            return(binding);
        }
Beispiel #16
0
 public HeliosAction(HeliosObject target, string device, string name, string verb, string description)
     : this(target, device, name, verb, description, "", BindingValueUnits.NoValue)
 {
 }
Beispiel #17
0
 public HeliosTrigger(HeliosObject source, string device, string name, string verb, string description)
     : this(source, device, name, verb, description, "", BindingValueUnits.NoValue)
 {
 }
Beispiel #18
0
 public HeliosTrigger(HeliosObject source, string device, string name, string verb, string description)
     : this(source, device, name, verb, description, "", BindingValueUnits.NoValue)
 {
 }