87 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Windows.Forms;
 | 
						|
 | 
						|
using AT.STO.UI.Win;
 | 
						|
 | 
						|
namespace Volian.Controls.Library
 | 
						|
{
 | 
						|
	internal class DropDownTree : TreeView, IDropDownAware
 | 
						|
	{
 | 
						|
	#region DropDownTree
 | 
						|
		public DropDownTree()
 | 
						|
		{
 | 
						|
			this.Dock = DockStyle.Top;
 | 
						|
		}
 | 
						|
	#endregion
 | 
						|
	#region TreeView Events
 | 
						|
		/// <summary>
 | 
						|
		/// Allow keeping track of the editing process.
 | 
						|
		/// </summary>
 | 
						|
		/// <param name="e"></param>
 | 
						|
		protected override void OnAfterSelect(TreeViewEventArgs e)
 | 
						|
		{
 | 
						|
			base.OnAfterSelect(e);
 | 
						|
			
 | 
						|
			if (ValueChanged != null)
 | 
						|
			{
 | 
						|
				ValueChanged(this, new DropDownValueChangedEventArgs(e.Node));
 | 
						|
			}
 | 
						|
		}
 | 
						|
		/// <summary>
 | 
						|
		/// A double click on a node counts as finish editing.
 | 
						|
		/// </summary>
 | 
						|
		/// <param name="e"></param>
 | 
						|
		protected override void OnDoubleClick(EventArgs e)
 | 
						|
		{
 | 
						|
			base.OnDoubleClick(e);
 | 
						|
			
 | 
						|
			TreeNode node = HitTest(PointToClient(Cursor.Position)).Node;
 | 
						|
			
 | 
						|
			if ((FinishEditing != null) && (node != null))
 | 
						|
			{
 | 
						|
				FinishEditing(this, new DropDownValueChangedEventArgs(node));
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// ENNTER counts as finish editing, ESC as cancel (null is returned).
 | 
						|
		/// </summary>
 | 
						|
		/// <param name="e"></param>
 | 
						|
		protected override void OnKeyUp(KeyEventArgs e)
 | 
						|
		{
 | 
						|
			base.OnKeyUp(e);
 | 
						|
	
 | 
						|
			if (FinishEditing != null)
 | 
						|
			{			
 | 
						|
				switch (e.KeyCode)
 | 
						|
				{
 | 
						|
					case Keys.Enter:
 | 
						|
						FinishEditing(this, new DropDownValueChangedEventArgs(Value));
 | 
						|
						break;
 | 
						|
					case Keys.Escape:
 | 
						|
						FinishEditing(this, new DropDownValueChangedEventArgs(null));
 | 
						|
						break;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	#endregion
 | 
						|
	#region IDropDownAware Implementation
 | 
						|
		public event DropDownValueChangedEventHandler FinishEditing;
 | 
						|
		public event DropDownValueChangedEventHandler ValueChanged;
 | 
						|
 | 
						|
		public object Value
 | 
						|
		{
 | 
						|
			get { return base.SelectedNode; }
 | 
						|
			set 
 | 
						|
			{ 
 | 
						|
				if (value is DropDownNode)
 | 
						|
				{
 | 
						|
					base.SelectedNode = value as DropDownNode; 
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		#endregion
 | 
						|
	}
 | 
						|
}
 |