Null check Move DisplayText.cs to CSLA Enhanced Documents – don’t allow ‘Save’ RO on enhanced step Enhanced Documents windowing Enhanced Documents remove unnecessary options Enhanced Documents – don’t allow ‘Save’ transition on enhanced step Enhanced Documents/Insert,Delete,Paste
166 lines
5.9 KiB
C#
166 lines
5.9 KiB
C#
/*****************************************************************
|
|
* Module: EnumDescConverter.cs
|
|
* Type: C# Source Code
|
|
* Version: 1.0
|
|
* Description: Enum Converter using Description Attributes
|
|
*
|
|
* Revisions
|
|
* ------------------------------------------------
|
|
* [F] 24/02/2004, Jcl - Shaping up
|
|
* [B] 25/02/2004, Jcl - Made it much easier :-)
|
|
*
|
|
*****************************************************************/
|
|
|
|
using System;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Drawing.Design;
|
|
using System.Reflection;
|
|
using System.Collections;
|
|
using System.Data;
|
|
|
|
namespace DescriptiveEnum
|
|
{
|
|
/// <summary>
|
|
/// EnumConverter supporting System.ComponentModel.DescriptionAttribute
|
|
/// </summary>
|
|
public class EnumDescConverter : System.ComponentModel.EnumConverter
|
|
{
|
|
protected System.Type myVal;
|
|
|
|
/// <summary>
|
|
/// Gets Enum Value's Description Attribute
|
|
/// </summary>
|
|
/// <param name="value">The value you want the description attribute for</param>
|
|
/// <returns>The description, if any, else it's .ToString()</returns>
|
|
public static string GetEnumDescription(Enum value)
|
|
{
|
|
//Console.WriteLine("{0}", value);
|
|
FieldInfo fi = value.GetType().GetField(value.ToString());
|
|
if (fi == null) return value.ToString();
|
|
DescriptionAttribute[] attributes =
|
|
(DescriptionAttribute[])fi.GetCustomAttributes(
|
|
typeof(DescriptionAttribute), false);
|
|
//Console.WriteLine("{0},{1},{2}", value.ToString(), attributes.Length, (attributes.Length > 0) ? attributes[0].Description : value.ToString());
|
|
return (attributes.Length>0)?attributes[0].Description:value.ToString();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the description for certaing named value in an Enumeration
|
|
/// </summary>
|
|
/// <param name="value">The type of the Enumeration</param>
|
|
/// <param name="name">The name of the Enumeration value</param>
|
|
/// <returns>The description, if any, else the passed name</returns>
|
|
public static string GetEnumDescription(System.Type value, string name)
|
|
{
|
|
FieldInfo fi= value.GetField(name);
|
|
if (fi == null) return "";
|
|
DescriptionAttribute[] attributes =
|
|
(DescriptionAttribute[])fi.GetCustomAttributes(
|
|
typeof(DescriptionAttribute), false);
|
|
return (attributes.Length>0)?attributes[0].Description:name;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the value of an Enum, based on it's Description Attribute or named value
|
|
/// </summary>
|
|
/// <param name="value">The Enum type</param>
|
|
/// <param name="description">The description or name of the element</param>
|
|
/// <returns>The value, or the passed in description, if it was not found</returns>
|
|
public static object GetEnumValue(System.Type value, string description)
|
|
{
|
|
FieldInfo [] fis = value.GetFields();
|
|
foreach(FieldInfo fi in fis)
|
|
{
|
|
DescriptionAttribute[] attributes =
|
|
(DescriptionAttribute[])fi.GetCustomAttributes(
|
|
typeof(DescriptionAttribute), false);
|
|
if(attributes.Length>0)
|
|
{
|
|
if(attributes[0].Description == description)
|
|
{
|
|
return fi.GetValue(fi.Name);
|
|
}
|
|
}
|
|
if(fi.Name == description)
|
|
{
|
|
return fi.GetValue(fi.Name);
|
|
}
|
|
}
|
|
return description;
|
|
}
|
|
|
|
public EnumDescConverter(System.Type type) : base(type.GetType())
|
|
{
|
|
myVal = type;
|
|
}
|
|
|
|
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
|
|
{
|
|
if(value is Enum && destinationType == typeof(string))
|
|
{
|
|
return EnumDescConverter.GetEnumDescription((Enum)value);
|
|
}
|
|
if(value is string && destinationType == typeof(string))
|
|
{
|
|
return EnumDescConverter.GetEnumDescription(myVal, (string)value);
|
|
}
|
|
return base.ConvertTo (context, culture, value, destinationType);
|
|
}
|
|
|
|
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
|
|
{
|
|
if(value is string)
|
|
{
|
|
return EnumDescConverter.GetEnumValue(myVal, (string)value);
|
|
}
|
|
if(value is Enum)
|
|
{
|
|
return EnumDescConverter.GetEnumDescription((Enum)value);
|
|
}
|
|
return base.ConvertFrom (context, culture, value);
|
|
}
|
|
public override bool GetPropertiesSupported(ITypeDescriptorContext context)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public override TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
|
|
{
|
|
ArrayList values = new ArrayList();
|
|
FieldInfo[] fis = myVal.GetFields();
|
|
foreach (FieldInfo fi in fis)
|
|
{
|
|
DescriptionAttribute[] attributes =(DescriptionAttribute[])fi.GetCustomAttributes(
|
|
typeof(DescriptionAttribute), false);
|
|
//if (attributes.Length > 0)
|
|
if (fi.Name != "value__")
|
|
values.Add(fi.GetValue(fi.Name));
|
|
}
|
|
return new TypeConverter.StandardValuesCollection(values);
|
|
}
|
|
public static string GetEnumKeyDescription(Enum value)
|
|
{
|
|
FieldInfo fi = value.GetType().GetField(value.ToString());
|
|
DescriptionAttribute[] attributes =
|
|
(DescriptionAttribute[])fi.GetCustomAttributes(
|
|
typeof(DescriptionAttribute), false);
|
|
return (attributes.Length > 0) ? attributes[0].Description : value.ToString();
|
|
}
|
|
|
|
public static DataTable GetEnumAsDataTable(System.Type EnumType)
|
|
{
|
|
DataTable DTEnum = new DataTable();
|
|
DTEnum.Columns.Add(new DataColumn("EnumID", typeof(Int32)));
|
|
DTEnum.Columns.Add(new DataColumn("Enum", typeof(string)));
|
|
DTEnum.Columns.Add(new DataColumn("Description", typeof(string)));
|
|
foreach (int i in Enum.GetValues(EnumType))
|
|
{
|
|
System.Enum fooItem = (System.Enum)Enum.ToObject(EnumType, i);
|
|
DTEnum.Rows.Add(new object[] { i, fooItem.ToString(), GetEnumKeyDescription(fooItem) });
|
|
}
|
|
return DTEnum;
|
|
}
|
|
}
|
|
|
|
} |