public void AutoPosition() { const float depthSpacing = 4; for (int i = 0; i < mNodesAsList.Count; i++) { HierarchyNode node = mNodesAsList[i]; node.RelativeY = -depthSpacing; IAttachable parent = GetParent(node.ObjectRepresenting); if (parent == null) { node.AttachTo(null, false); node.Y = 5; } else { HierarchyNode parentNode = GetNodeFromAttachable(parent); node.AttachTo(parentNode, false); } } mUnparentedNodes.Clear(); // Gotta do this after all attachments have been made for (int i = 0; i < mNodesAsList.Count; i++) { HierarchyNode node = mNodesAsList[i]; if (node.Parent != null) { node.SetRelativeX(); node.ForceUpdateDependencies(); } else { float xToStartAt = 0; if (mUnparentedNodes.Count != 0) { xToStartAt = mUnparentedNodes.Last.X + mUnparentedNodes.Last.Width / 2.0f; } node.Y = 5; node.X = xToStartAt + node.Width / 2.0f; mUnparentedNodes.Add(node); } } UpdateSelectionMarker(); }