Traversing the Project Tree

This example shows how to traverse the Project Tree for a specific item. This example uses the IProjectTree61 (FindItem, GetItemName, HiddenGroupName) property and methods.

 

function ScanTree()

        {

            try

            {

                alert("Click OK to find Vermont item by its path in the tree");

                var id = sgworld.ProjectTree.FindItem("New England\\States\\Vermont");

                if(id > 0)

                    alert("Found Vermont with id=" + id);

                else

                    alert("New England\\States\\Vermont does not exist in tree");

                // root is the first visible item in tree.

                var root = sgworld.ProjectTree.GetNextItem(0, 18 /* ItemCode.ROOT*/);

               

                var tree = BuildTreeRecursive(root, 1);

                alert(tree);

            }

            catch (ex)

            {

               alert("Unexpected error: " + ex.description);

            }

        }

 

        function BuildTreeRecursive(current, indent)

        {

            // build padding

            var padding = "";

            for (var i = 0; i < indent * 3; i++)

                padding += "-"; 

            var result = "";

            // iterate over all siblings of current node

            while (current > 0)

            {

                // append node name to the tree string

                var currentName = sgworld.ProjectTree.GetItemName(current);

                result += padding + currentName + "\r\n";

                // if current node is group, recursively build tree from its first child;

                if (sgworld.ProjectTree.IsGroup(current))

                {

                    var child = sgworld.ProjectTree.GetNextItem(current,11 /* ItemCode.CHILD */);

                    result += BuildTreeRecursive(child, indent + 1);

                }

                // move to next sibling

                current = sgworld.ProjectTree.GetNextItem(current,13 /* ItemCode.NEXT*/);

            }

            return result;

        }