// 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 };
}
}
}