105 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Text;
 | 
						|
using System.ComponentModel;
 | 
						|
 | 
						|
namespace VEPROMS.CSLA.Library
 | 
						|
{
 | 
						|
	public class DynamicPropertyDescriptor : PropertyDescriptor
 | 
						|
	{
 | 
						|
		private PropertyDescriptor _BasePropertyDescriptor;
 | 
						|
		private ConfigDynamicTypeDescriptor _Instance;
 | 
						|
 | 
						|
		public DynamicPropertyDescriptor(ConfigDynamicTypeDescriptor instance, PropertyDescriptor basePropertyDescriptor)
 | 
						|
			: base(basePropertyDescriptor)
 | 
						|
		{
 | 
						|
			_Instance = instance;
 | 
						|
			_BasePropertyDescriptor = basePropertyDescriptor;
 | 
						|
		}
 | 
						|
		public override bool CanResetValue(object component)
 | 
						|
		{ return _BasePropertyDescriptor.CanResetValue(component); }
 | 
						|
		public override Type ComponentType
 | 
						|
		{ get { return _BasePropertyDescriptor.ComponentType; } }
 | 
						|
		public override object GetValue(object component)
 | 
						|
		{ return _BasePropertyDescriptor.GetValue(component); }
 | 
						|
		public override bool IsReadOnly
 | 
						|
		{ get { return _Instance.IsReadOnly; } }
 | 
						|
		public override Type PropertyType
 | 
						|
		{ get { return _BasePropertyDescriptor.PropertyType; } }
 | 
						|
		public override void ResetValue(object component)
 | 
						|
		{ _BasePropertyDescriptor.ResetValue(component); }
 | 
						|
		public override bool ShouldSerializeValue(object component)
 | 
						|
		{ return _BasePropertyDescriptor.ShouldSerializeValue(component); }
 | 
						|
		public override void SetValue(object component, object value)
 | 
						|
		{ _BasePropertyDescriptor.SetValue(component, value); }
 | 
						|
	}
 | 
						|
	[Serializable()]
 | 
						|
	public class ConfigDynamicTypeDescriptor //: ICustomTypeDescriptor//, ISupportInitialize
 | 
						|
	{
 | 
						|
		#region Events
 | 
						|
		public event PropertyChangedEventHandler PropertyChanged;
 | 
						|
		protected void OnPropertyChanged(String info)
 | 
						|
		{
 | 
						|
			_IsDirty = true;
 | 
						|
			if (PropertyChanged != null)
 | 
						|
				PropertyChanged(this, new PropertyChangedEventArgs(info));
 | 
						|
		}
 | 
						|
		private bool _IsDirty = false;
 | 
						|
		public bool IsDirty
 | 
						|
		{
 | 
						|
			get { return _IsDirty; }
 | 
						|
			set { _IsDirty = value; }
 | 
						|
		}
 | 
						|
		#endregion
 | 
						|
		[NonSerialized]
 | 
						|
		private PropertyDescriptorCollection dynamicProps;
 | 
						|
		private bool _IsReadOnly = false;
 | 
						|
		internal virtual bool IsReadOnly
 | 
						|
		{
 | 
						|
			get { return _IsReadOnly; }
 | 
						|
			set { _IsReadOnly = value; }
 | 
						|
		}
 | 
						|
		public ConfigDynamicTypeDescriptor() { }
 | 
						|
		#region "TypeDescriptor Implementation"
 | 
						|
		public String GetClassName()
 | 
						|
		{ return TypeDescriptor.GetClassName(this, true); }
 | 
						|
		public AttributeCollection GetAttributes()
 | 
						|
		{ return TypeDescriptor.GetAttributes(this, true); }
 | 
						|
		public String GetComponentName()
 | 
						|
		{ return TypeDescriptor.GetComponentName(this, true); }
 | 
						|
		public TypeConverter GetConverter()
 | 
						|
		{ return TypeDescriptor.GetConverter(this, true); }
 | 
						|
		public EventDescriptor GetDefaultEvent()
 | 
						|
		{ return TypeDescriptor.GetDefaultEvent(this, true); }
 | 
						|
		public PropertyDescriptor GetDefaultProperty()
 | 
						|
		{ return TypeDescriptor.GetDefaultProperty(this, true); }
 | 
						|
		public object GetEditor(Type editorBaseType)
 | 
						|
		{ return TypeDescriptor.GetEditor(this, editorBaseType, true); }
 | 
						|
		public EventDescriptorCollection GetEvents(Attribute[] attributes)
 | 
						|
		{ return TypeDescriptor.GetEvents(this, attributes, true); }
 | 
						|
		public EventDescriptorCollection GetEvents()
 | 
						|
		{ return TypeDescriptor.GetEvents(this, true); }
 | 
						|
		public PropertyDescriptorCollection GetProperties(Attribute[] attributes)
 | 
						|
		{
 | 
						|
			return GetProperties();
 | 
						|
		}
 | 
						|
		public PropertyDescriptorCollection GetProperties()
 | 
						|
		{
 | 
						|
			if (dynamicProps == null)
 | 
						|
			{
 | 
						|
				PropertyDescriptorCollection baseProps = TypeDescriptor.GetProperties(this, true);
 | 
						|
				dynamicProps = new PropertyDescriptorCollection(null);
 | 
						|
 | 
						|
				foreach (PropertyDescriptor oProp in baseProps)
 | 
						|
				{
 | 
						|
					dynamicProps.Add(new DynamicPropertyDescriptor(this, oProp));
 | 
						|
				}
 | 
						|
			}
 | 
						|
			return dynamicProps;
 | 
						|
		}
 | 
						|
		public object GetPropertyOwner(PropertyDescriptor pd)
 | 
						|
		{ return this; }
 | 
						|
		#endregion
 | 
						|
	}
 | 
						|
}
 |