d73c8332c3673c83fb88d8b31bb50fe1a215f67e
[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(): base(HtmlTextWriterTag.Input)\r
30                 {\r
31                 }\r
32                 \r
33                 public virtual bool AutoPostBack\r
34                 {\r
35                         get\r
36                         {\r
37                                 object o = ViewState["AutoPostBack"];\r
38                                 if(o!=null)\r
39                                         return (bool)AutoPostBack;\r
40                                 return false;\r
41                         }\r
42                         set\r
43                         {\r
44                                 ViewState["AutoPostBack"] = value;\r
45                         }\r
46                 }\r
47                 \r
48                 public virtual bool Checked\r
49                 {\r
50                         get\r
51                         {\r
52                                 object o = ViewState["Checked"];\r
53                                 if(o!=null)\r
54                                         return (bool)o;\r
55                                 return false;\r
56                         }\r
57                         set\r
58                         {\r
59                                 ViewState["Checked"] = value;\r
60                         }\r
61                 }\r
62                 \r
63                 public virtual string Text\r
64                 {\r
65                         get\r
66                         {\r
67                                 object o = ViewState["Text"];\r
68                                 if(o!=null)\r
69                                         return (string)o;\r
70                                 return String.Empty;\r
71                         }\r
72                         set\r
73                         {\r
74                                 ViewState["Text"] = value;\r
75                         }\r
76                 }\r
77                 \r
78                 private bool SaveCheckedViewState\r
79                 {\r
80                         get\r
81                         {\r
82                                 if(Events[CheckedChangedEvent] != null)\r
83                                 {\r
84                                         if(!Enabled)\r
85                                                 return true;\r
86                                         if(GetType() == typeof(CheckBox))\r
87                                         {\r
88                                                 return false;\r
89                                         }\r
90                                         if(GetType() == typeof(RadioButton))\r
91                                         {\r
92                                                 return false;\r
93                                         }\r
94                                 }\r
95                                 return true;\r
96                                 \r
97                         }\r
98                 }\r
99                 \r
100                 public virtual TextAlign TextAlign\r
101                 {\r
102                         get\r
103                         {\r
104                                 object o = ViewState["TextAlign"];\r
105                                 if(o!=null)\r
106                                         return (TextAlign)o;\r
107                                 return TextAlign.Right;\r
108                         }\r
109                         set\r
110                         {\r
111                                 if(!System.Enum.IsDefined(typeof(TextAlign), value))\r
112                                         throw new ArgumentException();\r
113                                 ViewState["TextAlign"] = value;\r
114                         }\r
115                 }\r
116                 \r
117                 public event EventHandler CheckedChanged\r
118                 {\r
119                         add\r
120                         {\r
121                                 Events.AddHandler(CheckedChangedEvent, value);\r
122                         }\r
123                         remove\r
124                         {\r
125                                 Events.RemoveHandler(CheckedChangedEvent, value);\r
126                         }\r
127                 }\r
128                 \r
129                 protected virtual void OnCheckedChanged(EventArgs e)\r
130                 {\r
131                         if(Events!=null)\r
132                         {\r
133                                 EventHandler eh = (EventHandler)(Events[CheckedChangedEvent]);\r
134                                 if(eh!=null)\r
135                                         eh(this, e);\r
136                         }\r
137                 }\r
138                 \r
139                 protected override void OnPreRender(EventArgs e)\r
140                 {\r
141                         if(Page!=null)\r
142                         {\r
143                                 if(Enabled)\r
144                                 {\r
145                                         Page.RegisterRequiresPostBack(this);\r
146                                 }\r
147                         }\r
148                         if(SaveCheckedViewState)\r
149                         {\r
150                                 ViewState.SetItemDirty("checked", false);\r
151                         }\r
152                 }\r
153                 \r
154                 [MonoTODO("Internal_Call_Requirements")]\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