public static FieldStatusIndicator GetFieldStatusIndicator(this VisualElement field) { FieldStatusIndicator statusIndicator = null; if (field.HasProperty(FieldStatusIndicator.s_FieldStatusIndicatorVEPropertyName)) { statusIndicator = field.GetProperty(FieldStatusIndicator.s_FieldStatusIndicatorVEPropertyName) as FieldStatusIndicator; } if (statusIndicator == null) { var row = field.GetProperty(BuilderConstants.InspectorLinkedStyleRowVEPropertyName) as BuilderStyleRow; if (row == null) { return(null); } // If the field has a name then look for a FieldStatusIndicator in the same containing row that has // targetFieldName matching the field's name. if (!string.IsNullOrEmpty(field.name)) { statusIndicator = row.Query <FieldStatusIndicator>().Where((b) => b.targetFieldName == field.name); } // If a status indicator matching the field's name could not be found then pick the first FieldMenuButton in the row. if (statusIndicator == null) { statusIndicator = row.Q <FieldStatusIndicator>(); } // If no status indicator could not be found in the row then create a new one and insert it to // the row right after the Override indicators container. if (statusIndicator == null) { statusIndicator = new FieldStatusIndicator(); row.hierarchy.Insert(1, statusIndicator); } statusIndicator.targetField = field; } return(statusIndicator); }
public BuilderInspectorHeader(BuilderInspector inspector) { m_Inspector = inspector; m_Selection = inspector.selection; m_Header = m_Inspector.Q <VisualElement>("header-container"); m_StatusIndicator = m_Header.Q <FieldStatusIndicator>("header-field-status-indicator"); m_StatusIndicator.populateMenuItems = (menu) => { BuildNameFieldContextualMenu(menu, m_TextField); }; m_InnerHeader = m_Inspector.Q <VisualElement>("header-container-minor"); m_Icon = m_Inspector.Q <VisualElement>("header-icon"); m_Pill = m_Inspector.Q <Label>("header-selected-pill"); m_Pill.AddToClassList("unity-builder-tag-pill"); m_TextField = m_Inspector.Q <TextField>("header-selected-text-field"); m_TextField.isDelayed = true; m_TextField.tooltip = "name"; m_TextField.bindingPath = "name"; m_EditorWarningHelpBox = m_Inspector.Q <UnityEngine.UIElements.HelpBox>("header-editor-warning-help-box"); m_EditorWarningHelpBox.text = BuilderConstants.HeaderSectionHelpBoxMessage; m_ErrorIcon = m_Inspector.Q <VisualElement>("header-error-icon"); // Warning must be hidden at first m_ErrorIcon.style.backgroundImage = EditorGUIUtility.LoadIcon("console.erroricon"); AdjustBottomPadding(false); // Store callbacks to reduce delegate allocations m_ElementNameChangeCallback = new EventCallback <ChangeEvent <string> >(OnNameAttributeChange); m_SelectorNameChangeCallback = new EventCallback <ChangeEvent <string> >(OnStyleSelectorNameChange); m_SelectorEnterKeyDownCallback = new EventCallback <KeyDownEvent>(OnEnterStyleSelectorNameChange); m_TextField.RegisterValueChangedCallback(m_ElementNameChangeCallback); m_RightClickManipulator = new ContextualMenuManipulator(BuildNameFieldContextualMenu); }