// Copyright Keysight Technologies 2012-2019 // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at http://mozilla.org/MPL/2.0/. using System; namespace OpenTap { /// /// Interface for types that can be enabled. /// public interface IEnabled { /// /// Gets whether a type is enabled. /// bool IsEnabled { get; } } interface IEnabledValue { bool IsEnabled { get; set; } object Value { get; set; } } /// /// A value that can be enabled or disabled. /// /// public class Enabled : IEnabled, ICloneable, IEnabledValue { /// /// Value of the member. /// public virtual T Value { get; set; } object IEnabledValue.Value { get => Value; set => Value = (T) value; } /// /// Gets or sets if the member is enabled. /// public virtual bool IsEnabled { get; set; } /// /// Writes a special string if the value is not enabled. Otherwise just returns Value.ToString. /// /// public override string ToString() { string valueString = null; if (Value == null) valueString = "NULL"; else valueString = StringConvertProvider.GetString(Value); if (!IsEnabled) valueString += " (disabled)"; return valueString; } /// /// Creates a clone of this object. /// /// public object Clone() { T value = Value; if(Value is ICloneable) value = (T)((ICloneable)Value).Clone(); return new Enabled { Value = value, IsEnabled = IsEnabled }; } } }