using System; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LLVM.ClangTidy { /// /// Allows entire categories of properties to be enabled, disabled, or inherited /// in one fell swoop. We add properties to each category with the value being /// this enum, and when the value is selected, we use reflection to find all other /// properties in the same category and perform the corresponding action. /// public enum CategoryVerb { None, Disable, Enable, Inherit } public class CategoryVerbConverter : EnumConverter { public CategoryVerbConverter() : base(typeof(CategoryVerb)) { } public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { if (value is string) { switch ((string)value) { case "Disable Category": return CategoryVerb.Disable; case "Enable Category": return CategoryVerb.Enable; case "Inherit Category": return CategoryVerb.Inherit; case "": return CategoryVerb.None; } } return base.ConvertFrom(context, culture, value); } public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (value is CategoryVerb && destinationType == typeof(string)) { switch ((CategoryVerb)value) { case CategoryVerb.Disable: return "Disable Category"; case CategoryVerb.Enable: return "Enable Category"; case CategoryVerb.Inherit: return "Inherit Category"; case CategoryVerb.None: return String.Empty; } } return base.ConvertTo(context, culture, value, destinationType); } } }