view Chronosv2/source/DragAndDrop/TreeviewDragDropDataProvider.cs @ 21:dfc81f8bb838

working version for sttocks except ui within metrowpf
author adminsh@apollo
date Tue, 20 Mar 2012 15:07:31 +0000
parents 443821e55f06
children
line wrap: on
line source

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
    }
}