[Mono-winforms-list] Moving Items property into ListControl

Brian Takita brian.takita@runbox.com
Fri, 22 Aug 2003 01:34:59 -0700


This is a multi-part message in MIME format.
--------------040309000602080703000000
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Hello Duncan,

Here is the revised ListControl class.
I took a better look at the ListControl, and found the following...

>>    public abstract class ListControl : Control {
>>
>>		protected object DataSource_;
>>		[MonoTODO]
>>		public virtual object DataSource {
>>    
>>
DataSource_ and DisplayMember_ should be private.

>The 1.1 SDK docs list this property without the virtual keyword. Was
>that an MS documentation bug?
>  
>
DataSource is not virtual in ListControl.

>  
>
>>set {
>>	if(DataSource_ != value) {
>>		if((value is IList) || (value is IListSource)) {
>>			DataSource_ = value;
>>			OnDataSourceChanged(new EventArgs());
>>		}
>>		else {
>>			throw new Exception("Complex DataBinding accepts as a data source either an IList or an IListSource");
>>		}
>>	}
>>}
>>    
>>
>
>I made indenting changes here to make the code better conform to the
>Mono coding style. Also, the 1.1 SDK docs does not say the property will
>throw any Exceptions at all. Is that also a documentation bug?
>  
>
This is a documentation bug. I got an exception when DataSource was not 
set to an IList or an IListSource object. The exception message was 
taken verbatim from MS's exception. Should I rewrite a new exception 
message to avoid plagerism?

Also, where are the docs on coding standards?

>Thanks for the patch!
>
>Duncan.
>
Glad to help. I'm learning alot about .NET already. Thanks for the 
feedback!!

Brian

>_______________________________________________
>Mono-winforms-list maillist  -  Mono-winforms-list@lists.ximian.com
>http://lists.ximian.com/mailman/listinfo/mono-winforms-list
>
>
>  
>


--------------040309000602080703000000
Content-Type: text/plain;
 name="ListControl.cs"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="ListControl.cs"

//
// System.Windows.Forms.ListControl.cs
//
// Author:
//   stubbed out by Daniel Carrera (dcarrera@math.toronto.edu)
//	Dennis Hayes (dennish@raytek.com)
//  Brian Takita (brian.takita@runbox.com)
// (C) 2002/3 Ximian, Inc
//
using System;
using System.Drawing;
using System.Collections;
using System.Reflection;

namespace System.Windows.Forms 
{

	// <summary>
	//
	// </summary>

	public abstract class ListControl : Control 
	{

		private string DisplayMember_ = String.Empty;

		private object DataSource_;
		//ControlStyles controlStyles;
		//
		//  --- Public Properties
		//
		[MonoTODO]
		public object DataSource 
		{
			get 
			{
				return DataSource_;
			}
			set 
			{
				if(DataSource_ != value) 
				{
					if((value is IList) || (value is IListSource)) 
					{
						DataSource_ = value;
						OnDataSourceChanged(new EventArgs());
					}
					else 
					{
						throw new Exception("Complex DataBinding accepts as a data source either an IList or an IListSource");
					}
				}
			}
		}
		[MonoTODO]
		public string DisplayMember 
		{
			get 
			{
				return DisplayMember_;
			}
			set 
			{
				if( DisplayMember_ != value) 
				{
					DisplayMember_ = value;
					OnDisplayMemberChanged(new EventArgs());
				}
			}
		}
		
		internal string getDisplayMemberOfObj( object obj) 
		{
			string objectString = String.Empty;
			Type t = obj.GetType();
			if( DisplayMember != String.Empty) 
			{
				if( t != null) 
				{
					PropertyInfo prop = t.GetProperty(DisplayMember);
					if( prop != null) 
					{
						objectString = prop.GetValue(obj, null).ToString();
					}
				}
			}
			if( objectString == String.Empty) 
			{
				objectString = obj.ToString();
			}
			return objectString;
		}
		
		internal class ListControlComparer : IComparer 
		{
			private ListControl owner_ = null;
			public ListControlComparer(ListControl owner) 
			{
				owner_ = owner;
			}

			public int Compare(object x, object y) 
			{
				return owner_.getDisplayMemberOfObj(x).CompareTo(owner_.getDisplayMemberOfObj(y));
			}
		}
		

		[MonoTODO]
		public abstract int SelectedIndex {get;set;}

		[MonoTODO]
		public object SelectedValue 
		{
			get 
			{
				throw new NotImplementedException ();
			}
			set 
			{
				//FIXME:
			}
		}
		[MonoTODO]
		public string ValueMember 
		{
			get 
			{
				throw new NotImplementedException ();
			}
			set 
			{
				//FIXME:
			}
		}

		//
		//  --- Public Methods
		//

		[MonoTODO]
		public string GetItemText(object item)
		{
			throw new NotImplementedException ();
		}

		//
		//  --- Public Events
		//
		[MonoTODO]
		public event EventHandler DataSourceChanged;
		[MonoTODO]
		public event EventHandler DisplayMemberChanged;

		//
		// --- Protected Constructor
		//
		[MonoTODO]
		protected ListControl()
		{
			
		}

		//
		//  --- Protected Properties
		//
		[MonoTODO]
		protected CurrencyManager DataManager 
		{
			get 
			{
				throw new NotImplementedException ();
			}
		}

		//
		//  --- Protected Methods
		//
		[MonoTODO]
		protected override bool IsInputKey(Keys keyData)
		{
			//FIXME:
			return base.IsInputKey(keyData);
		}
		[MonoTODO]
		protected virtual void OnDataSourceChanged(EventArgs e) 
		{
			//FIXME:
		}
		[MonoTODO]
		protected virtual void OnDisplayMemberChanged(EventArgs e) 
		{
			//FIXME:
		}

		[MonoTODO]
		protected virtual void OnSelectedIndexChanged(EventArgs e) 
		{
			//FIXME:
		}		
		
		[MonoTODO]
		protected virtual void OnSelectedValueChanged(EventArgs e)
		{
			//FIXME:
		}

		public event EventHandler SelectedValueChanged;
		public event EventHandler ValueMemberChanged;
		
		[MonoTODO]
		protected override void OnBindingContextChanged(EventArgs e)
		{
			//FIXME:
			base.OnBindingContextChanged(e);
		}

		[MonoTODO]
		protected abstract void RefreshItem(int index);

	}
}

--------------040309000602080703000000--