Author: jordi
Date: 2005-04-15 16:29:17 -0400 (Fri, 15 Apr 2005)
New Revision: 43071

Modified:
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/CurrencyManager.cs
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ListBox.cs
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ListControl.cs
Log:
        * ListControl.cs: work towards complex data binding support on 
ListControl
        * CurrencyManager.cs: work towards complex data binding support on 
ListControl
        * ListBox.cs: work towards complex data binding support on ListControl


2005-04-15  Jordi Mas i Hernandez <[EMAIL PROTECTED]>



Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog        
2005-04-15 19:59:10 UTC (rev 43070)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog        
2005-04-15 20:29:17 UTC (rev 43071)
@@ -1,5 +1,12 @@
 2005-04-15  Jordi Mas i Hernandez <[EMAIL PROTECTED]>
 
+       * ListControl.cs: work towards complex data binding support on 
ListControl
+       * CurrencyManager.cs: work towards complex data binding support on 
ListControl
+       * ListBox.cs: work towards complex data binding support on ListControl
+
+
+2005-04-15  Jordi Mas i Hernandez <[EMAIL PROTECTED]>
+
        * GridTableStylesCollection.cs: fixes name and constructor
        * DataGridTableStyle.cs: fixes
        * DataGridBoolColumn.cs: fixes names and constructors

Modified: 
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/CurrencyManager.cs
===================================================================
--- 
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/CurrencyManager.cs   
    2005-04-15 19:59:10 UTC (rev 43070)
+++ 
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/CurrencyManager.cs   
    2005-04-15 20:29:17 UTC (rev 43071)
@@ -50,6 +50,16 @@
                                throw new Exception ("Attempted to create 
currency manager " +
                                        "from invalid type: " + 
data_source.GetType ());
                        }
+
+                       if (data_source as ArrayList != null) {
+                               finalType = ((ArrayList)data_source).GetType ();
+                       } else {
+                               if (data_source as Array != null) {
+                                       finalType = ((Array) 
data_source).GetType ();
+                               } else {
+                                       finalType = null;
+                               }
+                       }
                }               
 
                public IList List {
@@ -86,10 +96,19 @@
                public override PropertyDescriptorCollection GetItemProperties 
()
                {
                        ITypedList typed = list as ITypedList;
-
-                       if (typed == null)
-                               return null;
-                       return typed.GetItemProperties (null);
+                       
+                       if (typed != null) {
+                               return typed.GetItemProperties (null);
+                       }
+                               
+                       if (list.Count > 0){ 
+                               System.Attribute[] att = new System.Attribute 
[1];
+                               att[0] = new BrowsableAttribute (true);         
                
+                               return TypeDescriptor.GetProperties (list[0], 
att);
+                       }
+                       
+                       return new PropertyDescriptorCollection (new 
PropertyDescriptor [1]);
+                       
                }
 
                public override void RemoveAt (int index)
@@ -186,6 +205,11 @@
                        // Probably should be validating or something here
                        EndCurrentEdit ();
                }
+               
+               internal object GetItem (int index)
+               {
+                       return list [index];
+               }
 
                public event ItemChangedEventHandler ItemChanged;
        }

Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ListBox.cs
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ListBox.cs       
2005-04-15 19:59:10 UTC (rev 43070)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ListBox.cs       
2005-04-15 20:29:17 UTC (rev 43071)
@@ -145,19 +145,19 @@
 
                public ListBox ()
                {
-                       border_style = BorderStyle.Fixed3D;                     
-                       draw_mode = DrawMode.Normal;
-                       horizontal_extent = 0;
-                       horizontal_scrollbar = false;
-                       integral_height = true;
-                       multicolumn = false;
-                       preferred_height = 7;
-                       scroll_always_visible = false;
+                       border_style = BorderStyle.Fixed3D;                     
+                       draw_mode = DrawMode.Normal;
+                       horizontal_extent = 0;
+                       horizontal_scrollbar = false;
+                       integral_height = true;
+                       multicolumn = false;
+                       preferred_height = 7;
+                       scroll_always_visible = false;
                        selected_index = -1;
-                       focused_item = -1;
-                       selection_mode = SelectionMode.One;
-                       sorted = false;
-                       top_index = 0;
+                       focused_item = -1;
+                       selection_mode = SelectionMode.One;
+                       sorted = false;
+                       top_index = 0;
                        use_tabstops = true;
                        BackColor = ThemeEngine.Current.ColorWindow;
                        ColumnWidth = 0;
@@ -465,6 +465,7 @@
                                selected_index = value;
                                focused_item = value;
                                OnSelectedIndexChanged  (new EventArgs ());
+                               OnSelectedValueChanged (new EventArgs ());
                        }
                }
 
@@ -1327,7 +1328,7 @@
                                case Keys.End:
                                        new_item = NavigateItemVisually 
(ItemNavigation.Last);
                                        break;  
-
+
                                case Keys.Up:
                                        new_item = NavigateItemVisually 
(ItemNavigation.Previous);
                                        break;                          
@@ -1491,6 +1492,7 @@
                                                else {
                                                        SelectItem (index);
                                                        OnSelectedIndexChanged  
(new EventArgs ());
+                                                       OnSelectedValueChanged 
(new EventArgs ());
                                                }
                                        }
                                        break;
@@ -1512,6 +1514,7 @@
                                                }
                                                
                                                OnSelectedIndexChanged  (new 
EventArgs ());
+                                               OnSelectedValueChanged (new 
EventArgs ());
                                        }
                                        break;
                                }                               
@@ -1783,41 +1786,41 @@
                public class ObjectCollection : IList, ICollection, IEnumerable
                {
                        // Compare objects
-                       internal class ListObjectComparer : IComparer
-                       {
-                               private ListBox owner;
-                       
-                               public ListObjectComparer (ListBox owner)
-                               {
-                                       this.owner = owner;
-                               }
-                               
-                               public int Compare (object a, object b)
-                               {
+                       internal class ListObjectComparer : IComparer
+                       {
+                               private ListBox owner;
+                       
+                               public ListObjectComparer (ListBox owner)
+                               {
+                                       this.owner = owner;
+                               }
+                               
+                               public int Compare (object a, object b)
+                               {
                                        string str1 = a.ToString ();
-                                       string str2 = b.ToString ();            
                        
-                                       return str1.CompareTo (str2);
-                               }
+                                       string str2 = b.ToString ();            
                        
+                                       return str1.CompareTo (str2);
+                               }
                        }
 
                        // Compare ListItem
-                       internal class ListItemComparer : IComparer
-                       {
-                               private ListBox owner;
-                       
-                               public ListItemComparer (ListBox owner)
-                               {
-                                       this.owner = owner;
-                               }
-                               
-                               public int Compare (object a, object b)
-                               {
+                       internal class ListItemComparer : IComparer
+                       {
+                               private ListBox owner;
+                       
+                               public ListItemComparer (ListBox owner)
+                               {
+                                       this.owner = owner;
+                               }
+                               
+                               public int Compare (object a, object b)
+                               {
                                        int index1 = ((ListBox.ListBoxItem) 
(a)).Index;
                                        int index2 = ((ListBox.ListBoxItem) 
(b)).Index;
                                        string str1 = 
owner.Items[index1].ToString ();
-                                       string str2 = 
owner.Items[index2].ToString ();                                  
-                                       return str1.CompareTo (str2);           
                        
-                               }
+                                       string str2 = 
owner.Items[index2].ToString ();                                  
+                                       return str1.CompareTo (str2);           
                        
+                               }
                        }
 
                        private ListBox owner;
@@ -2275,7 +2278,7 @@
                        {
                                throw new NotImplementedException ();
                        }
-                       
+                       
                        void IList.Insert (int index, object value)
                        {
                                throw new NotSupportedException ();
@@ -2290,7 +2293,7 @@
                        {
                                throw new NotSupportedException ();
                        }
-       
+       
                        public int IndexOf (object item)
                        {
                                return object_items.IndexOf (item);

Modified: 
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ListControl.cs
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ListControl.cs   
2005-04-15 19:59:10 UTC (rev 43070)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ListControl.cs   
2005-04-15 20:29:17 UTC (rev 43071)
@@ -32,20 +32,25 @@
 using System.ComponentModel;
 using System.Reflection;
 
-namespace System.Windows.Forms 
+namespace System.Windows.Forms
 {
        public abstract class ListControl : Control
        {
                private object data_source;
-               private string display_member = String.Empty;
+               private BindingMemberInfo value_member;
+               private string display_member;
                private CurrencyManager data_manager;
-               
+
                protected ListControl ()
                {
+                       data_source = null;
+                       value_member = new BindingMemberInfo (string.Empty);
+                       display_member = string.Empty;
+                       data_manager = null;
                }
 
-               #region Events          
-               public event EventHandler DataSourceChanged;            
+               #region Events
+               public event EventHandler DataSourceChanged;
                public event EventHandler DisplayMemberChanged;
                public event EventHandler SelectedValueChanged;
                public event EventHandler ValueMemberChanged;
@@ -64,25 +69,33 @@
                                                        "either an IList or an 
IListSource");
                                }
 
+                               if (data_source == value)
+                                       return;
+
                                data_source = value;
-
-                               CurrencyManager manager = (CurrencyManager) 
BindingContext [data_source, display_member];
-                               data_manager = manager;
-
+                               ConnectToDataSource ();
                                OnDataSourceChanged (EventArgs.Empty);
                        }
                }
-               
+
                [DefaultValue("")]
                [Editor("System.Windows.Forms.Design.DataMemberFieldEditor, " + 
Consts.AssemblySystem_Design, typeof(System.Drawing.Design.UITypeEditor))]
                
[TypeConverter("System.Windows.Forms.Design.DataMemberFieldConverter, 
System.Design, Version=1.0.5000.0, Culture=neutral, 
PublicKeyToken=b03f5f7f11d50a3a")]
                public string DisplayMember {
-                       get { return display_member; } 
-                       set { display_member = value; }
+                       get { return display_member; }
+                       set {
+                               if (display_member == value) {
+                                       return;
+                               }
+
+                               display_member = value;
+                               ConnectToDataSource ();
+                               OnDisplayMemberChanged (EventArgs.Empty);
+                       }
                }
-                               
+
                public abstract int SelectedIndex {
-                       get; 
+                       get;
                        set;
                }
 
@@ -91,29 +104,61 @@
                [DefaultValue(null)]
                
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
                public object SelectedValue {
-                       get {throw new NotImplementedException (); }            
         
-                       set {throw new NotImplementedException (); }
+                       get {
+                               if (data_manager == null) {
+                                       return null;
+                               }
+                               
+                               
+                               object item  = data_manager.GetItem 
(SelectedIndex);                            
+                               object fil =  FilterItemOnProperty (item, 
ValueMember);
+                               return fil;
+                       }
+
+                       set {
+
+                       }
                }
 
                [DefaultValue("")]
                [Editor("System.Windows.Forms.Design.DataMemberFieldEditor, " + 
Consts.AssemblySystem_Design, typeof(System.Drawing.Design.UITypeEditor))]
                public string ValueMember  {
-                       get { return null; }
-                       set { }
+                       get { return value_member.BindingMember; }
+                       set {
+                               value_member = new BindingMemberInfo (value);
+                               ConnectToDataSource ();
+                       }
                }
-               
+
                #endregion Public Properties
 
                #region Public Methods
 
                protected object FilterItemOnProperty (object item)
                {
-                       throw new NotImplementedException ();
+                       return FilterItemOnProperty (item, string.Empty);
                }
 
                protected object FilterItemOnProperty (object item, string 
field)
                {
-                       throw new NotImplementedException (); 
+                       if (item == null)
+                               return null;
+
+                       if (field == null || field == string.Empty)
+                               return item;
+
+                       PropertyDescriptor prop = null;
+
+                       if (data_manager != null) {
+                               PropertyDescriptorCollection col = 
data_manager.GetItemProperties ();
+                               prop = col.Find (field, true);                  
        
+                       }
+                       
+                       if (prop == null)
+                               return item;
+                       
+                       return prop.GetValue (item);
+
                }
 
                public string GetItemText (object item)
@@ -141,8 +186,8 @@
                        case Keys.Space:
                        case Keys.ShiftKey:
                                return true;
-                       
-                       default:                                        
+
+                       default:
                                return false;
                        }
                }
@@ -197,11 +242,28 @@
                internal void BindDataItems (IList items)
                {
                        items.Clear ();
-                       SetItemsCore (data_manager.List);
+
+                       if (data_manager != null) {
+                               SetItemsCore (data_manager.List);
+                       }
                }
-               
+
+               private void ConnectToDataSource ()
+               {
+                       if (data_source == null || display_member == 
string.Empty) {
+                               data_manager = null;
+                               return;
+                       }
+
+                       if (BindingContext == null) {
+                               return;
+                       }
+                       
+                       data_manager = (CurrencyManager) BindingContext 
[data_source, display_member];
+               }
+
                #endregion Public Methods
-       }       
+       }
 
 }
 

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to