2005-06-05 Peter Bartok <pbartok@novell.com>
[mono.git] / mcs / class / System.Web / System.Web.UI.HtmlControls / HtmlControl.cs
1 //\r
2 // System.Web.UI.HtmlControls.HtmlControl.cs\r
3 //\r
4 // Author\r
5 //   Bob Smith <bob@thestuff.net>\r
6 //\r
7 //\r
8 // (C) Bob Smith\r
9 //\r
10 \r
11 using System;\r
12 using System.ComponentModel;
13 using System.ComponentModel.Design;\r
14 using System.Globalization;\r
15 using System.Web;\r
16 using System.Web.UI;\r
17 \r
18 namespace System.Web.UI.HtmlControls{\r
19         \r
20         [ToolboxItem(false)]
21         [Designer ("System.Web.UI.Design.HtmlIntrinsicControlDesigner, " + Consts.AssemblySystem_Design, typeof (IDesigner))]\r
22         public abstract class HtmlControl : Control, IAttributeAccessor\r
23         {\r
24                 internal string _tagName;\r
25                 private AttributeCollection _attributes;\r
26
27                 \r
28                 public HtmlControl() : this ("span") {}\r
29                 \r
30                 public HtmlControl(string tag)\r
31                 {\r
32                         _tagName = tag;\r
33                 }\r
34                 \r
35                 protected override ControlCollection CreateControlCollection ()\r
36                 {\r
37                         return new EmptyControlCollection (this);\r
38                 }\r
39 \r
40                 internal static string AttributeToString(int n){\r
41                         if (n != -1)return n.ToString(NumberFormatInfo.InvariantInfo);\r
42                         return null;\r
43                 }\r
44                 \r
45                 internal static string AttributeToString(string s){\r
46                         if (s != null && s.Length != 0) return s;\r
47                         return null;\r
48                 }\r
49                 \r
50                 internal void PreProcessRelativeReference(HtmlTextWriter writer, string attribName){\r
51                         string attr = Attributes[attribName];\r
52                         if (attr != null){\r
53                                 if (attr.Length != 0){\r
54                                         try{\r
55                                                 attr = ResolveUrl(attr);\r
56                                         }\r
57                                         catch (Exception) {\r
58                                                 throw new HttpException(attribName + " property had malformed url");\r
59                                         }\r
60                                         writer.WriteAttribute(attribName, attr);\r
61                                         Attributes.Remove(attribName);\r
62                                 }\r
63                         }\r
64                 }\r
65                 \r
66                 string System.Web.UI.IAttributeAccessor.GetAttribute(string name){\r
67                         return Attributes[name];\r
68                 }\r
69                 \r
70                 void System.Web.UI.IAttributeAccessor.SetAttribute(string name, string value){\r
71                         Attributes[name] = value;\r
72                 }\r
73                 \r
74                 protected virtual void RenderBeginTag (HtmlTextWriter writer)\r
75                 {\r
76                         writer.WriteBeginTag (TagName);\r
77                         RenderAttributes (writer);\r
78                         writer.Write ('>');\r
79                 }\r
80 \r
81                 protected override void Render (HtmlTextWriter writer)\r
82                 {\r
83                         RenderBeginTag (writer);\r
84                 }\r
85                 \r
86                 protected virtual void RenderAttributes(HtmlTextWriter writer){\r
87                         if (ID != null){\r
88                                 writer.WriteAttribute("id",ClientID);\r
89                         }\r
90                         Attributes.Render(writer);\r
91                 }\r
92                 \r
93                 [Browsable(false)]\r
94                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]\r
95                 public AttributeCollection Attributes\r
96                 {\r
97                         get { \r
98                                 if (_attributes == null)\r
99                                         _attributes = new AttributeCollection (ViewState);\r
100                                 return _attributes;\r
101                         }\r
102                 }\r
103 \r
104                 [DefaultValue("")]\r
105                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]\r
106                 [WebCategory("Behavior")]\r
107                 public bool Disabled\r
108                 {\r
109                         get {
110                                 string disableAttr = Attributes["disabled"] as string;
111                                 return (disableAttr != null);
112                         }\r
113                         set {
114                                 if (!value)
115                                         Attributes.Remove ("disabled");
116                                 else
117                                         Attributes["disabled"] = "disabled";
118                         }\r
119                 }\r
120 \r
121                 [Browsable(false)]\r
122                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]\r
123                 public CssStyleCollection Style\r
124                 {\r
125                         get { return Attributes.CssStyle; }\r
126                 }\r
127 \r
128                 [DefaultValue("")]\r
129                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]\r
130                 [WebCategory("Appearance")]\r
131                 public virtual string TagName\r
132                 {\r
133                         get { return _tagName; }\r
134                 }\r
135 \r
136                 protected override bool ViewStateIgnoresCase \r
137                 {\r
138                         get {\r
139                                 return true;\r
140                         }\r
141                 }\r
142         }\r
143 }\r