#region Using Statements using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using TaskTools.Attributes; #endregion namespace TaskTools.Utilities { internal static class EnumTranslator { /// /// Translates this instance. /// /// /// internal static Dictionary Translate() { return Translate(true); } internal static List> EnumToList() { var ans = Translate(string.Empty, true, false); return ans.ToList(); } /// /// Translates the specified check private. /// /// /// if set to true [check private]. /// internal static Dictionary Translate(bool checkPrivate) { return Translate(string.Empty, checkPrivate); } /// /// Translates the specified default text. /// /// /// The default text. /// if set to true [check private]. /// internal static Dictionary Translate(string defaultText, bool checkPrivate) { return Translate(defaultText, checkPrivate, true); } /// /// Translates the specified default text. /// /// /// The default text. /// if set to true [check private]. /// if set to true [sorting]. /// internal static Dictionary Translate(string defaultText, bool checkPrivate, bool sorting) { var types = new Dictionary(); var tempTypes = new Dictionary(); if (!String.IsNullOrEmpty(defaultText)) types.Add(-1, defaultText); #if NETFX_CORE foreach (FieldInfo fieldInfo in typeof(T).GetRuntimeFields()) #else foreach (FieldInfo fieldInfo in typeof(T).GetFields(BindingFlags.Static | BindingFlags.GetField | BindingFlags.Public)) #endif { if (fieldInfo.FieldType != typeof(T)) { continue; } bool add = true; string displayText = string.Empty; T type = (T)fieldInfo.GetValue(typeof(T)); #if NETFX_CORE var displayTextAttr = fieldInfo.GetCustomAttribute(true); displayText = displayTextAttr?.Text ?? type.ToString(); #else object[] displayTextObjectArr = fieldInfo.GetCustomAttributes(typeof(DisplayTextAttribute), true); displayText = (displayTextObjectArr.Length > 0) ? ((DisplayTextAttribute)displayTextObjectArr[0]).Text : type.ToString(); #endif if (checkPrivate) { #if NETFX_CORE var privateAttr = fieldInfo.GetCustomAttribute(true); if (privateAttr != null) { add = !privateAttr.IsPrivate; } #else object[] privateAttributeObjectArr = fieldInfo.GetCustomAttributes(typeof(PrivateAttribute), true); if (privateAttributeObjectArr.Length > 0) { add = !((PrivateAttribute)privateAttributeObjectArr[0]).IsPrivate; } #endif } if (add) { tempTypes.Add(Convert.ToInt32(type), displayText); } } if (sorting) { foreach (var x in tempTypes.OrderBy(x => x.Value).ToDictionary(x => x.Key, x => x.Value)) { types.Add(x.Key, x.Value); } } else { foreach (var x in tempTypes.ToDictionary(x => x.Key, x => x.Value)) { types.Add(x.Key, x.Value); } } return types; } /// /// Gets the display text. /// /// /// The value. /// internal static string GetDisplayText(T value) { var displayText = string.Empty; #if NETFX_CORE var fieldInfo = value.GetType().GetRuntimeField(value.ToString()); #else var fieldInfo = typeof(T).GetFields(BindingFlags.Static | BindingFlags.GetField | BindingFlags.Public).FirstOrDefault(); #endif if (fieldInfo != null) { T type = (T)fieldInfo.GetValue(typeof(T)); if (type != null) { #if NETFX_CORE var displayTextAttr = fieldInfo.GetCustomAttribute(true); displayText = displayTextAttr?.Text ?? type.ToString(); #else object[] displayTextObjectArr = fieldInfo.GetCustomAttributes(typeof(DisplayTextAttribute), true); displayText = (displayTextObjectArr.Length > 0) ? ((DisplayTextAttribute)displayTextObjectArr[0]).Text : type.ToString(); #endif } } return displayText; } internal static int GetValue(string item) { var list = Translate(); foreach (var kvp in list) { if (kvp.Value == item) return kvp.Key; } return -1; } } }