private void DrawLogBox(LogData log, Rect logBoxRect, int index, bool isCollapsed = false)
        {
            GUIStyle iconStyle;

            switch (log.type)
            {
            case LogType.Error:
            case LogType.Exception:
            case LogType.Assert:
                iconStyle = UnityDebugViewerWindowStyleUtility.errorIconStyle;
                break;

            case LogType.Warning:
                iconStyle = UnityDebugViewerWindowStyleUtility.warningIconStyle;
                break;

            case LogType.Log:
                iconStyle = UnityDebugViewerWindowStyleUtility.infoIconStyle;
                break;

            default:
                iconStyle = null;
                break;
            }
            if (iconStyle == null)
            {
                return;
            }


            if (index == this.editorManager.activeEditor.selectedLogIndex)
            {
                logBoxStyle = UnityDebugViewerWindowUtility.activeControlID == this.logBoxControlID ? logBoxStyle = UnityDebugViewerWindowStyleUtility.selectedLogBoxStyle : UnityDebugViewerWindowStyleUtility.inactiveLogBoxStyle;
            }
            else
            {
                logBoxStyle = index % 2 == 0 ? UnityDebugViewerWindowStyleUtility.oddLogBoxtyle : UnityDebugViewerWindowStyleUtility.evenLogBoxtyle;
            }
            GUI.DrawTexture(logBoxRect, logBoxStyle.normal.background);


            string logContent       = log.GetContent(showTime);
            var    logBoxGUIContent = new GUIContent(logContent);
            var    logContentHeight = logBoxStyle.CalcHeight(logBoxGUIContent, logBoxRect.width);

            logBoxStyle.alignment = logContentHeight > logBoxHeight ? TextAnchor.UpperLeft : TextAnchor.MiddleLeft;
            EditorGUI.LabelField(logBoxRect, logBoxGUIContent, logBoxStyle);

            var logBoxMidHeight = logBoxRect.y + logBoxRect.height / 2;
            var iconSize        = iconStyle.CalcSize(GUIContent.none);
            var iconRect        = new Rect(5, logBoxMidHeight - iconSize.y / 2, iconSize.x, iconSize.y);

            EditorGUI.LabelField(iconRect, GUIContent.none, iconStyle);

            if (collapse)
            {
                /// make sure the number label display in a fixed relative position of the window
                int        num             = this.editorManager.activeEditor.GetLogNum(log);
                GUIContent labelGUIContent = new GUIContent(num.ToString());
                var        labelSize       = UnityDebugViewerWindowStyleUtility.collapsedNumLabelStyle.CalcSize(labelGUIContent);
                Rect       labelRect       = new Rect(position.width - labelSize.x - 20, logBoxRect.y + logBoxRect.height / 2 - labelSize.y / 2, labelSize.x, labelSize.y);

                EditorGUI.LabelField(labelRect, labelGUIContent, UnityDebugViewerWindowStyleUtility.collapsedNumLabelStyle);
            }

            EventType eventType = Event.current.GetTypeForControl(this.logBoxControlID);

#if UNITY_5 || UNITY_5_3_OR_NEWER
            if (eventType == EventType.MouseDown)
#else
            if (eventType == EventType.mouseDown)
#endif
            {
                /// process event
                if (logBoxRect.Contains(Event.current.mousePosition))
                {
                    this.editorManager.activeEditor.selectedLogIndex = index;

                    if (Event.current.button == 0 && Event.current.clickCount == 2)
                    {
                        UnityDebugViewerWindowUtility.JumpToSource(log);
                    }

                    UnityDebugViewerWindowUtility.activeControlID = this.logBoxControlID;
                    Event.current.Use();
                }

                if (Event.current.button == 2)
                {
                    MoveToSpecificLogBox(this.editorManager.activeEditor.selectedLogIndex);

                    Event.current.Use();
                }
            }
#if UNITY_5 || UNITY_5_3_OR_NEWER
            else if (eventType == EventType.MouseUp)
#else
            else if (eventType == EventType.mouseUp)
#endif
            {
                if (logBoxRect.Contains(Event.current.mousePosition) && Event.current.button == 1)
                {
                    ShowCopyMenu(logContent);

                    UnityDebugViewerWindowUtility.activeControlID = this.logBoxControlID;
                    Event.current.Use();
                }
            }
#if UNITY_5 || UNITY_5_3_OR_NEWER
            else if (eventType == EventType.KeyUp)
#else
            else if (eventType == EventType.keyUp)
#endif
            {
                if (this.logBoxControlID == UnityDebugViewerWindowUtility.activeControlID)
                {
                    bool changeSelectedLog = false;
                    int  selectedIndex     = this.editorManager.activeEditor.selectedLogIndex;
                    if (Event.current.keyCode == KeyCode.UpArrow)
                    {
                        selectedIndex--;
                        changeSelectedLog = true;
                    }
                    else if (Event.current.keyCode == KeyCode.DownArrow)
                    {
                        selectedIndex++;
                        changeSelectedLog = true;
                    }

                    if (changeSelectedLog)
                    {
                        this.editorManager.activeEditor.selectedLogIndex = Mathf.Clamp(selectedIndex, 0, this.logList.Count - 1);

                        MoveToSpecificLogBox(this.editorManager.activeEditor.selectedLogIndex);

                        Event.current.Use();
                    }
                }
            }
        }
Esempio n. 2
0
        public bool ShouldDisplay(LogData log)
        {
            bool canDisplayInType;

            switch (log.type)
            {
            case LogType.Log:
                canDisplayInType = this.showLog;
                break;

            case LogType.Warning:
                canDisplayInType = this.showWarning;
                break;

            case LogType.Error:
            case LogType.Exception:
            case LogType.Assert:
                canDisplayInType = this.showError;
                break;

            default:
                canDisplayInType = false;
                break;
            }

            if (canDisplayInType)
            {
                if (string.IsNullOrEmpty(searchText))
                {
                    return(true);
                }
                else
                {
                    string logContent = log.GetContent(showTime);
                    string input      = logContent.ToLower();
                    string pattern    = searchText.ToLower();
                    if (searchWithRegex)
                    {
                        try
                        {
                            if (Regex.IsMatch(logContent, searchText))
                            {
                                return(true);
                            }
                            else
                            {
                                if (Regex.IsMatch(input, pattern))
                                {
                                    return(true);
                                }
                                else
                                {
                                    return(input.Contains(pattern));
                                }
                            }
                        }
                        catch
                        {
                            /// 正则表达式匹配出现错误,则使用普通匹配
                            return(input.Contains(pattern));
                        }
                    }
                    else
                    {
                        return(input.Contains(pattern));
                    }
                }
            }
            else
            {
                return(false);
            }
        }