protected void OnGUI() { if (Event.current.isKey && TabSwitcher.OnGUIGlobal()) { return; } EditorWindow console = consoleWindowField.GetValue(null) as EditorWindow; if (console == null) { EditorGUILayout.HelpBox(@"Script Inspector Console can only work when the Console tab is also open. Click the button below to open the Console window...", MessageType.Info); EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Open Console Widnow")) { GetWindow(consoleWindowType); Focus(); Repaint(); } GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); return; } Rect oldPosition = console.position; editorWindowPosField.SetValue(console, position); try { bool contextClick = Event.current.type == EventType.ContextClick || Event.current.type == EventType.MouseUp && Event.current.button == 1 && Application.platform == RuntimePlatform.OSXEditor; if (contextClick && GUIUtility.hotControl == 0 && Event.current.mousePosition.y > EditorStyles.toolbar.fixedHeight) { int lvHeight = (int)consoleLVHeightField.GetValue(console); if (lvHeight > Event.current.mousePosition.y - EditorStyles.toolbar.fixedHeight) { Event.current.type = EventType.MouseDown; Event.current.button = 0; Event.current.clickCount = 1; try { consoleOnGUIMethod.Invoke(console, null); } catch { } GUIUtility.hotControl = 0; DoPopupMenu(console); } } else if (Event.current.type == EventType.MouseDown && Event.current.clickCount == 2 && Event.current.mousePosition.y > EditorStyles.toolbar.fixedHeight || Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Return) { OpenLogEntry(console); GUIUtility.hotControl = 0; GUIUtility.ExitGUI(); } try { consoleOnGUIMethod.Invoke(console, null); } catch { } var rc = new Rect(254f, -1f, 144f, 18f); var autoFocusText = SISettings.autoFocusConsole == 0 ? "Auto-Focus: Never" : SISettings.autoFocusConsole == 1 ? "Auto-Focus: On Error" : "Auto-Focus: On Compile"; if (GUI.Button(rc, autoFocusText, EditorStyles.toolbarDropDown)) { var menu = new GenericMenu(); menu.AddItem(new GUIContent("Never"), SISettings.autoFocusConsole == 0, () => { SISettings.autoFocusConsole.Value = 0; }); menu.AddItem(new GUIContent("On Compile Error"), SISettings.autoFocusConsole == 1, () => { SISettings.autoFocusConsole.Value = 1; }); menu.AddItem(new GUIContent("On Compile"), SISettings.autoFocusConsole == 2, () => { SISettings.autoFocusConsole.Value = 2; }); menu.DropDown(rc); } } finally { editorWindowPosField.SetValue(console, oldPosition); } }
protected void OnGUI() { if (Event.current.isKey && TabSwitcher.OnGUIGlobal()) { return; } EditorWindow console = consoleWindowField.GetValue(null) as EditorWindow; if (console == null) { EditorGUILayout.HelpBox(@"Script Inspector Console can only work when the Console tab is also open. Click the button below to open the Console window...", MessageType.Info); EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Open Console Widnow")) { GetWindow(consoleWindowType); Focus(); Repaint(); } GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); return; } Rect oldPosition = console.position; editorWindowPosField.SetValue(console, position); try { bool contextClick = Event.current.type == EventType.ContextClick || Event.current.type == EventType.MouseUp && Event.current.button == 1 && Application.platform == RuntimePlatform.OSXEditor; if (contextClick && GUIUtility.hotControl == 0 && Event.current.mousePosition.y > EditorStyles.toolbar.fixedHeight) { int lvHeight = (int)consoleLVHeightField.GetValue(console); if (lvHeight > Event.current.mousePosition.y - EditorStyles.toolbar.fixedHeight) { Event.current.type = EventType.MouseDown; Event.current.button = 0; Event.current.clickCount = 1; try { consoleOnGUIMethod.Invoke(console, null); } catch { } GUIUtility.hotControl = 0; DoPopupMenu(console); } } else if (Event.current.type == EventType.MouseDown && Event.current.clickCount == 2 && Event.current.mousePosition.y > EditorStyles.toolbar.fixedHeight || Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Return) { OpenLogEntry(console); GUIUtility.hotControl = 0; GUIUtility.ExitGUI(); } try { consoleOnGUIMethod.Invoke(console, null); } catch { } #if UNITY_2019_3_OR_NEWER var rc = new Rect(413f, -1f, 160f, 18f); #elif UNITY_2017_1_OR_NEWER var rc = new Rect(355f, -1f, 144f, 18f); #else var rc = new Rect(254f, -1f, 144f, 18f); #endif var autoFocusText = SISettings.autoFocusConsole == 0 ? "Auto-Focus: Never" : SISettings.autoFocusConsole == 1 ? "Auto-Focus: On Error" : "Auto-Focus: On Compile"; if (GUI.Button(rc, autoFocusText, EditorStyles.toolbarDropDown)) { var menu = new GenericMenu(); menu.AddItem(new GUIContent("Never"), SISettings.autoFocusConsole == 0, () => { SISettings.autoFocusConsole.Value = 0; }); menu.AddItem(new GUIContent("On Compile Error"), SISettings.autoFocusConsole == 1, () => { SISettings.autoFocusConsole.Value = 1; }); menu.AddItem(new GUIContent("On Compile"), SISettings.autoFocusConsole == 2, () => { SISettings.autoFocusConsole.Value = 2; }); menu.DropDown(rc); } #if !UNITY_2019_3_OR_NEWER if (font == null && SISettings.monospacedFontConsole) { font = FGTextEditor.LoadEditorResource <Font>("Smooth Fonts/DejaVu Sans Mono.ttf"); SetConsoleFont(font); } rc.xMin = rc.xMax + 4f; rc.xMax = rc.xMin + 100f; if (SISettings.monospacedFontConsole != GUI.Toggle(rc, SISettings.monospacedFontConsole, "Monospaced Font", EditorStyles.toolbarButton)) { SISettings.monospacedFontConsole.Value = !SISettings.monospacedFontConsole; if (font == null && SISettings.monospacedFontConsole) { font = FGTextEditor.LoadEditorResource <Font>("Smooth Fonts/DejaVu Sans Mono.ttf"); } SetConsoleFont(SISettings.monospacedFontConsole ? font : null); } #endif } finally { editorWindowPosField.SetValue(console, oldPosition); } }
private void OnGUI() { if (Event.current.isKey && TabSwitcher.OnGUIGlobal()) { return; } bool needsRepaint = false; if (Event.current.type == EventType.KeyDown) { var nextItem = currentItem; var results = GroupByFile ? this.results : flatResults; if (Event.current.keyCode == KeyCode.DownArrow) { ++nextItem; if (GroupByFile) { while (nextItem < results.Count && results[nextItem].description != null && collapsedPaths.Contains(results[nextItem].assetPath)) { ++nextItem; } } if (nextItem == results.Count) { nextItem = currentItem; } } else if (Event.current.keyCode == KeyCode.RightArrow && currentItem < results.Count) { if (results[currentItem].description == null && collapsedPaths.Contains(results[currentItem].assetPath)) { collapsedPaths.Remove(results[currentItem].assetPath); needsRepaint = true; } else { ++nextItem; } } else if (Event.current.keyCode == KeyCode.UpArrow) { --nextItem; if (GroupByFile) { while (nextItem > 0 && results[nextItem].description != null && collapsedPaths.Contains(results[nextItem].assetPath)) { --nextItem; } } } else if (Event.current.keyCode == KeyCode.LeftArrow && currentItem < results.Count) { if (results[currentItem].description == null) { collapsedPaths.Add(results[currentItem].assetPath); needsRepaint = true; } else if (GroupByFile) { while (results[nextItem].description != null) { --nextItem; } } else { --nextItem; } } else if (Event.current.keyCode == KeyCode.Home) { nextItem = 0; } else if (Event.current.keyCode == KeyCode.End) { nextItem = results.Count - 1; if (GroupByFile) { while (nextItem > 0 && results[nextItem].description != null && collapsedPaths.Contains(results[nextItem].assetPath)) { --nextItem; } } } nextItem = Mathf.Max(0, Mathf.Min(nextItem, results.Count - 1)); scrollToCurrentItem = scrollToCurrentItem || needsRepaint || nextItem != currentItem; needsRepaint = needsRepaint || nextItem != currentItem; currentItem = nextItem; if (Event.current.keyCode == KeyCode.Return || Event.current.keyCode == KeyCode.KeypadEnter || Event.current.keyCode == KeyCode.Space) { if (currentItem < results.Count) { Event.current.Use(); if (results[currentItem].description != null) { GoToResult(currentItem); } else { var path = results[currentItem].assetPath; if (collapsedPaths.Contains(path)) { collapsedPaths.Remove(path); } else { collapsedPaths.Add(path); } needsRepaint = true; } } } else if (needsRepaint) { Event.current.Use(); } if (needsRepaint) { needsRepaint = false; Repaint(); return; } } //if (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Escape) //{ // Close(); // editor.OwnerWindow.Focus(); // return; //} if (evenItemStyle == null) { evenItemStyle = new GUIStyle("PR Label"); evenItemStyle.padding.top = 2; evenItemStyle.padding.bottom = 2; evenItemStyle.padding.left = 2; evenItemStyle.margin.right = 0; evenItemStyle.fixedHeight = 0; evenItemStyle.richText = false; evenItemStyle.stretchWidth = true; evenItemStyle.wordWrap = false; oddItemStyle = new GUIStyle(evenItemStyle); var evenBackground = (GUIStyle)"CN EntryBackEven"; var oddBackground = (GUIStyle)"CN EntryBackodd"; evenItemStyle.normal.background = evenBackground.normal.background; evenItemStyle.focused.background = evenBackground.normal.background; oddItemStyle.normal.background = oddBackground.normal.background; oddItemStyle.focused.background = oddBackground.normal.background; pingStyle = (GUIStyle)"PR Ping"; } var rcToolbar = new Rect(0f, 0f, Screen.width, 20f); GUI.Label(rcToolbar, GUIContent.none, EditorStyles.toolbar); GUILayout.BeginHorizontal(); GUILayout.Label(infoText, GUILayout.Height(20f), GUILayout.MinWidth(0f)); EditorGUILayout.Space(); GUILayout.Label(resultsCountText, GUILayout.Height(20f)); GUILayout.FlexibleSpace(); var newGroupByFile = GUILayout.Toggle(GroupByFile, "Group by File", EditorStyles.toolbarButton, GUILayout.Height(20f), GUILayout.ExpandHeight(true)); keepResults = GUILayout.Toggle(keepResults, "Keep Results", EditorStyles.toolbarButton, GUILayout.Height(20f), GUILayout.ExpandHeight(true)); EditorGUILayout.Space(); GUILayout.EndHorizontal(); if (newGroupByFile != GroupByFile) { var results = GroupByFile ? this.results : flatResults; GroupByFile = newGroupByFile; var newResults = GroupByFile ? this.results : flatResults; if (currentItem < results.Count) { var currentResult = results[currentItem]; if (currentResult.description == null) { currentResult = results[currentItem + 1]; } currentItem = Mathf.Max(0, newResults.IndexOf(currentResult)); } else { currentItem = 0; } needsRepaint = true; scrollToCurrentItem = true; } listViewHeight = Screen.height - rcToolbar.height - 20f; Vector2 scrollToPosition; try { scrollPosition = GUILayout.BeginScrollView(scrollPosition, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true)); scrollToPosition = scrollPosition; EditorGUIUtility.SetIconSize(new Vector2(16f, 16f)); //resultsLock.EnterReadLock(); if (foundNoResults) { GUILayout.Label("No Results Found!"); } else { var currentPath = ""; bool isExpanded = true; int drawnItemIndex = 0; var results = GroupByFile ? this.results : flatResults; for (var i = 0; i < results.Count; ++i) { var result = results[i]; var itemStyle = (drawnItemIndex & 1) == 0 ? evenItemStyle : oddItemStyle; if (result.description != null && !isExpanded) { continue; } ++drawnItemIndex; var rc = GUILayoutUtility.GetRect(GUIContent.none, itemStyle, GUILayout.Height(21f), GUILayout.ExpandWidth(true)); if (Event.current.type == EventType.Repaint) { itemStyle.Draw(rc, GUIContent.none, false, false, i == currentItem, this == focusedWindow); } if (result.description == null) { currentPath = result.assetPath; isExpanded = !collapsedPaths.Contains(currentPath); var rcToggle = rc; rcToggle.xMax = 18f; bool expand = GUI.Toggle(rcToggle, isExpanded, GUIContent.none, EditorStyles.foldout); if (expand != isExpanded) { currentItem = i; if (expand && !isExpanded) { collapsedPaths.Remove(currentPath); } else if (!expand && isExpanded) { collapsedPaths.Add(currentPath); } needsRepaint = true; } } if (scrollToCurrentItem && i == currentItem && Event.current.type == EventType.Repaint) { if (rc.yMin < scrollPosition.y) { scrollToPosition.y = rc.yMin; needsRepaint = true; } else if (rc.yMax > scrollPosition.y + listViewHeight) { scrollToPosition.y = rc.yMax - listViewHeight; needsRepaint = true; } } if (rc.yMax < scrollPosition.y || rc.yMin > scrollPosition.y + listViewHeight) { continue; } if (Event.current.type == EventType.MouseDown && rc.Contains(Event.current.mousePosition)) { if (i == currentItem && Event.current.button == 0 && Event.current.clickCount == 2) { if (result.description == null) { if (collapsedPaths.Contains(result.assetPath)) { collapsedPaths.Remove(result.assetPath); } else { collapsedPaths.Add(result.assetPath); } needsRepaint = true; } else { FGCodeWindow.OpenAssetInTab(result.assetGuid, result.line, result.characterIndex, result.length); } } else if (Event.current.button == 1 && result.description == null) { GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("Expand All"), false, () => { collapsedPaths.Clear(); }); menu.AddItem(new GUIContent("Collapse All"), false, () => { foreach (var r in results) { if (r.description == null) { collapsedPaths.Add(r.assetPath); } } }); menu.ShowAsContext(); } currentItem = i; needsRepaint = true; scrollToCurrentItem = true; Event.current.Use(); } GUIContent contentContent; int lineInfoLength = 0; if (result.description == null) { contentContent = new GUIContent(result.assetPath, AssetDatabase.GetCachedIcon(result.assetPath)); rc.xMin = 18f; } else { string lineInfo; if (GroupByFile) { lineInfo = (result.line + 1).ToString() + ": "; } else { lineInfo = System.IO.Path.GetFileName(result.assetPath) + '(' + (result.line + 1).ToString() + "): "; } lineInfoLength = lineInfo.Length; contentContent = new GUIContent(lineInfo + result.description); rc.xMin = 22f; } if (Event.current.type == EventType.Repaint) { if (result.description != null) { var dotContent = new GUIContent("."); var preContent = new GUIContent(contentContent.text.Substring(0, lineInfoLength + result.characterIndex - result.trimOffset) + '.'); var resultContent = new GUIContent('.' + contentContent.text.Substring(0, lineInfoLength + result.characterIndex + result.length - result.trimOffset) + '.'); var dotSize = itemStyle.CalcSize(dotContent); var preSize = itemStyle.CalcSize(preContent); preSize.x -= dotSize.x; var resultSize = itemStyle.CalcSize(resultContent); resultSize.x -= dotSize.x * 2f; var rcHighlight = new Rect(rc.x + preSize.x - 4f, rc.y + 2f, resultSize.x - preSize.x + 14f, rc.height - 4f); GUI.color = new Color(1f, 1f, 1f, 0.4f); pingStyle.Draw(rcHighlight, false, false, false, false); GUI.color = Color.white; } GUI.backgroundColor = Color.clear; itemStyle.Draw(rc, contentContent, false, false, i == currentItem, this == focusedWindow); GUI.backgroundColor = Color.white; } } } GUILayout.FlexibleSpace(); } finally { //resultsLock.ExitReadLock(); GUILayout.EndScrollView(); } if (Event.current.type == EventType.Repaint) { if (needsRepaint) { scrollToCurrentItem = false; scrollPosition = scrollToPosition; Repaint(); } else { scrollToCurrentItem = false; } } }