/// <inheritdoc /> protected override void DoBuildMembers() { #if DEV_MODE Debug.Log(ToString() + ".DoBuildMembers()"); #endif ParentDrawerUtility.BuildMembers(DrawerProvider, this, memberBuildList, ref members); if (inspector.Preferences.drawScriptReferenceFields || DebugMode) { var monoScript = MonoScript; if (monoScript != null) { DrawerArrayPool.InsertAt(ref members, 0, ScriptReferenceDrawer.Create(MonoScript, this, false), true); } } if (DebugMode && (members.Length == 0 || !(members[0] is DebugModeDisplaySettingsDrawer))) { #if DEV_MODE Debug.Log("InsertAt(0, DebugModeDisplaySettingsDrawer)"); #endif DrawerArrayPool.InsertAt(ref members, 0, SpaceDrawer.Create(7f, this), true); DrawerArrayPool.InsertAt(ref members, 0, DebugModeDisplaySettingsDrawer.Create(this, debugModeDisplaySettings), true); DrawerArrayPool.InsertAt(ref members, 0, SpaceDrawer.Create(7f, this), true); } #if DEV_MODE && PI_ASSERTATIONS Debug.Assert(!members.ContainsNullMembers()); #endif }
/// <summary> /// Populates the members array with member drawers using information provided by the memberBuildList. /// Also should handle resizing the members array to the correct length, when necessary. /// GenerateMemberBuildList should always get called before this. /// </summary> protected void BuildMembers() { #if DEV_MODE && PI_ASSERTATIONS Debug.Assert(memberBuildState == MemberBuildState.BuildListGenerated, ToString() + ".BuildMembers was called but memberBuildState was " + memberBuildState); if (memberBuildList.ContainsNullMembers()) { Debug.LogError(ToString() + " memberBuildList had empty elements: " + StringUtils.ToString(memberBuildList)); } #endif DoBuildMembers(); #if DEV_MODE && PI_ASSERTATIONS if (Members.ContainsNullMembers()) { Debug.LogError("buildState=" + memberBuildState + ", DebugMode=" + DebugMode + ", members:\n" + StringUtils.ToString(members, "\n")); } #endif memberBuildState = MemberBuildState.MembersBuilt; ParentDrawerUtility.SendOnParentAssignedEvents(this); OnAfterMembersBuilt(); }
/// <inheritdoc cref="IDrawer.OnKeyboardInputGiven" /> public override bool OnKeyboardInputGiven(Event inputEvent, KeyConfigs keys) { if (ParentDrawerUtility.HandleKeyboardInput(this, inputEvent, keys)) { return(true); } return(base.OnKeyboardInputGiven(inputEvent, keys)); }
/// <inheritdoc/> protected override void DoGenerateMemberBuildList() { ParentDrawerUtility.GetMemberBuildList(this, MemberHierarchy, ref memberBuildList, false); #if DEV_MODE && PI_ASSERTATIONS Debug.Assert(DrawInSingleRow || members.Length < 5, Msg(ToString(), " built ", Members.Length, " members but DrawInSingleRow was ", DrawInSingleRow, ": ", StringUtils.ToString(members))); #endif }
/// <inheritdoc/> public virtual void UpdateVisibleMembers() { #if DEV_MODE && DEBUG_UPDATE_VISIBLE_MEMBERS Debug.Log(StringUtils.ToColorizedString(ToString(), ".UpdateVisibleMembers with inactive=", inactive)); #endif if (ParentDrawerUtility.UpdateVisibleMembers(this) || assumeVisibleMembersChangedDuringNextUpdateVisibleMembers) { OnVisibleMembersChanged(); OnChildLayoutChanged(); } }
/// <inheritdoc cref="IDrawer.TestVisibleChildrenUntilTrue" /> public override IDrawer TestVisibleChildrenUntilTrue(Func <IDrawer, bool> test) { var result = ParentDrawerUtility.TestVisibleChildrenUntilTrue(test, this); if (result == null) { if (test(this)) { return(this); } } return(result); }
/// <inheritdoc/> public override bool DrawBodySingleRow(Rect position) { var rect1 = position; rect1.width -= addButtonWidth + buttonOffset; var rect2 = rect1; rect2.x += rect1.width + buttonOffset; rect2.width = addButtonWidth; return(ParentDrawerUtility.DrawBodySingleRow(this, rect1, rect2)); }
/// <inheritdoc cref="IDrawer.DetectMouseoverForSelfAndChildren" /> public override bool DetectMouseoverForSelfAndChildren(Vector2 mousePosition) { if (ClickToSelectArea.Contains(mousePosition)) { #if DEV_MODE && DEBUG_MOUSEOVER_DETECTION Debug.Log(StringUtils.ToColorizedString("DetectMouseoverForSubjectAndChildren(", subjethisct, "): ", true, "! (via self)")); #endif return(true); } var memberCoordinateSpaceOffset = bodyLastDrawPosition.position - lastDrawPosition.position; return(ParentDrawerUtility.DetectMouseoverForVisibleMembers(this, mousePosition - memberCoordinateSpaceOffset)); }
/// <inheritdoc/> public override bool DrawBodySingleRow(Rect position) { #if DEV_MODE || PROFILE_POWER_INSPECTOR Profiler.BeginSample("ParentDrawer.DrawBodySingleRow(3)"); #endif var memberPos = position; memberPos.width /= 3f; ParentDrawerUtility.HandleTooltipBeforeControl(Label, memberPos); bool dirty = false; IDrawer[] members; bool draw1, draw2, draw3; ParentDrawerUtility.UpdateMembersToDraw(this, out members, out draw1, out draw2, out draw3); var guiColorWas = GUI.color; GUI.color = Value.ShowFields ? guiColorWas : new Color(1f, 1f, 1f, 0.5f); if (draw1 && members[0].Draw(memberPos)) { dirty = true; } memberPos.x += memberPos.width; GUI.color = Value.ShowProperties ? guiColorWas : new Color(1f, 1f, 1f, 0.5f); if (draw2 && members[1].Draw(memberPos)) { dirty = true; } memberPos.x += memberPos.width; GUI.color = Value.ShowMethods ? guiColorWas : new Color(1f, 1f, 1f, 0.5f); if (draw3 && members[2].Draw(memberPos)) { dirty = true; } GUI.color = guiColorWas; #if DEV_MODE || PROFILE_POWER_INSPECTOR Profiler.EndSample(); #endif return(dirty); }
/// <inheritdoc /> protected override void BuildContextMenu(ref Menu menu, bool extendedMenu) { if (BuildContextMenuItemsStartingFromBaseClass) { base.BuildContextMenu(ref menu, extendedMenu); } ParentDrawerUtility.AddMenuItemsFromContextMenuAttribute(GetValues(), ref menu); if (!BuildContextMenuItemsStartingFromBaseClass) { base.BuildContextMenu(ref menu, extendedMenu); } }
/// <summary> /// Called when drawer were fully folded (closedness was 0) /// and just now started unfolding (closedness is > 0), or when they /// were at least partially unfolded (closedness was > 0) and just became /// fully folded (closedness is 0). /// </summary> /// <param name="unfolded"> True if became partially unfolded, false if became fully folded. </param> private void OnFullClosednessChanged(bool unfolded) { if (inactive) { return; } ParentDrawerUtility.OnMemberVisibilityChanged(this, unfolded); if (memberBuildState == MemberBuildState.MembersBuilt) { UpdateVisibleMembers(); } UpdatePrefixDrawer(); }
/// <inheritdoc /> public override bool DrawBodySingleRow(Rect position) { switch (controls) { case 0: return(ParentDrawerUtility.DrawBodySingleRow(this, nullTogglePosition, objectReferenceFieldPosition)); case 1: return(ParentDrawerUtility.DrawBodySingleRow(this, objectReferenceFieldPosition, methodPopupFieldPosition)); case 2: return(ParentDrawerUtility.DrawBodySingleRow(this, nullTogglePosition, instanceTypePopupFieldPosition, methodPopupFieldPosition)); default: return(false); } }
/// <inheritdoc /> protected override void DoBuildMembers() { #if DEV_MODE Debug.Log(ToString() + ".DoBuildMembers()"); #endif ParentDrawerUtility.BuildMembers(DrawerProvider, this, memberBuildList, ref members); #if UNITY_EDITOR if (Platform.EditorMode && (inspector.Preferences.drawScriptReferenceFields || DebugMode)) { var monoScript = MonoScript; if (monoScript != null) { DrawerArrayPool.InsertAt(ref members, 0, ScriptReferenceDrawer.Create(MonoScript, this, false), true); } } #endif }
/// <inheritdoc /> protected override void DoGenerateMemberBuildList() { if (DebugMode) { if (debugModeDisplaySettings == null) { debugModeDisplaySettings = new DebugModeDisplaySettings() { Static = true }; } #if DEV_MODE Debug.Log("Generating members using DebugModeDisplaySettings " + debugModeDisplaySettings); #endif Type.GetStaticInspectorViewables(ref linkedMemberHierarchy, null, ref memberBuildList, true, FieldVisibility.AllPublic, PropertyVisibility.AllPublic, MethodVisibility.AllPublic, debugModeDisplaySettings); return; } ParentDrawerUtility.GetStaticMemberBuildList(this, linkedMemberHierarchy, ref memberBuildList, FieldVisibility.AllPublic, PropertyVisibility.AllPublic, MethodVisibility.AllPublic); }
/// <inheritdoc cref="IDrawer.Dispose" /> public override void Dispose() { inactive = true; ParentDrawerUtility.OnDisposing(Inspector, this); cachedValuesNeedUpdating = false; #if ENABLE_SPREADING lastUpdateCachedValuesMemberIndex = -1; #endif if (memberBuildState == MemberBuildState.MembersBuilt) { DisposeMembers(); } DrawerArrayPool.Resize(ref members, 0); DrawerArrayPool.Resize(ref visibleMembers, 0); updateCachedValuesFor.Clear(); memberBuildState = MemberBuildState.Unstarted; memberBuildList.Clear(); assumeVisibleMembersChangedDuringNextUpdateVisibleMembers = true; labelLastDrawPosition.y = -100f; labelLastDrawPosition.width = 0f; labelLastDrawPosition.height = 0f; bodyLastDrawPosition.y = -100f; bodyLastDrawPosition.width = 0f; bodyLastDrawPosition.height = 0f; base.Dispose(); }
/// <inheritdoc cref="IDrawer.DetectMouseover" /> public override bool DetectMouseover(Vector2 mousePosition) { if (ClickToSelectArea.Contains(mousePosition)) { #if DEV_MODE && DEBUG_MOUSEOVER_DETECTION Debug.Log(StringUtils.ToColorizedString("DetectMouseover(", this, "): Contains(mousePos): ", true, " with " + visibleMembers.Length + " VisibleMembers...")); #endif if (PrefixResizerMouseovered) { #if DEV_MODE && DEBUG_MOUSEOVER_DETECTION Debug.Log(StringUtils.ToColorizedString("DetectMouseover(", this, "): ", this == unityObject, " because !PrefixResizingEnabledOverControl and PrefixResizerMouseovered")); #endif return(true); } var memberCoordinateSpaceOffset = bodyLastDrawPosition.position - lastDrawPosition.position; if (ParentDrawerUtility.DetectMouseoverForVisibleMembers(this, mousePosition - memberCoordinateSpaceOffset)) { return(false); } #if DEV_MODE && DEBUG_MOUSEOVER_DETECTION Debug.Log(StringUtils.ToColorizedString("DetectMouseover(", this, "): ", true, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")); #endif return(true); } #if DEV_MODE && DEBUG_MOUSEOVER_DETECTION Debug.Log(StringUtils.ToColorizedString("DetectMouseover(", this, "): ", ClickToSelectArea, ".MouseIsOver: ", false)); #endif return(false); }
/// <inheritdoc/> public virtual void SetMembers(IDrawer[] setMembers, bool sendVisibilityChangedEvents = true) { ParentDrawerUtility.SetMembers(this, ref members, setMembers, ref visibleMembers, ref memberBuildState, ref assumeVisibleMembersChangedDuringNextUpdateVisibleMembers, updateCachedValuesFor, sendVisibilityChangedEvents); }
/// <inheritdoc cref="IDrawer.GetNextSelectableDrawerRight" /> public override IDrawer GetNextSelectableDrawerRight(bool moveToNextControlAfterReachingEnd, IDrawer requester) { return(ParentDrawerUtility.GetNextSelectableDrawerRight(this, moveToNextControlAfterReachingEnd, requester, !DrawInSingleRow)); }
/// <param name="mousePosition"></param> /// <inheritdoc cref="IDrawer.DetectMouseover" /> public override bool DetectMouseover(Vector2 mousePosition) { return(ParentDrawerUtility.DetectMouseover(this)); }
/// <param name="mousePosition"></param> /// <inheritdoc cref="IDrawer.DetectMouseoverForSelfAndChildren" /> public override bool DetectMouseoverForSelfAndChildren(Vector2 mousePosition) { return(ParentDrawerUtility.DetectMouseoverForSubjectAndChildren(this, mousePosition)); }
/// <inheritdoc cref="IDrawer.GetNextSelectableDrawerDown" /> public override IDrawer GetNextSelectableDrawerDown(int column, IDrawer requester) { return(ParentDrawerUtility.GetNextSelectableDrawerDown(this, column, requester, !DrawInSingleRow)); }
/// <inheritdoc/> public virtual bool DrawBodyMultiRow(Rect position) { return(ParentDrawerUtility.DrawBodyMultiRow(this, position)); }
/// <inheritdoc/> public virtual void SetUnfolded(bool setUnfolded, bool setChildrenAlso) { ParentDrawerUtility.SetUnfolded(this, setUnfolded, setChildrenAlso); }
/// <inheritdoc/> public int GetMemberRowIndex(IDrawer member) { return(ParentDrawerUtility.GetMemberRowIndex(this, member)); }
/// <inheritdoc/> public override bool DrawBody(Rect position) { return(ParentDrawerUtility.DrawBody(this, position)); }
/// <inheritdoc cref="IDrawer.GetOptimalPrefixLabelWidth" /> public override float GetOptimalPrefixLabelWidth(int indentLevel) { return(ParentDrawerUtility.GetOptimalPrefixLabelWidth(this, indentLevel)); }
/// <inheritdoc cref="IDrawer.OnFilterChanged" /> public override void OnFilterChanged(SearchFilter filter) { ParentDrawerUtility.OnFilterChanged(this, filter, base.OnFilterChanged); }
/// <inheritdoc/> public sealed override bool PassesSearchFilter(SearchFilter filter) { return(ParentDrawerUtility.PassesSearchFilter(this, filter, SelfPassesSearchFilter)); }
/// <inheritdoc/> public void SetVisibleMembers(IDrawer[] newVisibleMembers, bool sendVisibilityChangedEvents = true) { ParentDrawerUtility.SetVisibleMembers(this, ref visibleMembers, newVisibleMembers, updateCachedValuesFor, sendVisibilityChangedEvents, true); }
/// <inheritdoc/> public void SetMembers(IDrawer[] setMembers, IDrawer[] setVisibleMembers, bool sendVisibilityChangedEvents = true) { ParentDrawerUtility.SetMembers(this, ref members, setMembers, ref visibleMembers, setVisibleMembers, ref memberBuildState, updateCachedValuesFor, sendVisibilityChangedEvents); }