private void MoveNodeDown()
        {
            CsgNodeTreeViewItem item = nodeView.SelectedItem as CsgNodeTreeViewItem;

            if (item == null)
            {
                return;
            }
            CsgGroupTreeViewItem parent = item.Parent as CsgGroupTreeViewItem;

            if (parent == null)
            {
                return;
            }
            int newIndex; for (newIndex = parent.Group.ChildrenCount - 1; newIndex >= 0; newIndex--)

            {
                if (parent.Group.Group[newIndex] == item.Node.Node)
                {
                    break;
                }
            }
            newIndex++;
            if (newIndex < 0)
            {
                newIndex = 0;
            }
            parent.Group.MoveChild(item.Node, newIndex);
            item.IsSelected = true;
        }
        private void AddNode(CsgNode node)
        {
            if (root == null)
            {
                return;
            }
            CsgNodeWrapper      wrapper  = root.Node.Repository.GetWrapper(node);
            CsgNodeTreeViewItem item     = nodeView.SelectedItem as CsgNodeTreeViewItem;
            CsgGroupWrapper     selected = null;

            while (item != null)
            {
                selected = item.Node as CsgGroupWrapper;
                if (selected != null)
                {
                    break;
                }
                item = item.Parent as CsgNodeTreeViewItem;
            }
            if (selected == null)
            {
                selected = root.Node as CsgGroupWrapper;
            }
            if (selected != null)
            {
                selected.AddChild(wrapper);
            }
        }
Пример #3
0
 private bool CanDrop(string idString)
 {
     string[] ids = (idString ?? string.Empty).Split('|');
     if (ids.Length == 2)
     {
         CsgNodeWrapper wrapper = Node.Repository.GetWrapperById(ids[0]);
         if (wrapper != null)
         {
             CsgNodeTreeViewItem item = this;
             while (item != null)
             {
                 if (item.Node == wrapper)
                 {
                     return(false);
                 }
                 item = item.Parent as CsgNodeTreeViewItem;
             }
             if (item == null)
             {
                 return(true);
             }
         }
     }
     return(false);
 }
Пример #4
0
        public void RefreshChildren()
        {
            List <CsgNodeTreeViewItem> newNodes = new List <CsgNodeTreeViewItem>();

            foreach (CsgNodeWrapper wrapper in group.Children)
            {
                CsgNodeTreeViewItem view;
                if (!nodes.TryGetValue(wrapper, out view))
                {
                    if (wrapper is CsgCubeWrapper)
                    {
                        view = new CsgCubeTreeViewItem(owner, (CsgCubeWrapper)wrapper);
                    }
                    else if (wrapper is CsgTranslateWrapper)
                    {
                        view = new CsgTranslateTreeViewItem(owner, (CsgTranslateWrapper)wrapper);
                    }
                    else if (wrapper is CsgScaleWrapper)
                    {
                        view = new CsgScaleTreeViewItem(owner, (CsgScaleWrapper)wrapper);
                    }
                    else if (wrapper is CsgRotateWrapper)
                    {
                        view = new CsgRotateTreeViewItem(owner, (CsgRotateWrapper)wrapper);
                    }
                    else if (wrapper is CsgUnionWrapper)
                    {
                        view = new CsgUnionTreeViewItem(owner, (CsgUnionWrapper)wrapper);
                    }
                    else if (wrapper is CsgSubtractWrapper)
                    {
                        view = new CsgSubtractTreeViewItem(owner, (CsgSubtractWrapper)wrapper);
                    }
                    else if (wrapper is CsgIntersectWrapper)
                    {
                        view = new CsgIntersectTreeViewItem(owner, (CsgIntersectWrapper)wrapper);
                    }
                    else if (wrapper is CsgGroupWrapper)
                    {
                        view = new CsgGroupTreeViewItem(owner, (CsgGroupWrapper)wrapper);
                    }
                }
                if (view == null)
                {
                    view = new CsgNodeTreeViewItem(owner, wrapper);
                }
                newNodes.Add(view);
            }
            nodes.Clear();
            Items.Clear();
            foreach (CsgNodeTreeViewItem node in newNodes)
            {
                Items.Add(node);
                nodes[node.Node] = node;
            }
        }
 private void LoadObject(CsgGroupWrapper node)
 {
     nodeView.Items.Clear();
     this.root = null;
     if (node != null)
     {
         nodeView.Items.Add((this.root = new CsgGroupTreeViewItem(this, node)));
         this.root.IsSelected = true;
     }
 }
        private void MakeObjectNode()
        {
            CsgNodeTreeViewItem item = nodeView.SelectedItem as CsgNodeTreeViewItem;

            if (item == null)
            {
                return;
            }
            if (item.Node is CsgGroupWrapper)
            {
                item.Node.IsObjectRoot = true;
            }
        }
        private void MoveNodeLast()
        {
            CsgNodeTreeViewItem item = nodeView.SelectedItem as CsgNodeTreeViewItem;

            if (item == null)
            {
                return;
            }
            CsgGroupTreeViewItem parent = item.Parent as CsgGroupTreeViewItem;

            if (parent == null)
            {
                return;
            }
            parent.Group.MoveChild(item.Node, parent.Group.ChildrenCount - 1);
        }
        private void MoveNodeRight()
        {
            CsgNodeTreeViewItem item = nodeView.SelectedItem as CsgNodeTreeViewItem;

            if (item == null)
            {
                return;
            }
            CsgGroupTreeViewItem parent = item.Parent as CsgGroupTreeViewItem;

            if (parent == null)
            {
                return;
            }
            int newIndex; for (newIndex = parent.Group.ChildrenCount - 1; newIndex >= 0; newIndex--)

            {
                if (parent.Group.Group[newIndex] == item.Node.Node)
                {
                    break;
                }
            }
            if (newIndex <= 0)
            {
                return;
            }
            CsgGroupTreeViewItem newParent = null;

            if (newIndex > 0)
            {
                newParent = parent.Items[newIndex - 1] as CsgGroupTreeViewItem;
            }
            if (newParent == null && (newIndex + 1) < parent.Items.Count)
            {
                newParent = parent.Items[newIndex + 1] as CsgGroupTreeViewItem;
            }
            if (newParent != null)
            {
                parent.Group.RemoveChild(item.Node);
                newParent.Group.AddChild(item.Node);
                parent.IsExpanded    = true;
                newParent.IsExpanded = true;
                item            = newParent.Items.Cast <CsgNodeTreeViewItem>().First(x => x.Node == item.Node);
                item.IsSelected = true;
                item.Focus();
            }
        }
        private void DeleteNode()
        {
            CsgNodeTreeViewItem item = nodeView.SelectedItem as CsgNodeTreeViewItem;

            if (item == null)
            {
                return;
            }
            CsgGroupTreeViewItem parent = item.Parent as CsgGroupTreeViewItem;

            if (parent == null)
            {
                return;
            }
            parent.Group.RemoveChild(item.Node);
            RecursiveDelete(item.Node as CsgGroupWrapper);
        }
        private void MoveNodeLeft()
        {
            CsgNodeTreeViewItem item = nodeView.SelectedItem as CsgNodeTreeViewItem;

            if (item == null)
            {
                return;
            }
            CsgGroupTreeViewItem parent = item.Parent as CsgGroupTreeViewItem;

            if (parent == null)
            {
                return;
            }
            CsgGroupTreeViewItem superParent = parent.Parent as CsgGroupTreeViewItem;

            if (superParent == null)
            {
                return;
            }
            int newIndex; for (newIndex = superParent.Group.ChildrenCount - 1; newIndex >= 0; newIndex--)

            {
                if (superParent.Group.Group[newIndex] == parent.Node.Node)
                {
                    break;
                }
            }
            if (newIndex <= 0)
            {
                newIndex = superParent.Group.ChildrenCount - 1;
            }
            parent.Group.RemoveChild(item.Node);
            superParent.Group.AddChild(item.Node);
            newIndex++; if (newIndex >= superParent.Group.ChildrenCount)
            {
                newIndex = superParent.Group.ChildrenCount - 1;
            }
            superParent.Group.MoveChild(item.Node, newIndex);
            parent.IsExpanded = false;
            superParent.Items.Cast <CsgNodeTreeViewItem>().First(x => x.Node == item.Node).IsSelected = true;
        }
Пример #11
0
 protected override void OnDrop(DragEventArgs e)
 {
     string[] ids = (e.Data.GetData(DataFormats.Text) as string ?? string.Empty).Split('|');
     e.Handled = true;
     if (ids.Length == 2)
     {
         CsgNodeWrapper wrapper = Node.Repository.GetWrapperById(ids[0]);
         if (e.Effects == DragDropEffects.Move)
         {
             CsgGroupWrapper parent = Node.Repository.GetWrapperById(ids[1]) as CsgGroupWrapper;
             if (wrapper != null && parent != null)
             {
                 CsgNodeTreeViewItem item = this;
                 while (item != null)
                 {
                     if (item.Node == wrapper)
                     {
                         return;
                     }
                     item = item.Parent as CsgNodeTreeViewItem;
                 }
                 if (parent.RemoveChild(wrapper))
                 {
                     if (!Group.AddChild(wrapper))
                     {
                         parent.AddChild(wrapper);
                     }
                 }
                 IsSelected = true;
             }
         }
         else if (e.Effects == DragDropEffects.Link)
         {
             if (wrapper != null)
             {
                 Group.AddChild(wrapper);
                 IsSelected = true;
             }
         }
     }
     base.OnDrop(e);
 }
        private void ViewNodePhysics()
        {
            if (owner == null)
            {
                return;
            }
            CsgNodeTreeViewItem item = nodeView.SelectedItem as CsgNodeTreeViewItem;

            if (item == null)
            {
                if (SelectedItem != null)
                {
                    new PhysicsDocument(owner, SelectedItem);
                }
                return;
            }
            if (item.Node is CsgGroupWrapper)
            {
                new PhysicsDocument(owner, (CsgGroupWrapper)item.Node);
            }
        }
        private void DuplicateNode()
        {
            CsgNodeTreeViewItem item = nodeView.SelectedItem as CsgNodeTreeViewItem;

            if (item == null)
            {
                return;
            }
            CsgGroupTreeViewItem parent = item.Parent as CsgGroupTreeViewItem;

            if (parent == null)
            {
                return;
            }
            int newIndex; for (newIndex = parent.Group.ChildrenCount - 1; newIndex >= 0; newIndex--)

            {
                if (parent.Group.Group[newIndex] == item.Node.Node)
                {
                    break;
                }
            }
            if (newIndex < 0)
            {
                newIndex = parent.Group.ChildrenCount;
            }
            else
            {
                newIndex++;
            }
            CsgNodeWrapper clone = item.Node.Clone();

            parent.Group.AddChild(clone);
            if (newIndex != (parent.Group.ChildrenCount - 1))
            {
                parent.Group.MoveChild(clone, newIndex);
            }
            parent.Items.Cast <CsgNodeTreeViewItem>().First(x => x.Node == clone).IsSelected = true;
        }