* PagedDataSource.cs (PrivateICollectionEnumerator.MoveNext):
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / ListBox.cs
index f3562d7880d4af094e197f70f299bc456a2a0bb5..8abcb64ef5a414d4bcd0cc6679f90f0e9c515e18 100644 (file)
-/**\r
- * Namespace: System.Web.UI.WebControls\r
- * Class:     ListBox\r
- *\r
- * Author:  Gaurav Vaish\r
- * Maintainer: gvaish@iitk.ac.in\r
- * Contact: <my_scripts2001@yahoo.com>, <gvaish@iitk.ac.in>\r
- * Implementation: yes\r
- * Status:  100%\r
- *\r
- * (C) Gaurav Vaish (2002)\r
- */\r
+//
+// System.Web.UI.WebControls.ListBox.cs
+//
+// Authors:
+//   Gaurav Vaish (gvaish@iitk.ac.in)
+//   Andreas Nahr (ClassDevelopment@A-SoftTech.com)
+//
+// (C) Gaurav Vaish (2002)
+// (C) 2003 Andreas Nahr
+//\r
 \r
 using System;\r
 using System.Drawing;\r
+using System.Collections;\r
 using System.Collections.Specialized;\r
+using System.ComponentModel;\r
+using System.Globalization;\r
 using System.Web;\r
 using System.Web.UI;\r
 \r
 namespace System.Web.UI.WebControls\r
 {\r
+       [ValidationProperty("SelectedItem")]\r
        public class ListBox : ListControl, IPostBackDataHandler\r
        {\r
-               public ListBox(): base()\r
+               public ListBox () : base ()\r
                {\r
                }\r
-\r
+
+               [Browsable (false)]\r
                public override Color BorderColor\r
                {\r
-                       get\r
-                       {\r
-                               return BorderColor;\r
-                       }\r
-                       set\r
-                       {\r
-                               BorderColor = value;\r
-                       }\r
+                       get { return base.BorderColor; }\r
+                       set { base.BorderColor = value; }\r
                }\r
-\r
-               public override Style BorderStyle\r
+
+               [Browsable (false)]\r
+               public override BorderStyle BorderStyle\r
                {\r
-                       get\r
-                       {\r
-                               return BorderStyle;\r
-                       }\r
-                       set\r
-                       {\r
-                               BorderStyle = value;\r
-                       }\r
+                       get { return base.BorderStyle; }\r
+                       set { base.BorderStyle = value; }\r
                }\r
-\r
+
+               [Browsable (false)]\r
                public override Unit BorderWidth\r
                {\r
-                       get\r
-                       {\r
-                               return BorderWidth;\r
-                       }\r
-                       set\r
-                       {\r
-                               BorderWidth = value;\r
-                       }\r
+                       get { return base.BorderWidth; }\r
+                       set { base.BorderWidth = value; }\r
                }\r
-\r
+
+
+               [DefaultValue (4), Bindable (true), WebCategory ("Appearance")]
+               [WebSysDescription ("The number of rows displayed by the control.")]\r
                public virtual int Rows\r
                {\r
-                       get\r
-                       {\r
-                               object o = ViewState["Rows"];\r
-                               if(o != null)\r
-                                       return (int)o;\r
-                               return 4;\r
+                       get {\r
+                               object o = ViewState ["Rows"];\r
+                               return (o == null) ? 4 : (int) o;\r
                        }\r
-                       set\r
-                       {\r
-                               if(value < 1 || value > 2000)\r
-                               {\r
-                                       throw new ArgumentOutOfRangeException();\r
-                               }\r
-                               ViewState["Rows"] = value;\r
+\r
+                       set {\r
+                               if (value < 1 || value > 2000)\r
+                                       throw new ArgumentOutOfRangeException ("value", "Rows value has to be >= 0 and <= 2000.");\r
+\r
+                               ViewState ["Rows"] = value;\r
                        }\r
                }\r
-\r
+
+               [DefaultValue (typeof (ListSelectionMode), "Single"), WebCategory ("Behavior")]
+               [WebSysDescription ("The mode describing how the entries can be selected.")]\r
                public virtual ListSelectionMode SelectionMode\r
                {\r
                        get\r
                        {\r
-                               object o = ViewState["SelectionMode"];\r
-                               if(o != null)\r
-                                       return (ListSelectionMode)o;\r
-                               return ListSelectionMode.Single;\r
+                               object o = ViewState ["SelectionMode"];\r
+                               return (o == null) ? ListSelectionMode.Single : (ListSelectionMode) o;\r
                        }\r
                        set\r
                        {\r
-                               if(!Enum.IsDefined(typeof(ListSelectionMode), value))\r
-                               {\r
-                                       throw new ArgumentException();\r
-                               }\r
-                               ViewState["SelectionMode"] = value;\r
+                               if (!Enum.IsDefined (typeof (ListSelectionMode), value))\r
+                                       throw new ArgumentOutOfRangeException ("value", "Only valid enumeration members are allowed");\r
+                               ViewState ["SelectionMode"] = value;\r
                        }\r
                }\r
-\r
+
+               [Browsable (false), DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+               [Bindable (false), EditorBrowsable (EditorBrowsableState.Never)]\r
                public override string ToolTip\r
                {\r
-                       get\r
-                       {\r
-                               return String.Empty;\r
-                       }\r
-                       set\r
-                       {\r
-                               // Don't do anything.\r
-                       }\r
+                       get { return String.Empty; }\r
+                       set { /* Don't do anything. */ }\r
                }\r
 \r
-               protected override void AddAttributesToRender(HtmlTextWriter writer)\r
+               protected override void AddAttributesToRender (HtmlTextWriter writer)\r
                {\r
-                       if(Page != null)\r
-                       {\r
-                               Page.VerifyRenderingInServerForm(this);\r
-                       }\r
-                       writer.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID);\r
-                       writer.AddAttribute(HtmlTextWriterAttribute.Size, Rows.ToString(NumberFormatInfo.InvariantInfo);\r
-                       writer.AddAttribute(HtmlTextWriterAttribute.Multiple, "multiple");\r
-                       if(AutoPostBack && Page != null)\r
-                       {\r
-                               writer.AddAttribute(HtmlTextWriterAttribute.Onchange, Page.GetPostBackClientEvent(""));\r
-                               writer.AddAttribute("language", "javascript");\r
+                       if (Page != null)\r
+                               Page.VerifyRenderingInServerForm (this);\r
+\r
+                       writer.AddAttribute (HtmlTextWriterAttribute.Name, UniqueID);\r
+                       base.AddAttributesToRender (writer);\r
+                       writer.AddAttribute (HtmlTextWriterAttribute.Size,\r
+                                            Rows.ToString (NumberFormatInfo.InvariantInfo));\r
+\r
+                       if (SelectionMode == ListSelectionMode.Multiple)\r
+                               writer.AddAttribute (HtmlTextWriterAttribute.Multiple, "multiple");\r
+\r
+                       if (AutoPostBack && Page != null){\r
+                               writer.AddAttribute (HtmlTextWriterAttribute.Onchange,\r
+                                                    Page.GetPostBackClientEvent (this, ""));\r
+                               writer.AddAttribute ("language", "javascript");\r
                        }\r
                }\r
 \r
-               protected override void OnPreRender(EventArgs e)\r
+               protected override void OnPreRender (EventArgs e)\r
                {\r
-                       base.OnPreRender(e);\r
-                       if(Page != null && SelectionMode == ListSelectionMode.Multiple && Enabled)\r
-                       {\r
+                       base.OnPreRender (e);\r
+                       if (Page != null && SelectionMode == ListSelectionMode.Multiple && Enabled)\r
                                Page.RegisterRequiresPostBack(this);\r
-                       }\r
                }\r
 \r
-               protected override void RenderContents(HtmlTextWriter writer)\r
+               protected override void RenderContents (HtmlTextWriter writer)\r
                {\r
                        bool isMultAllowed = (SelectionMode == ListSelectionMode.Multiple);\r
                        bool selMade = false;\r
-                       foreach(ListItem current in Items)\r
-                       {\r
-                               writer.WriteBeginTag("option");\r
-                               if(current.Selected)\r
-                               {\r
-                                       if(!isMultAllowed && selMade)\r
-                                       {\r
-                                               throw new HttpException("Cannnot_MutliSelect_In_Single_Mode");\r
-                                       }\r
+                       foreach (ListItem current in Items){\r
+                               writer.WriteBeginTag ("option");\r
+                               if (current.Selected){\r
+                                       if (!isMultAllowed && selMade)\r
+                                               throw new HttpException ("Cannot_MultiSelect_In_Single_Mode");\r
                                        selMade = true;\r
-                                       writer.WriteAttribute("selected", "selected");\r
+                                       writer.WriteAttribute ("selected", "selected");\r
                                }\r
-                               writer.WriteAttribute("value", current.Value, true);\r
-                               writer.Write('>');\r
-                               writer.Write(HttpUtility.Encode(Text));\r
-                               writer.WriteEndTag("option");\r
-                               writer.WriteLine();\r
+                               writer.WriteAttribute ("value", current.Value, true);\r
+                               writer.Write ('>');\r
+                               writer.Write (HttpUtility.HtmlEncode (current.Text));\r
+                               writer.WriteEndTag ("option");\r
+                               writer.WriteLine ();\r
                        }\r
                }\r
 \r
-               bool IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postCollection)\r
+               bool IPostBackDataHandler.LoadPostData (string postDataKey,\r
+                                                       NameValueCollection postCollection)\r
                {\r
-                       string[] vals = postCollection.GetValues(postDataKey);\r
+                       string[] vals = postCollection.GetValues (postDataKey);\r
                        bool updated = false;\r
-                       ArrayList selected = SelectedIndices;\r
-                       ArrayList final = new ArrayList(vals.Length);\r
-                       if(vals != null)\r
-                       {\r
-                               if(SelectionMode == ListSelectionMode.Single)\r
-                               {\r
-                                       int index = Items.FindByValueInternal(vals[0]);\r
-                                       if(SelectedIndex != index)\r
-                                       {\r
+                       if (vals != null){\r
+                               if (SelectionMode == ListSelectionMode.Single){\r
+                                       int index = Items.FindByValueInternal (vals [0]);\r
+                                       if (SelectedIndex != index){\r
                                                SelectedIndex = index;\r
                                                updated       = true;\r
                                        }\r
-                               } else\r
-                               {\r
-                                       foreach(string current in vals)\r
-                                       {\r
-                                               final.Add(Items.FindByValueInternal(current);\r
-                                       }\r
-                                       if(selected != null && selected.Count == vals.Length)\r
-                                       {\r
-                                               for(int ctr = 0; ctr < vals.Length; ctr++)\r
-                                               {\r
-                                                       if(((int)final[ctr]) != ((int)selected[ctr]))\r
-                                                       {\r
+                               } else {\r
+                                       ArrayList indices = SelectedIndices;
+                                       int length = vals.Length;
+                                       ArrayList final = new ArrayList (length);
+                                       foreach (string current in vals)\r
+                                               final.Add (Items.FindByValueInternal (current));\r
+
+                                       if (indices.Count == length) {
+                                               for (int ctr = 0; ctr < length; ctr++){
+                                                       if (((int) final [ctr]) != ((int) indices [ctr])){
                                                                updated = true;\r
                                                                break;\r
                                                        }\r
                                                }\r
-                                       } else\r
-                                       {\r
+                                       } else {\r
                                                updated = true;\r
                                        }\r
-                               }\r
-                               if(!updated)\r
-                               {\r
-                                       SelectInternal(final);\r
-                               }\r
-                       } else\r
-                       {\r
-                               if(SelectedIndex != -1)\r
+                                       if (updated)
+                                               Select (final);
+                               }
+                       } else {\r
+                               if (SelectedIndex != -1)\r
                                        SelectedIndex = -1;\r
                                updated = true;\r
                        }\r
                        return updated;\r
                }\r
 \r
-               void IPostBackDataHandler.RaisePostDataChangedEvent()\r
+               void IPostBackDataHandler.RaisePostDataChangedEvent ()\r
                {\r
-                       OnSelectedIndexChanged(EventArgs.Empty);\r
+                       OnSelectedIndexChanged (EventArgs.Empty);\r
                }\r
        }\r
 }\r