Merge pull request #1275 from ranma42/fix-lib64
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / GridItemCollection.cs
1 // Permission is hereby granted, free of charge, to any person obtaining
2 // a copy of this software and associated documentation files (the
3 // "Software"), to deal in the Software without restriction, including
4 // without limitation the rights to use, copy, modify, merge, publish,
5 // distribute, sublicense, and/or sell copies of the Software, and to
6 // permit persons to whom the Software is furnished to do so, subject to
7 // the following conditions:
8 //
9 // The above copyright notice and this permission notice shall be
10 // included in all copies or substantial portions of the Software.
11 //
12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
13 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
15 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
16 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
17 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
18 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19 //
20 // Copyright (c) 2004-2005 Novell, Inc.
21 //
22 // Authors:
23 //      Jonathan Chambers (jonathan.chambers@ansys.com)
24 //
25
26 // COMPLETE
27
28 using System;
29 using System.Collections;
30 using System.Windows.Forms.PropertyGridInternal;
31
32 namespace System.Windows.Forms
33 {
34         public class GridItemCollection : IEnumerable, ICollection
35         {
36                 #region Local Variables
37                 private System.Collections.SortedList list;
38                 #endregion      // Local Variables
39
40                 #region Public Static Fields
41                 public static GridItemCollection Empty = new GridItemCollection();
42                 #endregion      // Public Static Fields
43
44                 #region Constructors
45                 internal GridItemCollection()
46                 {
47                         list = new SortedList();
48                 }
49                 #endregion      // Constructors
50
51                 #region Internal Properties and Methods
52                 internal void Add (GridItem grid_item)
53                 {
54                         string key = grid_item.Label;
55                         while (list.ContainsKey (key))
56                                 key += "_";
57                         list.Add (key, grid_item);
58                 }
59
60                 internal void AddRange (GridItemCollection items)
61                 {
62                         foreach (GridItem item in items)
63                                 Add (item);
64                 }
65
66                 internal int IndexOf (GridItem grid_item)
67                 {
68                         return list.IndexOfValue (grid_item);
69                 }
70                 #endregion      // Internal Properties and Methods
71
72                 #region Public Instance Properties
73                 public int Count {
74                         get {
75                                 return list.Count;
76                         }
77                 }
78
79                 public GridItem this [int index] {
80                         get {
81                                 if (index>=list.Count) {
82                                         throw new ArgumentOutOfRangeException("index");
83                                 }
84                                 return (GridItem)list.GetByIndex(index);
85                         }
86                 }
87
88                 public GridItem this [string label] {
89                         get {
90                                 return (GridItem)list[label];
91                         }
92                 }
93                 #endregion      // Public Instance Properties
94
95                 #region IEnumerable Members
96                 public IEnumerator GetEnumerator()
97                 {
98                         return new GridItemEnumerator (this);
99                 }
100                 #endregion
101
102                 #region Enumerator Class
103                 internal class GridItemEnumerator : IEnumerator{
104                         int nIndex;
105                         GridItemCollection collection;
106
107                         public GridItemEnumerator(GridItemCollection coll)
108                         {
109                                 collection = coll;
110                                 nIndex = -1;
111                         }
112
113                         public bool MoveNext ()
114                         {
115                                 nIndex++;
116                                 return (nIndex < collection.Count);
117                         }
118
119                         public void Reset ()
120                         {
121                                 nIndex = -1;
122                         }
123
124                         object System.Collections.IEnumerator.Current {
125                                 get {
126                                         return collection [nIndex];
127                                 }
128                         }
129                 }
130                 #endregion
131
132                 #region ICollection Members
133
134                 bool ICollection.IsSynchronized {
135                         get {
136                                 return list.IsSynchronized;
137                         }
138                 }
139
140                 void ICollection.CopyTo(Array dest, int index)
141                 {
142                         list.CopyTo (dest, index);
143                 }
144
145                 object ICollection.SyncRoot {
146                         get {
147                                 return list.SyncRoot;
148                         }
149                 }
150
151                 #endregion
152
153                 internal void Clear ()
154                 {
155                         list.Clear ();
156                 }
157         }
158 }