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