2002-03-17 Gaurav Vaish <gvaish@iitk.ac.in>
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / CheckBox.cs
index 4a0ae3fa3ec163efdc8dfb2eebec97cf8d2f76c5..d73c8332c3673c83fb88d8b31bb50fe1a215f67e 100644 (file)
@@ -1,17 +1,22 @@
 /**\r
  * Namespace: System.Web.UI.WebControls\r
  * Class:     CheckBox\r
- * \r
+ *\r
  * Author:  Gaurav Vaish\r
+ * Maintainer: gvaish@iitk.ac.in\r
  * Contact: <my_scripts2001@yahoo.com>, <gvaish@iitk.ac.in>\r
- * Status:  60%\r
- * \r
+ * Implementation: yes\r
+ * Status:  100%\r
+ *\r
  * (C) Gaurav Vaish (2001)\r
+ * Thanks to Leen Toelen (toelen@hotmail.com)'s classes that helped me\r
+ * to write the contents of the function LoadPostData(...)\r
  */\r
 \r
 using System;\r
 using System.Collections;\r
 using System.Collections.Specialized;\r
+using System.Globalization;\r
 using System.Web;\r
 using System.Web.UI;\r
 \r
@@ -20,10 +25,9 @@ namespace System.Web.UI.WebControls
        public class CheckBox : WebControl, IPostBackDataHandler\r
        {\r
                private static readonly object CheckedChangedEvent = new object();\r
-\r
-               public CheckBox()\r
+               \r
+               public CheckBox(): base(HtmlTextWriterTag.Input)\r
                {\r
-                       //\r
                }\r
                \r
                public virtual bool AutoPostBack\r
@@ -55,7 +59,7 @@ namespace System.Web.UI.WebControls
                                ViewState["Checked"] = value;\r
                        }\r
                }\r
-\r
+               \r
                public virtual string Text\r
                {\r
                        get\r
@@ -71,6 +75,28 @@ namespace System.Web.UI.WebControls
                        }\r
                }\r
                \r
+               private bool SaveCheckedViewState\r
+               {\r
+                       get\r
+                       {\r
+                               if(Events[CheckedChangedEvent] != null)\r
+                               {\r
+                                       if(!Enabled)\r
+                                               return true;\r
+                                       if(GetType() == typeof(CheckBox))\r
+                                       {\r
+                                               return false;\r
+                                       }\r
+                                       if(GetType() == typeof(RadioButton))\r
+                                       {\r
+                                               return false;\r
+                                       }\r
+                               }\r
+                               return true;\r
+                               \r
+                       }\r
+               }\r
+               \r
                public virtual TextAlign TextAlign\r
                {\r
                        get\r
@@ -110,23 +136,115 @@ namespace System.Web.UI.WebControls
                        }\r
                }\r
                \r
+               protected override void OnPreRender(EventArgs e)\r
+               {\r
+                       if(Page!=null)\r
+                       {\r
+                               if(Enabled)\r
+                               {\r
+                                       Page.RegisterRequiresPostBack(this);\r
+                               }\r
+                       }\r
+                       if(SaveCheckedViewState)\r
+                       {\r
+                               ViewState.SetItemDirty("checked", false);\r
+                       }\r
+               }\r
+               \r
+               [MonoTODO("Internal_Call_Requirements")]\r
                protected override void Render(HtmlTextWriter writer)\r
                {\r
-                       //TODO: THE LOST WORLD!\r
-                       // I know I have to do it.\r
+                       bool hasBeginRendering = false;\r
+                       if(ControlStyleCreated)\r
+                               {\r
+                                       //TODO: Uncomment this in final version\r
+                                       /*\r
+                                       if(!ControlStyle.IsEmpty)\r
+                                               {\r
+                                                       hasBeginRendering = true;\r
+                                                       ControlStyle.AddAttributesToRender(writer, this);\r
+                                               }\r
+                                               */\r
+                               }\r
+                               if(!Enabled)\r
+                                       {\r
+                                               hasBeginRendering = true;\r
+                                               writer.AddAttribute(HtmlTextWriterAttribute.Disabled, "disabled");\r
+                                       }\r
+                                       if(ToolTip.Length > 0)\r
+                                               {\r
+                                                       hasBeginRendering = true;\r
+                                                       writer.AddAttribute(HtmlTextWriterAttribute.Title, ToolTip);\r
+                                               }\r
+                                               if(Attributes.Count > 0)\r
+                                                       {\r
+                                                               hasBeginRendering = true;\r
+                                                               Attributes.AddAttributes(writer);\r
+                                                       }\r
+                                                       if(hasBeginRendering)\r
+                                                               writer.RenderBeginTag(HtmlTextWriterTag.Span);\r
+                       if(Text.Length > 0)\r
+                               {\r
+                                       if(TextAlign == TextAlign.Right)\r
+                                               {\r
+                                                       writer.AddAttribute(HtmlTextWriterAttribute.For, ClientID);\r
+                                                       writer.RenderBeginTag(HtmlTextWriterTag.Label);\r
+                                                       writer.Write(Text);\r
+                                                       writer.RenderEndTag();\r
+                                                       RenderInputTag(writer, ClientID);\r
+                                               } else\r
+                                                       {\r
+                                                               RenderInputTag(writer, ClientID);\r
+                                                               writer.AddAttribute(HtmlTextWriterAttribute.For, ClientID);\r
+                                                               writer.RenderBeginTag(HtmlTextWriterTag.Label);\r
+                                                               writer.Write(Text);\r
+                                                       }\r
+                               }\r
+                               if(hasBeginRendering)\r
+                                       writer.RenderEndTag();\r
+                       throw new NotImplementedException("Calling some internal functions");\r
+               }\r
+               \r
+               internal virtual void RenderInputTag(HtmlTextWriter writer, string clientId)\r
+               {\r
+                       writer.AddAttribute(HtmlTextWriterAttribute.Id, clientId);\r
+                       writer.AddAttribute(HtmlTextWriterAttribute.Type, "checkbox");\r
+                       writer.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID);\r
+                       if(Checked)\r
+                               {\r
+                                       writer.AddAttribute(HtmlTextWriterAttribute.Checked, "checked");\r
+                               }\r
+                               if(AutoPostBack)\r
+                                       {\r
+                                               writer.AddAttribute(HtmlTextWriterAttribute.Onclick,Page.GetPostBackClientEvent(this, String.Empty));\r
+                                               writer.AddAttribute("language", "javascript");\r
+                                       }\r
+                                       if(AccessKey.Length > 0)\r
+                                               {\r
+                                                       writer.AddAttribute(HtmlTextWriterAttribute.Accesskey, AccessKey);\r
+                                               }\r
+                                               if(TabIndex != 0)\r
+                                                       {\r
+                                                               writer.AddAttribute(HtmlTextWriterAttribute.Tabindex, TabIndex.ToString(NumberFormatInfo.InvariantInfo));\r
+                                                       }\r
+                                                       writer.RenderBeginTag(HtmlTextWriterTag.Input);\r
+                       writer.RenderEndTag();\r
                }\r
                \r
-               public bool LoadPostData(string postDataKey, NameValueCollection postCollection)\r
+               bool IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postCollection)\r
                {\r
-                       //TODO: THE LOST WORLD\r
-                       // Now what the hell is this!\r
-                       return false;\r
+                       string postedVal = postCollection[postDataKey];\r
+                       bool   postChecked = false;\r
+                       if(postedVal != null)\r
+                               {\r
+                                       postChecked = postedVal.Length > 0;\r
+                               }\r
+                               Checked = postChecked;\r
+                       return (postChecked == Checked == false);\r
                }\r
                \r
-               public void RaisePostDataChangedEvent()\r
+               void IPostBackDataHandler.RaisePostDataChangedEvent()\r
                {\r
-                       //TODO: THE LOST WORLD...\r
-                       // Raise the bucket out of the well :))\r
                        OnCheckedChanged(EventArgs.Empty);\r
                }\r
        }\r