You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			151 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System.Collections;
 | |
| using System.Collections.Generic;
 | |
| using System.Web.Util;
 | |
| 
 | |
| namespace System.Web.UI.WebControls {
 | |
|     public abstract class AutoFieldsGenerator : IAutoFieldGenerator, IStateManager {
 | |
|         private List<AutoGeneratedFieldProperties> _autoGeneratedFieldProperties;
 | |
|         private bool _tracking;
 | |
| 
 | |
|         internal bool InDataBinding {
 | |
|             get;
 | |
|             set;
 | |
|         }
 | |
| 
 | |
|         internal object DataItem {
 | |
|             get;
 | |
|             set;
 | |
|         }
 | |
| 
 | |
|         private ICollection CreateAutoGeneratedFieldsFromFieldProperties() {
 | |
|             List<AutoGeneratedField> autoFields = new List<AutoGeneratedField>();
 | |
| 
 | |
|             foreach (AutoGeneratedFieldProperties fieldProperties in AutoGeneratedFieldProperties) {
 | |
|                 autoFields.Add(CreateAutoGeneratedFieldFromFieldProperties(fieldProperties));
 | |
|             }
 | |
| 
 | |
|             return autoFields;
 | |
|         }
 | |
| 
 | |
|         //internal for unit testing.
 | |
|         protected internal List<AutoGeneratedFieldProperties> AutoGeneratedFieldProperties {
 | |
|             get {
 | |
|                 if (_autoGeneratedFieldProperties == null) {
 | |
|                     _autoGeneratedFieldProperties = new List<AutoGeneratedFieldProperties>();
 | |
|                 }
 | |
|                 return _autoGeneratedFieldProperties;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <devdoc>
 | |
|         /// Create a single autogenerated field.  This function can be overridden to create a different AutoGeneratedField.
 | |
|         /// </devdoc>
 | |
|         protected virtual AutoGeneratedField CreateAutoGeneratedFieldFromFieldProperties(AutoGeneratedFieldProperties fieldProperties) {
 | |
|             AutoGeneratedField field = new AutoGeneratedField(fieldProperties.DataField);
 | |
|             string name = fieldProperties.Name;
 | |
|             ((IStateManager)field).TrackViewState();
 | |
| 
 | |
|             field.HeaderText = name;
 | |
|             field.SortExpression = name;
 | |
|             field.ReadOnly = fieldProperties.IsReadOnly;
 | |
|             field.DataType = fieldProperties.Type;
 | |
| 
 | |
|             return field;
 | |
|         }
 | |
| 
 | |
|         protected bool IsTrackingViewState {
 | |
|             get {
 | |
|                 return _tracking;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected virtual void TrackViewState() {
 | |
|             _tracking = true;
 | |
|             foreach (object fieldProps in AutoGeneratedFieldProperties) {
 | |
|                 ((IStateManager)fieldProps).TrackViewState();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected virtual void LoadViewState(object savedState) {
 | |
|             if (savedState != null) {
 | |
|                 object[] autoGenFieldStateArray = (object[])savedState;
 | |
|                 int fieldCount = autoGenFieldStateArray.Length;
 | |
|                 AutoGeneratedFieldProperties.Clear();
 | |
| 
 | |
|                 for (int i = 0; i < fieldCount; i++) {
 | |
|                     AutoGeneratedFieldProperties fieldProps = new AutoGeneratedFieldProperties();
 | |
|                     ((IStateManager)fieldProps).TrackViewState();
 | |
|                     ((IStateManager)fieldProps).LoadViewState(autoGenFieldStateArray[i]);
 | |
|                     AutoGeneratedFieldProperties.Add(fieldProps);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected virtual object SaveViewState() {
 | |
|             // pack up the auto gen'd field properties
 | |
|             int autoGenFieldPropsCount = AutoGeneratedFieldProperties.Count;
 | |
|             object[] autoGenFieldState = new object[autoGenFieldPropsCount];
 | |
| 
 | |
|             for (int i = 0; i < autoGenFieldPropsCount; i++) {
 | |
|                 autoGenFieldState[i] = ((IStateManager)AutoGeneratedFieldProperties[i]).SaveViewState();
 | |
|             }
 | |
|             return autoGenFieldState;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Method that creates the AutoGeneratedFields. This would also typically populate the AutoGeneratedFieldProperties collection
 | |
|         /// which are tracked by view state.
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         public abstract List<AutoGeneratedField> CreateAutoGeneratedFields(object dataItem, Control control);
 | |
| 
 | |
|         /// <summary>
 | |
|         /// A flag to indicate whether Enum fields should be generated by this FieldGenerator.
 | |
|         /// If this flag is not set, the FieldGenerator uses <see cref='System.Web.UI.WebControls.Control.RenderingCompatibility'/> of
 | |
|         /// <see cref='System.Web.UI.WebControls.Control'/> to determine the default behavior which is 
 | |
|         /// true when RenderingCompatibility is greater than or equal to 4.5 and false in older versions.
 | |
|         /// </summary>
 | |
|         public bool? AutoGenerateEnumFields {
 | |
|             get;
 | |
|             set;
 | |
|         }
 | |
| 
 | |
|         #region Implementation of IAutoFieldGenerator
 | |
| 
 | |
|         public virtual ICollection GenerateFields(Control control) {
 | |
|             if (InDataBinding) {
 | |
|                 //Reset this collection as this would be populated by CreateAutoGenerateFields.
 | |
|                 _autoGeneratedFieldProperties = null;
 | |
|                 return CreateAutoGeneratedFields(DataItem, control);
 | |
|             }
 | |
|             else {
 | |
|                 return CreateAutoGeneratedFieldsFromFieldProperties();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Implementation of IStateManager
 | |
| 
 | |
|         bool IStateManager.IsTrackingViewState {
 | |
|             get {
 | |
|                 return IsTrackingViewState;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         void IStateManager.LoadViewState(object savedState) {
 | |
|             LoadViewState(savedState);
 | |
|         }
 | |
| 
 | |
|         object IStateManager.SaveViewState() {
 | |
|             return SaveViewState();
 | |
|         }
 | |
| 
 | |
|         void IStateManager.TrackViewState() {
 | |
|             TrackViewState();
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
|     }
 | |
| }
 |