2004-05-26 Gonzalo Paniagua Javier <gonzalo@ximian.com>
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / DataGridColumnCollection.cs
1 /**\r
2  * Namespace: System.Web.UI.WebControls\r
3  * Class:     DataGridColumnCollection\r
4  *\r
5  * Author:  Gaurav Vaish\r
6  * Maintainer: gvaish@iitk.ac.in\r
7  * Contact: <my_scripts2001@yahoo.com>, <gvaish@iitk.ac.in>\r
8  * Implementation: yes\r
9  * Status:  ??%\r
10  *\r
11  * (C) Gaurav Vaish (2002)\r
12  */\r
13 \r
14 using System;
15 using System.ComponentModel;\r
16 using System.Collections;\r
17 using System.Web;\r
18 using System.Web.UI;\r
19 \r
20 namespace System.Web.UI.WebControls\r
21 {\r
22         public sealed class DataGridColumnCollection : ICollection, IEnumerable, IStateManager\r
23         {\r
24                 private DataGrid  owner;\r
25                 private ArrayList columns;\r
26                 private bool      trackViewState;\r
27 \r
28                 public DataGridColumnCollection(DataGrid owner, ArrayList columns)\r
29                 {\r
30                         this.owner   = owner;\r
31                         this.columns = columns;\r
32                 }\r
33
34                 [Browsable (false)]\r
35                 public int Count\r
36                 {\r
37                         get\r
38                         {\r
39                                 return columns.Count;\r
40                         }\r
41                 }\r
42
43                 [Browsable (false)]\r
44                 public bool IsReadOnly\r
45                 {\r
46                         get\r
47                         {\r
48                                 return false;\r
49                         }\r
50                 }\r
51
52                 [Browsable (false)]\r
53                 public bool IsSynchronized\r
54                 {\r
55                         get\r
56                         {\r
57                                 return false;\r
58                         }\r
59                 }\r
60
61                 [Browsable (false)]\r
62                 public DataGridColumn this[int index]\r
63                 {\r
64                         get\r
65                         {\r
66                                 return (DataGridColumn)(columns[index]);\r
67                         }\r
68                 }\r
69
70                 [Browsable (false)]\r
71                 public object SyncRoot\r
72                 {\r
73                         get\r
74                         {\r
75                                 return this;\r
76                         }\r
77                 }\r
78 \r
79                 public void Add(DataGridColumn column)\r
80                 {\r
81                         AddAt(-1, column);\r
82                 }\r
83 \r
84                 public void AddAt(int index, DataGridColumn column)\r
85                 {\r
86                         if(index == -1)\r
87                         {\r
88                                 columns.Add(column);\r
89                         } else\r
90                         {\r
91                                 columns.Insert(index, column);\r
92                         }\r
93 \r
94                         column.SetOwner (owner);\r
95                         if(trackViewState)\r
96                         {\r
97                                 ((IStateManager)column).TrackViewState();\r
98                         }\r
99                         OnColumnsChanged();\r
100                 }\r
101 \r
102                 internal void OnColumnsChanged()\r
103                 {\r
104                         if(owner != null)\r
105                         {\r
106                                 owner.OnColumnsChanged();\r
107                         }\r
108                 }\r
109 \r
110                 public void Clear()\r
111                 {\r
112                         columns.Clear();\r
113                         OnColumnsChanged();\r
114                 }\r
115 \r
116                 public void CopyTo(Array array, int index)\r
117                 {\r
118                         foreach(DataGridColumn current in this)\r
119                         {\r
120                                 array.SetValue(current, index++);\r
121                         }\r
122                 }\r
123 \r
124                 public IEnumerator GetEnumerator()\r
125                 {\r
126                         return columns.GetEnumerator();\r
127                 }\r
128 \r
129                 public int IndexOf(DataGridColumn column)\r
130                 {\r
131                         if(column != null)\r
132                         {\r
133                                 return columns.IndexOf(column);\r
134                         }\r
135                         return -1;\r
136                 }\r
137 \r
138                 public void Remove(DataGridColumn column)\r
139                 {\r
140                         if(column != null)\r
141                         {\r
142                                 RemoveAt(IndexOf(column));\r
143                         }\r
144                 }\r
145 \r
146                 public void RemoveAt(int index)\r
147                 {\r
148                         if(index >= 0 && index < columns.Count)\r
149                         {\r
150                                 columns.RemoveAt(index);\r
151                                 OnColumnsChanged();\r
152                                 return;\r
153                         }\r
154                         //This exception is not documented, but thrown\r
155                         throw new ArgumentOutOfRangeException("string");\r
156                 }\r
157 \r
158                 object IStateManager.SaveViewState()\r
159                 {\r
160                         if (columns.Count == 0)\r
161                                 return null;\r
162 \r
163                         ArrayList retVal = new ArrayList (columns.Count);
164                         bool found = false;\r
165                         foreach (IStateManager current in columns) {
166                                 object o = current.SaveViewState ();\r
167                                 retVal.Add (o);
168                                 if (o != null)
169                                         found = true;
170                         }\r
171 \r
172                         if (!found)
173                                 return null;
174                         
175                         return retVal;\r
176                 }\r
177 \r
178                 void IStateManager.LoadViewState(object savedState)\r
179                 {\r
180                         if (savedState == null || !(savedState is ArrayList))\r
181                                 return;\r
182 \r
183                         ArrayList list = (ArrayList) savedState;\r
184                         int end = list.Count;\r
185                         if (end != columns.Count)\r
186                                 return;\r
187 \r
188                         for (int i = 0; i < end; i++) {\r
189                                 IStateManager col = (IStateManager) columns [i];\r
190                                 col.LoadViewState (list [i]);\r
191                         }\r
192                 }\r
193
194                 void IStateManager.TrackViewState()
195                 {
196                         trackViewState = true;
197                         foreach (IStateManager col in columns)
198                                 col.TrackViewState ();
199                 }
200
201                 bool IStateManager.IsTrackingViewState\r
202                 {\r
203                         get\r
204                         {\r
205                                 return trackViewState;\r
206                         }\r
207                 }\r
208         }\r
209 }\r