5315f39a565a9b929f1c33566975b800546f307c
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / CheckBox.cs
1 /**\r
2  * Namespace: System.Web.UI.WebControls\r
3  * Class:     CheckBox\r
4  *\r
5  * Author:  Gaurav Vaish\r
6  * Maintainer: gvaish@iitk.ac.in\r
7  * Contact: <my_scripts2001@yahoo.com>, <gvaish@iitk.ac.in>\r
8  * Implementation: yes\r
9  * Status:  100%\r
10  *\r
11  * (C) Gaurav Vaish (2001)\r
12  * Thanks to Leen Toelen (toelen@hotmail.com)'s classes that helped me\r
13  * to write the contents of the function LoadPostData(...)\r
14  */\r
15 \r
16 using System;\r
17 using System.Collections;\r
18 using System.Collections.Specialized;\r
19 using System.Globalization;\r
20 using System.Web;\r
21 using System.Web.UI;\r
22 \r
23 namespace System.Web.UI.WebControls\r
24 {\r
25         public class CheckBox : WebControl, IPostBackDataHandler\r
26         {\r
27                 private static readonly object CheckedChangedEvent = new object();\r
28                 \r
29                 public CheckBox()\r
30                 {\r
31                         base(HtmlTextWriterTag.Input);\r
32                 }\r
33                 \r
34                 public virtual bool AutoPostBack\r
35                 {\r
36                         get\r
37                         {\r
38                                 object o = ViewState["AutoPostBack"];\r
39                                 if(o!=null)\r
40                                         return (bool)AutoPostBack;\r
41                                 return false;\r
42                         }\r
43                         set\r
44                         {\r
45                                 ViewState["AutoPostBack"] = value;\r
46                         }\r
47                 }\r
48                 \r
49                 public virtual bool Checked\r
50                 {\r
51                         get\r
52                         {\r
53                                 object o = ViewState["Checked"];\r
54                                 if(o!=null)\r
55                                         return (bool)o;\r
56                                 return false;\r
57                         }\r
58                         set\r
59                         {\r
60                                 ViewState["Checked"] = value;\r
61                         }\r
62                 }\r
63                 \r
64                 public virtual string Text\r
65                 {\r
66                         get\r
67                         {\r
68                                 object o = ViewState["Text"];\r
69                                 if(o!=null)\r
70                                         return (string)o;\r
71                                 return String.Empty;\r
72                         }\r
73                         set\r
74                         {\r
75                                 ViewState["Text"] = value;\r
76                         }\r
77                 }\r
78                 \r
79                 private bool SaveCheckedViewState\r
80                 {\r
81                         get\r
82                         {\r
83                                 if(Events[CheckedChangedEvent] != null)\r
84                                 {\r
85                                         if(!Enabled)\r
86                                                 return true;\r
87                                         if(GetType() == typeof(CheckBox))\r
88                                         {\r
89                                                 return false;\r
90                                         }\r
91                                         if(GetType() == typeof(RadioButton))\r
92                                         {\r
93                                                 return false;\r
94                                         }\r
95                                 }\r
96                                 return true;\r
97                                 \r
98                         }\r
99                 }\r
100                 \r
101                 public virtual TextAlign TextAlign\r
102                 {\r
103                         get\r
104                         {\r
105                                 object o = ViewState["TextAlign"];\r
106                                 if(o!=null)\r
107                                         return (TextAlign)o;\r
108                                 return TextAlign.Right;\r
109                         }\r
110                         set\r
111                         {\r
112                                 if(!System.Enum.IsDefined(typeof(TextAlign), value))\r
113                                         throw new ArgumentException();\r
114                                 ViewState["TextAlign"] = value;\r
115                         }\r
116                 }\r
117                 \r
118                 public event EventHandler CheckedChanged\r
119                 {\r
120                         add\r
121                         {\r
122                                 Events.AddHandler(CheckedChangedEvent, value);\r
123                         }\r
124                         remove\r
125                         {\r
126                                 Events.RemoveHandler(CheckedChangedEvent, value);\r
127                         }\r
128                 }\r
129                 \r
130                 protected virtual void OnCheckedChanged(EventArgs e)\r
131                 {\r
132                         if(Events!=null)\r
133                                 {\r
134                                         EventHandler eh = (EventHandler)(Events[CheckedChangedEvent]);\r
135                                         if(eh!=null)\r
136                                                 eh(this, e);\r
137                                 }\r
138                 }\r
139                 \r
140                 protected override void OnPreRender(EventArgs e)\r
141                 {\r
142                         if(Page!=null)\r
143                                 {\r
144                                         if(Enabled)\r
145                                                 {\r
146                                                         Page.RegisterRequiresPostBack(this);\r
147                                                 }\r
148                                 }\r
149                                 if(SaveCheckedViewState)\r
150                                         {\r
151                                                 ViewState.SetItemDirty("checked", false);\r
152                                         }\r
153                 }\r
154                 \r
155                 protected override void Render(HtmlTextWriter writer)\r
156                 {\r
157                         bool hasBeginRendering = false;\r
158                         if(ControlStyleCreated)\r
159                                 {\r
160                                         //TODO: Uncomment this in final version\r
161                                         /*\r
162                                         if(!ControlStyle.IsEmpty)\r
163                                                 {\r
164                                                         hasBeginRendering = true;\r
165                                                         ControlStyle.AddAttributesToRender(writer, this);\r
166                                                 }\r
167                                                 */\r
168                                 }\r
169                                 if(!Enabled)\r
170                                         {\r
171                                                 hasBeginRendering = true;\r
172                                                 writer.AddAttribute(HtmlTextWriterAttribute.Disabled, "disabled");\r
173                                         }\r
174                                         if(ToolTip.Length > 0)\r
175                                                 {\r
176                                                         hasBeginRendering = true;\r
177                                                         writer.AddAttribute(HtmlTextWriterAttribute.Title, ToolTip);\r
178                                                 }\r
179                                                 if(Attributes.Count > 0)\r
180                                                         {\r
181                                                                 hasBeginRendering = true;\r
182                                                                 Attributes.AddAttributes(writer);\r
183                                                         }\r
184                                                         if(hasBeginRendering)\r
185                                                                 writer.RenderBeginTag(HtmlTextWriterTag.Span);\r
186                         if(Text.Length > 0)\r
187                                 {\r
188                                         if(TextAlign == TextAlign.Right)\r
189                                                 {\r
190                                                         writer.AddAttribute(HtmlTextWriterAttribute.For, ClientID);\r
191                                                         writer.RenderBeginTag(HtmlTextWriterTag.Label);\r
192                                                         writer.Write(Text);\r
193                                                         writer.RenderEndTag();\r
194                                                         RenderInputTag(writer, ClientID);\r
195                                                 } else\r
196                                                         {\r
197                                                                 RenderInputTag(writer, ClientID);\r
198                                                                 writer.AddAttribute(HtmlTextWriterAttribute.For, ClientID);\r
199                                                                 writer.RenderBeginTag(HtmlTextWriterTag.Label);\r
200                                                                 writer.Write(Text);\r
201                                                         }\r
202                                 }\r
203                                 if(hasBeginRendering)\r
204                                         writer.RenderEndTag();\r
205                         throw new NotImplementedException("Calling some internal functions");\r
206                 }\r
207                 \r
208                 internal virtual void RenderInputTag(HtmlTextWriter writer, string clientId)\r
209                 {\r
210                         writer.AddAttribute(HtmlTextWriterAttribute.Id, clientId);\r
211                         writer.AddAttribute(HtmlTextWriterAttribute.Type, "checkbox");\r
212                         writer.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID);\r
213                         if(Checked)\r
214                                 {\r
215                                         writer.AddAttribute(HtmlTextWriterAttribute.Checked, "checked");\r
216                                 }\r
217                                 if(AutoPostBack)\r
218                                         {\r
219                                                 writer.AddAttribute(HtmlTextWriterAttribute.Onclick,Page.GetPostBackClientEvent(this, String.Empty));\r
220                                                 writer.AddAttribute("language", "javascript");\r
221                                         }\r
222                                         if(AccessKey.Length > 0)\r
223                                                 {\r
224                                                         writer.AddAttribute(HtmlTextWriterAttribute.Accesskey, AccessKey);\r
225                                                 }\r
226                                                 if(TabIndex != 0)\r
227                                                         {\r
228                                                                 writer.AddAttribute(HtmlTextWriterAttribute.Tabindex, TabIndex.ToString(NumberFormatInfo.InvariantInfo));\r
229                                                         }\r
230                                                         writer.RenderBeginTag(HtmlTextWriterTag.Input);\r
231                         writer.RenderEndTag();\r
232                 }\r
233                 \r
234                 bool IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postCollection)\r
235                 {\r
236                         string postedVal = postCollection[postDataKey];\r
237                         bool   postChecked = false;\r
238                         if(postedVal != null)\r
239                                 {\r
240                                         postChecked = postedVal.Length > 0;\r
241                                 }\r
242                                 Checked = postChecked;\r
243                         return (postChecked == Checked == false);\r
244                 }\r
245                 \r
246                 void IPostBackDataHandler.RaisePostDataChangedEvent()\r
247                 {\r
248                         OnCheckedChanged(EventArgs.Empty);\r
249                 }\r
250         }\r
251 }\r