2004-09-12 Gonzalo Paniagua Javier <gonzalo@ximian.com>
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / DataGridColumnCollection.cs
1
2 //
3 // Permission is hereby granted, free of charge, to any person obtaining
4 // a copy of this software and associated documentation files (the
5 // "Software"), to deal in the Software without restriction, including
6 // without limitation the rights to use, copy, modify, merge, publish,
7 // distribute, sublicense, and/or sell copies of the Software, and to
8 // permit persons to whom the Software is furnished to do so, subject to
9 // the following conditions:
10 // 
11 // The above copyright notice and this permission notice shall be
12 // included in all copies or substantial portions of the Software.
13 // 
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 //
22 /**\r
23  * Namespace: System.Web.UI.WebControls\r
24  * Class:     DataGridColumnCollection\r
25  *\r
26  * Author:  Gaurav Vaish\r
27  * Maintainer: gvaish@iitk.ac.in\r
28  * Contact: <my_scripts2001@yahoo.com>, <gvaish@iitk.ac.in>\r
29  * Implementation: yes\r
30  * Status:  ??%\r
31  *\r
32  * (C) Gaurav Vaish (2002)\r
33  */\r
34 \r
35 using System;
36 using System.ComponentModel;\r
37 using System.Collections;\r
38 using System.Web;\r
39 using System.Web.UI;\r
40 \r
41 namespace System.Web.UI.WebControls\r
42 {\r
43         public sealed class DataGridColumnCollection : ICollection, IEnumerable, IStateManager\r
44         {\r
45                 private DataGrid  owner;\r
46                 private ArrayList columns;\r
47                 private bool      trackViewState;\r
48 \r
49                 public DataGridColumnCollection(DataGrid owner, ArrayList columns)\r
50                 {\r
51                         this.owner   = owner;\r
52                         this.columns = columns;\r
53                 }\r
54
55                 [Browsable (false)]\r
56                 public int Count\r
57                 {\r
58                         get\r
59                         {\r
60                                 return columns.Count;\r
61                         }\r
62                 }\r
63
64                 [Browsable (false)]\r
65                 public bool IsReadOnly\r
66                 {\r
67                         get\r
68                         {\r
69                                 return false;\r
70                         }\r
71                 }\r
72
73                 [Browsable (false)]\r
74                 public bool IsSynchronized\r
75                 {\r
76                         get\r
77                         {\r
78                                 return false;\r
79                         }\r
80                 }\r
81
82                 [Browsable (false)]\r
83                 public DataGridColumn this[int index]\r
84                 {\r
85                         get\r
86                         {\r
87                                 return (DataGridColumn)(columns[index]);\r
88                         }\r
89                 }\r
90
91                 [Browsable (false)]\r
92                 public object SyncRoot\r
93                 {\r
94                         get\r
95                         {\r
96                                 return this;\r
97                         }\r
98                 }\r
99 \r
100                 public void Add(DataGridColumn column)\r
101                 {\r
102                         AddAt(-1, column);\r
103                 }\r
104 \r
105                 public void AddAt(int index, DataGridColumn column)\r
106                 {\r
107                         if(index == -1)\r
108                         {\r
109                                 columns.Add(column);\r
110                         } else\r
111                         {\r
112                                 columns.Insert(index, column);\r
113                         }\r
114 \r
115                         column.SetOwner (owner);\r
116                         if(trackViewState)\r
117                         {\r
118                                 ((IStateManager)column).TrackViewState();\r
119                         }\r
120                         OnColumnsChanged();\r
121                 }\r
122 \r
123                 internal void OnColumnsChanged()\r
124                 {\r
125                         if(owner != null)\r
126                         {\r
127                                 owner.OnColumnsChanged();\r
128                         }\r
129                 }\r
130 \r
131                 public void Clear()\r
132                 {\r
133                         columns.Clear();\r
134                         OnColumnsChanged();\r
135                 }\r
136 \r
137                 public void CopyTo(Array array, int index)\r
138                 {\r
139                         foreach(DataGridColumn current in this)\r
140                         {\r
141                                 array.SetValue(current, index++);\r
142                         }\r
143                 }\r
144 \r
145                 public IEnumerator GetEnumerator()\r
146                 {\r
147                         return columns.GetEnumerator();\r
148                 }\r
149 \r
150                 public int IndexOf(DataGridColumn column)\r
151                 {\r
152                         if(column != null)\r
153                         {\r
154                                 return columns.IndexOf(column);\r
155                         }\r
156                         return -1;\r
157                 }\r
158 \r
159                 public void Remove(DataGridColumn column)\r
160                 {\r
161                         if(column != null)\r
162                         {\r
163                                 RemoveAt(IndexOf(column));\r
164                         }\r
165                 }\r
166 \r
167                 public void RemoveAt(int index)\r
168                 {\r
169                         if(index >= 0 && index < columns.Count)\r
170                         {\r
171                                 columns.RemoveAt(index);\r
172                                 OnColumnsChanged();\r
173                                 return;\r
174                         }\r
175                         //This exception is not documented, but thrown\r
176                         throw new ArgumentOutOfRangeException("string");\r
177                 }\r
178 \r
179                 object IStateManager.SaveViewState()\r
180                 {\r
181                         if (columns.Count == 0)\r
182                                 return null;\r
183 \r
184                         ArrayList retVal = new ArrayList (columns.Count);
185                         bool found = false;\r
186                         foreach (IStateManager current in columns) {
187                                 object o = current.SaveViewState ();\r
188                                 retVal.Add (o);
189                                 if (o != null)
190                                         found = true;
191                         }\r
192 \r
193                         if (!found)
194                                 return null;
195                         
196                         return retVal;\r
197                 }\r
198 \r
199                 void IStateManager.LoadViewState(object savedState)\r
200                 {\r
201                         if (savedState == null || !(savedState is ArrayList))\r
202                                 return;\r
203 \r
204                         ArrayList list = (ArrayList) savedState;\r
205                         int end = list.Count;\r
206                         if (end != columns.Count)\r
207                                 return;\r
208 \r
209                         for (int i = 0; i < end; i++) {\r
210                                 IStateManager col = (IStateManager) columns [i];\r
211                                 col.LoadViewState (list [i]);\r
212                         }\r
213                 }\r
214
215                 void IStateManager.TrackViewState()
216                 {
217                         trackViewState = true;
218                         foreach (IStateManager col in columns)
219                                 col.TrackViewState ();
220                 }
221
222                 bool IStateManager.IsTrackingViewState\r
223                 {\r
224                         get\r
225                         {\r
226                                 return trackViewState;\r
227                         }\r
228                 }\r
229         }\r
230 }\r