2 // System.Web.UI.WebControls.BulletedList.cs
5 // Ben Maurer (bmaurer@users.sourceforge.net)
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 using System.Collections;
33 using System.Globalization;
36 using System.ComponentModel;
37 using System.ComponentModel.Design;
39 namespace System.Web.UI.WebControls {
40 public class BulletedList : ListControl, IPostBackEventHandler {
42 [MonoTODO ("we are missing a new style enum, we should be using it")]
43 protected override void AddAttributesToRender (HtmlTextWriter writer)
45 const string ListStyleType = "list-style-type";
46 const string ListStyleImage = "list-style-image";
48 bool isNumeric = false;
51 case BulletStyle.NotSet:
54 case BulletStyle.Numbered:
55 writer.AddStyleAttribute (ListStyleType, "decimal");
59 case BulletStyle.LowerAlpha:
60 writer.AddStyleAttribute (ListStyleType, "lower-alpha");
64 case BulletStyle.UpperAlpha:
65 writer.AddStyleAttribute (ListStyleType, "upper-alpha");
69 case BulletStyle.LowerRoman:
70 writer.AddStyleAttribute (ListStyleType, "lower-roman");
74 case BulletStyle.UpperRoman:
75 writer.AddStyleAttribute (ListStyleType, "lower-roman");
79 case BulletStyle.Disc:
80 writer.AddStyleAttribute (ListStyleType, "disc");
83 case BulletStyle.Circle:
84 writer.AddStyleAttribute (ListStyleType, "circle");
87 case BulletStyle.Square:
88 writer.AddStyleAttribute (ListStyleType, "square");
91 case BulletStyle.CustomImage:
92 writer.AddStyleAttribute (ListStyleImage, "url(" + BulletImageUrl+ ")");
96 if (isNumeric && FirstBulletNumber != 1)
97 writer.AddAttribute ("start", FirstBulletNumber.ToString ());
99 base.AddAttributesToRender (writer);
103 [MonoTODO ("new bool prop on ListItem: Enabled")]
104 protected virtual void RenderBulletText (ListItem item, int index, HtmlTextWriter writer)
106 switch (DisplayMode) {
107 case BulletedListDisplayMode.Text:
108 //if (!item.Enabled) {
109 // writer.AddAttribute (HtmlTextWriterAttribute.Disabled, "disabled");
110 // writer.RenderBeginTag (HtmlTextWriterTag.Span);
112 writer.Write (item.Text);
114 // writer.RenderEndTag ();
117 case BulletedListDisplayMode.HyperLink:
118 //if (cacheIsEnabled && item.Enabled) {
119 // writer.AddAttribute (HtmlTextWriterAttribute.Href, item.Value);
121 // writer.AddAttribute(HtmlTextWriterAttribute.Target, this.Target);
125 writer.AddAttribute (HtmlTextWriterAttribute.Disabled, "disabled");
127 writer.RenderBeginTag (HtmlTextWriterTag.A);
128 writer.Write (item.Text);
129 writer.RenderEndTag ();
132 case BulletedListDisplayMode.LinkButton:
133 //if (cacheIsEnabled && item.Enabled)
134 writer.AddAttribute (HtmlTextWriterAttribute.Href, Page.GetPostBackClientHyperlink (this, (index.ToString (CultureInfo.InvariantCulture))));
136 // writer.AddAttribute (HtmlTextWriterAttribute.Disabled, "disabled");
137 writer.RenderBeginTag (HtmlTextWriterTag.A);
138 writer.Write (item.Text);
139 writer.RenderEndTag ();
144 protected override void RenderContents (HtmlTextWriter writer)
146 cacheIsEnabled = this.Enabled;
148 foreach (ListItem i in Items) {
149 writer.RenderBeginTag (HtmlTextWriterTag.Li);
150 this.RenderBulletText (i, idx ++, writer);
151 writer.RenderEndTag ();
155 [MonoTODO ("ListControl has a CausesValidation prop in v1.2, we need to use it")]
156 void IPostBackEventHandler.RaisePostBackEvent (string eventArgument)
158 //if (CausesValidation)
161 this.OnClick (new BulletedListEventArgs (int.Parse (eventArgument, CultureInfo.InvariantCulture)));
164 public override bool AutoPostBack {
165 get { return base.AutoPostBack; }
166 set { throw new NotSupportedException (String.Format ("This property is not supported in {0}", GetType ())); }
169 public override int SelectedIndex {
170 get { return base.SelectedIndex; }
171 set { throw new NotSupportedException (String.Format ("This property is not supported in {0}", GetType ())); }
174 public override ListItem SelectedItem {
175 get { return base.SelectedItem; }
178 public virtual string BulletImageUrl {
180 object ret = ViewState ["BulletImageUrl"];
187 ViewState ["BulletImageUrl"] = value;
191 public virtual BulletStyle BulletStyle {
193 object ret = ViewState ["BulletStyle"];
195 return (BulletStyle) ret;
197 return BulletStyle.NotSet;
200 if ((int) value < 0 || (int) value > 9)
201 throw new ArgumentOutOfRangeException ("value");
203 ViewState ["BulletStyle"] = value;
207 public override ControlCollection Controls { get { return new EmptyControlCollection (this); } }
209 public virtual BulletedListDisplayMode DisplayMode {
211 object ret = ViewState ["DisplayMode"];
213 return (BulletedListDisplayMode) ret;
215 return BulletedListDisplayMode.Text;
218 if ((int) value < 0 || (int) value > 2)
219 throw new ArgumentOutOfRangeException ("value");
221 ViewState ["DisplayMode"] = value;
225 public virtual int FirstBulletNumber {
227 object ret = ViewState ["FirstBulletNumber"];
234 ViewState ["FirstBulletNumber"] = value;
239 protected override HtmlTextWriterTag TagKey {
241 switch (BulletStyle) {
242 case BulletStyle.Numbered:
243 case BulletStyle.LowerAlpha:
244 case BulletStyle.UpperAlpha:
245 case BulletStyle.LowerRoman:
246 case BulletStyle.UpperRoman:
247 return HtmlTextWriterTag.Ol;
249 case BulletStyle.NotSet:
250 case BulletStyle.Disc:
251 case BulletStyle.Circle:
252 case BulletStyle.Square:
253 case BulletStyle.CustomImage:
255 return HtmlTextWriterTag.Ul;
260 public virtual string Target {
262 object ret = ViewState ["Target"];
269 ViewState ["Target"] = value;
273 static readonly object ClickEvent = new object ();
274 public event EventHandler Click
277 Events.AddHandler (ClickEvent, value);
280 Events.RemoveHandler (ClickEvent, value);
284 protected virtual void OnClick (BulletedListEventArgs e)
286 if (Events != null) {
287 EventHandler eh = (EventHandler) (Events [ClickEvent]);