// align node to top element and create constant space between nodes and sort items public void sortNodes(Nodes nodes) { if (nodes.Count() > 0) { int minx = nodes[0].position.x; int miny = nodes[0].position.y; foreach (Node rec in nodes) { if (rec.position.y <= miny) // find most top element { minx = rec.position.x; miny = rec.position.y; } } foreach (Node rec in nodes) // align to left { rec.position.x = minx; } nodes.OrderByPositionY(); // check if nodes are ordered by name already bool alreadyAsc = true; for (int i = 0; i < nodes.Count - 1; i++) { if (String.Compare(nodes[i + 1].name, nodes[i].name) < 0) { alreadyAsc = false; break; } } if (alreadyAsc) { nodes.OrderByNameDesc(); } else { nodes.OrderByNameAsc(); } int posy = miny; foreach (Node rec in nodes) // change space between nodes { rec.position.y = posy; posy = posy + rec.height + 10; } } }