protected void InitExpandHierarchy(VisualElement root, VisualElement item) { m_Container = root; m_Container.style.flexDirection = FlexDirection.Row; m_IndentContainer = new VisualElement() { name = BaseTreeView.itemIndentsContainerUssClassName, style = { flexDirection = FlexDirection.Row }, }; m_IndentContainer.AddToClassList(BaseTreeView.itemIndentsContainerUssClassName); m_Container.hierarchy.Add(m_IndentContainer); m_Toggle = new Toggle { name = BaseTreeView.itemToggleUssClassName }; m_Toggle.userData = this; m_Toggle.AddToClassList(Foldout.toggleUssClassName); m_Container.hierarchy.Add(m_Toggle); m_BindableContainer = new VisualElement() { name = BaseTreeView.itemContentContainerUssClassName, style = { flexGrow = 1 }, }; m_BindableContainer.AddToClassList(BaseTreeView.itemContentContainerUssClassName); m_Container.Add(m_BindableContainer); m_BindableContainer.Add(item); }
private VisualElement MakeTreeItem() { var itemContainer = new VisualElement() { name = s_ItemName, style = { flexDirection = FlexDirection.Row } }; itemContainer.AddToClassList(s_ItemName); itemContainer.RegisterCallback <MouseUpEvent>(OnItemMouseUp); var indents = new VisualElement() { name = s_ItemIndentsContainerName, style = { flexDirection = FlexDirection.Row } }; indents.AddToClassList(s_ItemIndentsContainerName); itemContainer.hierarchy.Add(indents); var toggle = new Toggle() { name = s_ItemToggleName }; toggle.AddToClassList(Foldout.toggleUssClassName); toggle.RegisterValueChangedCallback(ToggleExpandedState); itemContainer.hierarchy.Add(toggle); var userContentContainer = new VisualElement() { name = s_ItemContentContainerName, style = { flexGrow = 1 } }; userContentContainer.AddToClassList(s_ItemContentContainerName); itemContainer.Add(userContentContainer); if (m_MakeItem != null) { userContentContainer.Add(m_MakeItem()); } return(itemContainer); }
private VisualElement MakeTreeItem() { VisualElement visualElement = new VisualElement { name = TreeView.s_ItemName, style = { flexDirection = FlexDirection.Row } }; visualElement.AddToClassList(TreeView.s_ItemName); visualElement.RegisterCallback <MouseUpEvent>(new EventCallback <MouseUpEvent>(this.OnItemMouseUp), TrickleDown.NoTrickleDown); VisualElement visualElement2 = new VisualElement { name = TreeView.s_ItemIndentsContainerName, style = { flexDirection = FlexDirection.Row } }; visualElement2.AddToClassList(TreeView.s_ItemIndentsContainerName); visualElement.hierarchy.Add(visualElement2); Toggle toggle = new Toggle { name = TreeView.s_ItemToggleName }; toggle.AddToClassList(Foldout.toggleUssClassName); toggle.RegisterValueChangedCallback(new EventCallback <ChangeEvent <bool> >(this.ToggleExpandedState)); visualElement.hierarchy.Add(toggle); VisualElement visualElement3 = new VisualElement { name = TreeView.s_ItemContentContainerName, style = { flexGrow = 1f } }; visualElement3.AddToClassList(TreeView.s_ItemContentContainerName); visualElement.Add(visualElement3); bool flag = this.m_MakeItem != null; if (flag) { visualElement3.Add(this.m_MakeItem()); } return(visualElement); }
public static void BuildInspectorPropertiesElement(string elementPath, IEditorContainer editor, System.Collections.Generic.HashSet <System.Type> usedComponents, SerializedProperty obj, UnityEngine.UIElements.VisualElement container, bool noFields, System.Action <int, PropertyField> onBuild = null) { obj = obj.Copy(); container.Clear(); var source = obj.Copy(); SerializedProperty iterator = obj; if (iterator.NextVisible(true) == false) { return; } if (iterator.NextVisible(true) == false) { return; } var depth = iterator.depth; var i = 0; var iteratorNext = iterator.Copy(); do { if (string.IsNullOrEmpty(elementPath) == false) { iterator = iteratorNext.FindPropertyRelative(elementPath); } else { iterator = iteratorNext; } if (iterator.propertyType != SerializedPropertyType.ManagedReference) { continue; } var element = new VisualElement(); element.AddToClassList("element"); var itCopy = iterator.Copy(); GetTypeFromManagedReferenceFullTypeName(iterator.managedReferenceFullTypename, out var type); element.AddToClassList(i % 2 == 0 ? "even" : "odd"); element.RegisterCallback <UnityEngine.UIElements.ContextClickEvent, int>((evt, idx) => { var menu = new GenericMenu(); if (usedComponents != null) { menu.AddItem(new GUIContent("Delete"), false, () => { RemoveComponent((DataConfigEditor)editor, usedComponents, source, type, noFields); editor.Save(); BuildInspectorProperties(editor, usedComponents, source, container, noFields); }); menu.AddItem(new GUIContent("Copy JSON"), false, () => { var instance = itCopy.GetValue(); var json = JsonUtility.ToJson(instance, true); EditorGUIUtility.systemCopyBuffer = json; }); } editor.OnComponentMenu(menu, idx); menu.ShowAsContext(); }, i); if (type != null && usedComponents?.Contains(type) == false) { usedComponents?.Add(type); } if (type == null) { var label = new UnityEngine.UIElements.Label("MISSING: " + iterator.managedReferenceFullTypename); element.name = "missing"; label.AddToClassList("inner-element"); label.AddToClassList("missing-label"); element.Add(label); } else if (iterator.hasVisibleChildren == false || noFields == true) { var horizontal = new UnityEngine.UIElements.VisualElement(); horizontal.AddToClassList("inner-element"); horizontal.AddToClassList("no-fields-container"); element.name = type.Name; var toggle = new UnityEngine.UIElements.Toggle(); toggle.AddToClassList("no-fields-toggle"); toggle.SetEnabled(false); toggle.SetValueWithoutNotify(true); horizontal.Add(toggle); var label = new UnityEngine.UIElements.Label(GUILayoutExt.GetStringCamelCaseSpace(type.Name)); label.AddToClassList("no-fields-label"); horizontal.Add(label); element.Add(horizontal); } else { var label = GUILayoutExt.GetStringCamelCaseSpace(type.Name); if (iterator.hasVisibleChildren == true) { var childs = iterator.Copy(); //var height = EditorUtilities.GetPropertyHeight(childs, true, new GUIContent(label)); var cnt = EditorUtilities.GetPropertyChildCount(childs); if (cnt == 1 /*&& height <= 22f*/) { iterator.NextVisible(true); } } var propertyField = new PropertyField(iterator.Copy(), label); propertyField.BindProperty(iterator); onBuild?.Invoke(i, propertyField); propertyField.AddToClassList("property-field"); propertyField.AddToClassList("inner-element"); element.name = type.Name; element.Add(propertyField); } if (type != null) { var helps = type.GetCustomAttributes(typeof(ComponentHelpAttribute), false); if (helps.Length > 0) { var label = new UnityEngine.UIElements.Label(((ComponentHelpAttribute)helps[0]).comment); label.AddToClassList("comment"); element.Add(label); } if (typeof(IComponentStatic).IsAssignableFrom(type) == true) { var label = new UnityEngine.UIElements.Label("Static"); label.AddToClassList("static-component"); element.AddToClassList("has-static-component"); element.Add(label); } if (typeof(IComponentShared).IsAssignableFrom(type) == true) { var label = new UnityEngine.UIElements.Label("Shared"); label.AddToClassList("shared-component"); element.AddToClassList("has-shared-component"); element.Add(label); } } container.Add(element); ++i; } while (iteratorNext.NextVisible(false) == true && depth <= iteratorNext.depth); }