2001-11-29 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  * Status:  60%\r
9  * \r
10  * (C) Gaurav Vaish (2001)\r
11  * Thanks to Leen Toelen (toelen@hotmail.com)'s classes that helped me\r
12  * to write the contents of the function LoadPostData(...)\r
13  */\r
14 \r
15 using System;\r
16 using System.Collections;\r
17 using System.Collections.Specialized;\r
18 using System.Web;\r
19 using System.Web.UI;\r
20 \r
21 namespace System.Web.UI.WebControls\r
22 {\r
23         public class CheckBox : WebControl, IPostBackDataHandler\r
24         {\r
25                 private static readonly object CheckedChangedEvent = new object();\r
26 \r
27                 public CheckBox()\r
28                 {\r
29                         //\r
30                 }\r
31                 \r
32                 public virtual bool AutoPostBack\r
33                 {\r
34                         get\r
35                         {\r
36                                 object o = ViewState["AutoPostBack"];\r
37                                 if(o!=null)\r
38                                         return (bool)AutoPostBack;\r
39                                 return false;\r
40                         }\r
41                         set\r
42                         {\r
43                                 ViewState["AutoPostBack"] = value;\r
44                         }\r
45                 }\r
46                 \r
47                 public virtual bool Checked\r
48                 {\r
49                         get\r
50                         {\r
51                                 object o = ViewState["Checked"];\r
52                                 if(o!=null)\r
53                                         return (bool)o;\r
54                                 return false;\r
55                         }\r
56                         set\r
57                         {\r
58                                 ViewState["Checked"] = value;\r
59                         }\r
60                 }\r
61 \r
62                 public virtual string Text\r
63                 {\r
64                         get\r
65                         {\r
66                                 object o = ViewState["Text"];\r
67                                 if(o!=null)\r
68                                         return (string)o;\r
69                                 return String.Empty;\r
70                         }\r
71                         set\r
72                         {\r
73                                 ViewState["Text"] = value;\r
74                         }\r
75                 }\r
76                 \r
77                 public virtual TextAlign TextAlign\r
78                 {\r
79                         get\r
80                         {\r
81                                 object o = ViewState["TextAlign"];\r
82                                 if(o!=null)\r
83                                         return (TextAlign)o;\r
84                                 return TextAlign.Right;\r
85                         }\r
86                         set\r
87                         {\r
88                                 if(!System.Enum.IsDefined(typeof(TextAlign), value))\r
89                                         throw new ArgumentException();\r
90                                 ViewState["TextAlign"] = value;\r
91                         }\r
92                 }\r
93                 \r
94                 public event EventHandler CheckedChanged\r
95                 {\r
96                         add\r
97                         {\r
98                                 Events.AddHandler(CheckedChangedEvent, value);\r
99                         }\r
100                         remove\r
101                         {\r
102                                 Events.RemoveHandler(CheckedChangedEvent, value);\r
103                         }\r
104                 }\r
105                 \r
106                 protected virtual void OnCheckedChanged(EventArgs e)\r
107                 {\r
108                         if(Events!=null)\r
109                         {\r
110                                 EventHandler eh = (EventHandler)(Events[CheckedChangedEvent]);\r
111                                 if(eh!=null)\r
112                                         eh(this, e);\r
113                         }\r
114                 }\r
115                 \r
116                 protected virtual void OnPreRender(EventArgs e)\r
117                 {\r
118                         throw new NotImplementedException();\r
119                 }\r
120                 \r
121                 protected override void Render(HtmlTextWriter writer)\r
122                 {\r
123                         //TODO: THE LOST WORLD!\r
124                         bool hasBeginRendering = false;\r
125                         if(ControlStyleCreated)\r
126                         {\r
127                                 if(!ControlStyle.IsEmpty)\r
128                                 {\r
129                                         hasBeginRendering = true;\r
130                                         ControlStyle.AddAttributesToRender(writer, this);\r
131                                 }\r
132                         }\r
133                         if(!Enabled)\r
134                         {\r
135                                 hasBeginRendering = true;\r
136                                 writer.AddAttribute(HtmlTextWriterAttribute.Disbled, "disabled");\r
137                         }\r
138                         if(ToolTip.Length > 0)\r
139                         {\r
140                                 hasBeginRendering = true;\r
141                                 writer.AddAttribute(HtmlTextWriterAttribute.Title, ToolTip);\r
142                         }\r
143                         if(Attributes.Count > 0)\r
144                         {\r
145                                 hasBeginRendering = true;\r
146                                 Attributes.AddAttributes(writer);\r
147                         }\r
148                         if(hasBeginRendering)\r
149                                 writer.RenderBeginTag(HtmlTextWriterTag.Span);\r
150                         if(Text.Length > 0)\r
151                         {\r
152                                 // Looks wierd, ain't? But found out interestingly.\r
153                                 if(TextAlign == TextAlign.Right)\r
154                                 {\r
155                                         writer.AddAttribute(HtmlTextWriterAttribute.For, ClientID);\r
156                                         writer.RenderBeginTag(HtmlTextWriterTag.Label);\r
157                                         writer.Write(Text);\r
158                                         writer.RenderEngTag();\r
159                                         RenderInputTag(writer, ClientID);\r
160                                 } else\r
161                                 {\r
162                                         RenderInputTag(writer, ClientID);\r
163                                         writer.AddAttribute(HtmlTextWriterAttribute.For, ClientID);\r
164                                         writer.RenderBeginTag(HtmlTextWriterTag.Label);\r
165                                         writer.Write(Text);\r
166                                 }\r
167                         }\r
168                         if(hasBeginRendering)\r
169                                 writer.RenderEndTag();\r
170                 }\r
171                 \r
172                 internal virtual void RenderInputTag(HtmlTextWriter writer, string clientId)\r
173                 {\r
174                         writer.AddAttribute(HtmlTextWriterAttribute.Id, clientId);\r
175                         writer.AddAttribute(HtmlTextWriterAttribute.Type, "checkbox");\r
176                         writer.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID);\r
177                         if(Checked)\r
178                         {\r
179                                 writer.AddAttribute(HtmlTextWriterAttribute.Checked, "checked");\r
180                         }\r
181                         if(AutoPostBack)\r
182                         {\r
183                                 writer.AddAttribute(HtmlTextWriterAttribute.OnClick,Page.GetPostBackClientEvent(this, String.Empty));\r
184                                 writer.AddAttribute("language", "javascript");\r
185                         }\r
186                         if(AccessKey.Length > 0)\r
187                         {\r
188                                 writer.AddAttribute(HtmlTextWriterAttribute.AccessKey, AccessKey);\r
189                         }\r
190                         if(TabIndex != 0)\r
191                         {\r
192                                 writer.AddAttribute(HtmlTextWriterAttribute.TabIndex, TabIndex.ToString(NumberFormatInfo.InvariantInfo));\r
193                         }\r
194                         writer.RenderBeginTag(HtmlTextWriterTag.Input);\r
195                         writer.RenderEndTag();\r
196                 }\r
197                 \r
198                 public bool LoadPostData(string postDataKey, NameValueCollection postCollection)\r
199                 {\r
200                         string postedVal = postCollection[postDataKey];\r
201                         bool   postChecked = false;\r
202                         if(postedVal != null)\r
203                         {\r
204                                 postChecked = postedVal.Length > 0;\r
205                         }\r
206                         Checked = postChecked;\r
207                         return (postChecked == Checked == false);\r
208                 }\r
209                 \r
210                 public void RaisePostDataChangedEvent()\r
211                 {\r
212                         OnCheckedChanged(EventArgs.Empty);\r
213                 }\r
214         }\r
215 }\r