2 // System.Web.UI.WebControls.BulletedList.cs
5 // Ben Maurer (bmaurer@users.sourceforge.net)
11 using System.Collections;
12 using System.Globalization;
15 using System.ComponentModel;
16 using System.ComponentModel.Design;
18 namespace System.Web.UI.WebControls {
19 public class BulletedList : ListControl, IPostBackEventHandler {
21 [MonoTODO ("we are missing a new style enum, we should be using it")]
22 protected override void AddAttributesToRender (HtmlTextWriter writer)
24 const string ListStyleType = "list-style-type";
25 const string ListStyleImage = "list-style-image";
27 bool isNumeric = false;
30 case BulletStyle.NotSet:
33 case BulletStyle.Numbered:
34 writer.AddStyleAttribute (ListStyleType, "decimal");
38 case BulletStyle.LowerAlpha:
39 writer.AddStyleAttribute (ListStyleType, "lower-alpha");
43 case BulletStyle.UpperAlpha:
44 writer.AddStyleAttribute (ListStyleType, "upper-alpha");
48 case BulletStyle.LowerRoman:
49 writer.AddStyleAttribute (ListStyleType, "lower-roman");
53 case BulletStyle.UpperRoman:
54 writer.AddStyleAttribute (ListStyleType, "lower-roman");
58 case BulletStyle.Disc:
59 writer.AddStyleAttribute (ListStyleType, "disc");
62 case BulletStyle.Circle:
63 writer.AddStyleAttribute (ListStyleType, "circle");
66 case BulletStyle.Square:
67 writer.AddStyleAttribute (ListStyleType, "square");
70 case BulletStyle.CustomImage:
71 writer.AddStyleAttribute (ListStyleImage, "url(" + BulletImageUrl+ ")");
75 if (isNumeric && FirstBulletNumber != 1)
76 writer.AddAttribute ("start", FirstBulletNumber.ToString ());
78 base.AddAttributesToRender (writer);
82 [MonoTODO ("new bool prop on ListItem: Enabled")]
83 protected virtual void RenderBulletText (ListItem item, int index, HtmlTextWriter writer)
85 switch (DisplayMode) {
86 case BulletedListDisplayMode.Text:
87 //if (!item.Enabled) {
88 // writer.AddAttribute (HtmlTextWriterAttribute.Disabled, "disabled");
89 // writer.RenderBeginTag (HtmlTextWriterTag.Span);
91 writer.Write (item.Text);
93 // writer.RenderEndTag ();
96 case BulletedListDisplayMode.HyperLink:
97 //if (cacheIsEnabled && item.Enabled) {
98 // writer.AddAttribute (HtmlTextWriterAttribute.Href, item.Value);
100 // writer.AddAttribute(HtmlTextWriterAttribute.Target, this.Target);
104 writer.AddAttribute (HtmlTextWriterAttribute.Disabled, "disabled");
106 writer.RenderBeginTag (HtmlTextWriterTag.A);
107 writer.Write (item.Text);
108 writer.RenderEndTag ();
111 case BulletedListDisplayMode.LinkButton:
112 //if (cacheIsEnabled && item.Enabled)
113 writer.AddAttribute (HtmlTextWriterAttribute.Href, Page.GetPostBackClientHyperlink (this, (index.ToString (CultureInfo.InvariantCulture))));
115 // writer.AddAttribute (HtmlTextWriterAttribute.Disabled, "disabled");
116 writer.RenderBeginTag (HtmlTextWriterTag.A);
117 writer.Write (item.Text);
118 writer.RenderEndTag ();
123 protected override void RenderContents (HtmlTextWriter writer)
125 cacheIsEnabled = this.Enabled;
127 foreach (ListItem i in Items) {
128 writer.RenderBeginTag (HtmlTextWriterTag.Li);
129 this.RenderBulletText (i, idx ++, writer);
130 writer.RenderEndTag ();
134 [MonoTODO ("ListControl has a CausesValidation prop in v1.2, we need to use it")]
135 void IPostBackEventHandler.RaisePostBackEvent (string eventArgument)
137 //if (CausesValidation)
140 this.OnClick (new BulletedListEventArgs (int.Parse (eventArgument, CultureInfo.InvariantCulture)));
143 public override bool AutoPostBack {
144 get { return base.AutoPostBack; }
145 set { throw new NotSupportedException (String.Format ("This property is not supported in {0}", GetType ())); }
148 public override int SelectedIndex {
149 get { return base.SelectedIndex; }
150 set { throw new NotSupportedException (String.Format ("This property is not supported in {0}", GetType ())); }
153 public override ListItem SelectedItem {
154 get { return base.SelectedItem; }
157 public virtual string BulletImageUrl {
159 object ret = ViewState ["BulletImageUrl"];
166 ViewState ["BulletImageUrl"] = value;
170 public virtual BulletStyle BulletStyle {
172 object ret = ViewState ["BulletStyle"];
174 return (BulletStyle) ret;
176 return BulletStyle.NotSet;
179 if ((int) value < 0 || (int) value > 9)
180 throw new ArgumentOutOfRangeException ("value");
182 ViewState ["BulletStyle"] = value;
186 public override ControlCollection Controls { get { return new EmptyControlCollection (this); } }
188 public virtual BulletedListDisplayMode DisplayMode {
190 object ret = ViewState ["DisplayMode"];
192 return (BulletedListDisplayMode) ret;
194 return BulletedListDisplayMode.Text;
197 if ((int) value < 0 || (int) value > 2)
198 throw new ArgumentOutOfRangeException ("value");
200 ViewState ["DisplayMode"] = value;
204 public virtual int FirstBulletNumber {
206 object ret = ViewState ["FirstBulletNumber"];
213 ViewState ["FirstBulletNumber"] = value;
218 protected override HtmlTextWriterTag TagKey {
220 switch (BulletStyle) {
221 case BulletStyle.Numbered:
222 case BulletStyle.LowerAlpha:
223 case BulletStyle.UpperAlpha:
224 case BulletStyle.LowerRoman:
225 case BulletStyle.UpperRoman:
226 return HtmlTextWriterTag.Ol;
228 case BulletStyle.NotSet:
229 case BulletStyle.Disc:
230 case BulletStyle.Circle:
231 case BulletStyle.Square:
232 case BulletStyle.CustomImage:
234 return HtmlTextWriterTag.Ul;
239 public virtual string Target {
241 object ret = ViewState ["Target"];
248 ViewState ["Target"] = value;
252 static readonly object ClickEvent = new object ();
253 public event EventHandler Click
256 Events.AddHandler (ClickEvent, value);
259 Events.RemoveHandler (ClickEvent, value);
263 protected virtual void OnClick (BulletedListEventArgs e)
265 if (Events != null) {
266 EventHandler eh = (EventHandler) (Events [ClickEvent]);