1 //
2 // System.Web.UI.WebControls.TableCellCollection.cs
3 //
4 // Author:
5 //	Sebastien Pouliot  <sebastien@ximian.com>
6 //
7 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28 
29 using System.ComponentModel;
30 using System.Collections;
31 
32 namespace System.Web.UI.WebControls {
33 
34 	[Editor ("System.Web.UI.Design.WebControls.TableCellsCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
35 	public sealed class TableCellCollection : IList, ICollection, IEnumerable
36 	{
37 		ControlCollection cc;
38 
TableCellCollection(TableRow tr)39 		internal TableCellCollection (TableRow tr)
40 		{
41 			cc = tr.Controls;
42 		}
43 
44 
45 		public int Count {
46 			get { return cc.Count; }
47 		}
48 
49 		public bool IsReadOnly {
50 			get { return false; }	// documented as always false
51 		}
52 
53 		public bool IsSynchronized {
54 			get { return false; }	// documented as always false
55 		}
56 
57 		public TableCell this [int index] {
58 			get { return (TableCell) cc [index]; }
59 		}
60 
61 		public object SyncRoot {
62 			get { return this; }	// as documented
63 		}
64 
65 
Add(TableCell cell)66 		public int Add (TableCell cell)
67 		{
68 			int index = cc.IndexOf (cell);
69 			if (index < 0) {
70 				cc.Add (cell);
71 				index = cc.Count;
72 			}
73 			return index;
74 		}
75 
AddAt(int index, TableCell cell)76 		public void AddAt (int index, TableCell cell)
77 		{
78 			if (cc.IndexOf (cell) < 0)
79 				cc.AddAt (index, cell);
80 		}
81 
AddRange(TableCell[] cells)82 		public void AddRange (TableCell[] cells)
83 		{
84 			foreach (TableCell td in cells) {
85 				if (cc.IndexOf (td) < 0)
86 					cc.Add (td);
87 			}
88 		}
89 
Clear()90 		public void Clear ()
91 		{
92 			cc.Clear ();
93 		}
94 
CopyTo(Array array, int index)95 		public void CopyTo (Array array, int index)
96 		{
97 			cc.CopyTo (array, index);
98 		}
99 
GetCellIndex(TableCell cell)100 		public int GetCellIndex (TableCell cell)
101 		{
102 			return cc.IndexOf (cell);
103 		}
104 
GetEnumerator()105 		public IEnumerator GetEnumerator ()
106 		{
107 			return cc.GetEnumerator ();
108 		}
109 
Remove(TableCell cell)110 		public void Remove (TableCell cell)
111 		{
112 			cc.Remove (cell);
113 		}
114 
RemoveAt(int index)115 		public void RemoveAt (int index)
116 		{
117 			cc.RemoveAt (index);
118 		}
119 
120 
121 		// implements IList but doesn't make some members public
122 
123 		bool IList.IsFixedSize {
124 			get { return false; }
125 		}
126 
127 		object IList.this [int index] {
128 			get { return cc [index]; }
129 			set {
130 				cc.AddAt (index, (TableRow)value);
131 				cc.RemoveAt (index + 1);
132 			}
133 		}
134 
135 
IList.Add(object value)136 		int IList.Add (object value)
137 		{
138 			cc.Add ((TableRow)value);
139 			return cc.IndexOf ((TableRow)value);
140 		}
141 
IList.Contains(object value)142 		bool IList.Contains (object value)
143 		{
144 			return cc.Contains ((TableRow)value);
145 		}
146 
IList.IndexOf(object value)147 		int IList.IndexOf (object value)
148 		{
149 			return cc.IndexOf ((TableRow)value);
150 		}
151 
IList.Insert(int index, object value)152 		void IList.Insert (int index, object value)
153 		{
154 			cc.AddAt (index, (TableRow)value);
155 		}
156 
IList.Remove(object value)157 		void IList.Remove (object value)
158 		{
159 			cc.Remove ((TableRow)value);
160 		}
161 	}
162 }
163