static public void enumWidgets(Transform root, widgetCallback cb, object args = null)
    {
        List <Transform> stack = new List <Transform> ();

        for (int ii = 0; ii < root.childCount; ++ii)
        {
            stack.Add(root.GetChild(ii));
        }

        while (stack.Count > 0)
        {
            Transform tr = stack [0];
            stack.RemoveAt(0);

            if (!cb(tr, args))
            {
                for (int ii = 0; ii < tr.childCount; ++ii)
                {
                    stack.Add(tr.GetChild(ii));
                }
            }
        }
    }
    public static void enumWidgets(Transform root, widgetCallback cb, object args = null)
    {
        List<Transform> stack = new List<Transform> ();
        for (int ii = 0; ii < root.childCount; ++ii) {
            stack.Add (root.GetChild (ii));
        }

        while (stack.Count > 0) {
            Transform tr = stack [0];
            stack.RemoveAt (0);

            if (!cb (tr, args)) {
                for (int ii = 0; ii < tr.childCount; ++ii) {
                    stack.Add (tr.GetChild (ii));
                }
            }
        }
    }