private static InspectorPreferences GetDefaultPreferencesEditorMode()
        {
            var guids = AssetDatabase.FindAssets("t:InspectorPreferences");
            int found = guids.Length;

            if (found > 0)
            {
                string path;
                for (int n = found - 1; n >= 0; n--)
                {
                    path = AssetDatabase.GUIDToAssetPath(guids[n]);
                    if (path.IndexOf("editor", StringComparison.OrdinalIgnoreCase) != -1)
                    {
                        fallbackPreferences = AssetDatabase.LoadAssetAtPath <InspectorPreferences>(path);
                        if (fallbackPreferences != null)
                        {
                                                        #if DEV_MODE && DEBUG_GET
                            Debug.Log("GetDefaultPreferencesEditorMode returning asset @ " + path + ": " + StringUtils.TypeToString(fallbackPreferences));
                                                        #endif

                            if (!fallbackPreferences.setupDone)
                            {
                                if (Event.current != null)
                                {
                                                                        #if DEV_MODE && DEBUG_GET
                                    Debug.Log("Calling fallbackPreferences.Setup()");
                                                                        #endif
                                    fallbackPreferences.Setup();
                                }
                                                                #if DEV_MODE
                                else
                                {
                                    Debug.LogWarning("Could not run InspectorPreferences.Setup because Event.current was null!");
                                }
                                                                #endif
                            }

                            return(fallbackPreferences);
                        }
                    }
                }
            }
                        #if DEV_MODE
            else
            {
                Debug.LogWarning("GetDefaultPreferencesEditorMode found 0 results with AssetDatabase.FindAssets(\"t:InspectorPreferences\")");
            }
                        #endif

            return(null);
        }
        /// <returns> True if should stop receiving OnGUIEvents. </returns>
        private static bool OnGUIStatic()
        {
            if (preferences == null)
            {
                                #if UNITY_EDITOR
                if (EditorApplication.isCompiling)
                {
                                        #if DEV_MODE
                    Debug.Log("OnGUIEventHelper - waiting before fetching preferences asset because still compiling scripts...");
                                        #endif
                    return(false);
                }

                if (EditorApplication.isUpdating)
                {
                                        #if DEV_MODE
                    Debug.Log("OnGUIEventHelper - waiting before fetching preferences asset because still updating asset database...");
                                        #endif
                    return(false);
                }
                                #endif

                try
                {
                    preferences = InspectorUtility.Preferences;
                }
                                #if DEV_MODE
                catch (NullReferenceException e)
                {
                    Debug.LogWarning("OnGUIEventHelper.OnGUI failed to fetch preferences asset. " + e);
                                #else
                catch (NullReferenceException)
                {
                                #endif
                    return(false);
                }

                if (preferences == null)
                {
                                        #if DEV_MODE
                    Debug.LogWarning("OnGUIEventHelper.OnGUI failed to find preferences asset.");
                                        #endif
                    return(false);
                }
            }

            preferences.Setup();

                        #if DEV_MODE && DEBUG_IS_STILL_NEEDED
            Debug.Log(StringUtils.ToColorizedString("EnsureOnGUICallbacks calling BeginOnGUI with isStillNeeded: " + isStillNeeded.Count + ", Event: ", Event.current));
                        #endif

            DrawGUI.BeginOnGUI(preferences, true);

            if (Event.current.type == EventType.Layout)
            {
                InspectorManager.Instance().OnLayout();

                for (int n = isStillNeeded.Count - 1; n >= 0; n--)
                {
                    if (isStillNeeded[n]())
                    {
                        return(false);
                    }
                }
                                #if DEV_MODE && DEBUG_ENABLED
                Debug.Log("EnsureOnGUICallbacks closing because all " + isStillNeeded.Count + " isStillNeeded returned false");
                                #endif

                return(true);
            }

            return(false);
        }
        public static InspectorPreferences GetDefaultPreferences()
        {
            if (fallbackPreferences != null)
            {
                return(fallbackPreferences);
            }

                        #if UNITY_EDITOR
            if (Platform.EditorMode)
            {
                fallbackPreferences = GetDefaultPreferencesEditorMode();
                if (fallbackPreferences != null)
                {
                                        #if DEV_MODE && DEBUG_GET
                    Debug.Log("GetDefaultPreferences returning result of GetDefaultPreferencesEditorMode: " + StringUtils.TypeToString(fallbackPreferences));
                                        #endif

                    if (!fallbackPreferences.setupDone)
                    {
                        if (Event.current != null)
                        {
                                                        #if DEV_MODE && DEBUG_GET
                            Debug.Log("Calling fallbackPreferences.Setup()");
                                                        #endif
                            fallbackPreferences.Setup();
                        }
                                                #if DEV_MODE
                        else
                        {
                            Debug.LogWarning("Could not run InspectorPreferences.Setup because Event.current was null!");
                        }
                                                #endif
                    }

                    return(fallbackPreferences);
                }
                                #if DEV_MODE
                Debug.LogWarning("GetDefaultPreferencesEditorMode returned null");
                                #endif
            }
                        #if DEV_MODE
            else
            {
                Debug.LogWarning("!Platform.EditorMode");
            }
                        #endif
                        #endif

            var findAll = Resources.FindObjectsOfTypeAll <InspectorPreferences>();
            for (int n = findAll.Length - 1; n >= 0; n--)
            {
                fallbackPreferences = findAll[n];
                if (fallbackPreferences != null)
                {
                                        #if DEV_MODE
                    Debug.Log("GetDefaultPreferences returning FindObjectsOfTypeAll result #" + n + ": " + StringUtils.TypeToString(fallbackPreferences));
                                        #endif

                    if (!fallbackPreferences.setupDone)
                    {
                        if (Event.current != null)
                        {
                            fallbackPreferences.Setup();
                        }
                                                #if DEV_MODE
                        else
                        {
                            Debug.LogWarning("Could not run InspectorPreferences.Setup because Event.current was null!");
                        }
                                                #endif
                    }

                    return(fallbackPreferences);
                }
            }
                        #if DEV_MODE
            Debug.LogWarning("FindObjectsOfTypeAll could not find non-null InspectorPreferences. FindObjectsOfTypeAll returned " + findAll.Length + " results.");
                        #endif

            fallbackPreferences = Resources.Load <InspectorPreferences>("RuntimePowerInspectorPreferences");

            if (fallbackPreferences != null)
            {
                if (!fallbackPreferences.setupDone)
                {
                    if (Event.current != null)
                    {
                        fallbackPreferences.Setup();
                    }
                                        #if DEV_MODE
                    else
                    {
                        Debug.LogWarning("Could not run InspectorPreferences.Setup because Event.current was null!");
                    }
                                        #endif
                }

                return(fallbackPreferences);
            }

                        #if UNITY_EDITOR
            if (!Platform.EditorMode)
            {
                fallbackPreferences = GetDefaultPreferencesEditorMode();
                if (fallbackPreferences != null)
                {
                    return(fallbackPreferences);
                }
            }
                        #endif

            throw new NullReferenceException("Failed to find default InspectorPreferences with Platform.EditorMode=" + Platform.EditorMode + "!");
        }