ElementMenuTreeNode newNode; // used when building up new menus // Called only for GUIContainer type classes public static ElementMenuTreeNode BuildMenu(ScreenMenuTreeNode screenParent, GUIContainer info) { ElementMenuTreeNode returnNode = new ElementMenuTreeNode(); returnNode.info = info; returnNode.children = new List<ElementMenuTreeNode>(); GUIContainer container = returnNode.info as GUIContainer; foreach (GUIObject obj in container.Elements) { // Containers nest, so deal with it slightly different. if (obj.GetType() == typeof(GUIContainer) || obj.GetType().BaseType == typeof(GUIContainer)) { ElementMenuTreeNode newNode = ElementMenuTreeNode.BuildMenu(screenParent, obj as GUIContainer); if (newNode != null) { newNode.screenParent = screenParent; newNode.containerParent = returnNode; returnNode.children.Add(newNode); } } else { ElementMenuTreeNode newNode = new ElementMenuTreeNode(); newNode.screenParent = screenParent; newNode.containerParent = returnNode; returnNode.children.Add(newNode); } } return returnNode; }
public bool CheckIsValid(ScreenMenuTreeNode node) { return true; }
ElementMenuTreeNode newNode; // used when building up new menus public static ScreenMenuTreeNode BuildMenu(GUIScreen info) // pass in the relative path { ScreenMenuTreeNode returnNode = new ScreenMenuTreeNode(); returnNode.info = info; returnNode.children = new List<ElementMenuTreeNode>(); foreach (GUIObject obj in returnNode.info.Elements) { // Containers nest, so deal with it slightly different. if (obj.GetType() == typeof(GUIContainer) || obj.GetType().BaseType == typeof(GUIContainer)) { ElementMenuTreeNode newNode = ElementMenuTreeNode.BuildMenu(returnNode, obj as GUIContainer); if (newNode != null) { newNode.screenParent = returnNode; returnNode.children.Add(newNode); } } else { ElementMenuTreeNode newNode = new ElementMenuTreeNode(); newNode.screenParent = returnNode; returnNode.children.Add(newNode); } } return returnNode; }
public void ShowAddNodeGUI() { EditorGUILayout.Space(); GUILayout.BeginHorizontal(); GUILayout.Label("Add GUIScene Below to SceneInfo"); if (GUILayout.Button("CANCEL")) { newNode = null; return; } if (newNode.CheckIsValid(newNode)) { if (GUILayout.Button("SAVE")) { newNode.expanded = false; newNode.parent = this; children.Add(newNode); info.Screens.Add(newNode.info); newNode = null; } } GUILayout.EndHorizontal(); EditorGUILayout.Space(); if (newNode != null) newNode.ShowInspectorGUI(-1); }
// this method recursively displays the menu tree for the Editor inspector, and can call methods to add and save public override void ShowInspectorGUI(int level) { base.ShowInspectorGUI(level); GUILayout.BeginHorizontal(); GUILayout.Label(indent + "ScreenInfo"); bool clicked = GUILayout.Button(xp + "Screen Info", GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); if (clicked) expanded = !expanded; if (expanded) { Color topColor = GUI.color; Color nextColor = topColor; nextColor.r = 0.75f; nextColor.g = 0.9f; GUI.color = nextColor; // Display source //GUILayout.BeginHorizontal(); //GUILayout.Label("Loaded From:"); //filePath = GUILayout.TextField(filePath); //GUILayout.EndHorizontal(); GUILayout.Label("Screens:"); // Display children foreach (ScreenMenuTreeNode n in children) n.ShowInspectorGUI(level + 1); GUILayout.BeginHorizontal(); GUILayout.Label("Menus:"); if (newNode == null) { if (GUILayout.Button("Add Screen", GUILayout.ExpandWidth(false))) { // Add a screen newNode = new ScreenMenuTreeNode(); newNode.expanded = true; newNode.info = new GUIScreen(); newNode.info.name = "ENTER Screen Name"; newNode.children = new List<ElementMenuTreeNode>(); } } //if (newNode == null && CheckIsValid(this)) //{ // if(GUILayout.Button("Save Changes!", GUILayout.ExpandWidth(false))) // { // // Save changes into myObject // Save(); // } //} GUILayout.EndHorizontal(); if(newNode != null) ShowAddNodeGUI(); GUI.color = topColor; } }
public void RemoveChild(ScreenMenuTreeNode child) { info.RemoveScreen(child.info); children.Remove(child); }