[PersistChildren(false), ParseChildren(true), PermissionSet(SecurityAction.LinkDemand, XML="<PermissionSet class=\"System.Security.PermissionSet\"\r\n version=\"1\">\r\n <IPermission class=\"System.Web.AspNetHostingPermission, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\"\r\n version=\"1\"\r\n Level=\"Minimal\"/>\r\n</PermissionSet>\r\n"), PermissionSet(SecurityAction.InheritanceDemand, XML="<PermissionSet class=\"System.Security.PermissionSet\"\r\n version=\"1\">\r\n <IPermission class=\"System.Web.AspNetHostingPermission, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\"\r\n version=\"1\"\r\n Level=\"Minimal\"/>\r\n</PermissionSet>\r\n")]
public class WebControl : Control, IAttributeAccessor
{
// Fields
private const int accessKeySet = 8;
private AttributeCollection attrColl;
private StateBag attrState;
private Style controlStyle;
private const int deferStyleLoadViewState = 1;
private const int disabled = 2;
private const int disabledDirty = 4;
private SimpleBitVector32 flags;
private const int tabIndexSet = 0x20;
private HtmlTextWriterTag tagKey;
private string tagName;
private const int toolTipSet = 0x10;
// Methods
protected WebControl() : this(HtmlTextWriterTag.Span)
{
}
protected WebControl(string tag)
{
this.tagKey = HtmlTextWriterTag.Unknown;
this.tagName = tag;
}
public WebControl(HtmlTextWriterTag tag)
{
this.tagKey = tag;
}
protected virtual void AddAttributesToRender(HtmlTextWriter writer)
{
string accessKey;
if (this.ID != null)
{
writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ClientID);
}
if (this.flags[8])
{
accessKey = this.AccessKey;
if (accessKey.Length > 0)
{
writer.AddAttribute(HtmlTextWriterAttribute.Accesskey, accessKey);
}
}
if (!this.Enabled)
{
writer.AddAttribute(HtmlTextWriterAttribute.Disabled, "disabled");
}
if (this.flags[0x20])
{
int tabIndex = this.TabIndex;
if (tabIndex != 0)
{
writer.AddAttribute(HtmlTextWriterAttribute.Tabindex, tabIndex.ToString(NumberFormatInfo.InvariantInfo));
}
}
if (this.flags[0x10])
{
accessKey = this.ToolTip;
if (accessKey.Length > 0)
{
writer.AddAttribute(HtmlTextWriterAttribute.Title, accessKey);
}
}
if (this.ControlStyleCreated && !this.ControlStyle.IsEmpty)
{
this.ControlStyle.AddAttributesToRender(writer, this);
}
if (this.attrState != null)
{
AttributeCollection attributes = this.Attributes;
IEnumerator enumerator = attributes.Keys.GetEnumerator();
while (enumerator.MoveNext())
{
string current = (string) enumerator.Current;
writer.AddAttribute(current, attributes[current]);
}
}
}
public void ApplyStyle(Style s)
{
if ((s != null) && !s.IsEmpty)
{
this.ControlStyle.CopyFrom(s);
}
}
public void CopyBaseAttributes(WebControl controlSrc)
{
if (controlSrc.flags[8])
{
this.AccessKey = controlSrc.AccessKey;
}
if (!controlSrc.Enabled)
{
this.Enabled = false;
}
if (controlSrc.flags[0x10])
{
this.ToolTip = controlSrc.ToolTip;
}
if (controlSrc.flags[0x20])
{
this.TabIndex = controlSrc.TabIndex;
}
foreach (string str in controlSrc.Attributes.Keys)
{
this.Attributes[str] = controlSrc.Attributes[str];
}
}
protected virtual Style CreateControlStyle()
{
return new Style(this.ViewState);
}
protected override void LoadViewState(object savedState)
{
if (savedState != null)
{
Pair pair = (Pair) savedState;
base.LoadViewState(pair.First);
if (this.ControlStyleCreated || (this.ViewState["_!SB"] != null))
{
this.ControlStyle.LoadViewState(null);
}
else
{
this.flags[1] = true;
}
if (pair.Second != null)
{
if (this.attrState == null)
{
this.attrState = new StateBag(true);
this.attrState.TrackViewState();
}
this.attrState.LoadViewState(pair.Second);
}
}
object obj2 = this.ViewState["Enabled"];
if (obj2 != null)
{
this.flags[2] = !((bool) obj2);
this.flags[4] = true;
}
if (((IDictionary) this.ViewState).Contains("AccessKey"))
{
this.flags[8] = true;
}
if (((IDictionary) this.ViewState).Contains("TabIndex"))
{
this.flags[0x20] = true;
}
if (((IDictionary) this.ViewState).Contains("ToolTip"))
{
this.flags[0x10] = true;
}
}
public void MergeStyle(Style s)
{
if ((s != null) && !s.IsEmpty)
{
this.ControlStyle.MergeWith(s);
}
}
protected override void Render(HtmlTextWriter writer)
{
this.RenderBeginTag(writer);
this.RenderContents(writer);
this.RenderEndTag(writer);
}
public virtual void RenderBeginTag(HtmlTextWriter writer)
{
this.AddAttributesToRender(writer);
HtmlTextWriterTag tagKey = this.TagKey;
if (tagKey != HtmlTextWriterTag.Unknown)
{
writer.RenderBeginTag(tagKey);
}
else
{
writer.RenderBeginTag(this.TagName);
}
}
protected virtual void RenderContents(HtmlTextWriter writer)
{
base.Render(writer);
}
public virtual void RenderEndTag(HtmlTextWriter writer)
{
writer.RenderEndTag();
}
protected override object SaveViewState()
{
Pair pair = null;
if (this.flags[4])
{
this.ViewState["Enabled"] = !this.flags[2];
}
if (this.ControlStyleCreated)
{
this.ControlStyle.SaveViewState();
}
object x = base.SaveViewState();
object y = null;
if (this.attrState != null)
{
y = this.attrState.SaveViewState();
}
if ((x == null) && (y == null))
{
return pair;
}
return new Pair(x, y);
}
string IAttributeAccessor.GetAttribute(string name)
{
if (this.attrState == null)
{
return null;
}
return (string) this.attrState[name];
}
void IAttributeAccessor.SetAttribute(string name, string value)
{
this.Attributes[name] = value;
}
protected override void TrackViewState()
{
base.TrackViewState();
if (this.ControlStyleCreated)
{
this.ControlStyle.TrackViewState();
}
if (this.attrState != null)
{
this.attrState.TrackViewState();
}
}
// Properties
[WebSysDescription("WebControl_AccessKey"), DefaultValue(""), Bindable(true), WebCategory("Behavior")]
public virtual string AccessKey
{
get
{
if (this.flags[8])
{
string str = (string) this.ViewState["AccessKey"];
if (str != null)
{
return str;
}
}
return string.Empty;
}
set
{
if ((value != null) && (value.Length > 1))
{
throw new ArgumentOutOfRangeException("value");
}
this.ViewState["AccessKey"] = value;
this.flags[8] = true;
}
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), WebSysDescription("WebControl_Attributes"), Browsable(false)]
public AttributeCollection Attributes
{
get
{
if (this.attrColl == null)
{
if (this.attrState == null)
{
this.attrState = new StateBag(true);
if (base.IsTrackingViewState)
{
this.attrState.TrackViewState();
}
}
this.attrColl = new AttributeCollection(this.attrState);
}
return this.attrColl;
}
}
[WebCategory("Appearance"), DefaultValue(typeof(Color), ""), WebSysDescription("WebControl_BackColor"), TypeConverter(typeof(WebColorConverter)), Bindable(true)]
public virtual Color BackColor
{
get
{
if (!this.ControlStyleCreated)
{
return Color.Empty;
}
return this.ControlStyle.BackColor;
}
set
{
this.ControlStyle.BackColor = value;
}
}
[Bindable(true), WebCategory("Appearance"), WebSysDescription("WebControl_BorderColor"), TypeConverter(typeof(WebColorConverter)), DefaultValue(typeof(Color), "")]
public virtual Color BorderColor
{
get
{
if (!this.ControlStyleCreated)
{
return Color.Empty;
}
return this.ControlStyle.BorderColor;
}
set
{
this.ControlStyle.BorderColor = value;
}
}
[DefaultValue(0), Bindable(true), WebCategory("Appearance"), WebSysDescription("WebControl_BorderStyle")]
public virtual BorderStyle BorderStyle
{
get
{
if (!this.ControlStyleCreated)
{
return BorderStyle.NotSet;
}
return this.ControlStyle.BorderStyle;
}
set
{
this.ControlStyle.BorderStyle = value;
}
}
[Bindable(true), DefaultValue(typeof(Unit), ""), WebSysDescription("WebControl_BorderWidth"), WebCategory("Appearance")]
public virtual Unit BorderWidth
{
get
{
if (!this.ControlStyleCreated)
{
return Unit.Empty;
}
return this.ControlStyle.BorderWidth;
}
set
{
if (value.Value < 0.0)
{
throw new ArgumentOutOfRangeException("value");
}
this.ControlStyle.BorderWidth = value;
}
}
[WebSysDescription("WebControl_ControlStyle"), Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public Style ControlStyle
{
get
{
if (this.controlStyle == null)
{
this.controlStyle = this.CreateControlStyle();
if (base.IsTrackingViewState)
{
this.controlStyle.TrackViewState();
}
if (this.flags[1])
{
this.flags[1] = false;
this.controlStyle.LoadViewState(null);
}
}
return this.controlStyle;
}
}
[Browsable(false), WebSysDescription("WebControl_ControlStyleCreated"), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public bool ControlStyleCreated
{
get
{
return (this.controlStyle != null);
}
}
[WebCategory("Appearance"), DefaultValue(""), WebSysDescription("WebControl_CSSClassName"), Bindable(true)]
public virtual string CssClass
{
get
{
if (!this.ControlStyleCreated)
{
return string.Empty;
}
return this.ControlStyle.CssClass;
}
set
{
this.ControlStyle.CssClass = value;
}
}
[WebCategory("Behavior"), DefaultValue(true), WebSysDescription("WebControl_Enabled"), Bindable(true)]
public virtual bool Enabled
{
get
{
return !this.flags[2];
}
set
{
bool flag = !this.flags[2];
if (flag != value)
{
this.flags[2] = !value;
if (base.IsTrackingViewState)
{
this.flags[4] = true;
}
}
}
}
[NotifyParentProperty(true), DefaultValue((string) null), WebSysDescription("WebControl_Font"), DesignerSerializationVisibility(DesignerSerializationVisibility.Content), WebCategory("Appearance")]
public virtual FontInfo Font
{
get
{
return this.ControlStyle.Font;
}
}
[WebSysDescription("WebControl_ForeColor"), TypeConverter(typeof(WebColorConverter)), Bindable(true), WebCategory("Appearance"), DefaultValue(typeof(Color), "")]
public virtual Color ForeColor
{
get
{
if (!this.ControlStyleCreated)
{
return Color.Empty;
}
return this.ControlStyle.ForeColor;
}
set
{
this.ControlStyle.ForeColor = value;
}
}
internal bool HasAttributes
{
get
{
return (((this.attrColl != null) && (this.attrColl.Count > 0)) || ((this.attrState != null) && (this.attrState.Count > 0)));
}
}
[WebCategory("Layout"), WebSysDescription("WebControl_Height"), DefaultValue(typeof(Unit), ""), Bindable(true)]
public virtual Unit Height
{
get
{
if (!this.ControlStyleCreated)
{
return Unit.Empty;
}
return this.ControlStyle.Height;
}
set
{
if (value.Value < 0.0)
{
throw new ArgumentOutOfRangeException("value");
}
this.ControlStyle.Height = value;
}
}
[WebSysDescription("WebControl_Style"), Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public CssStyleCollection Style
{
get
{
return this.Attributes.CssStyle;
}
}
[WebCategory("Behavior"), DefaultValue((short) 0), WebSysDescription("WebControl_TabIndex")]
public virtual short TabIndex
{
get
{
if (this.flags[0x20])
{
object obj2 = this.ViewState["TabIndex"];
if (obj2 != null)
{
return (short) obj2;
}
}
return 0;
}
set
{
this.ViewState["TabIndex"] = value;
this.flags[0x20] = true;
}
}
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
protected virtual HtmlTextWriterTag TagKey
{
get
{
return this.tagKey;
}
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), Browsable(false)]
protected virtual string TagName
{
get
{
if ((this.tagName == null) && (this.tagKey != HtmlTextWriterTag.Unknown))
{
this.tagName = Enum.Format(typeof(HtmlTextWriterTag), this.tagKey, "G").ToLower(CultureInfo.InvariantCulture);
}
return this.tagName;
}
}
[Bindable(true), DefaultValue(""), WebSysDescription("WebControl_Tooltip"), WebCategory("Behavior")]
public virtual string ToolTip
{
get
{
if (this.flags[0x10])
{
string str = (string) this.ViewState["ToolTip"];
if (str != null)
{
return str;
}
}
return string.Empty;
}
set
{
this.ViewState["ToolTip"] = value;
this.flags[0x10] = true;
}
}
[DefaultValue(typeof(Unit), ""), WebSysDescription("WebControl_Width"), Bindable(true), WebCategory("Layout")]
public virtual Unit Width
{
get
{
if (!this.ControlStyleCreated)
{
return Unit.Empty;
}
return this.ControlStyle.Width;
}
set
{
if (value.Value < 0.0)
{
throw new ArgumentOutOfRangeException("value");
}
this.ControlStyle.Width = value;
}
}
}