/**\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
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
ViewState["Checked"] = value;\r
}\r
}\r
-\r
+ \r
public virtual string Text\r
{\r
get\r
}\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
}\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