void OnEnable() { rootVisualElement.StyleBorderWidth(1); Color c = new Color32(58, 121, 187, 255); rootVisualElement.StyleBorderColor(c); // EditorHelpBox helpBox = new EditorHelpBox("This feature currently in preview state", MessageType.Info); // rootVisualElement.Add(helpBox); hierarchyLocalData = HierarchyEditor.Instance.GetHierarchyLocalData(Selection.activeGameObject.scene); gameObject = Selection.activeGameObject; Selection.activeGameObject = null; CustomRowItem customRowItem = null; if (hierarchyLocalData.TryGetCustomRowData(gameObject, out customRowItem) == false) { customRowItem = hierarchyLocalData.CreateCustomRowItemFor(gameObject); } DlfU.UIElements.Toggle useBackground = new DlfU.UIElements.Toggle("Use Background", customRowItem.useBackground, Justify.FlexStart, (evt) => { customRowItem.useBackground = evt.newValue; EditorApplication.RepaintHierarchyWindow(); }); rootVisualElement.Add(useBackground); EnumField backgroundStyle = new EnumField(customRowItem.backgroundStyle); backgroundStyle.label = "Background Style"; backgroundStyle.RegisterValueChangedCallback((evt) => { customRowItem.backgroundStyle = (CustomRowItem.BackgroundStyle)evt.newValue; EditorApplication.RepaintHierarchyWindow(); }); rootVisualElement.Add(backgroundStyle); EnumField backgroundMode = new EnumField(customRowItem.backgroundMode); backgroundMode.label = "Background Mode"; backgroundMode.RegisterValueChangedCallback((evt) => { customRowItem.backgroundMode = (CustomRowItem.BackgroundMode)evt.newValue; EditorApplication.RepaintHierarchyWindow(); }); rootVisualElement.Add(backgroundMode); ColorField backgroundColor = new ColorField("Background Color"); backgroundColor.value = customRowItem.backgroundColor; backgroundColor.RegisterValueChangedCallback((evt) => { customRowItem.backgroundColor = evt.newValue; EditorApplication.RepaintHierarchyWindow(); }); rootVisualElement.Add(backgroundColor); }
static SettingsProvider UIElementSettingsProvider() { var provider = new SettingsProvider("Project/Hierarchy", SettingsScope.Project) { label = "Hierarchy", activateHandler = (searchContext, rootElement) => { Editor editor = Editor.CreateEditor(GetAssets()); var settings = editor.target as HierarchySettings; float TITLE_MARGIN_TOP = 10; float TITLE_MARGIN_BOTTOM = 4; float CONTENT_MARGIN_LEFT = 10; Label hierarchyTitle = new Label("Hierarchy"); hierarchyTitle.StyleFontSize(20); hierarchyTitle.StyleMargin(10, 0, 2, 2); hierarchyTitle.StyleFont(FontStyle.Bold); rootElement.Add(hierarchyTitle); ScrollView scrollView = new ScrollView(); rootElement.Add(scrollView); VerticalLayout verticalLayout = new VerticalLayout(); verticalLayout.StylePadding(8, 8, 8, 8); scrollView.Add(verticalLayout); Label Object = new Label("Object"); Object.StyleFont(FontStyle.Bold); Object.StyleMargin(0, 0, TITLE_MARGIN_TOP, TITLE_MARGIN_BOTTOM); verticalLayout.Add(Object); DlfU.UIElements.Toggle displayObjectIcon = new DlfU.UIElements.Toggle("Display Object Icon", settings.displayObjectIcon, Justify.FlexStart, (evt) => { settings.displayObjectIcon = evt.newValue; settings.OnSettingsChanged(nameof(settings.displayObjectIcon)); }); displayObjectIcon.StyleMarginLeft(CONTENT_MARGIN_LEFT); verticalLayout.Add(displayObjectIcon); DlfU.UIElements.Toggle displayCustomObjectIcon = new DlfU.UIElements.Toggle("Display Custom Icon", settings.displayCustomObjectIcon, Justify.FlexStart, (evt) => { settings.displayCustomObjectIcon = evt.newValue; settings.OnSettingsChanged(nameof(settings.displayCustomObjectIcon)); }); displayCustomObjectIcon.StyleMarginLeft(CONTENT_MARGIN_LEFT * 2); verticalLayout.Add(displayCustomObjectIcon); displayCustomObjectIcon.StyleDisplay(settings.displayObjectIcon); displayObjectIcon.RegisterValueChangedCallback((evt) => { displayCustomObjectIcon.StyleDisplay(evt.newValue); }); DlfU.UIElements.Toggle displayDirtyTrack = new DlfU.UIElements.Toggle("Display Dirty Track [EXPERIMENTAL]", settings.displayDirtyTrack, Justify.FlexStart, (evt) => { settings.displayDirtyTrack = evt.newValue; settings.OnSettingsChanged(nameof(settings.displayDirtyTrack)); }); displayDirtyTrack.StyleMarginLeft(CONTENT_MARGIN_LEFT); verticalLayout.Add(displayDirtyTrack); Label View = new Label("View"); View.StyleFont(FontStyle.Bold); View.StyleMargin(0, 0, TITLE_MARGIN_TOP, TITLE_MARGIN_BOTTOM); verticalLayout.Add(View); DlfU.UIElements.Toggle displayRowBackground = new DlfU.UIElements.Toggle("Display RowBackground", settings.displayRowBackground, Justify.FlexStart, (evt) => { settings.displayRowBackground = evt.newValue; settings.OnSettingsChanged(nameof(settings.displayRowBackground)); }); displayRowBackground.StyleMarginLeft(CONTENT_MARGIN_LEFT); verticalLayout.Add(displayRowBackground); DlfU.UIElements.Toggle displayTreeView = new DlfU.UIElements.Toggle("Display TreeView", settings.displayTreeView, Justify.FlexStart, (evt) => { settings.displayTreeView = evt.newValue; settings.OnSettingsChanged(nameof(settings.displayTreeView)); }); displayTreeView.StyleMarginLeft(CONTENT_MARGIN_LEFT); verticalLayout.Add(displayTreeView); DlfU.UIElements.Toggle displayGrid = new DlfU.UIElements.Toggle("Display Grid", settings.displayGrid, Justify.FlexStart, (evt) => { settings.displayGrid = evt.newValue; settings.OnSettingsChanged(nameof(settings.displayGrid)); }); displayGrid.StyleMarginLeft(CONTENT_MARGIN_LEFT); verticalLayout.Add(displayGrid); Label Components = new Label("Components"); Components.StyleFont(FontStyle.Bold); Components.StyleMargin(0, 0, TITLE_MARGIN_TOP, TITLE_MARGIN_BOTTOM); verticalLayout.Add(Components); DlfU.UIElements.Toggle displayComponents = new DlfU.UIElements.Toggle("Display Components Icon", settings.displayComponents, Justify.FlexStart, (evt) => { settings.displayComponents = evt.newValue; settings.OnSettingsChanged(nameof(settings.displayComponents)); }); displayComponents.StyleMarginLeft(CONTENT_MARGIN_LEFT); verticalLayout.Add(displayComponents); EnumField componentAlignment = new EnumField(settings.componentAlignment); componentAlignment.label = "Component Alignment"; componentAlignment.RegisterValueChangedCallback((evt) => { settings.componentAlignment = (ElementAlignment)evt.newValue; settings.OnSettingsChanged(nameof(settings.componentAlignment)); }); componentAlignment.StyleMarginLeft(CONTENT_MARGIN_LEFT); verticalLayout.Add(componentAlignment); EnumField componentDisplayMode = new EnumField(settings.componentDisplayMode); componentDisplayMode.label = "Component Display Mode"; componentDisplayMode.StyleMarginLeft(CONTENT_MARGIN_LEFT); verticalLayout.Add(componentDisplayMode); TextField componentListInput = new TextField(); componentListInput.value = string.Join(" ", settings.components); componentListInput.StyleMarginLeft(CONTENT_MARGIN_LEFT); verticalLayout.Add(componentListInput); componentListInput.RegisterValueChangedCallback((evt) => { settings.components = evt.newValue.Split(' '); settings.OnSettingsChanged(nameof(settings.components)); }); componentDisplayMode.RegisterValueChangedCallback((evt) => { settings.componentDisplayMode = (ComponentDisplayMode)evt.newValue; switch (settings.componentDisplayMode) { case ComponentDisplayMode.Below: componentListInput.StyleDisplay(true); break; case ComponentDisplayMode.Other: componentListInput.StyleDisplay(true); break; case ComponentDisplayMode.All: componentListInput.StyleDisplay(false); break; case ComponentDisplayMode.ScriptOnly: componentListInput.StyleDisplay(false); break; } settings.OnSettingsChanged(nameof(settings.componentDisplayMode)); }); var componentSizeEnum = ComponentSize.Normal; switch (settings.componentSize) { case 12: componentSizeEnum = ComponentSize.Small; break; case 14: componentSizeEnum = ComponentSize.Normal; break; case 16: componentSizeEnum = ComponentSize.Large; break; } EnumField componentSize = new EnumField(componentSizeEnum); componentSize.label = "Component Size"; componentSize.StyleMarginLeft(CONTENT_MARGIN_LEFT); componentSize.RegisterValueChangedCallback((evt) => { switch (evt.newValue) { case ComponentSize.Small: settings.componentSize = 12; break; case ComponentSize.Normal: settings.componentSize = 14; break; case ComponentSize.Large: settings.componentSize = 16; break; } settings.OnSettingsChanged(nameof(settings.componentSize)); }); verticalLayout.Add(componentSize); IntegerField componentSpacing = new IntegerField(); componentSpacing.label = "Component Spacing"; componentSpacing.value = settings.componentSpacing; componentSpacing.StyleMarginLeft(CONTENT_MARGIN_LEFT); componentSpacing.RegisterValueChangedCallback((evt) => { settings.componentSpacing = evt.newValue; settings.OnSettingsChanged(nameof(settings.componentSpacing)); }); verticalLayout.Add(componentSpacing); Label TagAndLayer = new Label("Tag And Layer"); TagAndLayer.StyleFont(FontStyle.Bold); TagAndLayer.StyleMargin(0, 0, TITLE_MARGIN_TOP, TITLE_MARGIN_BOTTOM); verticalLayout.Add(TagAndLayer); DlfU.UIElements.Toggle displayTag = new DlfU.UIElements.Toggle("Display Tag", settings.displayTag, Justify.FlexStart, (evt) => { settings.displayTag = evt.newValue; settings.OnSettingsChanged(nameof(settings.displayTag)); }); displayTag.StyleMarginLeft(CONTENT_MARGIN_LEFT); verticalLayout.Add(displayTag); DlfU.UIElements.Toggle applyTagTargetAndChild = new DlfU.UIElements.Toggle("Apply Child Tag When Parent Tag Change", settings.applyTagTargetAndChild, Justify.FlexStart, (evt) => { settings.applyTagTargetAndChild = evt.newValue; settings.OnSettingsChanged(nameof(settings.applyTagTargetAndChild)); }); applyTagTargetAndChild.StyleMarginLeft(CONTENT_MARGIN_LEFT); verticalLayout.Add(applyTagTargetAndChild); EnumField tagAlignment = new EnumField(settings.tagAlignment); tagAlignment.label = "Tag Alignment"; tagAlignment.RegisterValueChangedCallback((evt) => { settings.tagAlignment = (ElementAlignment)evt.newValue; settings.OnSettingsChanged(nameof(settings.tagAlignment)); }); tagAlignment.StyleMarginLeft(CONTENT_MARGIN_LEFT); verticalLayout.Add(tagAlignment); DlfU.UIElements.Toggle displayLayer = new DlfU.UIElements.Toggle("Display Layer", settings.displayLayer, Justify.FlexStart, (evt) => { settings.displayLayer = evt.newValue; settings.OnSettingsChanged(nameof(settings.displayLayer)); }); displayLayer.StyleMarginLeft(CONTENT_MARGIN_LEFT); verticalLayout.Add(displayLayer); DlfU.UIElements.Toggle applyLayerTargetAndChild = new DlfU.UIElements.Toggle("Apply Child Layer When Parent Layer Change", settings.applyLayerTargetAndChild, Justify.FlexStart, (evt) => { settings.applyLayerTargetAndChild = evt.newValue; settings.OnSettingsChanged(nameof(settings.applyLayerTargetAndChild)); }); applyLayerTargetAndChild.StyleMarginLeft(CONTENT_MARGIN_LEFT); verticalLayout.Add(applyLayerTargetAndChild); EnumField layerAlignment = new EnumField(settings.layerAlignment); layerAlignment.label = "Layer Alignment"; layerAlignment.RegisterValueChangedCallback((evt) => { settings.layerAlignment = (ElementAlignment)evt.newValue; settings.OnSettingsChanged(nameof(settings.layerAlignment)); }); layerAlignment.StyleMarginLeft(CONTENT_MARGIN_LEFT); verticalLayout.Add(layerAlignment); Label advanced = new Label("Advanced"); advanced.StyleFont(FontStyle.Bold); advanced.StyleMargin(0, 0, TITLE_MARGIN_TOP, TITLE_MARGIN_BOTTOM); verticalLayout.Add(advanced); DlfU.UIElements.Toggle onlyDisplayWhileMouseHovering = new DlfU.UIElements.Toggle("Only Display While Mouse Hovering", settings.onlyDisplayWhileMouseEnter, Justify.FlexStart, (evt) => { settings.onlyDisplayWhileMouseEnter = evt.newValue; settings.OnSettingsChanged(nameof(settings.onlyDisplayWhileMouseEnter)); }); onlyDisplayWhileMouseHovering.StyleMarginLeft(CONTENT_MARGIN_LEFT); verticalLayout.Add(onlyDisplayWhileMouseHovering); EnumFlagsField contentMaskEnumFlags = new EnumFlagsField(settings.contentDisplay); contentMaskEnumFlags.StyleDisplay(onlyDisplayWhileMouseHovering.value); contentMaskEnumFlags.label = "Content Mask"; onlyDisplayWhileMouseHovering.RegisterValueChangedCallback((evt) => { contentMaskEnumFlags.StyleDisplay(evt.newValue); }); contentMaskEnumFlags.RegisterValueChangedCallback((evt) => { settings.contentDisplay = (ContentDisplay)evt.newValue; settings.OnSettingsChanged(nameof(settings.contentDisplay)); }); verticalLayout.Add(contentMaskEnumFlags); Label Theme = new Label("Theme"); Theme.StyleFont(FontStyle.Bold); Theme.StyleMargin(0, 0, TITLE_MARGIN_TOP, TITLE_MARGIN_BOTTOM); verticalLayout.Add(Theme); if (EditorApplication.isPlayingOrWillChangePlaymode) { EditorHelpBox themeWarningPlaymode = new EditorHelpBox("This setting only available on edit mode.", MessageType.Info); verticalLayout.Add(themeWarningPlaymode); } else { EditorHelpBox selectionColorHelpBox = new EditorHelpBox("Theme selection color require editor assembly recompile to take affect.\nBy selecting any script, right click -> Reimport. it will force the editor to recompile.", MessageType.Info); selectionColorHelpBox.StyleDisplay(false); verticalLayout.Add(selectionColorHelpBox); ColorField colorRowEven = new ColorField("Row Even"); colorRowEven.value = settings.usedTheme.colorRowEven; colorRowEven.StyleMarginLeft(CONTENT_MARGIN_LEFT); colorRowEven.RegisterValueChangedCallback((evt) => { if (EditorGUIUtility.isProSkin) { settings.professionalTheme.colorRowEven = evt.newValue; } else { settings.personalTheme.colorRowEven = evt.newValue; } settings.OnSettingsChanged(); }); verticalLayout.Add(colorRowEven); ColorField colorRowOdd = new ColorField("Row Odd"); colorRowOdd.value = settings.usedTheme.colorRowOdd; colorRowOdd.StyleMarginLeft(CONTENT_MARGIN_LEFT); colorRowOdd.RegisterValueChangedCallback((evt) => { if (EditorGUIUtility.isProSkin) { settings.professionalTheme.colorRowOdd = evt.newValue; } else { settings.personalTheme.colorRowOdd = evt.newValue; } settings.OnSettingsChanged(); }); verticalLayout.Add(colorRowOdd); ColorField colorGrid = new ColorField("Grid Color"); colorGrid.value = settings.usedTheme.colorGrid; colorGrid.StyleMarginLeft(CONTENT_MARGIN_LEFT); colorGrid.RegisterValueChangedCallback((evt) => { if (EditorGUIUtility.isProSkin) { settings.professionalTheme.colorGrid = evt.newValue; } else { settings.personalTheme.colorGrid = evt.newValue; } settings.OnSettingsChanged(); }); verticalLayout.Add(colorGrid); ColorField colorTreeView = new ColorField("TreeView"); colorTreeView.value = settings.usedTheme.colorTreeView; colorTreeView.StyleMarginLeft(CONTENT_MARGIN_LEFT); colorTreeView.RegisterValueChangedCallback((evt) => { if (EditorGUIUtility.isProSkin) { settings.professionalTheme.colorTreeView = evt.newValue; } else { settings.personalTheme.colorTreeView = evt.newValue; } settings.OnSettingsChanged(); }); verticalLayout.Add(colorTreeView); ColorField colorLockIcon = new ColorField("Lock Icon"); colorLockIcon.value = settings.usedTheme.colorLockIcon; colorLockIcon.StyleMarginLeft(CONTENT_MARGIN_LEFT); colorLockIcon.RegisterValueChangedCallback((evt) => { if (EditorGUIUtility.isProSkin) { settings.professionalTheme.colorLockIcon = evt.newValue; } else { settings.personalTheme.colorLockIcon = evt.newValue; } settings.OnSettingsChanged(); }); verticalLayout.Add(colorLockIcon); ColorField tagColor = new ColorField("Tag Text"); tagColor.value = settings.usedTheme.tagColor; tagColor.StyleMarginLeft(CONTENT_MARGIN_LEFT); tagColor.RegisterValueChangedCallback((evt) => { if (EditorGUIUtility.isProSkin) { settings.professionalTheme.tagColor = evt.newValue; } else { settings.personalTheme.tagColor = evt.newValue; } settings.OnSettingsChanged(); }); verticalLayout.Add(tagColor); ColorField layerColor = new ColorField("Layer Text"); layerColor.value = settings.usedTheme.layerColor; layerColor.StyleMarginLeft(CONTENT_MARGIN_LEFT); layerColor.RegisterValueChangedCallback((evt) => { if (EditorGUIUtility.isProSkin) { settings.professionalTheme.layerColor = evt.newValue; } else { settings.personalTheme.layerColor = evt.newValue; } settings.OnSettingsChanged(); }); verticalLayout.Add(layerColor); ColorField colorHeaderTitle = new ColorField("Header Title"); colorHeaderTitle.value = settings.usedTheme.colorHeaderTitle; colorHeaderTitle.StyleMarginLeft(CONTENT_MARGIN_LEFT); colorHeaderTitle.RegisterValueChangedCallback((evt) => { if (EditorGUIUtility.isProSkin) { settings.professionalTheme.colorHeaderTitle = evt.newValue; } else { settings.personalTheme.colorHeaderTitle = evt.newValue; } settings.OnSettingsChanged(); }); verticalLayout.Add(colorHeaderTitle); ColorField colorHeaderBackground = new ColorField("Header Background"); colorHeaderBackground.value = settings.usedTheme.colorHeaderBackground; colorHeaderBackground.StyleMarginLeft(CONTENT_MARGIN_LEFT); colorHeaderBackground.RegisterValueChangedCallback((evt) => { if (EditorGUIUtility.isProSkin) { settings.professionalTheme.colorHeaderBackground = evt.newValue; } else { settings.personalTheme.colorHeaderBackground = evt.newValue; } settings.OnSettingsChanged(); }); verticalLayout.Add(colorHeaderBackground); ColorField comSelBGColor = new ColorField("Component Selection"); comSelBGColor.value = settings.usedTheme.comSelBGColor; comSelBGColor.StyleMarginLeft(CONTENT_MARGIN_LEFT); comSelBGColor.RegisterValueChangedCallback((evt) => { if (EditorGUIUtility.isProSkin) { settings.professionalTheme.comSelBGColor = evt.newValue; } else { settings.personalTheme.comSelBGColor = evt.newValue; } settings.OnSettingsChanged(); }); verticalLayout.Add(comSelBGColor); ColorField selectionColor = new ColorField("Selection"); selectionColor.value = settings.usedTheme.selectionColor; selectionColor.StyleMarginLeft(CONTENT_MARGIN_LEFT); selectionColor.RegisterValueChangedCallback((evt) => { if (EditorGUIUtility.isProSkin) { settings.professionalTheme.selectionColor = evt.newValue; } else { settings.personalTheme.selectionColor = evt.newValue; } selectionColorHelpBox.StyleDisplay(true); settings.OnSettingsChanged(); }); verticalLayout.Add(selectionColor); } }, keywords = new HashSet <string>(new[] { "Hierarchy" }) }; return(provider); }