123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- using System;
- using System.Collections;
- namespace PaintDotNet
- {
- /// <summary>
- /// Provides convenience methods for converting between enumeration values
- /// and their localized value names. This class only works with strings
- /// loaded via the PdnResources class.
- /// </summary>
- public sealed class EnumLocalizer
- {
- private Type enumType;
- private Hashtable valueToName;
- private Hashtable nameToValue;
- private static Hashtable typeToWrapper;
- public Type EnumType
- {
- get
- {
- return this.enumType;
- }
- }
- public object[] GetEnumValues()
- {
- ICollection valueNames = this.valueToName.Keys;
- object[] values = new object[valueNames.Count];
- int index = 0;
- foreach (string valueName in valueNames)
- {
- values[index] = Enum.Parse(this.enumType, valueName);
- ++index;
- }
- return values;
- }
- public string[] GetLocalizedNames()
- {
- ICollection keysCollection = this.nameToValue.Keys;
- string[] keysArray = new string[keysCollection.Count];
- int index = 0;
- foreach (string key in keysCollection)
- {
- keysArray[index] = key;
- ++index;
- }
- return keysArray;
- }
- public static string EnumValueToLocalizedName(Type enumType, object enumValue)
- {
- EnumLocalizer wrapper = EnumLocalizer.Create(enumType);
- return wrapper.EnumValueToLocalizedName(enumValue);
- }
- public string EnumValueToLocalizedName(object enumValue)
- {
- object retValue = this.valueToName[enumValue.ToString()];
- if (retValue == null)
- {
- this.valueToName.Remove(enumValue);
- return null;
- }
- else
- {
- return (string)retValue;
- }
- }
- public object LocalizedNameToEnumValue(string locName)
- {
- object enumValueName = this.nameToValue[locName];
- if (enumValueName == null)
- {
- this.nameToValue.Remove(locName);
- return null;
- }
- else
- {
- object enumValue = Enum.Parse(this.enumType, (string)enumValueName);
- return enumValue;
- }
- }
- public string LocalizedNameToEnumValueName(string locName)
- {
- object enumValueName = this.nameToValue[locName];
- if (enumValueName == null)
- {
- this.nameToValue.Remove(locName);
- return null;
- }
- else
- {
- return (string)enumValueName;
- }
- }
- public static EnumLocalizer Create(Type enumType)
- {
- if (typeToWrapper == null)
- {
- typeToWrapper = new Hashtable();
- }
- object wrapper = typeToWrapper[enumType];
- if (wrapper == null)
- {
- wrapper = new EnumLocalizer(enumType);
- typeToWrapper[enumType] = wrapper;
- }
- return (EnumLocalizer)wrapper;
- }
- private EnumLocalizer(Type enumType)
- {
- this.enumType = enumType;
- this.valueToName = new Hashtable();
- this.nameToValue = new Hashtable();
- foreach (string enumValueName in Enum.GetNames(this.enumType))
- {
- string resourceName = this.enumType.Name + "." + enumValueName;
- string localizedName = PdnResources.GetString(resourceName);
- this.valueToName.Add(enumValueName, localizedName);
- this.nameToValue.Add(localizedName, enumValueName);
- }
- }
- }
- }
|