public string ColumnValue(object objNode, int columnNumber)
            {
                if (columnNumber >= 3)
                {
                    return("");
                }

                ITreeViewControllerNode treeNode = (ITreeViewControllerNode)objNode;

                if (treeNode.IsRootNode || treeNode.IsRefByNode)
                {
                    return("");
                }

                // Case 2 all other nodes.
                MemoryNode node = (MemoryNode)m_graph.GetNode(treeNode.m_nodeIdx, m_nodeStorage);

                if (columnNumber == 0) // Value
                {
                    return("0x" + node.Address.ToString("x"));
                }
                else if (columnNumber == 1) // Size
                {
                    return(node.Size.ToString());
                    // return "0x" + node.Size.ToString("x");
                }
                else if (columnNumber == 2) // Type
                {
                    var type = node.GetType(m_typeStorage);
                    return(type.FullName);
                }
                return("");
            }
            public IEnumerable <object> Children(object objNode)
            {
                ITreeViewControllerNode treeNode = (ITreeViewControllerNode)objNode;

                if (treeNode.m_nodeList != null)
                {
                    // Case 1 the root node
                    for (int i = 0; i < treeNode.m_nodeList.Count; i++)
                    {
                        yield return(new ITreeViewControllerNode(treeNode.m_nodeList[i], i + 1));
                    }
                }
                else
                {
                    // Case 2 all other nodes.
                    if (treeNode.IsRefByNode)
                    {
                        RefNode node     = m_refGraph.GetNode(treeNode.m_nodeIdx, m_refGraph.AllocNodeStorage());
                        int     childNum = 1;
                        var     nextIdx  = node.GetFirstChildIndex();
                        while (nextIdx != NodeIndex.Invalid)
                        {
                            yield return(new ITreeViewControllerNode(nextIdx, childNum, true));

                            nextIdx = node.GetNextChildIndex();
                            childNum++;
                        }
                    }
                    else
                    {
                        // Normal nodes.
                        yield return(new ITreeViewControllerNode(treeNode.m_nodeIdx, -1));       // Return a 'Referenced By Node'

                        Node node = m_graph.GetNode(treeNode.m_nodeIdx, m_graph.AllocNodeStorage());
                        node.ResetChildrenEnumeration();
                        int childNum = 1;
                        while (true)
                        {
                            var nextIdx = node.GetNextChildIndex();
                            if (nextIdx == NodeIndex.Invalid)
                            {
                                break;
                            }

                            yield return(new ITreeViewControllerNode(nextIdx, childNum));

                            childNum++;
                        }
                    }
                }
            }
            public int ChildCount(object objNode)
            {
                ITreeViewControllerNode treeNode = (ITreeViewControllerNode)objNode;

                if (treeNode.m_nodeList != null)
                {
                    return(treeNode.m_nodeList.Count);                                   // Case 1 we are the root node
                }
                else
                {
                    if (treeNode.IsRefByNode)
                    {
                        RefNode refNode = m_refGraph.GetNode(treeNode.m_nodeIdx, m_refNodeStorage);
                        return(refNode.ChildCount);
                    }
                    else
                    {
                        Node node = m_graph.GetNode(treeNode.m_nodeIdx, m_nodeStorage);     // Case 2 all other nodes.
                        return(node.ChildCount + 1);                                        // +1 is for the Referenced By Node.
                    }
                }
            }
            public string Name(object objNode)
            {
                ITreeViewControllerNode treeNode = (ITreeViewControllerNode)objNode;

                return(treeNode.Name);
            }