public void OnGUI(int id) { float height = BluConsoleSkin.ToolbarButtonStyle.CalcSize("Clear".GUIContent()).y; GUILayout.BeginHorizontal(BluConsoleSkin.ToolbarStyle, GUILayout.Height(height)); if (GetButtonClamped("Clear".GUIContent(), BluConsoleSkin.ToolbarButtonStyle)) { UnityLoggerServer.Clear(); SetDirtyLogs(); ListWindow.SelectedMessage = -1; DetailWindow.SelectedMessage = -1; } GUILayout.Space(6.0f); var actualCollapse = UnityLoggerServer.HasFlag(ConsoleWindowFlag.Collapse); var newCollapse = GetToggleClamped(_isCollapse, "Collapse".GUIContent(), BluConsoleSkin.ToolbarButtonStyle); if (newCollapse != _isCollapse) { SetDirtyLogs(); _isCollapse = newCollapse; UnityLoggerServer.SetFlag(ConsoleWindowFlag.Collapse, newCollapse); } else if (newCollapse != actualCollapse) { SetDirtyLogs(); _isCollapse = actualCollapse; } var actualClearOnPlay = UnityLoggerServer.HasFlag(ConsoleWindowFlag.ClearOnPlay); var newClearOnPlay = GetToggleClamped(_isClearOnPlay, "Clear on Play".GUIContent(), BluConsoleSkin.ToolbarButtonStyle); if (newClearOnPlay != _isClearOnPlay) { _isClearOnPlay = newClearOnPlay; UnityLoggerServer.SetFlag(ConsoleWindowFlag.ClearOnPlay, newClearOnPlay); } else if (newClearOnPlay != actualClearOnPlay) { _isClearOnPlay = actualClearOnPlay; } var actualPauseOnError = UnityLoggerServer.HasFlag(ConsoleWindowFlag.ErrorPause); var newPauseOnError = GetToggleClamped(_isPauseOnError, "Pause on Error".GUIContent(), BluConsoleSkin.ToolbarButtonStyle); if (newPauseOnError != _isPauseOnError) { _isPauseOnError = newPauseOnError; UnityLoggerServer.SetFlag(ConsoleWindowFlag.ErrorPause, newPauseOnError); } else if (newPauseOnError != actualPauseOnError) { _isPauseOnError = actualPauseOnError; } GUILayout.FlexibleSpace(); // Search Area var oldString = _searchString; _searchString = EditorGUILayout.TextArea(_searchString, BluConsoleSkin.ToolbarSearchTextFieldStyle, GUILayout.Width(Configuration.SearchStringBoxWidth)); if (_searchString != oldString) { SetDirtyComparer(); } if (GUILayout.Button("", BluConsoleSkin.ToolbarSearchCancelButtonStyle)) { _searchString = ""; SetDirtyComparer(); GUI.FocusControl(null); } SearchStringPatterns = _searchString.Trim().ToLower().Split(' '); GUILayout.Space(10.0f); // Info/Warning/Error buttons Area int qtNormalLogs = 0, qtWarningLogs = 0, qtErrorLogs = 0; UnityLoggerServer.GetCount(ref qtNormalLogs, ref qtWarningLogs, ref qtErrorLogs); var qtNormalLogsStr = qtNormalLogs.ToString(); if (qtNormalLogs >= Configuration.MaxAmountOfLogs) { qtNormalLogsStr = Configuration.MaxAmountOfLogs + "+"; } var qtWarningLogsStr = qtWarningLogs.ToString(); if (qtWarningLogs >= Configuration.MaxAmountOfLogs) { qtWarningLogsStr = Configuration.MaxAmountOfLogs + "+"; } var qtErrorLogsStr = qtErrorLogs.ToString(); if (qtErrorLogs >= Configuration.MaxAmountOfLogs) { qtErrorLogsStr = Configuration.MaxAmountOfLogs + "+"; } var actualIsShowNormal = UnityLoggerServer.HasFlag(ConsoleWindowFlag.LogLevelLog); var newIsShowNormal = GetToggleClamped(_isShowNormal, new GUIContent(qtNormalLogsStr, BluConsoleSkin.InfoIconSmall), BluConsoleSkin.ToolbarButtonStyle); if (newIsShowNormal != _isShowNormal) { SetDirtyLogs(); _isShowNormal = newIsShowNormal; UnityLoggerServer.SetFlag(ConsoleWindowFlag.LogLevelLog, newIsShowNormal); } else if (newIsShowNormal != actualIsShowNormal) { SetDirtyLogs(); _isShowNormal = actualIsShowNormal; } var actualIsShowWarning = UnityLoggerServer.HasFlag(ConsoleWindowFlag.LogLevelWarning); var newIsShowWarning = GetToggleClamped(_isShowWarning, new GUIContent(qtWarningLogsStr, BluConsoleSkin.WarningIconSmall), BluConsoleSkin.ToolbarButtonStyle); if (newIsShowWarning != _isShowWarning) { SetDirtyLogs(); _isShowWarning = newIsShowWarning; UnityLoggerServer.SetFlag(ConsoleWindowFlag.LogLevelWarning, newIsShowWarning); } else if (newIsShowWarning != actualIsShowWarning) { SetDirtyLogs(); _isShowWarning = actualIsShowWarning; } var actualIsShowError = UnityLoggerServer.HasFlag(ConsoleWindowFlag.LogLevelError); var newIsShowError = GetToggleClamped(_isShowError, new GUIContent(qtErrorLogsStr, BluConsoleSkin.ErrorIconSmall), BluConsoleSkin.ToolbarButtonStyle); if (newIsShowError != _isShowError) { SetDirtyLogs(); _isShowError = newIsShowError; UnityLoggerServer.SetFlag(ConsoleWindowFlag.LogLevelError, newIsShowError); } else if (newIsShowError != actualIsShowError) { SetDirtyLogs(); _isShowError = actualIsShowError; } for (var i = 0; i < Settings.Filters.Count; i++) { var name = Settings.Filters[i].Name; var style = BluConsoleSkin.ToolbarButtonStyle; bool oldAdditionalFilter = ToggledFilters[i]; ToggledFilters[i] = GUILayout.Toggle(ToggledFilters[i], name, style, GUILayout.MaxWidth(style.CalcSize(new GUIContent(name)).x)); if (oldAdditionalFilter != ToggledFilters[i]) { SetDirtyLogs(); } } GUILayout.EndHorizontal(); }
private float DrawTopToolbar() { float height = BluConsoleSkin.ToolbarButtonStyle.CalcSize(new GUIContent("Clear")).y; GUILayout.BeginHorizontal(BluConsoleSkin.ToolbarStyle, GUILayout.Height(height)); if (GetButtonClamped("Clear", BluConsoleSkin.ToolbarButtonStyle)) { UnityLoggerServer.Clear(); SetDirtyLogs(); _logListSelectedMessage = -1; _logDetailSelectedFrame = -1; } GUILayout.Space(6.0f); bool oldCollapse = UnityLoggerServer.HasFlag(ConsoleWindowFlag.Collapse); bool newCollapse = GetToggleClamped(oldCollapse, "Collapse", BluConsoleSkin.ToolbarButtonStyle); if (oldCollapse != newCollapse) { SetDirtyLogs(); } UnityLoggerServer.SetFlag(ConsoleWindowFlag.Collapse, newCollapse); bool oldClearOnPlay = UnityLoggerServer.HasFlag(ConsoleWindowFlag.ClearOnPlay); bool newClearOnPlay = GetToggleClamped(oldClearOnPlay, "Clear on Play", BluConsoleSkin.ToolbarButtonStyle); UnityLoggerServer.SetFlag(ConsoleWindowFlag.ClearOnPlay, newClearOnPlay); bool oldPauseOnError = UnityLoggerServer.HasFlag(ConsoleWindowFlag.ErrorPause); bool newPauseOnError = GetToggleClamped(oldPauseOnError, "Pause on Error", BluConsoleSkin.ToolbarButtonStyle); UnityLoggerServer.SetFlag(ConsoleWindowFlag.ErrorPause, newPauseOnError); GUILayout.FlexibleSpace(); // Search Area var oldString = _searchString; _searchString = EditorGUILayout.TextArea(_searchString, BluConsoleSkin.ToolbarSearchTextFieldStyle, GUILayout.Width(200.0f)); if (_searchString != oldString) { SetDirtyComparer(); } if (GUILayout.Button("", BluConsoleSkin.ToolbarSearchCancelButtonStyle)) { _searchString = ""; SetDirtyComparer(); GUI.FocusControl(null); } _searchStringPatterns = _searchString.Trim().ToLower().Split(' '); GUILayout.Space(10.0f); // Info/Warning/Error buttons Area int qtNormalLogs = 0, qtWarningLogs = 0, qtErrorLogs = 0; UnityLoggerServer.GetCount(ref qtNormalLogs, ref qtWarningLogs, ref qtErrorLogs); int maxLogs = MAX_LOGS; string qtNormalLogsStr = qtNormalLogs.ToString(); if (qtNormalLogs >= maxLogs) { qtNormalLogsStr = maxLogs.ToString() + "+"; } string qtWarningLogsStr = qtWarningLogs.ToString(); if (qtWarningLogs >= maxLogs) { qtWarningLogsStr = maxLogs.ToString() + "+"; } string qtErrorLogsStr = qtErrorLogs.ToString(); if (qtErrorLogs >= maxLogs) { qtErrorLogsStr = maxLogs.ToString() + "+"; } bool oldIsShowNormal = UnityLoggerServer.HasFlag(ConsoleWindowFlag.LogLevelLog); bool newIsShowNormal = GetToggleClamped(oldIsShowNormal, GetInfoGUIContent(qtNormalLogsStr), BluConsoleSkin.ToolbarButtonStyle); if (oldIsShowNormal != newIsShowNormal) { SetDirtyLogs(); } UnityLoggerServer.SetFlag(ConsoleWindowFlag.LogLevelLog, newIsShowNormal); bool oldIsShowWarning = UnityLoggerServer.HasFlag(ConsoleWindowFlag.LogLevelWarning); bool newIsShowWarning = GetToggleClamped(oldIsShowWarning, GetWarningGUIContent(qtWarningLogsStr), BluConsoleSkin.ToolbarButtonStyle); if (oldIsShowWarning != newIsShowWarning) { SetDirtyLogs(); } UnityLoggerServer.SetFlag(ConsoleWindowFlag.LogLevelWarning, newIsShowWarning); bool oldIsShowError = UnityLoggerServer.HasFlag(ConsoleWindowFlag.LogLevelError); bool newIsShowError = GetToggleClamped(oldIsShowError, GetErrorGUIContent(qtErrorLogsStr), BluConsoleSkin.ToolbarButtonStyle); if (oldIsShowError != newIsShowError) { SetDirtyLogs(); } UnityLoggerServer.SetFlag(ConsoleWindowFlag.LogLevelError, newIsShowError); for (int i = 0; i < _settings.Filters.Count; i++) { var name = _settings.Filters[i].Name; var style = BluConsoleSkin.ToolbarButtonStyle; bool oldAdditionalFilter = _additionalFilters[i]; _additionalFilters[i] = GUILayout.Toggle(_additionalFilters[i], name, style, GUILayout.MaxWidth(style.CalcSize(new GUIContent(name)).x)); if (oldAdditionalFilter != _additionalFilters[i]) { SetDirtyLogs(); } } GUILayout.EndHorizontal(); return(height); }
private void DrawLogList() { _qtLogs = UnityLoggerServer.StartGettingLogs(); _cacheLogCount = _qtLogs; int cntLogs = 0; List <int> rows = new List <int>(_qtLogs); List <BluLog> logs = new List <BluLog>(_qtLogs); for (int i = 0; i < _qtLogs; i++) { var log = GetSimpleLog(i); if (HasPattern(log, i)) { cntLogs++; rows.Add(i); logs.Add(log); } } _qtLogs = cntLogs; float windowWidth = WindowWidth; float windowHeight = _topPanelHeight - DrawYPos; float buttonWidth = ButtonWidth; if (_qtLogs * ButtonHeight > windowHeight) { buttonWidth -= 15f; } float viewWidth = buttonWidth; float viewHeight = _qtLogs * ButtonHeight; Rect scrollViewPosition = new Rect(x: 0f, y: DrawYPos, width: windowWidth, height: windowHeight); Rect scrollViewViewRect = new Rect(x: 0f, y: 0f, width: viewWidth, height: viewHeight); GUI.DrawTexture(scrollViewPosition, BluConsoleSkin.EvenBackTexture); Vector2 oldScrollPosition = _logListScrollPosition; _logListScrollPosition = GUI.BeginScrollView(position: scrollViewPosition, scrollPosition: _logListScrollPosition, viewRect: scrollViewViewRect); int firstRenderLogIndex = (int)(_logListScrollPosition.y / ButtonHeight); firstRenderLogIndex = Mathf.Clamp(firstRenderLogIndex, 0, _qtLogs); int lastRenderLogIndex = firstRenderLogIndex + (int)(windowHeight / ButtonHeight) + 2; lastRenderLogIndex = Mathf.Clamp(lastRenderLogIndex, 0, _qtLogs); float buttonY = firstRenderLogIndex * ButtonHeight; bool hasSomeClick = false; int cnt = 0; for (int i = firstRenderLogIndex; i < lastRenderLogIndex; i++) { var row = rows[i]; var log = logs[i]; var styleBack = GetLogBackStyle(i); var styleMessage = GetLogListStyle(log); string showMessage = GetTruncatedMessage(GetLogListMessage(log)); var contentMessage = new GUIContent(showMessage); var rectMessage = new Rect(x: 0, y: buttonY, width: viewWidth, height: ButtonHeight); bool isSelected = i == _logListSelectedMessage ? true : false; DrawBack(rectMessage, styleBack, isSelected); if (IsRepaintEvent) { styleMessage.Draw(rectMessage, contentMessage, false, false, isSelected, false); } bool messageClicked = IsClicked(rectMessage); bool isLeftClick = messageClicked ? Event.current.button == 0 : false; if (UnityLoggerServer.HasFlag(ConsoleWindowFlag.Collapse)) { int quantity = UnityLoggerServer.GetLogCount(row); var collapseCount = Mathf.Min(quantity, MAX_LENGTH_COLLAPSE); var collapseText = collapseCount.ToString(); if (collapseCount >= MAX_LENGTH_COLLAPSE) { collapseText += "+"; } var collapseContent = new GUIContent(collapseText); var collapseSize = BluConsoleSkin.CollapseStyle.CalcSize(collapseContent); var collapseRect = new Rect(x: viewWidth - collapseSize.x - 5f, y: (buttonY + buttonY + ButtonHeight - collapseSize.y) * 0.5f, width: collapseSize.x, height: collapseSize.y); GUI.Label(collapseRect, collapseContent, BluConsoleSkin.CollapseStyle); } if (messageClicked) { _selectedLog = GetCompleteLog(row); hasSomeClick = true; if (!isLeftClick && i == _logListSelectedMessage) { DrawPopup(Event.current, log); } if (isLeftClick && i == _logListSelectedMessage) { if (IsDoubleClickLogListButton) { _logListLastTimeClicked = 0.0f; var completeLog = GetCompleteLog(row); JumpToSource(completeLog, 0); } else { PingLog(_selectedLog); _logListLastTimeClicked = EditorApplication.timeSinceStartup; } } else { PingLog(_selectedLog); _logListSelectedMessage = i; } _logDetailSelectedFrame = -1; } buttonY += ButtonHeight; cnt++; } UnityLoggerServer.StopGettingsLogs(); GUI.EndScrollView(); if (_hasScrollWheelUp || hasSomeClick) { _isFollowScroll = false; } else if (_logListScrollPosition != oldScrollPosition) { _isFollowScroll = false; float topOffset = viewHeight - windowHeight; if (_logListScrollPosition.y >= topOffset) { _isFollowScroll = true; } } if (!IsFollowScroll) { return; } float endY = viewHeight - windowHeight; _logListScrollPosition.y = endY; }
public override void OnGUI(int id) { base.OnGUI(id); UnityLoggerServer.StartGettingLogs(); SelectedMessage = Mathf.Clamp(SelectedMessage, -1, QtLogs - 1); float buttonWidth = DefaultButtonWidth; if (QtLogs * DefaultButtonHeight > WindowRect.height) { buttonWidth -= 15f; } float viewWidth = buttonWidth; float viewHeight = QtLogs * DefaultButtonHeight; Rect scrollWindowRect = WindowRect; Rect scrollViewRect = new Rect(x: 0f, y: 0f, width: viewWidth, height: viewHeight); GUI.DrawTexture(scrollWindowRect, BluConsoleSkin.EvenBackTexture); Vector2 oldScrollPosition = ScrollPosition; ScrollPosition = GUI.BeginScrollView(position: scrollWindowRect, scrollPosition: ScrollPosition, viewRect: scrollViewRect); GUI.DrawTexture(WindowRect, BluConsoleSkin.OddBackTexture); int firstRenderLogIndex = (int)(ScrollPosition.y / DefaultButtonHeight); firstRenderLogIndex = Mathf.Clamp(firstRenderLogIndex, 0, QtLogs); int lastRenderLogIndex = firstRenderLogIndex + (int)(WindowRect.height / DefaultButtonHeight) + 2; lastRenderLogIndex = Mathf.Clamp(lastRenderLogIndex, 0, QtLogs); // Handling up/down arrow keys if (HasKeyboardArrowKeyInput) { bool isFrameOutsideOfRange = SelectedMessage <firstRenderLogIndex + 1 || SelectedMessage> lastRenderLogIndex - 3; if (isFrameOutsideOfRange && KeyboardArrowKeyDirection == Direction.Up) { ScrollPosition.y = DefaultButtonHeight * SelectedMessage; } else if (isFrameOutsideOfRange && KeyboardArrowKeyDirection == Direction.Down) { int md = lastRenderLogIndex - firstRenderLogIndex - 3; float ss = md * DefaultButtonHeight; float sd = WindowRect.height - ss; ScrollPosition.y = (DefaultButtonHeight * (SelectedMessage + 1) - ss - sd); } } float buttonY = firstRenderLogIndex * DefaultButtonHeight; bool hasCollapse = UnityLoggerServer.HasFlag(ConsoleWindowFlag.Collapse); bool hasSomeClick = false; for (int i = firstRenderLogIndex; i < lastRenderLogIndex; i++) { int row = Rows[i]; BluLog log = Logs[i]; var styleBack = BluConsoleSkin.GetLogBackStyle(i); var styleMessage = BluConsoleSkin.GetLogListStyle(log.LogType); string showMessage = GetTruncatedListMessage(log); var contentMessage = new GUIContent(showMessage); var rectMessage = new Rect(x: 0, y: buttonY, width: viewWidth, height: DefaultButtonHeight); bool isSelected = i == SelectedMessage; DrawBackground(rectMessage, styleBack, isSelected); if (IsRepaintEvent) { styleMessage.Draw(rectMessage, contentMessage, false, false, isSelected, false); } bool messageClicked = IsClicked(rectMessage); bool isLeftClick = messageClicked && Event.current.button == 0; if (hasCollapse) { int quantity = UnityLoggerServer.GetLogCount(row); var collapseCount = Mathf.Min(quantity, LogConfiguration.MaxAmountOfLogsCollapse); var collapseText = collapseCount.ToString(); if (collapseCount >= LogConfiguration.MaxAmountOfLogsCollapse) { collapseText += "+"; } var collapseContent = new GUIContent(collapseText); var collapseSize = BluConsoleSkin.CollapseStyle.CalcSize(collapseContent); var collapseRect = new Rect(x: viewWidth - collapseSize.x - 5f, y: (buttonY + buttonY + DefaultButtonHeight - collapseSize.y) * 0.5f, width: collapseSize.x, height: collapseSize.y); GUI.Label(collapseRect, collapseContent, BluConsoleSkin.CollapseStyle); } if (messageClicked) { hasSomeClick = true; if (SelectedMessage != i) { LastTimeClicked = 0.0f; } if (isLeftClick) { BluUtils.PingLog(GetCompleteLog(row)); SelectedMessage = i; } if (!isLeftClick) { DrawPopup(log); } if (isLeftClick && i == SelectedMessage) { if (IsDoubleClick) { LastTimeClicked = 0.0f; var completeLog = GetCompleteLog(row); BluUtils.JumpToSourceFile(completeLog, 0); } else { LastTimeClicked = EditorApplication.timeSinceStartup; } } } buttonY += DefaultButtonHeight; } GUI.EndScrollView(); if (IsScrollUp || hasSomeClick) { IsFollowScroll = false; } else if (ScrollPosition != oldScrollPosition) { IsFollowScroll = false; float topOffset = viewHeight - WindowRect.height; if (ScrollPosition.y >= topOffset) { IsFollowScroll = true; } } if (IsFollowScroll) { ScrollPosition.y = viewHeight - WindowRect.height; } UnityLoggerServer.StopGettingsLogs(); }