2004-05-26 Gonzalo Paniagua Javier <gonzalo@ximian.com>
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / BulletedList.cs
1 //
2 // System.Web.UI.WebControls.BulletedList.cs
3 //
4 // Authors:
5 //   Ben Maurer (bmaurer@users.sourceforge.net)
6 //
7 // (C) 2003 Ben Maurer
8 //
9 #if NET_2_0
10 using System.IO;
11 using System.Collections;
12 using System.Globalization;
13 using System.Text;
14 using System.Drawing;
15 using System.ComponentModel;
16 using System.ComponentModel.Design;
17
18 namespace System.Web.UI.WebControls {
19         public class BulletedList : ListControl, IPostBackEventHandler {
20                 
21                 [MonoTODO ("we are missing a new style enum, we should be using it")]
22                 protected override void AddAttributesToRender (HtmlTextWriter writer)
23                 {
24                         const string ListStyleType = "list-style-type";
25                         const string ListStyleImage = "list-style-image";
26                         
27                         bool isNumeric = false;
28                         switch (BulletStyle)
29                         {
30                                 case BulletStyle.NotSet:
31                                         break;
32                                 
33                                 case BulletStyle.Numbered:
34                                         writer.AddStyleAttribute (ListStyleType, "decimal");
35                                         isNumeric = true;
36                                         break;
37                                 
38                                 case BulletStyle.LowerAlpha:
39                                         writer.AddStyleAttribute (ListStyleType, "lower-alpha");
40                                         isNumeric = true;
41                                         break;
42                                 
43                                 case BulletStyle.UpperAlpha:
44                                         writer.AddStyleAttribute (ListStyleType, "upper-alpha");
45                                         isNumeric = true;
46                                         break;
47                                 
48                                 case BulletStyle.LowerRoman:
49                                         writer.AddStyleAttribute (ListStyleType, "lower-roman");
50                                         isNumeric = true;
51                                         break;
52                                 
53                                 case BulletStyle.UpperRoman:
54                                         writer.AddStyleAttribute (ListStyleType, "lower-roman");
55                                         isNumeric = true;
56                                         break;
57
58                                 case BulletStyle.Disc:
59                                         writer.AddStyleAttribute (ListStyleType, "disc");
60                                         break;
61                                 
62                                 case BulletStyle.Circle:
63                                         writer.AddStyleAttribute (ListStyleType, "circle");
64                                         break;
65                                 
66                                 case BulletStyle.Square:
67                                         writer.AddStyleAttribute (ListStyleType, "square");
68                                         break;
69                                                                 
70                                 case BulletStyle.CustomImage:
71                                         writer.AddStyleAttribute (ListStyleImage, "url(" + BulletImageUrl+ ")");
72                                         break;
73                         }
74
75                         if (isNumeric && FirstBulletNumber != 1)
76                                 writer.AddAttribute ("start", FirstBulletNumber.ToString ());
77                         
78                         base.AddAttributesToRender (writer);
79                 }
80                 
81                 bool cacheIsEnabled;
82                 [MonoTODO ("new bool prop on ListItem: Enabled")]
83                 protected virtual void RenderBulletText (ListItem item, int index, HtmlTextWriter writer)
84                 {
85                         switch (DisplayMode) {
86                                 case BulletedListDisplayMode.Text:
87                                         //if (!item.Enabled) {
88                                         //      writer.AddAttribute (HtmlTextWriterAttribute.Disabled, "disabled");
89                                         //      writer.RenderBeginTag (HtmlTextWriterTag.Span);
90                                         //}
91                                         writer.Write (item.Text);
92                                         //if (!item.Enabled)
93                                         //      writer.RenderEndTag ();
94                                         break;
95
96                                 case BulletedListDisplayMode.HyperLink:
97                                         //if (cacheIsEnabled && item.Enabled) {
98                                         //      writer.AddAttribute (HtmlTextWriterAttribute.Href, item.Value);
99                                         //      if (Target != "")
100                                         //              writer.AddAttribute(HtmlTextWriterAttribute.Target, this.Target);
101                                         //      
102                                         //}
103                                         //else
104                                                 writer.AddAttribute (HtmlTextWriterAttribute.Disabled, "disabled");
105                                         
106                                         writer.RenderBeginTag (HtmlTextWriterTag.A);
107                                         writer.Write (item.Text);
108                                         writer.RenderEndTag ();
109                                         break;
110
111                                 case BulletedListDisplayMode.LinkButton:
112                                         //if (cacheIsEnabled && item.Enabled)
113                                                 writer.AddAttribute (HtmlTextWriterAttribute.Href, Page.GetPostBackClientHyperlink (this, (index.ToString (CultureInfo.InvariantCulture))));
114                                         //else
115                                         //      writer.AddAttribute (HtmlTextWriterAttribute.Disabled, "disabled");
116                                         writer.RenderBeginTag (HtmlTextWriterTag.A);
117                                         writer.Write (item.Text);
118                                         writer.RenderEndTag ();
119                                         break;
120                         }
121                 }
122                 
123                 protected override void RenderContents (HtmlTextWriter writer)
124                 {
125                         cacheIsEnabled = this.Enabled;
126                         int idx = 0;
127                         foreach (ListItem i in Items) {
128                                 writer.RenderBeginTag (HtmlTextWriterTag.Li);
129                                 this.RenderBulletText (i, idx ++, writer);
130                                 writer.RenderEndTag ();
131                         }
132                 }
133                 
134                 [MonoTODO ("ListControl has a CausesValidation prop in v1.2, we need to use it")]
135                 void IPostBackEventHandler.RaisePostBackEvent (string eventArgument)
136                 {
137                         //if (CausesValidation)
138                         //      Page.Validate ();
139                         
140                         this.OnClick (new BulletedListEventArgs (int.Parse (eventArgument, CultureInfo.InvariantCulture)));
141                 }
142                         
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 ())); }
146                 }
147                 
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 ())); }
151                 }
152                 
153                 public override ListItem SelectedItem {
154                         get { return base.SelectedItem; }
155                 }
156                 
157                 public virtual string BulletImageUrl {
158                         get {
159                                 object ret = ViewState ["BulletImageUrl"];
160                                 if (ret != null)
161                                         return (string) ret; 
162                         
163                                 return "";
164                         }
165                         set {
166                                 ViewState ["BulletImageUrl"] = value;
167                         }
168                 }
169                 
170                 public virtual BulletStyle BulletStyle {
171                         get {
172                                 object ret = ViewState ["BulletStyle"];
173                                 if (ret != null)
174                                         return (BulletStyle) ret; 
175                         
176                                 return BulletStyle.NotSet;
177                         }
178                         set {
179                                 if ((int) value < 0 || (int) value > 9)
180                                         throw new ArgumentOutOfRangeException ("value");
181
182                                 ViewState ["BulletStyle"] = value;
183                         }
184                 }
185                 
186                 public override ControlCollection Controls { get { return new EmptyControlCollection (this); } }
187                 
188                 public virtual BulletedListDisplayMode DisplayMode {
189                         get {
190                                 object ret = ViewState ["DisplayMode"];
191                                 if (ret != null)
192                                         return (BulletedListDisplayMode) ret; 
193                         
194                                 return BulletedListDisplayMode.Text;
195                         }
196                         set {
197                                 if ((int) value < 0 || (int) value > 2)
198                                         throw new ArgumentOutOfRangeException ("value");
199
200                                 ViewState ["DisplayMode"] = value;
201                         }
202                 }
203                 
204                 public virtual int FirstBulletNumber {
205                         get {
206                                 object ret = ViewState ["FirstBulletNumber"];
207                                 if (ret != null)
208                                         return (int) ret; 
209                         
210                                 return 1;
211                         }
212                         set {
213                                 ViewState ["FirstBulletNumber"] = value;
214                         }
215                 }
216                 
217
218                 protected override HtmlTextWriterTag TagKey {
219                         get {
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;
227                                         
228                                         case BulletStyle.NotSet:
229                                         case BulletStyle.Disc:
230                                         case BulletStyle.Circle:
231                                         case BulletStyle.Square:
232                                         case BulletStyle.CustomImage:
233                                         default:
234                                                 return HtmlTextWriterTag.Ul;
235                                 }
236                         }
237                 }
238                 
239                 public virtual string Target {
240                         get {
241                                 object ret = ViewState ["Target"];
242                                 if (ret != null)
243                                         return (string) ret; 
244                         
245                                 return "";
246                         }
247                         set {
248                                 ViewState ["Target"] = value;
249                         }
250                 }
251                 
252                 static readonly object ClickEvent = new object ();
253                 public event EventHandler Click
254                 {
255                         add {
256                                 Events.AddHandler (ClickEvent, value);
257                         }
258                         remove {
259                                 Events.RemoveHandler (ClickEvent, value);
260                         }
261                 }
262                 
263                 protected virtual void OnClick (BulletedListEventArgs e)
264                 {
265                         if (Events != null) {
266                                 EventHandler eh = (EventHandler) (Events [ClickEvent]);
267                                 if (eh != null)
268                                         eh (this, e);
269                         }
270                 }
271         }
272 }
273 #endif