/// <summary> /// Draws the actual property editors. /// </summary> private object EditPropertiesButtons(GUIContent label, Rect region, object element, fiGraphMetadata metadata) { // If we have a label, then our properties block is indented and we should use hierarchy mode. Otherwise // we do not have a label so our properties block is *not* indented so we should *not* use hierarchy mode. // // HACK: We also check the nesting depth - if we're the top-level editor, then we want to enable hierarchy // mode fiEditorGUI.PushHierarchyMode(_cycleEdit.Depth == 1 || string.IsNullOrEmpty(label.text) == false); var categories = _metadata.GetCategories(InspectedMemberFilters.InspectableMembers); if (categories.Count > 0) { var selectedCategoryMetadata = metadata.GetMetadata <SelectedCategoryMetadata>(); Rect toolbarRect = region; toolbarRect.height = CategoryToolbarHeight; region.y += CategoryToolbarHeight + fiLateBindings.EditorGUIUtility.standardVerticalSpacing; region.height -= CategoryToolbarHeight + fiLateBindings.EditorGUIUtility.standardVerticalSpacing; int index = selectedCategoryMetadata.SelectedCategoryIndex; selectedCategoryMetadata.SelectedCategoryIndex = GUI.Toolbar(toolbarRect, index, categories.Keys.ToArray()); foreach (var member in categories.Values.ElementAt(index)) { EditInspectedMember(ref region, element, member, metadata); } // Make sure we don't prune metadata foreach (var member in _metadata.GetMembers(InspectedMemberFilters.InspectableMembers)) { metadata.Enter(member.Name); } } else { var orderedMembers = _metadata.GetMembers(InspectedMemberFilters.InspectableMembers); for (int i = 0; i < orderedMembers.Count; ++i) { EditInspectedMember(ref region, element, orderedMembers[i], metadata); } } fiEditorGUI.PopHierarchyMode(); return(element); }