예제 #1
0
        /// <summary>
        /// ドロップ時のDragDropEffectを取得する。
        /// </summary>
        /// <param name="dragNode">ドラッグ対象のツリーノード。</param>
        /// <returns>ドロップ時のDragDropEffect。</returns>
        public override DragDropEffects GetDragDropEffect(WarlockTreeNode dragNode)
        {
            if (dragNode is ScriptTreeNode) return DragDropEffects.Move;

            return base.GetDragDropEffect(dragNode);
        }
예제 #2
0
        /// <summary>
        /// ドロップ時のDragDropEffectを取得する。
        /// </summary>
        /// <param name="dragNode">ドラッグ対象のツリーノード。</param>
        /// <returns>ドロップ時のDragDropEffect。</returns>
        public override DragDropEffects GetDragDropEffect(WarlockTreeNode dragNode)
        {
            if (dragNode is ScriptTreeNode)
            {
                Func<WarlockTreeNode, bool> checkRecursive = null;
                checkRecursive = (node) =>
                {
                    if (node == this) return false;

                    foreach (var child in node.Nodes)
                    {
                        if (!checkRecursive((WarlockTreeNode)child)) return false;
                    }

                    return true;
                };

                if (dragNode == this || checkRecursive(dragNode))
                {
                    return DragDropEffects.Move;
                }
                else
                {
                    return DragDropEffects.None;
                }
            }

            return base.GetDragDropEffect(dragNode);
        }
예제 #3
0
        /// <summary>
        /// ノードのドロップ処理を行う。
        /// </summary>
        /// <param name="dragNode">ドラッグ対象のツリーノード。</param>
        /// <param name="project">プロジェクト情報のインスタンス。</param>
        public override void Drop(WarlockTreeNode dragNode, WarlockProject project)
        {
            var scriptNode = (ScriptTreeNode)dragNode;
            var dragDefinition = (ScriptDefinition)scriptNode.Tag;

            scriptNode.Remove();
            project.ScriptDefinitions.Remove(dragDefinition);
            project.ScriptDefinitions.Add(dragDefinition);
            this.Nodes.Add(scriptNode);
            if (!this.IsExpanded) this.Expand();
        }
예제 #4
0
        /// <summary>
        /// ノードのドロップ処理を行う。
        /// </summary>
        /// <param name="dragNode">ドラッグ対象のツリーノード。</param>
        /// <param name="project">プロジェクト情報のインスタンス。</param>
        public override void Drop(WarlockTreeNode dragNode, WarlockProject project)
        {
            var classNode = (ClassTreeNode)dragNode;
            var dragDefinition = (ClassDefinition)classNode.Tag;
            var dropDefinition = (ClassDefinition)this.Tag;

            classNode.Remove();
            project.ClassDefinitions.Remove(dragDefinition);

            int i = 0;
            for (i = 0; i < project.ClassDefinitions.Count - 1; i++)
            {
                if (project.ClassDefinitions[i] == dropDefinition) break;
            }

            project.ClassDefinitions.Insert(i, dragDefinition);
            Parent.Nodes.Insert(i, classNode);
        }
예제 #5
0
        /// <summary>
        /// ノードのドロップ処理を行う。
        /// </summary>
        /// <param name="dragNode">ドラッグ対象のツリーノード。</param>
        /// <param name="project">プロジェクト情報のインスタンス。</param>
        public override void Drop(WarlockTreeNode dragNode, WarlockProject project)
        {
            var scriptNode = (ScriptTreeNode)dragNode;
            var dragDefinition = (ScriptDefinition)scriptNode.Tag;
            var dropDefinition = (ScriptDefinition)this.Tag;
            var dragParentNode = scriptNode.Parent;
            var dropParentNode = this.Parent;

            scriptNode.Remove();
            List<ScriptDefinition> dragParentList;
            if (dragParentNode is ScriptRootTreeNode)
            {
                dragParentList = project.ScriptDefinitions;
            }
            else if (dragParentNode is ScriptTreeNode)
            {
                var parentDefinition = (ScriptDefinition)dragParentNode.Tag;
                dragParentList = parentDefinition.Children;
            }
            else
            {
                throw new NotImplementedException();
            }

            dragParentList.Remove(dragDefinition);

            if (dropDefinition.IsFolder)
            {
                dropDefinition.Children.Add(dragDefinition);
                this.Nodes.Add(scriptNode);

                if (!this.IsExpanded) this.Expand();
            }
            else
            {
                List<ScriptDefinition> dropParentList;
                if (dropParentNode is ScriptRootTreeNode)
                {
                    dropParentList = project.ScriptDefinitions;
                }
                else if (dropParentNode is ScriptTreeNode)
                {
                    var parentDefinition = (ScriptDefinition)dropParentNode.Tag;
                    dropParentList = parentDefinition.Children;
                }
                else
                {
                    throw new NotImplementedException();
                }

                int i = 0;
                for (i = 0; i < dropParentList.Count - 1; i++)
                {
                    if (dropParentList[i] == dropDefinition) break;
                }

                dropParentList.Insert(i, dragDefinition);
                dropParentNode.Nodes.Insert(i, scriptNode);
            }
        }
예제 #6
0
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="node">参照元のツリーノード。</param>
 public PropertyObject(WarlockTreeNode node)
 {
     _Node = node;
 }
예제 #7
0
 /// <summary>
 /// ノードのドロップ処理を行う。
 /// </summary>
 /// <param name="dragNode">ドラッグ対象のツリーノード。</param>
 /// <param name="project">プロジェクト情報のインスタンス。</param>
 public virtual void Drop(
     WarlockTreeNode dragNode, 
     WarlockProject project)
 {
     throw new NotImplementedException();
 }
예제 #8
0
 /// <summary>
 /// ドロップ時のDragDropEffectを取得する。
 /// </summary>
 /// <param name="dragNode">ドラッグ対象のツリーノード。</param>
 /// <returns>ドロップ時のDragDropEffect。</returns>
 public virtual DragDropEffects GetDragDropEffect(WarlockTreeNode dragNode)
 {
     return DragDropEffects.None;
 }
        /// <summary>
        /// プロパティ表示をリフレッシュする。
        /// </summary>
        /// <param name="node">ツリーノードのインスタンス。</param>
        private void RefreshProperty(WarlockTreeNode node)
        {
            if (Property == null) return;

            if (node == null)
            {
                Property.SetProperty(null);
            }
            else
            {
                Property.SetProperty(node.GetPropertyObject());
            }
        }
예제 #10
0
        /// <summary>
        /// ノードのドロップ処理を行う。
        /// </summary>
        /// <param name="dragNode">ドラッグ対象のツリーノード。</param>
        /// <param name="project">プロジェクト情報のインスタンス。</param>
        public override void Drop(WarlockTreeNode dragNode, WarlockProject project)
        {
            var classNode = (ClassTreeNode)dragNode;
            var dragDefinition = (ClassDefinition)classNode.Tag;

            classNode.Remove();
            project.ClassDefinitions.Remove(dragDefinition);
            project.ClassDefinitions.Add(dragDefinition);
            this.Nodes.Add(classNode);
            if (!this.IsExpanded) this.Expand();
        }