New test.
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / ControlBindingsCollection.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 //      Jackson Harper (jackson@ximian.com)
24
25
26 using System;
27 using System.Collections;
28 using System.ComponentModel;
29 using System.Reflection;
30
31
32 namespace System.Windows.Forms {
33         [DefaultEvent("CollectionChanged")]
34         [Editor("System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing, typeof(System.Drawing.Design.UITypeEditor))]
35         [TypeConverter("System.Windows.Forms.Design.ControlBindingsConverter, " + Consts.AssemblySystem_Design)]
36         public class ControlBindingsCollection : BindingsCollection {
37                 #region Fields
38                 private Control control;
39                 #endregion      // Fields
40
41                 #region Constructors
42                 internal ControlBindingsCollection (Control control) {
43                         this.control = control;
44                 }
45                 #endregion      // Constructors
46
47                 #region Public Instance Properties
48                 public Control Control {
49                         get {
50                                 return control;
51                         }
52                 }
53
54                 public Binding this[string propertyName] {
55                         get {
56                                 foreach (Binding b in base.List) {
57                                         if (b.PropertyName == propertyName) {
58                                                 return b;
59                                         }
60                                 }
61                                 return null;
62                         }
63                 }
64                 #endregion      // Public Instance Properties
65
66                 #region Public Instance Methods
67                 public new void Add (Binding binding)
68                 {
69                         AddCore (binding);
70                         OnCollectionChanged (new CollectionChangeEventArgs (CollectionChangeAction.Add, binding));
71                 }
72
73                 public Binding Add (string property_name, object data_source, string data_member)
74                 {
75                         if (data_source == null) {
76                                 throw new ArgumentNullException ("DataSource cannot be null.");
77                         }                       
78                         
79                         Binding res = new Binding (property_name, data_source, data_member);
80                         Add (res);
81                         return res;
82                 }
83
84                 public void Clear() {
85                         base.Clear();
86                 }
87
88                 public void Remove(Binding binding) {
89                         if (binding == null) {
90                                 throw new NullReferenceException("The binding is null");
91                         }
92
93                         base.Remove(binding);
94                 }
95
96                 public void RemoveAt(int index) {
97                         if (index < 0 || index >= base.List.Count) {
98                                 throw new ArgumentOutOfRangeException("index");
99                         }
100
101                         base.RemoveAt(index);
102                 }
103                 #endregion      // Public Instance Methods
104
105                 #region Protected Instance Methods
106                 protected override void AddCore (Binding binding)
107                 {
108                         if (binding == null)
109                                 throw new ArgumentNullException ("dataBinding");
110
111                         if (binding.Control != null && binding.Control != control)
112                                   throw new ArgumentException ("dataBinding belongs to another BindingsCollection");
113                                   
114                         for (int i = 0; i < Count; i++) {
115                                 Binding bnd = this [i];
116                                 if (bnd == null || bnd.PropertyName.Length == 0 || binding.PropertyName.Length == 0) {
117                                         continue;
118                                 }
119
120                                 if (String.Compare (bnd.PropertyName, binding.PropertyName, true) == 0) {
121                                         throw new ArgumentException ("The binding is already in the collection");
122                                 }
123                         }
124
125                         binding.SetControl (control);
126                         binding.Check (control.BindingContext);
127                         base.AddCore (binding);
128                 }
129
130                 protected override void ClearCore() {
131                         base.ClearCore ();
132                 }
133
134                 protected override void RemoveCore(Binding dataBinding) {
135                         if (dataBinding == null) {
136                                 throw new ArgumentNullException ("dataBinding");
137                         }
138
139                         base.RemoveCore (dataBinding);
140                 }
141                 #endregion      // Protected Instance Methods
142         }
143 }
144