2007-01-31 Igor Zelmanovich <igorz@mainsoft.com>
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / BulletedList.cs
index 4d1a4d41cca02d9e28bb06565fcd0ca6476be2fc..2ad01972b7b38d6595e2a5c2965b5f24cc2bb82b 100644 (file)
@@ -49,6 +49,8 @@ namespace System.Web.UI.WebControls {
        [SupportsEventValidation]
        public class BulletedList : ListControl, IPostBackEventHandler {
                
+               PostBackOptions postBackOptions;
+
                [MonoTODO ("we are missing a new style enum, we should be using it")]
                protected override void AddAttributesToRender (HtmlTextWriter writer)
                {
@@ -82,7 +84,7 @@ namespace System.Web.UI.WebControls {
                                        break;
                                
                                case BulletStyle.UpperRoman:
-                                       writer.AddStyleAttribute (ListStyleType, "lower-roman");
+                                       writer.AddStyleAttribute (ListStyleType, "upper-roman");
                                        isNumeric = true;
                                        break;
 
@@ -109,28 +111,30 @@ namespace System.Web.UI.WebControls {
                        base.AddAttributesToRender (writer);
                }
 
-               [MonoTODO ("new bool prop on ListItem: Enabled")]
                protected virtual void RenderBulletText (ListItem item, int index, HtmlTextWriter writer)
                {
                        switch (DisplayMode) {
                                case BulletedListDisplayMode.Text:
-                                       //if (!item.Enabled) {
-                                       //      writer.AddAttribute (HtmlTextWriterAttribute.Disabled, "disabled");
-                                       //      writer.RenderBeginTag (HtmlTextWriterTag.Span);
-                                       //}
+                                       if (!item.Enabled) {
+                                               writer.AddAttribute (HtmlTextWriterAttribute.Disabled, "disabled");
+                                               writer.RenderBeginTag (HtmlTextWriterTag.Span);
+                                       }
+                                       
                                        writer.Write (item.Text);
-                                       //if (!item.Enabled)
-                                       //      writer.RenderEndTag ();
+                                       
+                                       if (!item.Enabled)
+                                               writer.RenderEndTag ();
+                                       
                                        break;
 
                                case BulletedListDisplayMode.HyperLink:
-                                       //if (Enabled && item.Enabled) {
-                                       //      writer.AddAttribute (HtmlTextWriterAttribute.Href, item.Value);
-                                       //      if (Target != "")
-                                       //              writer.AddAttribute(HtmlTextWriterAttribute.Target, this.Target);
-                                       //      
-                                       //}
-                                       //else
+                                       if (Enabled && item.Enabled) {
+                                               writer.AddAttribute (HtmlTextWriterAttribute.Href, item.Value);
+                                               if (Target != "")
+                                                       writer.AddAttribute(HtmlTextWriterAttribute.Target, this.Target);
+                                               
+                                       }
+                                       else
                                                writer.AddAttribute (HtmlTextWriterAttribute.Disabled, "disabled");
                                        
                                        writer.RenderBeginTag (HtmlTextWriterTag.A);
@@ -139,31 +143,52 @@ namespace System.Web.UI.WebControls {
                                        break;
 
                                case BulletedListDisplayMode.LinkButton:
-                                       //if (Enabled && item.Enabled)
-                                               writer.AddAttribute (HtmlTextWriterAttribute.Href, Page.ClientScript.GetPostBackClientHyperlink (this, (index.ToString (CultureInfo.InvariantCulture))));
-                                       //else
-                                       //      writer.AddAttribute (HtmlTextWriterAttribute.Disabled, "disabled");
+                                       if (Enabled && item.Enabled)
+                                               writer.AddAttribute (HtmlTextWriterAttribute.Href, Page.ClientScript.GetPostBackEventReference (GetPostBackOptions (index.ToString (CultureInfo.InvariantCulture))));
+                                       else
+                                               writer.AddAttribute (HtmlTextWriterAttribute.Disabled, "disabled");
                                        writer.RenderBeginTag (HtmlTextWriterTag.A);
                                        writer.Write (item.Text);
                                        writer.RenderEndTag ();
                                        break;
                        }
                }
+
+               PostBackOptions GetPostBackOptions (string argument) {
+                       if (postBackOptions == null) {
+                               postBackOptions = new PostBackOptions (this);
+                               postBackOptions.ActionUrl = null;
+                               postBackOptions.ValidationGroup = null;
+                               postBackOptions.RequiresJavaScriptProtocol = true;
+                               postBackOptions.ClientSubmit = true;
+                               postBackOptions.PerformValidation = CausesValidation && Page != null && Page.AreValidatorsUplevel (ValidationGroup);
+                               if (postBackOptions.PerformValidation)
+                                       postBackOptions.ValidationGroup = ValidationGroup;
+                       }
+                       postBackOptions.Argument = argument;
+                       return postBackOptions;
+               }
                
                protected internal override void RenderContents (HtmlTextWriter writer)
                {
                        int idx = 0;
+#if NET_2_0
+                       bool havePage = Page != null;
+#endif
                        foreach (ListItem i in Items) {
+#if NET_2_0
+                               if (havePage)
+                                       Page.ClientScript.RegisterForEventValidation (this.UniqueID, i.Value.ToString ());
+#endif
                                writer.RenderBeginTag (HtmlTextWriterTag.Li);
                                this.RenderBulletText (i, idx ++, writer);
                                writer.RenderEndTag ();
                        }
                }
 
-               [MonoTODO]
-               protected internal override void Render (HtmlTextWriter w)
+               protected internal override void Render (HtmlTextWriter writer)
                {
-                       throw new NotImplementedException ();
+                       base.Render (writer);
                }
                
                void IPostBackEventHandler.RaisePostBackEvent (string eventArgument)
@@ -171,11 +196,10 @@ namespace System.Web.UI.WebControls {
                        RaisePostBackEvent (eventArgument);
                }
                        
-               [MonoTODO ("ListControl has a CausesValidation prop in v1.2, we need to use it")]
                protected virtual void RaisePostBackEvent (string eventArgument)
                {
-                       //if (CausesValidation)
-                       //      Page.Validate ();
+                       if (CausesValidation)
+                               Page.Validate (ValidationGroup);
                        
                        this.OnClick (new BulletedListEventArgs (int.Parse (eventArgument, CultureInfo.InvariantCulture)));
                }
@@ -190,26 +214,21 @@ namespace System.Web.UI.WebControls {
                [Bindable (false)]
                [EditorBrowsableAttribute (EditorBrowsableState.Never)]
                public override int SelectedIndex {
-                       get { return base.SelectedIndex; }
+                       get { return -1; }
                        set { throw new NotSupportedException (String.Format ("This property is not supported in {0}", GetType ())); }
                }
                
            [EditorBrowsableAttribute (EditorBrowsableState.Never)]
                public override ListItem SelectedItem {
-                       get { return base.SelectedItem; }
+                       get { return null; }
                }
 
                [EditorBrowsable (EditorBrowsableState.Never)]
                [Bindable (false)]
-               [MonoTODO]
-               public override string SelectedValue 
+               public override string SelectedValue
                {
-                       get {
-                               throw new NotImplementedException ();
-                       }
-                       set {
-                               throw new NotImplementedException ();
-                       }
+                       get { return string.Empty; }
+                       set { throw new NotSupportedException (); }
                }
                
                [DefaultValueAttribute ("")]
@@ -280,15 +299,10 @@ namespace System.Web.UI.WebControls {
                }
 
                [EditorBrowsable (EditorBrowsableState.Never)]
-               [MonoTODO]
                public override string Text
                {
-                       get {
-                               throw new NotImplementedException ();
-                       }
-                       set {
-                               throw new NotImplementedException ();
-                       }
+                       get { return string.Empty; }
+                       set { throw new NotSupportedException (); }
                }