Example #1
0
 public void CollapseExpandAll()
 {
     if (NodeQuery.AllNodes.Any(x => ListView.IsExpanded(x)))
     {
         ListView.CollapseAll();
     }
     else
     {
         foreach (FolderTreeNode folderTreeNode in NodeQuery.FolderNodes)
         {
             ListView.Expand(folderTreeNode);
         }
     }
 }
Example #2
0
        public FolderData(FolderTreeNode treeNode, NlmTreeListView owner)
        {
            // Node Properties
            ID = treeNode.ID;
            if (treeNode.Parent != null)
            {
                ParentID = treeNode.Parent.ID;
            }
            Expanded = owner.IsExpanded(treeNode);

            // Column Properties
            Name    = treeNode.Name;
            Visible = treeNode.Visible;
            Freeze  = treeNode.Freeze;
            Render  = treeNode.Render;
            Color   = treeNode.Color;
            Box     = treeNode.Box;
        }
Example #3
0
        // Filtering does not take into consideration nodes that are not currently visible.
        // This ensures that all nodes are visible that match the search string.
        private void ExpandParentsOfMatchedChildren(String text)
        {
            HashSet <BaseTreeNode> NodesToExpand = new HashSet <BaseTreeNode>();

            foreach (BaseTreeNode treeNode in ListView.Roots)
            {
                SearchChildrenAndExpandByName(treeNode, text, NodesToExpand);
            }

            if (NodesToExpand.Count > 0)
            {
                foreach (BaseTreeNode nodeToExpand in NodesToExpand.ToList <BaseTreeNode>())
                {
                    if (!ListView.IsExpanded(nodeToExpand))
                    {
                        ListView.Expand(nodeToExpand);
                    }
                }
            }
        }
Example #4
0
        public LayerData(LayerTreeNode treeNode, NlmTreeListView listView, HandleMap handleMap)
        {
            ParentIDs = new List <Guid>();

            // Node Properties
            ID = treeNode.ID;
            if (treeNode.Parent == null)
            {
                ParentIDs.Add(new Guid());
            }
            else
            {
                ParentIDs.Add(treeNode.Parent.ID);
            }

            foreach (LayerTreeNode instanceParent in handleMap.GetTreeNodesByHandle(treeNode.Handle))
            {
                if (instanceParent != treeNode)
                {
                    if (instanceParent.Parent == null)
                    {
                        ParentIDs.Add(new Guid());
                    }
                    else
                    {
                        ParentIDs.Add(instanceParent.Parent.ID);
                    }
                }
            }

            // Column Properties
            Visible  = treeNode.Visible;
            Freeze   = treeNode.Freeze;
            Render   = treeNode.Render;
            Box      = treeNode.Box;
            Expanded = listView.IsExpanded(treeNode);
        }
Example #5
0
        // Move nodes to new parent after a drag drop operation.
        private void DragDropMoveNodes(BaseTreeNode target, IList dragNodes)
        {
            IList selection = ListView.SelectedObjects;

            ListView.BeginUpdate();

            MaxEvents.NodeEvents.Unregister();

            IEnumerable <BaseTreeNode> dragNodesEnum = dragNodes.Cast <BaseTreeNode>();

            // Are layers or folders being dropped on layers?
            // If so, make the target the parent of the target.
            if (dragNodesEnum.All(x => x is LayerTreeNode) && target is LayerTreeNode || dragNodesEnum.All(x => x is FolderTreeNode) && target is LayerTreeNode)
            {
                target = target.Parent;
            }
            // Are objects being dropped on objects?
            // If so, make the target the parent of the target.
            if (dragNodesEnum.All(x => x is ObjectTreeNode) && target is ObjectTreeNode)
            {
                target = target.Parent;
            }

            // Do we move to the root or move under a treeNode?
            // If the target is null, we have to move to root.
            if (target != null && target is LayerTreeNode)
            {
                // Move the treenodes in the listView.
                NodeParentEngine.MoveTreeNodes(dragNodes.Cast <BaseTreeNode>().ToList(), target);

                //TODO:
                //IEnumerable<UIntPtr> handles = dragNodes.Cast<IEnumerable<BaseTreeNode>>()
                //     .Where(x => x is ObjectTreeNode)
                //     .Cast<ObjectTreeNode>()
                //     .Select(x => x.Handle);

                // Move nodes to new layer in max.
                List <UIntPtr> handles = new List <UIntPtr>();
                foreach (BaseTreeNode child in dragNodes)
                {
                    ObjectTreeNode objectChild = child as ObjectTreeNode;
                    if (objectChild != null)
                    {
                        handles.Add(objectChild.Handle);
                    }
                }
                IILayer layer = MaxAnimatable.GetAnimByHandle(((LayerTreeNode)target).Handle) as IILayer;
                if (layer != null)
                {
                    MaxNodes.MoveNodesToLayer(handles, layer);
                }
            }
            else
            {
                NodeParentEngine.MoveTreeNodes(dragNodes.Cast <BaseTreeNode>().ToList(), target);
            }

            MaxEvents.NodeEvents.Register();

            // Default after drop behaviour tries to select nodes based on itemIndex. As nodes have moved this does not work.
            // Instead, return saved selection to SelectedObjects property, and make sure dropped Objects are visible.
            if (!ListView.IsExpanded(target))
            {
                ListView.Expand(target);
            }
            ListView.Sort(ListView.NlmColumns.NameColumn, SortOrder.Ascending);
            ListView.SelectedObjects = selection;
            ListView.EndUpdate();
        }