forked from OSchip/llvm-project
140 lines
5.1 KiB
C#
140 lines
5.1 KiB
C#
|
using System;
|
|||
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.ComponentModel;
|
|||
|
using System.Globalization;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
|
|||
|
namespace LLVM.ClangTidy
|
|||
|
{
|
|||
|
class MagicInheritance
|
|||
|
{
|
|||
|
public static readonly string Value = "{3A27184D-1774-489B-9BB7-7191B8E8E622}";
|
|||
|
public static readonly string Text = "<Inherit from project or parent>";
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
class DynamicPropertyConverter<T> : TypeConverter
|
|||
|
{
|
|||
|
private DynamicPropertyDescriptor<T> Descriptor_;
|
|||
|
private TypeConverter Root_;
|
|||
|
|
|||
|
public DynamicPropertyConverter(DynamicPropertyDescriptor<T> Descriptor, TypeConverter Root)
|
|||
|
{
|
|||
|
Descriptor_ = Descriptor;
|
|||
|
Root_ = Root;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Returns true if there are specific values that can be chosen from a dropdown
|
|||
|
/// for this property. Regardless of whether standard values are supported for
|
|||
|
/// the underlying type, we always support standard values because we need to
|
|||
|
/// display the inheritance option.
|
|||
|
/// </summary>
|
|||
|
/// <returns>true</returns>
|
|||
|
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
|
|||
|
{
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Get the set of all standard values that can be chosen from a dropdown for this
|
|||
|
/// property. If the underlying type supports standard values, we want to include
|
|||
|
/// all those. Additionally, we want to display the option to inherit the value,
|
|||
|
/// but only if the value is not already inheriting.
|
|||
|
/// </summary>
|
|||
|
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
|
|||
|
{
|
|||
|
List<object> Values = new List<object>();
|
|||
|
if (Root_.GetStandardValuesSupported(context))
|
|||
|
{
|
|||
|
StandardValuesCollection RootValues = Root_.GetStandardValues(context);
|
|||
|
Values.AddRange(RootValues.Cast<object>());
|
|||
|
}
|
|||
|
if (!Descriptor_.IsInheriting)
|
|||
|
Values.Add(MagicInheritance.Value);
|
|||
|
StandardValuesCollection Result = new StandardValuesCollection(Values);
|
|||
|
return Result;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Determines whether this property can accept values other than those specified
|
|||
|
/// in the dropdown (for example by manually typing into the field).
|
|||
|
/// </summary>
|
|||
|
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
|
|||
|
{
|
|||
|
// Although we add items to the dropdown list, we do not change whether or not
|
|||
|
// the set of values are exclusive. If the user could type into the field before
|
|||
|
// they still can. And if they couldn't before, they still can't.
|
|||
|
return Root_.GetStandardValuesExclusive(context);
|
|||
|
}
|
|||
|
|
|||
|
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
|
|||
|
{
|
|||
|
return Root_.CanConvertFrom(context, sourceType);
|
|||
|
}
|
|||
|
|
|||
|
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
|
|||
|
{
|
|||
|
return Root_.CanConvertTo(context, destinationType);
|
|||
|
}
|
|||
|
|
|||
|
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
|
|||
|
{
|
|||
|
if (value.Equals(MagicInheritance.Value))
|
|||
|
return MagicInheritance.Text;
|
|||
|
return Root_.ConvertFrom(context, culture, value);
|
|||
|
}
|
|||
|
|
|||
|
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
|
|||
|
{
|
|||
|
if (value.GetType() == destinationType)
|
|||
|
return value;
|
|||
|
|
|||
|
return Root_.ConvertTo(context, culture, value, destinationType);
|
|||
|
}
|
|||
|
|
|||
|
public override object CreateInstance(ITypeDescriptorContext context, IDictionary propertyValues)
|
|||
|
{
|
|||
|
return Root_.CreateInstance(context, propertyValues);
|
|||
|
}
|
|||
|
|
|||
|
public override bool Equals(object obj)
|
|||
|
{
|
|||
|
return Root_.Equals(obj);
|
|||
|
}
|
|||
|
|
|||
|
public override bool GetCreateInstanceSupported(ITypeDescriptorContext context)
|
|||
|
{
|
|||
|
return Root_.GetCreateInstanceSupported(context);
|
|||
|
}
|
|||
|
|
|||
|
public override int GetHashCode()
|
|||
|
{
|
|||
|
return Root_.GetHashCode();
|
|||
|
}
|
|||
|
|
|||
|
public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes)
|
|||
|
{
|
|||
|
return Root_.GetProperties(context, value, attributes);
|
|||
|
}
|
|||
|
|
|||
|
public override bool GetPropertiesSupported(ITypeDescriptorContext context)
|
|||
|
{
|
|||
|
return Root_.GetPropertiesSupported(context);
|
|||
|
}
|
|||
|
|
|||
|
public override bool IsValid(ITypeDescriptorContext context, object value)
|
|||
|
{
|
|||
|
return Root_.IsValid(context, value);
|
|||
|
}
|
|||
|
|
|||
|
public override string ToString()
|
|||
|
{
|
|||
|
return Root_.ToString();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|