2 changed files with 182 additions and 0 deletions
@ -0,0 +1,68 @@ |
|||||||
|
/* |
||||||
|
* Created by SharpDevelop. |
||||||
|
* User: Peter Forstmeier |
||||||
|
* Date: 19.09.2011 |
||||||
|
* Time: 19:37 |
||||||
|
* |
||||||
|
* To change this template use Tools | Options | Coding | Edit Standard Headers. |
||||||
|
*/ |
||||||
|
using System; |
||||||
|
using System.Windows.Data; |
||||||
|
using System.Globalization; |
||||||
|
using System.Reflection; |
||||||
|
using System.Runtime.Serialization; |
||||||
|
|
||||||
|
namespace ICSharpCode.CodeQualityAnalysis.Utility.LocalizeableCombo |
||||||
|
{ |
||||||
|
/// <summary>
|
||||||
|
/// Description of EnumToFriendlyNameConverter.
|
||||||
|
/// http://www.codeproject.com/KB/WPF/FriendlyEnums.aspx
|
||||||
|
/// </summary>
|
||||||
|
|
||||||
|
[ValueConversion(typeof(object), typeof(String))] |
||||||
|
public class EnumToFriendlyNameConverter : IValueConverter |
||||||
|
{ |
||||||
|
#region IValueConverter implementation
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Convert value for binding from source object
|
||||||
|
/// </summary>
|
||||||
|
public object Convert(object value, System.Type targetType, |
||||||
|
object parameter, CultureInfo culture) |
||||||
|
{ |
||||||
|
// To get around the stupid WPF designer bug
|
||||||
|
if (value != null) |
||||||
|
{ |
||||||
|
FieldInfo fi = value.GetType().GetField(value.ToString()); |
||||||
|
|
||||||
|
// To get around the stupid WPF designer bug
|
||||||
|
if (fi != null) |
||||||
|
{ |
||||||
|
var attributes = |
||||||
|
(LocalizableDescriptionAttribute[]) |
||||||
|
fi.GetCustomAttributes(typeof |
||||||
|
(LocalizableDescriptionAttribute), false); |
||||||
|
|
||||||
|
return ((attributes.Length > 0) && |
||||||
|
(!String.IsNullOrEmpty(attributes[0].Description))) |
||||||
|
? |
||||||
|
attributes[0].Description |
||||||
|
: value.ToString(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return string.Empty; |
||||||
|
} |
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ConvertBack value from binding back to source object
|
||||||
|
/// </summary>
|
||||||
|
public object ConvertBack(object value, System.Type targetType, |
||||||
|
object parameter, CultureInfo culture) |
||||||
|
{ |
||||||
|
throw new Exception("Cant convert back"); |
||||||
|
} |
||||||
|
#endregion
|
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,114 @@ |
|||||||
|
/* |
||||||
|
* Created by SharpDevelop. |
||||||
|
* User: Peter Forstmeier |
||||||
|
* Date: 19.09.2011 |
||||||
|
* Time: 19:36 |
||||||
|
* |
||||||
|
* To change this template use Tools | Options | Coding | Edit Standard Headers. |
||||||
|
*/ |
||||||
|
using System; |
||||||
|
using System.ComponentModel; |
||||||
|
|
||||||
|
namespace ICSharpCode.CodeQualityAnalysis.Utility.LocalizeableCombo |
||||||
|
{ |
||||||
|
/// <summary>
|
||||||
|
/// Description of LocalizableDescriptionAttribute.
|
||||||
|
/// http://www.codeproject.com/KB/WPF/FriendlyEnums.aspx
|
||||||
|
/// </summary>
|
||||||
|
///
|
||||||
|
|
||||||
|
[AttributeUsage(AttributeTargets.All,Inherited = false,AllowMultiple = true)] |
||||||
|
public sealed class LocalizableDescriptionAttribute : DescriptionAttribute |
||||||
|
{ |
||||||
|
#region Public methods.
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the
|
||||||
|
/// <see cref="LocalizableDescriptionAttribute"/> class.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="description">The description.</param>
|
||||||
|
/// <param name="resourcesType">Type of the resources.</param>
|
||||||
|
public LocalizableDescriptionAttribute |
||||||
|
(string description,System.Type resourcesType) : base(description) |
||||||
|
{ |
||||||
|
// _resourcesType = resourcesType;
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public LocalizableDescriptionAttribute (string description) : base(description) |
||||||
|
|
||||||
|
{ |
||||||
|
// _resourcesType = resourcesType;
|
||||||
|
} |
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Public properties.
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get the string value from the resources.
|
||||||
|
/// </summary>
|
||||||
|
/// <value></value>
|
||||||
|
/// <returns>The description stored in this attribute.</returns>
|
||||||
|
/* |
||||||
|
public override string Description |
||||||
|
{ |
||||||
|
get |
||||||
|
{ |
||||||
|
if (!_isLocalized) |
||||||
|
{ |
||||||
|
ResourceManager resMan = |
||||||
|
_resourcesType.InvokeMember( |
||||||
|
@"ResourceManager", |
||||||
|
BindingFlags.GetProperty | BindingFlags.Static | |
||||||
|
BindingFlags.Public | BindingFlags.NonPublic, |
||||||
|
null, |
||||||
|
null, |
||||||
|
new object[] { }) as ResourceManager; |
||||||
|
|
||||||
|
CultureInfo culture = |
||||||
|
_resourcesType.InvokeMember( |
||||||
|
@"Culture", |
||||||
|
BindingFlags.GetProperty | BindingFlags.Static | |
||||||
|
BindingFlags.Public | BindingFlags.NonPublic, |
||||||
|
null, |
||||||
|
null, |
||||||
|
new object[] { }) as CultureInfo; |
||||||
|
|
||||||
|
_isLocalized = true; |
||||||
|
|
||||||
|
if (resMan != null) |
||||||
|
{ |
||||||
|
DescriptionValue = |
||||||
|
resMan.GetString(DescriptionValue, culture); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return DescriptionValue; |
||||||
|
} |
||||||
|
} |
||||||
|
*/ |
||||||
|
|
||||||
|
public override string Description |
||||||
|
{ |
||||||
|
get |
||||||
|
{ |
||||||
|
if (!_isLocalized) |
||||||
|
{ |
||||||
|
_isLocalized = true; |
||||||
|
DescriptionValue = Description; |
||||||
|
|
||||||
|
} |
||||||
|
return DescriptionValue; |
||||||
|
} |
||||||
|
} |
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Private variables.
|
||||||
|
|
||||||
|
// private readonly Type _resourcesType;
|
||||||
|
private bool _isLocalized; |
||||||
|
|
||||||
|
#endregion
|
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue