bug fixes found by Test/System.Web.UI.WebControls/BoundFieldTest
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / PagerSettings.cs
1 //\r
2 // System.Web.UI.WebControls.PagerSettings.cs\r
3 //\r
4 // Authors:\r
5 //      Lluis Sanchez Gual (lluis@novell.com)\r
6 //\r
7 // (C) 2005 Novell, Inc (http://www.novell.com)\r
8 //\r
9 // Permission is hereby granted, free of charge, to any person obtaining\r
10 // a copy of this software and associated documentation files (the\r
11 // "Software"), to deal in the Software without restriction, including\r
12 // without limitation the rights to use, copy, modify, merge, publish,\r
13 // distribute, sublicense, and/or sell copies of the Software, and to\r
14 // permit persons to whom the Software is furnished to do so, subject to\r
15 // the following conditions:\r
16 // \r
17 // The above copyright notice and this permission notice shall be\r
18 // included in all copies or substantial portions of the Software.\r
19 // \r
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
27 //\r
28 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)\r
29 //\r
30 \r
31 #if NET_2_0\r
32 \r
33 using System.ComponentModel;\r
34 using System.Security.Permissions;\r
35 \r
36 namespace System.Web.UI.WebControls\r
37 {\r
38         [TypeConverterAttribute (typeof(ExpandableObjectConverter))]\r
39         [AspNetHostingPermissionAttribute (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]\r
40         public sealed class PagerSettings: IStateManager\r
41         {\r
42                 StateBag ViewState = new StateBag ();\r
43                 Control ctrl;\r
44                 \r
45                 public PagerSettings ()\r
46                 {\r
47                 }\r
48                 \r
49                 internal PagerSettings (Control ctrl)\r
50                 {\r
51                         this.ctrl = ctrl;\r
52                 }\r
53 \r
54                 [WebCategoryAttribute ("Appearance")]\r
55                 [NotifyParentPropertyAttribute (true)]\r
56                 [UrlPropertyAttribute]\r
57                 [DefaultValueAttribute ("")]\r
58                 [EditorAttribute ("System.Web.UI.Design.ImageUrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]\r
59                 public string FirstPageImageUrl {\r
60                         get {\r
61                                 object ob = ViewState ["FirstPageImageUrl"];\r
62                                 if (ob != null) return (string) ob;\r
63                                 return string.Empty;\r
64                         }\r
65                         set {\r
66                                 ViewState ["FirstPageImageUrl"] = value;\r
67                         }\r
68                 }\r
69         \r
70                 [WebCategoryAttribute ("Appearance")]\r
71                 [DefaultValueAttribute ("<<")]\r
72                 [NotifyParentPropertyAttribute (true)]\r
73                 public string FirstPageText {\r
74                         get {\r
75                                 object ob = ViewState ["FirstPageText"];\r
76                                 if (ob != null) return (string) ob;\r
77                                 return "<<";\r
78                         }\r
79                         set {\r
80                                 ViewState ["FirstPageText"] = value;\r
81                         }\r
82                 }\r
83         \r
84                 [WebCategoryAttribute ("Appearance")]\r
85                 [NotifyParentPropertyAttribute (true)]\r
86                 [UrlPropertyAttribute]\r
87                 [DefaultValueAttribute ("")]\r
88                 [EditorAttribute ("System.Web.UI.Design.ImageUrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]\r
89                 public string LastPageImageUrl {\r
90                         get {\r
91                                 object ob = ViewState ["LastPageImageUrl"];\r
92                                 if (ob != null) return (string) ob;\r
93                                 return string.Empty;\r
94                         }\r
95                         set {\r
96                                 ViewState ["LastPageImageUrl"] = value;\r
97                         }\r
98                 }\r
99         \r
100                 [NotifyParentPropertyAttribute (true)]\r
101                 [WebCategoryAttribute ("Appearance")]\r
102                 [DefaultValueAttribute (">>")]\r
103                 public string LastPageText {\r
104                         get {\r
105                                 object ob = ViewState ["LastPageText"];\r
106                                 if (ob != null) return (string) ob;\r
107                                 return ">>";\r
108                         }\r
109                         set {\r
110                                 ViewState ["LastPageText"] = value;\r
111                         }\r
112                 }\r
113         \r
114                 [NotifyParentPropertyAttribute (true)]\r
115                 [WebCategoryAttribute ("Appearance")]\r
116                 [DefaultValueAttribute (PagerButtons.Numeric)]\r
117                 public PagerButtons Mode {\r
118                         get {\r
119                                 object ob = ViewState ["Mode"];\r
120                                 if (ob != null) return (PagerButtons) ob;\r
121                                 return PagerButtons.Numeric;\r
122                         }\r
123                         set {\r
124                                 ViewState ["Mode"] = value;\r
125                         }\r
126                 }\r
127         \r
128                 [WebCategoryAttribute ("Appearance")]\r
129                 [NotifyParentPropertyAttribute (true)]\r
130                 [UrlPropertyAttribute]\r
131                 [DefaultValueAttribute ("")]\r
132                 [EditorAttribute ("System.Web.UI.Design.ImageUrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]\r
133                 public string NextPageImageUrl {\r
134                         get {\r
135                                 object ob = ViewState ["NextPageImageUrl"];\r
136                                 if (ob != null) return (string) ob;\r
137                                 return string.Empty;\r
138                         }\r
139                         set {\r
140                                 ViewState ["NextPageImageUrl"] = value;\r
141                         }\r
142                 }\r
143 \r
144                 [WebCategoryAttribute ("Appearance")]\r
145                 [NotifyParentPropertyAttribute (true)]\r
146                 [DefaultValueAttribute (">")]\r
147                 public string NextPageText {\r
148                         get {\r
149                                 object ob = ViewState ["NextPageText"];\r
150                                 if (ob != null) return (string) ob;\r
151                                 return ">";\r
152                         }\r
153                         set {\r
154                                 ViewState ["NextPageText"] = value;\r
155                         }\r
156                 }\r
157         \r
158                 [WebCategoryAttribute ("Behavior")]\r
159                 [NotifyParentPropertyAttribute (true)]\r
160                 [DefaultValueAttribute (10)]\r
161                 public int PageButtonCount {\r
162                         get {\r
163                                 object ob = ViewState ["PageButtonCount"];\r
164                                 if (ob != null) return (int) ob;\r
165                                 return 10;\r
166                         }\r
167                         set {\r
168                                 ViewState ["PageButtonCount"] = value;\r
169                         }\r
170                 }\r
171         \r
172                 [WebCategoryAttribute ("Layout")]\r
173                 [DefaultValueAttribute (PagerPosition.Bottom)]\r
174                 [NotifyParentPropertyAttribute (true)]\r
175                 public PagerPosition Position {\r
176                         get {\r
177                                 object ob = ViewState ["Position"];\r
178                                 if (ob != null) return (PagerPosition) ob;\r
179                                 return PagerPosition.Bottom;\r
180                         }\r
181                         set {\r
182                                 ViewState ["Position"] = value;\r
183                         }\r
184                 }\r
185         \r
186                 [WebCategoryAttribute ("Appearance")]\r
187                 [NotifyParentPropertyAttribute (true)]\r
188                 [UrlPropertyAttribute]\r
189                 [DefaultValueAttribute ("")]\r
190                 [EditorAttribute ("System.Web.UI.Design.ImageUrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]\r
191                 public string PreviousPageImageUrl {\r
192                         get {\r
193                                 object ob = ViewState ["PreviousPageImageUrl"];\r
194                                 if (ob != null) return (string) ob;\r
195                                 return string.Empty;\r
196                         }\r
197                         set {\r
198                                 ViewState ["PreviousPageImageUrl"] = value;\r
199                         }\r
200                 }\r
201         \r
202                 [WebCategoryAttribute ("Appearance")]\r
203                 [DefaultValueAttribute ("<")]\r
204                 [NotifyParentPropertyAttribute (true)]\r
205                 public string PreviousPageText {\r
206                         get {\r
207                                 object ob = ViewState ["PreviousPageText"];\r
208                                 if (ob != null) return (string) ob;\r
209                                 return "<";\r
210                         }\r
211                         set {\r
212                                 ViewState ["PreviousPageText"] = value;\r
213                         }\r
214                 }\r
215         \r
216                 [WebCategoryAttribute ("Appearance")]\r
217                 [DefaultValueAttribute (true)]\r
218                 [NotifyParentPropertyAttribute (true)]\r
219                 public bool Visible {\r
220                         get {\r
221                                 object ob = ViewState ["Visible"];\r
222                                 if (ob != null) return (bool) ob;\r
223                                 return true;\r
224                         }\r
225                         set {\r
226                                 ViewState ["Visible"] = value;\r
227                         }\r
228                 }\r
229         \r
230                 public override string ToString ()\r
231                 {\r
232                         return string.Empty;\r
233                 }\r
234 \r
235                 void IStateManager.LoadViewState (object savedState)\r
236                 {\r
237                         ViewState.LoadViewState (savedState);\r
238                 }\r
239                 \r
240                 object IStateManager.SaveViewState ()\r
241                 {\r
242                         return ViewState.SaveViewState();\r
243                 }\r
244                 \r
245                 void IStateManager.TrackViewState ()\r
246                 {\r
247                         ViewState.TrackViewState();\r
248                 }\r
249                 \r
250                 bool IStateManager.IsTrackingViewState\r
251                 {\r
252                         get { return ViewState.IsTrackingViewState; }\r
253                 }\r
254                 \r
255                 internal Table CreatePagerControl (int currentPage, int pageCount)\r
256                 {\r
257                         Table table = new Table ();\r
258                         TableRow row = new TableRow ();\r
259                         table.Rows.Add (row);\r
260 \r
261                         if (Mode == PagerButtons.NextPrevious || Mode == PagerButtons.NextPreviousFirstLast)\r
262                         {\r
263                                 if (currentPage > 0) {\r
264                                         if (Mode == PagerButtons.NextPreviousFirstLast)\r
265                                                 row.Cells.Add (CreateCell (FirstPageText, FirstPageImageUrl, "Page", "First"));\r
266                                         row.Cells.Add (CreateCell (PreviousPageText, PreviousPageImageUrl, "Page", "Prev"));\r
267                                 }\r
268                                 if (currentPage < pageCount - 1) {\r
269                                         row.Cells.Add (CreateCell (NextPageText, NextPageImageUrl, "Page", "Next"));\r
270                                         if (Mode == PagerButtons.NextPreviousFirstLast)\r
271                                                 row.Cells.Add (CreateCell (LastPageText, LastPageImageUrl, "Page", "Last"));\r
272                                 }\r
273                         }\r
274                         else if (Mode == PagerButtons.Numeric || Mode == PagerButtons.NumericFirstLast)\r
275                         {\r
276                                 int first = currentPage / PageButtonCount;\r
277                                 int last = first + PageButtonCount;\r
278                                 if (last >= pageCount) last = pageCount;\r
279                                 \r
280                                 if (first > 0) {\r
281                                         if (Mode == PagerButtons.NumericFirstLast)\r
282                                                 row.Cells.Add (CreateCell (FirstPageText, FirstPageImageUrl, "Page", "First"));\r
283                                         row.Cells.Add (CreateCell (PreviousPageText, PreviousPageImageUrl, "Page", "Prev"));\r
284                                 }\r
285                                 \r
286                                 for (int n = first; n < last; n++)\r
287                                         row.Cells.Add (CreateCell ((n+1).ToString(), string.Empty, (n != currentPage) ? "Page" : "", (n+1).ToString()));\r
288                                 \r
289                                 if (last < pageCount - 1) {\r
290                                         row.Cells.Add (CreateCell (NextPageText, NextPageImageUrl, "Page", "Next"));\r
291                                         if (Mode == PagerButtons.NumericFirstLast)\r
292                                                 row.Cells.Add (CreateCell (LastPageText, LastPageImageUrl, "Page", "Last"));\r
293                                 }\r
294                         }\r
295                         return table;\r
296                 }\r
297                 \r
298                 TableCell CreateCell (string text, string image, string command, string argument)\r
299                 {\r
300                         TableCell cell = new TableCell ();\r
301                         cell.Controls.Add (new DataControlButton (ctrl, text, image, command, argument, true));\r
302                         return cell;\r
303                 }\r
304         }\r
305 }\r
306 \r
307 #endif