Exemplo n.º 1
0
        /// <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);
        }