#if FRAMEWORK20 using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; using System.Drawing; using DevComponents.AdvTree; using System.Drawing.Design; namespace DevComponents.DotNetBar { /// /// Describes the property settings applied to the property on AdvPropertyGrid control. /// [ToolboxItem(false)] public class PropertySettings : Component, INotifyPropertyChanged { #region Events /// /// Occurs when property value is being converted to text representation for display. You can handle this event /// to provide custom conversion for property values. You must set IsConverted=true on event arguments to indicate that you have performed value conversion. /// [Description("Occurs when property value is being converted to text representation for display.")] public event ConvertValueEventHandler ConvertPropertyValueToString; /// /// Occurs when text entered by user is being converted to typed property value to be assigned to the property. You can handle this event /// to provide custom conversion for property values. You must set IsConverted=true on event arguments to indicate that you have performed value conversion. /// [Description("Occurs when text entered by user is being converted to typed property value to be assigned to the property.")] public event ConvertValueEventHandler ConvertFromStringToPropertyValue; /// /// Occurs when property looks for the list of valid values for the property to show on either drop-down or use /// in auto-complete list. For example when property type is enum the internal implementation will convert available enum /// values into string list and use on drop-down and in auto-complete list. You can use this event to provide /// custom value list in combination with ConvertPropertyValueToString, ConvertFromStringToPropertyValue events. /// You must set IsListValid=true on event arguments to indicate that list your provided should be used. /// [Description("Occurs when property looks for the list of valid values for the property to show on either drop-down or use in auto-complete list.")] public event PropertyValueListEventHandler ProvidePropertyValueList; #endregion #region Constructors /// /// Initializes a new instance of the PropertySettings class. /// public PropertySettings() { } /// /// Initializes a new instance of the PropertySettings class. /// /// public PropertySettings(string propertyName) { _PropertyName = propertyName; } /// /// Initializes a new instance of the PropertySettings class. /// /// public PropertySettings(PropertyDescriptor propertyDescriptor) { _PropertyDescriptor = propertyDescriptor; } protected override void Dispose(bool disposing) { if (BarUtilities.DisposeItemImages && !this.DesignMode) { BarUtilities.DisposeImage(ref _Image); } base.Dispose(disposing); } #endregion #region Internal Implementation private ElementStyle _ReadOnlyStyle = null; /// /// Gets or sets read-only property style. /// /// /// Default value is null. /// [DefaultValue(null), /*Editor("DevComponents.AdvTree.Design.ElementStyleTypeEditor, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf", typeof(System.Drawing.Design.UITypeEditor)),*/ Description("Indicates read-only property style.")] public ElementStyle ReadOnlyStyle { get { return _ReadOnlyStyle; } set { if (_ReadOnlyStyle != value) { if (_ReadOnlyStyle != null) _ReadOnlyStyle.StyleChanged -= ReadOnlyStyleChanged; if (value != null) value.StyleChanged += ReadOnlyStyleChanged; _ReadOnlyStyle = value; OnPropertyChanged(new PropertyChangedEventArgs("ReadOnlyStyle")); } } } private void ReadOnlyStyleChanged(object sender, EventArgs e) { } private bool _ReadOnly = false; /// /// Gets or sets whether property is in read-only state. Default value is false. /// [DefaultValue(false), Description("Indicates whether property is in read-only state."), Category("Behavior")] public bool ReadOnly { get { return _ReadOnly; } set { if (value != _ReadOnly) { bool oldValue = _ReadOnly; _ReadOnly = value; OnReadOnlyChanged(oldValue, value); } } } private void OnReadOnlyChanged(bool oldValue, bool newValue) { OnPropertyChanged(new PropertyChangedEventArgs("ReadOnly")); } private SuperTooltipInfo _ReadOnlyTooltip; /// /// Gets or sets the SuperTooltip that is displayed when property is in read-only state (ReadOnly=true). /// [DefaultValue(null), Description("Indicates SuperTooltip that is displayed when property is in read-only state (ReadOnly=true)"), Category("Behavior")] public SuperTooltipInfo ReadOnlyTooltip { get { return _ReadOnlyTooltip; } set { if (value != _ReadOnlyTooltip) { SuperTooltipInfo oldValue = _ReadOnlyTooltip; _ReadOnlyTooltip = value; OnReadOnlyTooltipChanged(oldValue, value); } } } private void OnReadOnlyTooltipChanged(SuperTooltipInfo oldValue, SuperTooltipInfo newValue) { OnPropertyChanged(new PropertyChangedEventArgs("ReadOnlyTooltip")); } /// /// Raises the ConvertPropertyValueToString event. /// /// Provides event data protected virtual void OnConvertPropertyValueToString(ConvertValueEventArgs e) { ConvertValueEventHandler handler = ConvertPropertyValueToString; if (handler != null) handler(this, e); } internal void InvokeConvertPropertyValueToString(ConvertValueEventArgs e) { OnConvertPropertyValueToString(e); } internal bool HasConvertPropertyValueToStringHandler { get { return ConvertPropertyValueToString != null; } } /// /// Raises the ConvertFromStringToPropertyValue event. /// /// Provides event data protected virtual void OnConvertFromStringToPropertyValue(ConvertValueEventArgs e) { ConvertValueEventHandler handler = ConvertFromStringToPropertyValue; if (handler != null) handler(this, e); } internal void InvokeConvertFromStringToPropertyValue(ConvertValueEventArgs e) { OnConvertFromStringToPropertyValue(e); } internal bool HasConvertFromStringToPropertyValueHandler { get { return ConvertFromStringToPropertyValue != null; } } /// /// Raises the ProvidePropertyValueList event. /// /// Provides event data protected virtual void OnProvidePropertyValueList(PropertyValueListEventArgs e) { PropertyValueListEventHandler handler = ProvidePropertyValueList; if (handler != null) handler(this, e); } internal void InvokeProvidePropertyValueList(PropertyValueListEventArgs e) { OnProvidePropertyValueList(e); } internal bool HasProvidePropertyValueListHandler { get { return ProvidePropertyValueList != null; } } private SuperTooltipInfo _Tooltip = null; /// /// Gets or sets the SuperTooltip that is assigned to the property. /// [DefaultValue(null), Localizable(true), Category("Appearance"), Description("Indicates SuperTooltip that is assigned to the property.")] public SuperTooltipInfo Tooltip { get { return _Tooltip; } set { if (value != _Tooltip) { SuperTooltipInfo oldValue = _Tooltip; _Tooltip = value; OnTooltipChanged(oldValue, value); } } } private void OnTooltipChanged(SuperTooltipInfo oldValue, SuperTooltipInfo newValue) { OnPropertyChanged(new PropertyChangedEventArgs("Tooltip")); } private Image _Image = null; /// /// Gets or sets the image that is displayed next to the property name in the grid. /// [DefaultValue(null), Category("Appearance"), Localizable(true), Description("Indicates image that is displayed next to the property name in the grid.")] public Image Image { get { return _Image; } set { if (value != _Image) { Image oldValue = _Image; _Image = value; OnImageChanged(oldValue, value); } } } private void OnImageChanged(Image oldValue, Image newValue) { OnPropertyChanged(new PropertyChangedEventArgs("Image")); } private eCellPartAlignment _ImageAlignment = eCellPartAlignment.NearCenter; /// /// Gets or sets the image alignment in relation to the property name inside of the grid cell. /// [DefaultValue(eCellPartAlignment.NearCenter), Category("Appearance"), Description("Indicates image alignment in relation to the property name inside of the grid cell.")] public eCellPartAlignment ImageAlignment { get { return _ImageAlignment; } set { if (value != _ImageAlignment) { eCellPartAlignment oldValue = _ImageAlignment; _ImageAlignment = value; OnImageAlignmentChanged(oldValue, value); } } } private void OnImageAlignmentChanged(eCellPartAlignment oldValue, eCellPartAlignment newValue) { OnPropertyChanged(new PropertyChangedEventArgs("ImageAlignment")); } private string _Category = null; /// /// Gets or sets the custom category node will be placed in instead of category specified by Category attribute. /// [DefaultValue(null), Category("Appearance"), Localizable(true), Description("Indicates custom category node will be placed in instead of category specified by Category attribute.")] public string Category { get { return _Category; } set { if (value != _Category) { string oldValue = _Category; _Category = value; OnCategoryChanged(oldValue, value); } } } private void OnCategoryChanged(string oldValue, string newValue) { OnPropertyChanged(new PropertyChangedEventArgs("Category")); } private string _DisplayName = null; /// /// Gets or sets the custom property name that is displayed in the grid instead of the real property name. /// [DefaultValue(null), Category("Appearance"), Localizable(true), Description("Indicates custom property name that is displayed in the grid instead of the real property name.")] public string DisplayName { get { return _DisplayName; } set { if (value != _DisplayName) { string oldValue = _DisplayName; _DisplayName = value; OnDisplayNameChanged(oldValue, value); } } } private void OnDisplayNameChanged(string oldValue, string newValue) { OnPropertyChanged(new PropertyChangedEventArgs("DisplayName")); } private string _PropertyName = ""; /// /// Gets or sets the name of the property that is managed by this informational object. If you set PropertyDescriptor than that is the value /// that will be used by the control regardless of PropertyName value. /// If you set PropertyName but not PropertyDescriptor then all properties with given name /// regardless of type will use these settings. /// [DefaultValue("Indicates the name of the properties that settings are applied to.")] public string PropertyName { get { if (_PropertyDescriptor != null) return _PropertyDescriptor.Name; return _PropertyName; } set { if (_PropertyName == value) return; _PropertyName = value; OnPropertyNameChanged(); } } private void OnPropertyNameChanged() { OnPropertyChanged(new PropertyChangedEventArgs("PropertyName")); } private PropertyDescriptor _PropertyDescriptor = null; /// /// Gets or sets property descriptor that identifies the property settings apply to. If you set PropertyDescriptor than that is the value /// that will be used by the control regardless of PropertyName value. /// If you set PropertyName but not PropertyDescriptor then all properties with given name /// regardless of type will use these settings. /// [DefaultValue(null), Description("Indicates property descriptor that identifies the property that uses these settings.")] public PropertyDescriptor PropertyDescriptor { get { return _PropertyDescriptor; } set { if (_PropertyDescriptor != value) { _PropertyDescriptor = value; OnPropertyDescriptorChanged(); } } } private void OnPropertyDescriptorChanged() { OnPropertyChanged(new PropertyChangedEventArgs("PropertyDescriptor")); } private ElementStyle _Style = null; /// /// Gets or sets default property style. /// /// /// Default value is null. /// [DefaultValue(null), /*Editor("DevComponents.AdvTree.Design.ElementStyleTypeEditor, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf", typeof(System.Drawing.Design.UITypeEditor)),*/ Description("Indicates default property style.")] public ElementStyle Style { get { return _Style; } set { if (_Style != value) { if (_Style != null) _Style.StyleChanged -= StyleChanged; if (value != null) value.StyleChanged += StyleChanged; _Style = value; OnPropertyChanged(new PropertyChangedEventArgs("Style")); } } } private void StyleChanged(object sender, EventArgs e) { } private UITypeEditor _UITypeEditor = null; /// /// Gets or sets the UITypeEditor used to edit the property. /// [DefaultValue(null), Category("Behavior"), Browsable(false)] public UITypeEditor UITypeEditor { get { return _UITypeEditor; } set { if (value != _UITypeEditor) { UITypeEditor oldValue = _UITypeEditor; _UITypeEditor = value; OnUITypeEditorChanged(oldValue, value); } } } private void OnUITypeEditorChanged(UITypeEditor oldValue, UITypeEditor newValue) { OnPropertyChanged(new PropertyChangedEventArgs("UITypeEditor")); } private PropertyValueEditor _ValueEditor = null; /// /// Gets or sets the custom in-line property value editor. Property value editor is created by inheriting from PropertyValueEditor class. /// [DefaultValue(null), Browsable(false)] public PropertyValueEditor ValueEditor { get { return _ValueEditor; } set { if (value != _ValueEditor) { PropertyValueEditor oldValue = _ValueEditor; _ValueEditor = value; OnValueEditorChanged(oldValue, value); } } } private void OnValueEditorChanged(PropertyValueEditor oldValue, PropertyValueEditor newValue) { OnPropertyChanged(new PropertyChangedEventArgs("ValueEditor")); } private bool _Visible = true; /// /// Gets or sets whether node is visible in property grid. Default value is true. /// [DefaultValue(true), Category("Appearance"), Description("Indicates whether node is visible in property grid.")] public bool Visible { get { return _Visible; } set { if (value != _Visible) { bool oldValue = _Visible; _Visible = value; OnVisibleChanged(oldValue, value); } } } private void OnVisibleChanged(bool oldValue, bool newValue) { OnPropertyChanged(new PropertyChangedEventArgs("Visible")); } private ePropertyNodeType _PropertyNodeType = ePropertyNodeType.Default; /// /// Gets or sets the property node type that is used to edit this property value. Note that content of property grid would need to be /// reloaded to apply any changes to this property. /// [DefaultValue(ePropertyNodeType.Default), Description("Indicates property node type that is used to edit this property value.")] public ePropertyNodeType PropertyNodeType { get { return _PropertyNodeType; } set { if (value != _PropertyNodeType) { ePropertyNodeType oldValue = _PropertyNodeType; _PropertyNodeType = value; OnPropertyNodeTypeChanged(oldValue, value); } } } private void OnPropertyNodeTypeChanged(ePropertyNodeType oldValue, ePropertyNodeType newValue) { OnPropertyChanged(new PropertyChangedEventArgs("PropertyNodeType")); } private string _Description = null; /// /// Gets or sets the property description that overrides description specified on property through DescriptionAttribute. /// Default value is null. /// [DefaultValue(null), Description("Indicates property description that overrides description specified on property through DescriptionAttribute. "), Localizable(true)] public string Description { get { return _Description; } set { if (value != _Description) { string oldValue = _Description; _Description = value; OnDescriptionChanged(oldValue, value); } } } private void OnDescriptionChanged(string oldValue, string newValue) { OnPropertyChanged(new PropertyChangedEventArgs("Description")); } private TypeConverter _TypeConverter = null; /// /// Gets or sets custom TypeConverter assigned to the property which will override any TypeConverter that is returned by the PropertyDescriptor. /// [Browsable(false), DefaultValue(null)] public TypeConverter TypeConverter { get { return _TypeConverter; } set { if (value != _TypeConverter) { TypeConverter oldValue = _TypeConverter; _TypeConverter = value; OnTypeConverterChanged(oldValue, value); } } } /// /// Called when TypeConverter property has changed. /// /// Old property value /// New property value protected virtual void OnTypeConverterChanged(TypeConverter oldValue, TypeConverter newValue) { OnPropertyChanged(new PropertyChangedEventArgs("TypeConverter")); } internal static string NamePropertyName = "PropertyName"; internal static string NamePropertyDescriptor = "PropertyDescriptor"; internal static string NameVisible = "Visible"; #endregion #region INotifyPropertyChanged Members /// /// Raises PropertyChanged event. /// /// Event data. protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) handler(this, e); } /// /// Occurs when property value on the object changes. /// public event PropertyChangedEventHandler PropertyChanged; #endregion } /// /// Defines the type of the property node in grid that is assigned to property. /// public enum ePropertyNodeType { /// /// Specifies default node type for the property. /// Default, /// /// Specifies the node type that is constructed as group of option buttons that represent all values for the property. Works best /// for smaller set of Enum values. /// RadioButtonList } } #endif