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