2007-01-01 Jonathan Pobst <monkey@jpobst.com>
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / GridTableStylesCollection.cs
index aa98ce16a312a7551ac8825d9f086be30353eb36..ae4a0c3b89a5bb24343682e56a1ddba0dec382bd 100644 (file)
@@ -98,7 +98,7 @@ namespace System.Windows.Forms
                        return cnt;
                }
 
-               public void AddRange (DataGridTableStyle[] tables)
+               public virtual void AddRange (DataGridTableStyle[] tables)
                {
                        foreach (DataGridTableStyle mi in tables)
                                AddInternal (mi);
@@ -134,21 +134,17 @@ namespace System.Windows.Forms
 
                int IList.Add (object value)
                {
-                       int cnt = AddInternal ((DataGridTableStyle)value);
-
-                       OnCollectionChanged (new CollectionChangeEventArgs (CollectionChangeAction.Add, null));
-                       return cnt;
+                       return Add ((DataGridTableStyle)value);
                }
 
                void IList.Clear ()
                {
-                       items.Clear ();
-                       OnCollectionChanged (new CollectionChangeEventArgs (CollectionChangeAction.Refresh , null));
+                       Clear ();
                }
 
                bool IList.Contains (object value)
                {
-                       return items.Contains (value);
+                       return Contains ((DataGridTableStyle) value);
                }
 
                int IList.IndexOf (object value)
@@ -163,15 +159,12 @@ namespace System.Windows.Forms
 
                void IList.Remove (object value)
                {
-                       items.Remove (value);
-                       OnCollectionChanged (new CollectionChangeEventArgs (CollectionChangeAction.Remove, value));
+                       Remove ((DataGridTableStyle) value);
                }
 
                void IList.RemoveAt (int index)
                {
-                       object item = items[index];
-                       items.RemoveAt (index);
-                       OnCollectionChanged (new CollectionChangeEventArgs (CollectionChangeAction.Remove, item));
+                       RemoveAt (index);
                }
 
                protected void OnCollectionChanged (CollectionChangeEventArgs ccevent)
@@ -187,12 +180,18 @@ namespace System.Windows.Forms
                        OnCollectionChanged (new CollectionChangeEventArgs (CollectionChangeAction.Remove, table));
                }
 
+               void MappingNameChanged (object sender, EventArgs args)
+               {
+                       OnCollectionChanged (new CollectionChangeEventArgs (CollectionChangeAction.Refresh, null));
+               }
+
                public void RemoveAt (int index)
                {
-                       object item = items[index];
+                       DataGridTableStyle style = (DataGridTableStyle)items[index];
 
                        items.RemoveAt (index);
-                       OnCollectionChanged (new CollectionChangeEventArgs (CollectionChangeAction.Remove, item));
+                       style.MappingNameChanged -= new EventHandler (MappingNameChanged);
+                       OnCollectionChanged (new CollectionChangeEventArgs (CollectionChangeAction.Remove, style));
                }
 
                #endregion Public Instance Methods
@@ -204,14 +203,16 @@ namespace System.Windows.Forms
                
                #region Private Instance Methods
                private int AddInternal (DataGridTableStyle table)
-               {                               
+               {               
+                       // TODO: MS allows duplicate columns. How they diferenciate between them?               
                        if (FromTableNameToIndex (table.MappingName) != -1) {
                                throw new ArgumentException ("The TableStyles collection already has a TableStyle with this mapping name");
                        }
-                       
+
+                       table.MappingNameChanged += new EventHandler (MappingNameChanged);
                        table.DataGrid = owner;
                        int cnt = items.Add (table);
-                       return cnt;                     
+                       return cnt;
                }
                
                private int FromTableNameToIndex (string tableName)
@@ -219,7 +220,7 @@ namespace System.Windows.Forms
                        for (int i = 0; i < items.Count; i++) {
                                DataGridTableStyle table = (DataGridTableStyle) items[i];
                                                                
-                               if (table.MappingName == null)
+                               if (table.MappingName == null || table.MappingName == string.Empty)
                                        continue;
 
                                if (String.Compare (table.MappingName, tableName, true) == 0) {