示例#1
0
        private void SetRevert(TreeNode node, TreeNodeDragEventArgs e)
        {
            switch (GetTarget(node, e))
            {
            case TreeNodeDDTarget.Self: {
                Gdi::Rectangle rect = new Gdi::Rectangle(node.ClientPosition, node.ContentSize);
                rect.X += node.ContentOffsetX;
                node.View.dropArea.RevertRect(rect);
                break;
            }

            case TreeNodeDDTarget.Prev: {
                Gdi::Point p = node.ClientPosition;
                p.X += node.ContentOffsetX;
                node.View.dropArea.RevertLine(p);
                break;
            }

            case TreeNodeDDTarget.Next: {
                Gdi::Point p = node.ClientPosition;
                p.X += node.ContentOffsetX;
                p.Y += node.ContentSize.Height;
                node.View.dropArea.RevertLine(p);
                break;
            }

            case TreeNodeDDTarget.Child: {
                Gdi::Point p = node.ClientPosition;
                p.X += node.ContentOffsetX + node.ChildIndent.Width;
                p.Y += node.ContentSize.Height;
                node.View.dropArea.RevertLine(p);
                break;
            }
            }
        }
示例#2
0
            //-----------------------------------------------------------------------
            // OnDrop
            //-----------------------------------------------------------------------
            /// <summary>
            /// ドロップ処理を実行します。
            /// </summary>
            /// <param name="node">処理対象のノードを指定します。</param>
            /// <param name="e">ドラッグの情報を指定します。</param>
            public override void OnDrop(TreeNode node, TreeNodeDragEventArgs e)
            {
                TreeTreeNode <T> _dst   = node as TreeTreeNode <T>;
                TreeNodeDDTarget target = this.GetTarget(node, e);

                switch (e.Effect & this.GetEffect(node, e))
                {
                case Forms::DragDropEffects.Move: {
                    TreeNode node2 = e.Data.GetData("afh.Forms.TreeNode") as TreeNode;
                    if (node2 != null)
                    {
                        this.OnDrop_MoveNode(_dst, node2, target);
                        break;
                    }

                    Gen::List <TreeNode> list = e.Data.GetData("afh.Forms.TreeNode:List") as Gen::List <TreeNode>;
                    if (list != null)
                    {
                        this.OnDrop_MoveList(_dst, list, target);
                        break;
                    }

                    break;
                }

                case Forms::DragDropEffects.Link:
                case Forms::DragDropEffects.Copy:
                    throw new System.NotImplementedException();

                default:
                    break;
                }
            }
示例#3
0
        /// <summary>
        /// ドロップ先からのデータの続柄を取得します。
        /// </summary>
        /// <param name="node">ドロップ先のノードを指定します。</param>
        /// <param name="e">ドラッグに関する情報を指定します。</param>
        /// <returns>ドロップ先からのデータの続柄を返します。</returns>
        protected virtual TreeNodeDDTarget GetTarget(TreeNode node, TreeNodeDragEventArgs e)
        {
            //System.Console.WriteLine("dbg: "+e.HitTypeVertical.ToString());
            switch (e.HitTypeVertical)
            {
            case TreeNodeHitType.Above:
            case TreeNodeHitType.BorderTop:
                return(TreeNodeDDTarget.Prev);

            case TreeNodeHitType.Below:
            case TreeNodeHitType.BorderBottom:
                if (node.HasChildren && node.IsExpanded)
                {
                    return(TreeNodeDDTarget.Child);
                }
                return(TreeNodeDDTarget.Next);

            default:
                return(TreeNodeDDTarget.Self);
            }
        }
示例#4
0
            //-----------------------------------------------------------------------
            //	GetEffect
            //-----------------------------------------------------------------------
            /// <summary>
            /// ドラッグドロップ操作の期待される DDE を取得します。
            /// </summary>
            /// <param name="node">ドロップ先のノードを指定します。</param>
            /// <param name="e">ドラッグに関する情報を指定します。</param>
            /// <returns>ドロップによって期待される DDE を返します。</returns>
            protected override Forms::DragDropEffects GetEffect(TreeNode node, TreeNodeDragEventArgs e)
            {
                //■TODO: 他のプロセスから来た場合はどうなるのか?

                // キー状態
                Forms::DragDropEffects mask;

                switch (e.KeyState)
                {
                case TreeNodeDragEventArgs.KEY_MLEFT | TreeNodeDragEventArgs.KEY_CTRL:
                    mask = Forms::DragDropEffects.Copy;
                    break;

                case TreeNodeDragEventArgs.KEY_MLEFT | TreeNodeDragEventArgs.KEY_ALT:
                    mask = Forms::DragDropEffects.Link;
                    break;

                default:
                    mask = Forms::DragDropEffects.Move;
                    break;
                }

                // ドロップ先
                TreeTreeNode <T> _dst = node as TreeTreeNode <T>;

                if (_dst == null)
                {
                    goto none;
                }
                switch (this.GetTarget(node, e))
                {
                case TreeNodeDDTarget.Self:
                case TreeNodeDDTarget.Child:
                    break;

                case TreeNodeDDTarget.Next:
                case TreeNodeDDTarget.Prev:
                    TreeTreeNode <T> parent = _dst.ParentNode as TreeTreeNode <T>;
                    if (parent == null)
                    {
                        goto none;
                    }
                    _dst = parent;
                    break;

                default:
                    goto none;
                }
                if (_dst.Value.Nodes.IsReadOnly)
                {
                    goto none;
                }

                // ドラッグオブジェクト
                {
                    // 単一ノードの場合
                    TreeNode node2 = e.Data.GetData("afh.Forms.TreeNode") as TreeNode;
                    if (node2 != null)
                    {
                        return(GetEffect_Node(_dst, node2, mask));
                    }

                    // ノードリストの場合
                    Gen::List <TreeNode> list = e.Data.GetData("afh.Forms.TreeNode:List") as Gen::List <TreeNode>;
                    if (list != null)
                    {
                        return(GetEffect_List(_dst, list, mask));
                    }

                    //■此処で拡張可能に
                }

none:
                return(Forms::DragDropEffects.None);
            }
示例#5
0
 public void OnLeave(TreeNode node, TreeNodeDragEventArgs e)
 {
 }
示例#6
0
 public void OnEnter(TreeNode node, TreeNodeDragEventArgs e)
 {
 }
示例#7
0
 public void OnDrop(TreeNode node, TreeNodeDragEventArgs e)
 {
 }
示例#8
0
 /// <summary>
 /// ドラッグドロップ操作の期待される DDE を取得します。
 /// </summary>
 /// <param name="node">ドロップ先のノードを指定します。</param>
 /// <param name="e">ドラッグに関する情報を指定します。</param>
 /// <returns>ドロップによって期待される DDE を返します。</returns>
 protected override Forms::DragDropEffects GetEffect(TreeNode node, TreeNodeDragEventArgs e)
 {
     return(Forms::DragDropEffects.Copy);
 }
示例#9
0
 /// <summary>
 /// ドロップ操作を実行します。
 /// </summary>
 /// <param name="node">ドロップ先のノードを指定します。</param>
 /// <param name="e">ドラッグに関する情報を指定します。</param>
 public override void OnDrop(TreeNode node, TreeNodeDragEventArgs e)
 {
 }
示例#10
0
 /// <summary>
 /// ドラッグが要素の外へ出て行く時の処理を行います。
 /// </summary>
 /// <param name="node">処理対象のノードを指定します。</param>
 /// <param name="e">ドラッグの情報を指定します。
 /// 情報がない場合には null を指定します。</param>
 public virtual void OnLeave(TreeNode node, TreeNodeDragEventArgs e)
 {
     node.View.dropArea.Clear();
 }
示例#11
0
 /// <summary>
 /// ドラッグが入ってくる時の処理を行います。
 /// </summary>
 /// <param name="node">処理対象のノードを指定します。</param>
 /// <param name="e">ドラッグの情報を指定します。</param>
 public virtual void OnEnter(TreeNode node, TreeNodeDragEventArgs e)
 {
     this.SetRevert(node, e);
 }
示例#12
0
 //-------------------------------------------------------------------------
 /// <summary>
 /// データがノードの上にドラッグされて来た時の動作を提供します。
 /// </summary>
 /// <param name="node">処理対象のノードを指定します。</param>
 /// <param name="e">ドラッグの情報を指定します。</param>
 public virtual void OnDrag(TreeNode node, TreeNodeDragEventArgs e)
 {
     e.Effect = GetEffect(node, e);
     this.SetRevert(node, e);
 }
示例#13
0
 /// <summary>
 /// ドラッグドロップ操作の期待される DDE を取得します。
 /// </summary>
 /// <param name="node">ドロップ先のノードを指定します。</param>
 /// <param name="e">ドラッグに関する情報を指定します。</param>
 /// <returns>ドロップによって期待される DDE を返します。</returns>
 protected abstract Forms::DragDropEffects GetEffect(TreeNode node, TreeNodeDragEventArgs e);
示例#14
0
 //-------------------------------------------------------------------------
 /// <summary>
 /// ドロップ操作を実行します。
 /// </summary>
 /// <param name="node">ドロップ先のノードを指定します。</param>
 /// <param name="e">ドラッグに関する情報を指定します。</param>
 public abstract void OnDrop(TreeNode node, TreeNodeDragEventArgs e);