11using UnityEngine ;
22using UnityEditor ;
33using System ;
4+ using UnityObject = UnityEngine . Object ;
45
56namespace JLChnToZ . EditorExtensions . UInspectorPlus {
67 internal class InspectorChildWindow : EditorWindow {
@@ -14,6 +15,7 @@ internal class InspectorChildWindow: EditorWindow {
1415 private bool showPrivate ;
1516 private bool showObsolete ;
1617 private bool showMethods ;
18+ private Rect menuButtonRect ;
1719
1820 public static void Open ( object target , bool showProps , bool showPrivate , bool showObsolete , bool showMethods , bool updateProps , MethodPropertyDrawer parent ) =>
1921 CreateInstance < InspectorChildWindow > ( ) . InternalOpen ( target , target . GetType ( ) , showProps , showPrivate , showObsolete , showMethods , updateProps , parent ) ;
@@ -25,14 +27,14 @@ private void InternalOpen(object target, Type targetType, bool showProps, bool s
2527 titleContent = new GUIContent ( $ "{ target ?? targetType } - Inspector+") ;
2628 if ( target == null && targetType . ContainsGenericParameters ) {
2729 resolver = new TypeResolverGUI ( targetType ) ;
28- this . showProps = showProps ;
29- this . showPrivate = showPrivate ;
30- this . showObsolete = showObsolete ;
31- this . showMethods = showMethods ;
3230 } else {
3331 drawer = InspectorDrawer . GetDrawer ( target , targetType , true , showProps , showPrivate , showObsolete , showMethods ) ;
3432 drawer . OnRequireRedraw += Repaint ;
3533 }
34+ this . showProps = showProps ;
35+ this . showPrivate = showPrivate ;
36+ this . showObsolete = showObsolete ;
37+ this . showMethods = showMethods ;
3638 this . parent = parent ;
3739 this . updateProps = updateProps ;
3840 ShowUtility ( ) ;
@@ -58,10 +60,28 @@ private void OnGUI() {
5860 return ;
5961 }
6062 GUILayout . BeginHorizontal ( EditorStyles . toolbar ) ;
61- updateProps = GUILayout . Toggle ( updateProps , "Update Props" , EditorStyles . toolbarButton ) ;
62- GUILayout . Space ( 8 ) ;
6363 drawer . searchText = Helper . ToolbarSearchField ( drawer . searchText ?? string . Empty ) ;
6464 GUILayout . FlexibleSpace ( ) ;
65+ if ( drawer . target is UnityObject uObject ) {
66+ if ( GUILayout . Button ( "Ping" , EditorStyles . toolbarButton , GUILayout . ExpandWidth ( false ) ) )
67+ EditorGUIUtility . PingObject ( uObject ) ;
68+ if ( GUILayout . Button ( "Select" , EditorStyles . toolbarButton , GUILayout . ExpandWidth ( false ) ) )
69+ Selection . activeObject = uObject ;
70+ if ( GUILayout . Button ( EditorGUIUtility . IconContent ( "TreeEditor.Trash" , "Destroy" ) ,
71+ EditorStyles . toolbarButton , GUILayout . ExpandWidth ( false ) ) && EditorUtility . DisplayDialog (
72+ "Destroy object" ,
73+ $ "Destroy { uObject . GetType ( ) } { uObject . name } (Instance ID: { uObject . GetInstanceID ( ) } )?",
74+ "Yes" , "No"
75+ ) ) {
76+ DestroyImmediate ( uObject ) ;
77+ Close ( ) ;
78+ }
79+ GUILayout . Space ( 8 ) ;
80+ }
81+ if ( GUILayout . Button ( EditorGUIUtility . IconContent ( "_Menu" , "Menu" ) , EditorStyles . toolbarButton , GUILayout . ExpandWidth ( false ) ) )
82+ OpenMenu ( menuButtonRect ) ;
83+ if ( Event . current . type == EventType . Repaint )
84+ menuButtonRect = GUILayoutUtility . GetLastRect ( ) ;
6585 GUILayout . EndHorizontal ( ) ;
6686 scrollPos = GUILayout . BeginScrollView ( scrollPos ) ;
6787 EditorGUILayout . Space ( ) ;
@@ -78,6 +98,34 @@ private void OnGUI() {
7898 GUILayout . EndScrollView ( ) ;
7999 }
80100
101+ private void OpenMenu ( Rect position ) {
102+ var menu = new GenericMenu ( ) ;
103+ menu . AddItem ( new GUIContent ( "Update Properties" ) , updateProps , ( ) => {
104+ updateProps = ! updateProps ;
105+ } ) ;
106+ menu . AddItem ( new GUIContent ( "Show Properties" ) , showProps , ( ) => {
107+ showProps = ! showProps ;
108+ RefreshDrawer ( ) ;
109+ EditorPrefs . SetBool ( "inspectorplus_props" , showProps ) ;
110+ } ) ;
111+ menu . AddItem ( new GUIContent ( "Show Methods" ) , showMethods , ( ) => {
112+ showMethods = ! showMethods ;
113+ RefreshDrawer ( ) ;
114+ EditorPrefs . SetBool ( "inspectorplus_methods" , showMethods ) ;
115+ } ) ;
116+ menu . AddItem ( new GUIContent ( "Show Private Members" ) , showPrivate , ( ) => {
117+ showPrivate = ! showPrivate ;
118+ RefreshDrawer ( ) ;
119+ EditorPrefs . SetBool ( "inspectorplus_private" , showPrivate ) ;
120+ } ) ;
121+ menu . AddItem ( new GUIContent ( "Show Obsolete Members" ) , showObsolete , ( ) => {
122+ showObsolete = ! showObsolete ;
123+ RefreshDrawer ( ) ;
124+ EditorPrefs . SetBool ( "inspectorplus_obsolete" , showObsolete ) ;
125+ } ) ;
126+ menu . DropDown ( position ) ;
127+ }
128+
81129 private void OnDestroy ( ) => drawer ? . Dispose ( ) ;
82130
83131 private void OnInspectorUpdate ( ) {
@@ -86,6 +134,16 @@ private void OnInspectorUpdate() {
86134 UpdateValues ( ) ;
87135 }
88136
137+ private void RefreshDrawer ( ) {
138+ if ( drawer == null ) return ;
139+ var target = drawer . target ;
140+ if ( target . IsInvalid ( ) ) return ;
141+ drawer . Dispose ( ) ;
142+ drawer = InspectorDrawer . GetDrawer ( target , target . GetType ( ) , true , showProps , showPrivate , showObsolete , showMethods ) ;
143+ drawer . OnRequireRedraw += Repaint ;
144+ UpdateValues ( ) ;
145+ }
146+
89147 private void UpdateValues ( ) {
90148 if ( drawer == null ) {
91149 if ( resolver == null ) Close ( ) ;
0 commit comments