Esempio n. 1
0
        public AudioTrackSizeTab()
        {
            InitializeComponent();
            this.audio1Type.Items.AddRange(ContainerManager.AudioTypes.ValuesArray);

            DragDropUtil.RegisterSingleFileDragDrop(this, selectAudioFile, this.filter);
        }
Esempio n. 2
0
 // --- handler ---
 private void HandleMemoListBoxDragOver(object sender, DragEventArgs e)
 {
     e.Effect = DragDropEffects.None;
     if (e.Data.GetDataPresent(typeof(MemoInfo[])))
     {
         if (_targetKind == MemoListTargetKind.Folder)
         {
             if (DragDropUtil.IsCopyAllowed(e))
             {
                 var targetFolder = _workspaceView.WorkspaceTree.SelectedFolder;
                 if (targetFolder != null)
                 {
                     e.Effect = DragDropEffects.Copy;
                 }
             }
         }
         else if (_targetKind == MemoListTargetKind.Tag)
         {
             if (DragDropUtil.IsCopyAllowed(e))
             {
                 var targetTag = _workspaceView.WorkspaceTree.SelectedTag;
                 if (targetTag != null)
                 {
                     e.Effect = DragDropEffects.Copy;
                 }
             }
         }
         else if (_targetKind == MemoListTargetKind.TrashBox)
         {
             e.Effect = DragDropEffects.Move;
         }
     }
 }
Esempio n. 3
0
        public FileBar()
        {
            InitializeComponent();
            DragDropUtil.RegisterSingleFileDragDrop(filename, SetFilename, delegate() { return(Filter); });

            if (MainForm.Instance == null)
            {
                return;
            }

            // DPI rescale
            if (MainForm.Instance != null)
            {
                openButton.Height = filename.Height + MainForm.Instance.Settings.DPIRescale(3);
            }
        }
Esempio n. 4
0
 public FileBar()
 {
     InitializeComponent();
     DragDropUtil.RegisterSingleFileDragDrop(filename, setFilename, delegate() { return(Filter); });
 }
Esempio n. 5
0
        protected override void OnDragDrop(DragEventArgs e)
        {
            base.OnDragDrop(e);

            var effect = DragDropEffects.None;

            if (e.Data.GetDataPresent(typeof(TreeNode)) || e.Data.GetDataPresent(typeof(TreeNodeEx)))
            {
                var target = GetNodeAt(PointToClient(new Point(e.X, e.Y)));
                var source = (TreeNode)e.Data.GetData(typeof(TreeNode));
                if (source == null)
                {
                    source = (TreeNode)e.Data.GetData(typeof(TreeNodeEx));
                }

                if (
                    DragDropUtil.IsMove(e) &&
                    target != null &&
                    target != source &&
                    target != source.Parent &&
                    !IsChildNode(source, target)
                    )
                {
                    /// ドロップされたNodeのコピーを作成
                    var clone = (TreeNode)source.Clone();
                    target.Nodes.Add(clone);
                    target.Expand();
                    SelectedNode = clone;

                    var draggedTag = (MemoTag)clone.Tag;
                    draggedTag.SuperTag = null;
                    if (target != _tagRootNode)
                    {
                        var super = target.Tag as MemoTag;
                        if (super != null)
                        {
                            draggedTag.SuperTag = super;
                        }
                    }
                    _isInDragOver = false;
                    _selectedObjBeforeDragOver = null;
                }
            }
            else if (e.Data.GetDataPresent(typeof(MemoInfo[])))
            {
                if (DragDropUtil.IsMove(e) || DragDropUtil.IsCopy(e))
                {
                    _isInDragOver = false;
                    SelectNode(_selectedObjBeforeDragOver);
                    _selectedObjBeforeDragOver = null;

                    var target    = GetNodeAt(PointToClient(new Point(e.X, e.Y)));
                    var addingTag = target.Tag as MemoTag;
                    var memoInfos = (MemoInfo[])e.Data.GetData(typeof(MemoInfo[]));
                    foreach (var memoInfo in memoInfos)
                    {
                        var memo = _facade.Container.Find <Memo>(memoInfo.MemoId);

                        if (DragDropUtil.IsMove(e))
                        {
                            memo.ClearTags();
                        }
                        if (!memo.Tags.Contains(addingTag))
                        {
                            memo.AddTag(addingTag);
                        }
                    }
                }
            }

            if (effect == DragDropEffects.None)
            {
                _isInDragOver = false;
                SelectNode(_selectedObjBeforeDragOver);
                _selectedObjBeforeDragOver = null;
            }
        }
Esempio n. 6
0
        protected override void OnDragOver(DragEventArgs e)
        {
            base.OnDragOver(e);

            e.Effect = DragDropEffects.None;

            /// まずdataとeffectで判断
            if (e.Data.GetDataPresent(typeof(TreeNode)) || e.Data.GetDataPresent(typeof(TreeNodeEx)))
            {
                if (DragDropUtil.IsMoveAllowed(e))
                {
                    var target = GetNodeAt(PointToClient(new Point(e.X, e.Y)));
                    var source = (TreeNode)e.Data.GetData(typeof(TreeNode));
                    if (source == null)
                    {
                        source = (TreeNode)e.Data.GetData(typeof(TreeNodeEx));
                    }

                    if (!_isInDragOver)
                    {
                        _isInDragOver = true;
                        _selectedObjBeforeDragOver = SelectedNode == null? null: SelectedNode.Tag;
                    }

                    /// 表示のための処理
                    if (target != null)
                    {
                        SelectedNode = target;
                        if (target.PrevVisibleNode != null)
                        {
                            target.PrevVisibleNode.EnsureVisible();
                        }
                        if (target.NextVisibleNode != null)
                        {
                            target.NextVisibleNode.EnsureVisible();
                        }
                    }

                    ///マウス下のNodeがドロップ先として適切か調べる
                    if (
                        target != null &&
                        target != source &&
                        target != source.Parent &&
                        !IsChildNode(source, target)
                        )
                    {
                        e.Effect = DragDropEffects.Move;
                    }
                }
            }
            else if (e.Data.GetDataPresent(typeof(MemoInfo[])))
            {
                if (DragDropUtil.IsMoveAllowed(e) || DragDropUtil.IsCopyAllowed(e))
                {
                    var target = GetNodeAt(PointToClient(new Point(e.X, e.Y)));

                    if (!_isInDragOver)
                    {
                        _isInDragOver = true;
                        _selectedObjBeforeDragOver = SelectedNode == null? null: SelectedNode.Tag;
                    }

                    /// 表示のための処理
                    if (target != null)
                    {
                        SelectedNode = target;
                        if (target.PrevVisibleNode != null)
                        {
                            target.PrevVisibleNode.EnsureVisible();
                        }
                        if (target.NextVisibleNode != null)
                        {
                            target.NextVisibleNode.EnsureVisible();
                        }
                    }

                    ///マウス下のNodeがドロップ先として適切か調べる
                    if (
                        target != null &&
                        target != _allTagsNode &&
                        target != _tagRootNode &&
                        target != _untaggedNode
                        )
                    {
                        if (DragDropUtil.IsControlPressed(e))
                        {
                            e.Effect = DragDropEffects.Copy;
                        }
                        else
                        {
                            e.Effect = DragDropEffects.Move;
                        }
                    }
                }
            }

            if (e.Effect == DragDropEffects.None)
            {
                SelectNode(_selectedObjBeforeDragOver);
                _isInDragOver = false;
            }
        }
Esempio n. 7
0
 public void enableDragDrop()
 {
     // only enable drag&drop when the main form is visible
     DragDropUtil.RegisterSingleFileDragDrop(input, setFileName, delegate() { return(Filter); });
 }
Esempio n. 8
0
        private void HandleMemoListBoxDragDrop(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(typeof(MemoInfo[])))
            {
                if (_targetKind == MemoListTargetKind.Folder)
                {
                    if (DragDropUtil.IsCopy(e))
                    {
                        var targetFolder = _workspaceView.WorkspaceTree.SelectedFolder;
                        if (targetFolder != null)
                        {
                            var memoInfos = (MemoInfo[])e.Data.GetData(typeof(MemoInfo[]));

                            var existsNotContained = false;
                            foreach (var memoInfo in memoInfos)
                            {
                                var memo = _app.Container.Find <Memo>(memoInfo.MemoId);
                                if (!targetFolder.ContainingMemos.Contains(memo))
                                {
                                    existsNotContained = true;
                                    break;
                                }
                            }
                            if (existsNotContained)
                            {
                                foreach (var memoInfo in memoInfos)
                                {
                                    var memo = _app.Container.Find <Memo>(memoInfo.MemoId);
                                    if (!targetFolder.ContainingMemos.Contains(memo))
                                    {
                                        targetFolder.AddContainingMemo(memo);
                                    }
                                }
                            }
                        }
                    }
                }
                else if (_targetKind == MemoListTargetKind.Tag)
                {
                    if (DragDropUtil.IsCopyAllowed(e))
                    {
                        var targetTag = _workspaceView.WorkspaceTree.SelectedTag;
                        if (targetTag != null)
                        {
                            var memoInfos = (MemoInfo[])e.Data.GetData(typeof(MemoInfo[]));

                            var existsNotContained = false;
                            foreach (var memoInfo in memoInfos)
                            {
                                var memo = _app.Container.Find <Memo>(memoInfo.MemoId);
                                if (!targetTag.Memos.Contains(memo))
                                {
                                    existsNotContained = true;
                                    break;
                                }
                            }
                            if (existsNotContained)
                            {
                                foreach (var memoInfo in memoInfos)
                                {
                                    var memo = _app.Container.Find <Memo>(memoInfo.MemoId);
                                    if (!targetTag.Memos.Contains(memo))
                                    {
                                        targetTag.AddMemo(memo);
                                    }
                                }
                            }
                        }
                    }
                }
                else if (_targetKind == MemoListTargetKind.TrashBox)
                {
                    if (DragDropUtil.IsMove(e))
                    {
                        var memoInfos = (MemoInfo[])e.Data.GetData(typeof(MemoInfo[]));
                        if (MessageUtil.ConfirmMemoRemoval(memoInfos))
                        {
                            foreach (var info in memoInfos)
                            {
                                _app.RemoveMemo(info);
                            }
                        }
                    }
                }
            }
        }
Esempio n. 9
0
        protected IDragTarget CreateFocusFigureDragTarget()
        {
            var ret = MouseOperatableFactory.CreateDragTarget();

            ret.DragOver += (sender, e) => {
                e.Effect = DragDropEffects.None;

                var data = e.Data;

                if (data.GetDataPresent(typeof(MemoInfo[])))
                {
                    if (DragDropUtil.IsLinkAllowed(e))
                    {
                        e.Effect = DragDropEffects.Link;
                        ShowFocusFigureDropTextFeedback(new Point(e.X, e.Y));
                    }
                }
                else if (data.GetDataPresent(StyledTextConsts.BlocksAndInlinesFormat.Name))
                {
                    if (DragDropUtil.IsControlPressed(e))
                    {
                        if (DragDropUtil.IsCopyAllowed(e))
                        {
                            e.Effect = DragDropEffects.Copy;
                            ShowFocusFigureDropTextFeedback(new Point(e.X, e.Y));
                        }
                        else
                        {
                            e.Effect = DragDropEffects.Move;
                            ShowFocusFigureDropTextFeedback(new Point(e.X, e.Y));
                        }
                    }
                    else
                    {
                        if (DragDropUtil.IsMoveAllowed(e))
                        {
                            e.Effect = DragDropEffects.Move;
                            ShowFocusFigureDropTextFeedback(new Point(e.X, e.Y));
                        }
                        else if (DragDropUtil.IsCopyAllowed(e))
                        {
                            e.Effect = DragDropEffects.Copy;
                            ShowFocusFigureDropTextFeedback(new Point(e.X, e.Y));
                        }
                    }
                }
                if (data.GetDataPresent("UniformResourceLocator") && data.GetDataPresent(DataFormats.UnicodeText))
                {
                    if (DragDropUtil.IsLinkAllowed(e))
                    {
                        e.Effect = DragDropEffects.Link;
                        ShowFocusFigureDropTextFeedback(new Point(e.X, e.Y));
                    }
                }
                else if (data.GetDataPresent(DataFormats.UnicodeText))
                {
                    if (DragDropUtil.IsControlPressed(e))
                    {
                        if (DragDropUtil.IsCopyAllowed(e))
                        {
                            e.Effect = DragDropEffects.Copy;
                            ShowFocusFigureDropTextFeedback(new Point(e.X, e.Y));
                        }
                        else
                        {
                            e.Effect = DragDropEffects.Move;
                            ShowFocusFigureDropTextFeedback(new Point(e.X, e.Y));
                        }
                    }
                    else
                    {
                        if (DragDropUtil.IsMoveAllowed(e))
                        {
                            e.Effect = DragDropEffects.Move;
                            ShowFocusFigureDropTextFeedback(new Point(e.X, e.Y));
                        }
                        else if (DragDropUtil.IsCopyAllowed(e))
                        {
                            e.Effect = DragDropEffects.Copy;
                            ShowFocusFigureDropTextFeedback(new Point(e.X, e.Y));
                        }
                    }
                }
            };

            ret.DragLeave += (sender, e) => {
                /// feedbackを隠す
                Host.HideFeedback(new DropTextRequest(Rectangle.Empty));
            };

            ret.DragDrop += (sender, e) => {
                if (DragDropUtil.IsNone(e))
                {
                    return;
                }

                var data  = e.Data;
                var loc   = new Point(e.X, e.Y);
                var focus = Host.Focus as StyledTextFocus;

                if (data.GetDataPresent(typeof(MemoInfo[])))
                {
                    if (DragDropUtil.IsLink(e))
                    {
                        if (focus != null && Host.Figure.Root != null)
                        {
                            var infos = (MemoInfo[])data.GetData(typeof(MemoInfo[]));
                            focus.Selection.Range = Range.Empty;

                            var charIndex = focus.Figure.GetCharIndexAt(loc);
                            foreach (var info in infos)
                            {
                                var text = info.Title;
                                var url  = UriUtil.GetUri(info);
                                focus.Referer.CaretIndex = charIndex;
                                focus.InsertText(text, false);

                                /// set link
                                focus.Selection.Range = new Range(charIndex, text.Length);
                                focus.SetLink(url, null);
                                focus.Selection.Range = Range.Empty;
                            }
                        }
                        Host.HideFeedback(new DropTextRequest(Rectangle.Empty));
                        Host.Site.EditorCanvas.Select();
                    }
                }
                else if (data.GetDataPresent(StyledTextConsts.BlocksAndInlinesFormat.Name))
                {
                    /// StyledText flows
                    if (DragDropUtil.IsCopy(e) || DragDropUtil.IsMove(e))
                    {
                        if (focus != null && Host.Figure.Root != null)
                        {
                            var charIndex = focus.Figure.GetCharIndexAt(loc);

                            if (!_selectionRangeOnDragStart.Contains(charIndex))
                            {
                                /// Moveの場合はこのタイミングでremoveしてしまう。
                                /// DragFinishでやろうとすると大変。
                                if (!_selectionRangeOnDragStart.IsEmpty && DragDropUtil.IsMove(e))
                                {
                                    focus.RemoveForward();
                                }

                                focus.Selection.Range = Range.Empty;

                                if (charIndex >= _selectionRangeOnDragStart.End)
                                {
                                    charIndex -= _selectionRangeOnDragStart.Length;
                                }
                                focus.Referer.CaretIndex = charIndex;

                                var flows = (IEnumerable <Flow>)data.GetData(StyledTextConsts.BlocksAndInlinesFormat.Name);
                                focus.InsertBlocksAndInlines(flows);
                            }
                        }
                        Host.HideFeedback(new DropTextRequest(Rectangle.Empty));
                        Host.Site.EditorCanvas.Select();
                    }
                }
                else if (data.GetDataPresent("UniformResourceLocator") && data.GetDataPresent(DataFormats.UnicodeText))
                {
                    if (DragDropUtil.IsLink(e))
                    {
                        if (focus != null && Host.Figure.Root != null)
                        {
                            focus.Selection.Range = Range.Empty;

                            var url       = (string)data.GetData(DataFormats.UnicodeText);
                            var len       = url.Length;
                            var charIndex = focus.Figure.GetCharIndexAt(loc);
                            focus.Referer.CaretIndex = charIndex;
                            focus.InsertText(url, false);

                            /// set link
                            focus.Selection.Range = new Range(charIndex, len);
                            focus.SetLink(url, null);
                            focus.Selection.Range = Range.Empty;
                        }
                        Host.HideFeedback(new DropTextRequest(Rectangle.Empty));
                        Host.Site.EditorCanvas.Select();
                    }
                }
                else if (data.GetDataPresent(DataFormats.UnicodeText))
                {
                    if (DragDropUtil.IsCopy(e) || DragDropUtil.IsMove(e))
                    {
                        if (focus != null && Host.Figure.Root != null)
                        {
                            focus.Selection.Range = Range.Empty;

                            var charIndex = focus.Figure.GetCharIndexAt(loc);
                            focus.Referer.CaretIndex = charIndex;
                            var text = (string)data.GetData(DataFormats.UnicodeText);
                            focus.InsertText(text, false);
                        }
                        Host.HideFeedback(new DropTextRequest(Rectangle.Empty));
                        Host.Site.EditorCanvas.Select();
                    }
                }
            };

            return(ret);
        }
Esempio n. 10
0
        protected IDragTarget CreateHostFigureDragTarget()
        {
            var ret = MouseOperatableFactory.CreateDragTarget();

            ret.DragOver += (sender, e) => {
                e.Effect = DragDropEffects.None;

                var data = e.Data;

                if (data.GetDataPresent(typeof(MemoInfo[])))
                {
                    if (DragDropUtil.IsLinkAllowed(e))
                    {
                        e.Effect = DragDropEffects.Link;
                        ShowHostFigureDropTextFeedback(new Point(e.X, e.Y));
                    }
                }
                else if (data.GetDataPresent(StyledTextConsts.BlocksAndInlinesFormat.Name))
                {
                    if (DragDropUtil.IsControlPressed(e))
                    {
                        if (DragDropUtil.IsCopyAllowed(e))
                        {
                            e.Effect = DragDropEffects.Copy;
                            ShowHostFigureDropTextFeedback(new Point(e.X, e.Y));
                        }
                        else
                        {
                            e.Effect = DragDropEffects.Move;
                            ShowHostFigureDropTextFeedback(new Point(e.X, e.Y));
                        }
                    }
                    else
                    {
                        if (DragDropUtil.IsMoveAllowed(e))
                        {
                            e.Effect = DragDropEffects.Move;
                            ShowHostFigureDropTextFeedback(new Point(e.X, e.Y));
                        }
                        else if (DragDropUtil.IsCopyAllowed(e))
                        {
                            e.Effect = DragDropEffects.Copy;
                            ShowHostFigureDropTextFeedback(new Point(e.X, e.Y));
                        }
                    }
                }
                if (data.GetDataPresent("UniformResourceLocator") && data.GetDataPresent(DataFormats.UnicodeText))
                {
                    if (DragDropUtil.IsLinkAllowed(e))
                    {
                        e.Effect = DragDropEffects.Link;
                        ShowHostFigureDropTextFeedback(new Point(e.X, e.Y));
                    }
                }
                else if (data.GetDataPresent(DataFormats.UnicodeText))
                {
                    if (DragDropUtil.IsControlPressed(e))
                    {
                        if (DragDropUtil.IsCopyAllowed(e))
                        {
                            e.Effect = DragDropEffects.Copy;
                            ShowHostFigureDropTextFeedback(new Point(e.X, e.Y));
                        }
                        else
                        {
                            e.Effect = DragDropEffects.Move;
                            ShowHostFigureDropTextFeedback(new Point(e.X, e.Y));
                        }
                    }
                    else
                    {
                        if (DragDropUtil.IsMoveAllowed(e))
                        {
                            e.Effect = DragDropEffects.Move;
                            ShowHostFigureDropTextFeedback(new Point(e.X, e.Y));
                        }
                        else if (DragDropUtil.IsCopyAllowed(e))
                        {
                            e.Effect = DragDropEffects.Copy;
                            ShowHostFigureDropTextFeedback(new Point(e.X, e.Y));
                        }
                    }
                }
            };

            ret.DragLeave += (sender, e) => {
                /// feedbackを隠す
                Host.HideFeedback(new DropTextRequest(Rectangle.Empty));
            };

            ret.DragDrop += (sender, e) => {
                if (DragDropUtil.IsNone(e))
                {
                    return;
                }

                var data  = e.Data;
                var loc   = new Point(e.X, e.Y);
                var focus = Host.Focus as StyledTextFocus;

                if (data.GetDataPresent(typeof(MemoInfo[])))
                {
                    /// MemoInfo[]
                    if (DragDropUtil.IsLink(e))
                    {
                        Host.RequestSelect(SelectKind.True, true);
                        Host.RequestFocus(FocusKind.Begin, loc);
                        if (focus != null)
                        {
                            var infos = (MemoInfo[])data.GetData(typeof(MemoInfo[]));
                            foreach (var info in infos)
                            {
                                var text      = info.Title;
                                var url       = UriUtil.GetUri(info);
                                var charIndex = focus.Referer.CaretIndex;
                                focus.InsertText(text, false);

                                /// set link
                                focus.Selection.Range = new Range(charIndex, text.Length);
                                focus.SetLink(url, null);
                                focus.Selection.Range = Range.Empty;
                            }
                        }
                        Host.HideFeedback(new DropTextRequest(Rectangle.Empty));
                        Host.Site.EditorCanvas.Select();
                    }
                }
                else if (data.GetDataPresent(StyledTextConsts.BlocksAndInlinesFormat.Name))
                {
                    /// StyledText flows
                    if (DragDropUtil.IsCopy(e) || DragDropUtil.IsMove(e))
                    {
                        Host.RequestSelect(SelectKind.True, true);
                        Host.RequestFocus(FocusKind.Begin, loc);
                        if (focus != null)
                        {
                            var flows = (IEnumerable <Flow>)data.GetData(StyledTextConsts.BlocksAndInlinesFormat.Name);
                            focus.InsertBlocksAndInlines(flows);
                        }
                        Host.HideFeedback(new DropTextRequest(Rectangle.Empty));
                        Host.Site.EditorCanvas.Select();
                    }
                }
                else if (data.GetDataPresent("UniformResourceLocator") && data.GetDataPresent(DataFormats.UnicodeText))
                {
                    /// URL
                    if (DragDropUtil.IsLink(e))
                    {
                        Host.RequestSelect(SelectKind.True, true);
                        Host.RequestFocus(FocusKind.Begin, loc);
                        if (focus != null)
                        {
                            var charIndex = focus.Referer.CaretIndex;
                            var url       = (string)data.GetData(DataFormats.UnicodeText);
                            var len       = url.Length;
                            focus.InsertText(url, false);

                            /// set link
                            focus.Selection.Range = new Range(charIndex, len);
                            focus.SetLink(url, null);
                            focus.Selection.Range = Range.Empty;
                        }
                        Host.HideFeedback(new DropTextRequest(Rectangle.Empty));
                        Host.Site.EditorCanvas.Select();
                    }
                }
                else if (data.GetDataPresent(DataFormats.UnicodeText))
                {
                    /// Text
                    if (DragDropUtil.IsCopy(e) | DragDropUtil.IsMove(e))
                    {
                        Host.RequestSelect(SelectKind.True, true);
                        Host.RequestFocus(FocusKind.Begin, loc);
                        if (focus != null)
                        {
                            focus.InsertText((string)data.GetData(DataFormats.UnicodeText), false);
                        }
                        Host.HideFeedback(new DropTextRequest(Rectangle.Empty));
                        Host.Site.EditorCanvas.Select();
                    }
                }
            };

            return(ret);
        }
Esempio n. 11
0
        // ------------------------------
        // private
        // ------------------------------
        private IDragTarget CreateDragTarget()
        {
            var ret = MouseOperatableFactory.CreateDragTarget();

            var app = MemopadApplication.Instance;

            ret.DragOver += (sender, e) => {
                e.Effect = DragDropEffects.None;

                var data = e.Data;

                if (data.GetDataPresent(typeof(MemoInfo[])))
                {
                    if (DragDropUtil.IsLinkAllowed(e))
                    {
                        e.Effect = DragDropEffects.Link;
                    }
                }
                else if (data.GetDataPresent(DataFormats.FileDrop))
                {
                    if (DragDropUtil.IsControlPressed(e))
                    {
                        if (DragDropUtil.IsCopyAllowed(e))
                        {
                            e.Effect = DragDropEffects.Copy;
                        }
                    }
                    else
                    {
                        if (DragDropUtil.IsLinkAllowed(e))
                        {
                            e.Effect = DragDropEffects.Link;
                        }
                    }
                }
                else if (data.GetDataPresent(StyledTextConsts.BlocksAndInlinesFormat.Name))
                {
                    if (DragDropUtil.IsControlPressed(e))
                    {
                        if (DragDropUtil.IsCopyAllowed(e))
                        {
                            e.Effect = DragDropEffects.Copy;
                        }
                        else if (DragDropUtil.IsMoveAllowed(e))
                        {
                            e.Effect = DragDropEffects.Move;
                        }
                    }
                    else
                    {
                        if (DragDropUtil.IsMoveAllowed(e))
                        {
                            e.Effect = DragDropEffects.Move;
                        }
                        else if (DragDropUtil.IsCopyAllowed(e))
                        {
                            e.Effect = DragDropEffects.Copy;
                        }
                    }
                }
                else if (data.GetDataPresent(DataFormats.Html))
                {
                    if (DragDropUtil.IsControlPressed(e))
                    {
                        if (DragDropUtil.IsCopyAllowed(e))
                        {
                            e.Effect = DragDropEffects.Copy;
                        }
                        else if (DragDropUtil.IsMoveAllowed(e))
                        {
                            e.Effect = DragDropEffects.Move;
                        }
                    }
                    else
                    {
                        if (DragDropUtil.IsMoveAllowed(e))
                        {
                            e.Effect = DragDropEffects.Move;
                        }
                        else if (DragDropUtil.IsCopyAllowed(e))
                        {
                            e.Effect = DragDropEffects.Copy;
                        }
                    }
                }
                else if (data.GetDataPresent("UniformResourceLocator") && data.GetDataPresent(DataFormats.UnicodeText))
                {
                    if (DragDropUtil.IsLinkAllowed(e))
                    {
                        e.Effect = DragDropEffects.Link;
                    }
                }
                else if (data.GetDataPresent(DataFormats.UnicodeText))
                {
                    if (DragDropUtil.IsControlPressed(e))
                    {
                        if (DragDropUtil.IsCopyAllowed(e))
                        {
                            e.Effect = DragDropEffects.Copy;
                        }
                        else if (DragDropUtil.IsMoveAllowed(e))
                        {
                            e.Effect = DragDropEffects.Move;
                        }
                    }
                    else
                    {
                        if (DragDropUtil.IsMoveAllowed(e))
                        {
                            e.Effect = DragDropEffects.Move;
                        }
                        else if (DragDropUtil.IsCopyAllowed(e))
                        {
                            e.Effect = DragDropEffects.Copy;
                        }
                    }
                }
            };

            ret.DragDrop += (sender, e) => {
                if (DragDropUtil.IsNone(e))
                {
                    return;
                }

                var oldCursor = Host.Site.EditorCanvas.Cursor;
                Host.Site.EditorCanvas.Cursor = Cursors.WaitCursor;

                try {
                    var data = e.Data;
                    var loc  = Host.Site.GridService.GetAdjustedPoint(new Point(e.X, e.Y));

                    if (data.GetDataPresent(typeof(MemoInfo[])))
                    {
                        /// MemoInfo[]
                        if (DragDropUtil.IsLink(e))
                        {
                            var infos = (MemoInfo[])data.GetData(typeof(MemoInfo[]));
                            foreach (var info in infos)
                            {
                                var text    = info.Title;
                                var uri     = UriUtil.GetUri(info);
                                var created = MemoEditorHelper.AddTextAsLink(Host, loc, text, uri, null);
                            }
                            Host.Site.EditorCanvas.Select();
                        }
                    }
                    else if (data.GetDataPresent(DataFormats.FileDrop))
                    {
                        /// FileDrop
                        if (DragDropUtil.IsCopy(e) || DragDropUtil.IsLink(e))
                        {
                            MemoEditorHelper.AddFileDrops(
                                Host,
                                loc,
                                (string[])data.GetData(DataFormats.FileDrop),
                                e.Effect == DragDropEffects.Copy,
                                true,
                                false
                                );
                            Host.Site.EditorCanvas.Select();
                        }
                    }
                    else if (data.GetDataPresent(StyledTextConsts.BlocksAndInlinesFormat.Name))
                    {
                        /// StyledText flows
                        if (DragDropUtil.IsCopy(e) || DragDropUtil.IsMove(e))
                        {
                            MemoEditorHelper.AddBlocksAndInlines(
                                Host,
                                loc,
                                data.GetData(StyledTextConsts.BlocksAndInlinesFormat.Name) as IEnumerable <Flow>,
                                true
                                );
                            Host.Site.EditorCanvas.Select();
                        }
                    }
                    else if (data.GetDataPresent(DataFormats.Html))
                    {
                        /// Html
                        if (DragDropUtil.IsCopy(e) || DragDropUtil.IsMove(e))
                        {
                            var html = Common.Forms.Clipboard.ClipboardUtil.GetCFHtmlFromDataObject(data);
                            MemoEditorHelper.AddHtml(
                                Host,
                                loc,
                                html,
                                true
                                );
                            Host.Site.EditorCanvas.Select();
                        }
                    }
                    else if (data.GetDataPresent("UniformResourceLocator") && data.GetDataPresent(DataFormats.UnicodeText))
                    {
                        /// URL
                        if (DragDropUtil.IsLink(e))
                        {
                            var url     = (string)data.GetData(DataFormats.UnicodeText);
                            var created = MemoEditorHelper.AddTextAsLink(Host, loc, url, url, null);
                            Host.Site.EditorCanvas.Select();
                        }
                    }
                    else if (data.GetDataPresent(DataFormats.UnicodeText))
                    {
                        /// text
                        if (DragDropUtil.IsCopy(e) || DragDropUtil.IsMove(e))
                        {
                            MemoEditorHelper.AddText(Host, loc, (string)data.GetData(DataFormats.UnicodeText), false);
                            Host.Site.EditorCanvas.Select();
                        }
                    }
                } finally {
                    Host.Site.EditorCanvas.Cursor = oldCursor;
                }
            };

            return(ret);
        }