Mercurial > silverbladetech
diff Chronosv2/source/DragAndDrop/TreeviewDragDropDataProvider.cs @ 10:443821e55f06
Initial cleaned up add from Codeplex files
author | stevenh7776 stevenhollidge@hotmail.com |
---|---|
date | Tue, 21 Feb 2012 17:25:44 +0700 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Chronosv2/source/DragAndDrop/TreeviewDragDropDataProvider.cs Tue Feb 21 17:25:44 2012 +0700 @@ -0,0 +1,113 @@ +using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using System.Windows.Input; +using System.Xml; +using Chronos.Extensions.Windows; + +namespace Chronos.Presentation.DragAndDrop +{ + public sealed class TreeViewDragDropDataProvider : IDataDropObjectProvider + { + #region · Fields · + + private TreeView treeview; + + #endregion + + #region · Properties · + + public DragDropProviderActions SupportedActions + { + get + { + return DragDropProviderActions.Data | + DragDropProviderActions.MultiFormatData; + } + } + + #endregion + + #region · Constructors · + + public TreeViewDragDropDataProvider(TreeView treeview) + { + this.treeview = treeview; + } + + #endregion + + #region · IDataDropObjectProvider Members · + + public void AppendData(ref IDataObject data, MouseEventArgs e) + { + if (!(this.treeview.InputHitTest(e.GetPosition(e.OriginalSource as UIElement)) is TreeView) + && !(this.treeview.InputHitTest(e.GetPosition(e.OriginalSource as UIElement)) is ScrollViewer) + && !(e.OriginalSource is Thumb)) + { + TreeViewItem selectedUIelement = this.GetVisual(e).GetParent<TreeViewItem>(); + + if (selectedUIelement != null && selectedUIelement.Items.Count == 0) + { + object selectedItem = this.treeview.SelectedItem; + + if (selectedItem != null) + { + if (selectedItem.GetType() == typeof(XmlElement)) + { + data.SetData(DataFormats.Text, ((XmlElement)selectedItem).OuterXml); + } + else + { + data.SetData(DataFormats.Text, selectedItem.ToString()); + } + + data.SetData(selectedItem.GetType().ToString(), selectedItem); + } + else + { + data = null; + } + } + else + { + data = null; + } + } + else + { + data = null; + } + } + + public object GetData() + { + return this.treeview.SelectedItem; + } + + public UIElement GetVisual(MouseEventArgs e) + { + // return this.treeview.ItemContainerGenerator.ContainerFromItem(this.treeview.SelectedItem) as UIElement; + return e.OriginalSource as UIElement; + } + + public void GiveFeedback(System.Windows.GiveFeedbackEventArgs args) + { + throw new NotImplementedException("Forgot to check the Supported actions??"); + } + + public void ContinueDrag(System.Windows.QueryContinueDragEventArgs args) + { + throw new NotImplementedException("Forgot to check the Supported actions??"); + } + + public bool UnParent() + { + // We are passing data, nothing to unparent + throw new NotImplementedException("We are passing data, nothing to unparent... what up "); + } + + #endregion + } +}