You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@ -0,0 +1,150 @@
|
||||
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
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user