2001-12-21 Gaurav Vaish <gvaish@iitk.ac.in>
[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                 protected override void Render(HtmlTextWriter writer)\r
155                 {\r
156                         bool hasBeginRendering = false;\r
157                         if(ControlStyleCreated)\r
158                                 {\r
159                                         //TODO: Uncomment this in final version\r
160                                         /*\r
161                                         if(!ControlStyle.IsEmpty)\r
162                                                 {\r
163                                                         hasBeginRendering = true;\r
164                                                         ControlStyle.AddAttributesToRender(writer, this);\r
165                                                 }\r
166                                                 */\r
167                                 }\r
168                                 if(!Enabled)\r
169                                         {\r
170                                                 hasBeginRendering = true;\r
171                                                 writer.AddAttribute(HtmlTextWriterAttribute.Disabled, "disabled");\r
172                                         }\r
173                                         if(ToolTip.Length > 0)\r
174                                                 {\r
175                                                         hasBeginRendering = true;\r
176                                                         writer.AddAttribute(HtmlTextWriterAttribute.Title, ToolTip);\r
177                                                 }\r
178                                                 if(Attributes.Count > 0)\r
179                                                         {\r
180                                                                 hasBeginRendering = true;\r
181                                                                 Attributes.AddAttributes(writer);\r
182                                                         }\r
183                                                         if(hasBeginRendering)\r
184                                                                 writer.RenderBeginTag(HtmlTextWriterTag.Span);\r
185                         if(Text.Length > 0)\r
186                                 {\r
187                                         if(TextAlign == TextAlign.Right)\r
188                                                 {\r
189                                                         writer.AddAttribute(HtmlTextWriterAttribute.For, ClientID);\r
190                                                         writer.RenderBeginTag(HtmlTextWriterTag.Label);\r
191                                                         writer.Write(Text);\r
192                                                         writer.RenderEndTag();\r
193                                                         RenderInputTag(writer, ClientID);\r
194                                                 } else\r
195                                                         {\r
196                                                                 RenderInputTag(writer, ClientID);\r
197                                                                 writer.AddAttribute(HtmlTextWriterAttribute.For, ClientID);\r
198                                                                 writer.RenderBeginTag(HtmlTextWriterTag.Label);\r
199                                                                 writer.Write(Text);\r
200                                                         }\r
201                                 }\r
202                                 if(hasBeginRendering)\r
203                                         writer.RenderEndTag();\r
204                         throw new NotImplementedException("Calling some internal functions");\r
205                 }\r
206                 \r
207                 internal virtual void RenderInputTag(HtmlTextWriter writer, string clientId)\r
208                 {\r
209                         writer.AddAttribute(HtmlTextWriterAttribute.Id, clientId);\r
210                         writer.AddAttribute(HtmlTextWriterAttribute.Type, "checkbox");\r
211                         writer.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID);\r
212                         if(Checked)\r
213                                 {\r
214                                         writer.AddAttribute(HtmlTextWriterAttribute.Checked, "checked");\r
215                                 }\r
216                                 if(AutoPostBack)\r
217                                         {\r
218                                                 writer.AddAttribute(HtmlTextWriterAttribute.Onclick,Page.GetPostBackClientEvent(this, String.Empty));\r
219                                                 writer.AddAttribute("language", "javascript");\r
220                                         }\r
221                                         if(AccessKey.Length > 0)\r
222                                                 {\r
223                                                         writer.AddAttribute(HtmlTextWriterAttribute.Accesskey, AccessKey);\r
224                                                 }\r
225                                                 if(TabIndex != 0)\r
226                                                         {\r
227                                                                 writer.AddAttribute(HtmlTextWriterAttribute.Tabindex, TabIndex.ToString(NumberFormatInfo.InvariantInfo));\r
228                                                         }\r
229                                                         writer.RenderBeginTag(HtmlTextWriterTag.Input);\r
230                         writer.RenderEndTag();\r
231                 }\r
232                 \r
233                 bool IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postCollection)\r
234                 {\r
235                         string postedVal = postCollection[postDataKey];\r
236                         bool   postChecked = false;\r
237                         if(postedVal != null)\r
238                                 {\r
239                                         postChecked = postedVal.Length > 0;\r
240                                 }\r
241                                 Checked = postChecked;\r
242                         return (postChecked == Checked == false);\r
243                 }\r
244                 \r
245                 void IPostBackDataHandler.RaisePostDataChangedEvent()\r
246                 {\r
247                         OnCheckedChanged(EventArgs.Empty);\r
248                 }\r
249         }\r
250 }\r