2005-05-10 Peter Bartok <pbartok@novell.com>
[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, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(System.Drawing.Design.UITypeEditor))]
35         [TypeConverter("System.Windows.Forms.Design.ControlBindingsConverter, System.Design, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
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                         Binding res = new Binding (property_name, data_source, data_member);
76                         Add (res);
77                         return res;
78                 }
79
80                 public void Clear() {
81                         base.Clear();
82                 }
83
84                 public void Remove(Binding binding) {
85                         if (binding == null) {
86                                 throw new NullReferenceException("The binding is null");
87                         }
88
89                         base.Remove(binding);
90                 }
91
92                 public void RemoveAt(int index) {
93                         if (index < 0 || index > base.List.Count) {
94                                 throw new ArgumentOutOfRangeException("index");
95                         }
96
97                         base.RemoveAt(index);
98                 }
99                 #endregion      // Public Instance Methods
100
101                 #region Protected Instance Methods
102                 protected override void AddCore (Binding binding)
103                 {
104                         if (binding == null)
105                                 throw new ArgumentNullException ("dataBinding");
106
107                         if (binding.Control != null && binding.Control != control)
108                                   throw new ArgumentException ("dataBinding belongs to another BindingsCollection");
109
110                         binding.SetControl (control);
111                         base.AddCore (binding);
112                 }
113
114                 protected override void ClearCore() {\r
115                         base.ClearCore ();\r
116                 }\r
117
118                 protected override void RemoveCore(Binding dataBinding) {\r
119                         if (dataBinding == null) {
120                                 throw new ArgumentNullException ("dataBinding");
121                         }
122
123                         base.RemoveCore (dataBinding);\r
124                 }\r
125                 #endregion      // Protected Instance Methods
126         }
127 }
128