Implement accessibility features for NET_1_1 configuration.
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / Label.cs
1 //
2 // System.Web.UI.WebControls.Label.cs
3 //
4 // Authors:
5 //   Gaurav Vaish (gvaish@iitk.ac.in)
6 //   Andreas Nahr (ClassDevelopment@A-SoftTech.com)
7 //
8 // (C) Gaurav Vaish (2002)
9 // (C) 2003 Andreas Nahr
10 //
11
12 //
13 // Permission is hereby granted, free of charge, to any person obtaining
14 // a copy of this software and associated documentation files (the
15 // "Software"), to deal in the Software without restriction, including
16 // without limitation the rights to use, copy, modify, merge, publish,
17 // distribute, sublicense, and/or sell copies of the Software, and to
18 // permit persons to whom the Software is furnished to do so, subject to
19 // the following conditions:
20 // 
21 // The above copyright notice and this permission notice shall be
22 // included in all copies or substantial portions of the Software.
23 // 
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 //
32 \r
33 using System;\r
34 using System.ComponentModel;
35 using System.ComponentModel.Design;\r
36 using System.Web;\r
37 using System.Web.UI;\r
38 \r
39 namespace System.Web.UI.WebControls\r
40 {\r
41 #if NET_2_0\r
42         [ControlValuePropertyAttribute ("Text")]\r
43 #endif\r
44         [DefaultProperty("Text")]\r
45         [Designer("System.Web.UI.Design.WebControls.LabelDesigner, " + Consts.AssemblySystem_Design, typeof (IDesigner))]\r
46         [DataBindingHandler("System.Web.UI.Design.TextDataBindingHandler, " + Consts.AssemblySystem_Design)]\r
47         [ControlBuilder(typeof(LabelControlBuilder))] \r
48         [ParseChildren(false)]\r
49         [ToolboxData("<{0}:Label runat=\"server\">Label</{0}:Label>")]\r
50         public class Label : WebControl\r
51 #if NET_2_0\r
52                 , ITextControl\r
53 #endif\r
54         {\r
55                 public Label (): base ()\r
56                 {\r
57                 }\r
58 \r
59 #if NET_2_0\r
60                 [Localizable (true)]\r
61 #endif\r
62                 [DefaultValue (""), Bindable (true), WebCategory ("Appearance")]
63                 [PersistenceMode (PersistenceMode.InnerDefaultProperty)]
64                 [WebSysDescription ("The text that should be shown on this Label.")]\r
65                 public virtual string Text\r
66                 {\r
67                         get {\r
68                                 object o = ViewState ["Text"];\r
69                                 return (o == null) ? String.Empty : (string) o;\r
70                         }\r
71 \r
72                         set { ViewState ["Text"] = value; }\r
73                 }\r
74                 \r
75 #if NET_1_1\r
76                 [WebCategory ("Accessibility")]\r
77                 [DefaultValueAttribute ("")]\r
78 #if NET_2_0
79                 [ThemeableAttribute (false)]\r
80                 [IDReferencePropertyAttribute (typeof(System.Web.UI.Control))]\r
81                 [TypeConverterAttribute (typeof(AssociatedControlConverter))]\r
82 #endif
83                 public string AssociatedControlID\r
84                 {\r
85                         get {\r
86                                 object o = ViewState ["AssociatedControlID"];\r
87                                 return (o == null) ? String.Empty : (string) o;\r
88                         }\r
89 \r
90                         set { ViewState ["AssociatedControlID"] = value; }\r
91                 }\r
92         \r
93         \r
94                 protected override HtmlTextWriterTag TagKey {\r
95                         get {\r
96                                 if (AssociatedControlID.Length == 0)\r
97                                         return HtmlTextWriterTag.Span;\r
98                                 else\r
99                                         return HtmlTextWriterTag.Label;\r
100                         }\r
101                 }\r
102                 \r
103                 protected override void AddAttributesToRender (HtmlTextWriter writer)\r
104                 {\r
105                         if (AssociatedControlID.Length > 0) {\r
106                                 Control ctrl = Page.FindControl (AssociatedControlID);\r
107                                 if (ctrl != null)\r
108                                         writer.AddAttribute (HtmlTextWriterAttribute.For, ctrl.ClientID);\r
109                         }\r
110                         \r
111                         base.AddAttributesToRender (writer);\r
112                         \r
113                 }\r
114 #endif\r
115 \r
116 \r
117                 protected override void AddParsedSubObject (object obj)\r
118                 {\r
119                         if(HasControls ()){\r
120                                 base.AddParsedSubObject (obj);\r
121                                 return;\r
122                         }\r
123 \r
124                         if(obj is LiteralControl){\r
125                                 Text = ((LiteralControl) obj).Text;\r
126                                 return;\r
127                         }\r
128 \r
129                         if(Text.Length > 0){\r
130                                 base.AddParsedSubObject (new LiteralControl (Text));\r
131                                 Text = String.Empty;\r
132                         }\r
133 \r
134                         base.AddParsedSubObject (obj);\r
135                 }\r
136 \r
137                 protected override void LoadViewState (object savedState)\r
138                 {\r
139                         if(savedState != null) {\r
140                                 base.LoadViewState (savedState);\r
141                                 string savedText = ViewState ["Text"] as string;\r
142                                 if(savedText != null)\r
143                                         Text = savedText;\r
144                         }\r
145                 }\r
146 \r
147                 protected override void RenderContents (HtmlTextWriter writer)\r
148                 {\r
149                         if(HasControls ())\r
150                                 base.RenderContents (writer);\r
151                         else\r
152                                 writer.Write (Text);\r
153                 }\r
154         }\r
155 }\r