private void DrawEditor(Editor editor, int editorIndex, bool forceDirty, ref bool showImportedObjectBarNext, ref Rect importedObjectBarRect, bool eyeDropperDirty)
{
if (editor == null)
{
return;
}
UnityEngine.Object target = editor.target;
GUIUtility.GetControlID(target.GetInstanceID(), FocusType.Passive);
EditorGUIUtility.ResetGUIState();
GUILayoutGroup topLevel = GUILayoutUtility.current.topLevel;
int visible = this.m_Tracker.GetVisible(editorIndex);
bool flag;
if (visible == -1)
{
flag = InternalEditorUtility.GetIsInspectorExpanded(target);
this.m_Tracker.SetVisible(editorIndex, (!flag) ? 0 : 1);
}
else
{
flag = (visible == 1);
}
bool flag2 = forceDirty || editor.isInspectorDirty || eyeDropperDirty || InspectorWindow.s_FlushOptimizedGUI;
if (Event.current.type == EventType.Repaint)
{
editor.isInspectorDirty = false;
}
ScriptAttributeUtility.propertyHandlerCache = editor.propertyHandlerCache;
bool flag3 = AssetDatabase.IsMainAsset(target) || AssetDatabase.IsSubAsset(target) || editorIndex == 0 || target is Material;
if (flag3)
{
string empty = string.Empty;
bool flag4 = editor.IsOpenForEdit(out empty);
if (showImportedObjectBarNext)
{
showImportedObjectBarNext = false;
GUILayout.Space(15f);
importedObjectBarRect = GUILayoutUtility.GetRect(16f, 16f);
importedObjectBarRect.height = 17f;
}
flag = true;
EditorGUI.BeginDisabledGroup(!flag4);
editor.DrawHeader();
EditorGUI.EndDisabledGroup();
}
if (editor.target is AssetImporter)
{
showImportedObjectBarNext = true;
}
bool flag5 = false;
if (editor is GenericInspector && CustomEditorAttributes.FindCustomEditorType(target, false) != null)
{
if (this.m_InspectorMode != InspectorMode.DebugInternal)
{
if (this.m_InspectorMode == InspectorMode.Normal)
{
flag5 = true;
}
else
{
if (target is AssetImporter)
{
flag5 = true;
}
}
}
}
if (!flag3)
{
EditorGUI.BeginDisabledGroup(!editor.IsEnabled());
bool flag6 = EditorGUILayout.InspectorTitlebar(flag, editor.targets);
if (flag != flag6)
{
this.m_Tracker.SetVisible(editorIndex, (!flag6) ? 0 : 1);
InternalEditorUtility.SetIsInspectorExpanded(target, flag6);
if (flag6)
{
this.m_LastInteractedEditor = editor;
}
else
{
if (this.m_LastInteractedEditor == editor)
{
this.m_LastInteractedEditor = null;
}
}
}
EditorGUI.EndDisabledGroup();
}
if (flag5 && flag)
{
GUILayout.Label("Multi-object editing not supported.", EditorStyles.helpBox, new GUILayoutOption[0]);
return;
}
EditorGUIUtility.ResetGUIState();
EditorGUI.BeginDisabledGroup(!editor.IsEnabled());
GenericInspector genericInspector = editor as GenericInspector;
if (genericInspector)
{
genericInspector.m_InspectorMode = this.m_InspectorMode;
}
EditorGUIUtility.hierarchyMode = true;
EditorGUIUtility.wideMode = (base.position.width > 330f);
ScriptAttributeUtility.propertyHandlerCache = editor.propertyHandlerCache;
Rect rect = default(Rect);
OptimizedGUIBlock optimizedGUIBlock;
float num;
if (editor.GetOptimizedGUIBlock(flag2, flag, out optimizedGUIBlock, out num))
{
rect = GUILayoutUtility.GetRect(0f, (!flag) ? 0f : num);
this.HandleLastInteractedEditor(rect, editor);
if (Event.current.type == EventType.Layout)
{
return;
}
if (optimizedGUIBlock.Begin(flag2, rect) && flag)
{
GUI.changed = false;
editor.OnOptimizedInspectorGUI(rect);
}
optimizedGUIBlock.End();
}
else
{
if (flag)
{
GUIStyle style = (!editor.UseDefaultMargins()) ? GUIStyle.none : EditorStyles.inspectorDefaultMargins;
rect = EditorGUILayout.BeginVertical(style, new GUILayoutOption[0]);
this.HandleLastInteractedEditor(rect, editor);
GUI.changed = false;
try
{
editor.OnInspectorGUI();
}
catch (Exception ex)
{
if (ex is ExitGUIException)
{
throw;
}
Debug.LogException(ex);
}
EditorGUILayout.EndVertical();
}
if (Event.current.type == EventType.Used)
{
return;
}
}
EditorGUI.EndDisabledGroup();
if (GUILayoutUtility.current.topLevel != topLevel)
{
if (!GUILayoutUtility.current.layoutGroups.Contains(topLevel))
{
Debug.LogError("Expected top level layout group missing! Too many GUILayout.EndScrollView/EndVertical/EndHorizontal?");
GUIUtility.ExitGUI();
}
else
{
Debug.LogWarning("Unexpected top level layout group! Missing GUILayout.EndScrollView/EndVertical/EndHorizontal?");
while (GUILayoutUtility.current.topLevel != topLevel)
{
GUILayoutUtility.EndLayoutGroup();
}
}
}
this.HandleComponentScreenshot(rect, editor);
}