/// <summary> /// Triggered when a new entry is added in the debug log. /// </summary> /// <param name="type">Type of the message.</param> /// <param name="message">Message string.</param> private void OnEntryAdded(DebugMessageType type, string message) { // Check if compiler message or reported exception, otherwise parse it as a normal log message ParsedLogEntry logEntry = ScriptCodeManager.ParseCompilerMessage(message); if (logEntry == null) { logEntry = Debug.ParseExceptionMessage(message); } if (logEntry == null) { logEntry = Debug.ParseLogMessage(message); } ConsoleEntryData newEntry = new ConsoleEntryData(); newEntry.type = type; newEntry.callstack = logEntry.callstack; newEntry.message = logEntry.message; entries.Add(newEntry); if (DoesFilterMatch(type)) { listView.AddEntry(newEntry); filteredEntries.Add(newEntry); } }
/// <summary> /// Triggered when a new entry is added in the debug log. /// </summary> /// <param name="message">Message string.</param> /// <param name="verbosity">Verbosity level defining message importance.</param> /// <param name="category">Category of the sub-system reporting the message.</param> private void OnEntryAdded(string message, LogVerbosity verbosity, int category) { // Check if compiler message or reported exception, otherwise parse it as a normal log message ParsedLogEntry logEntry = ScriptCodeManager.ParseCompilerMessage(message); if (logEntry == null) { logEntry = Debug.ParseExceptionMessage(message); } if (logEntry == null) { logEntry = Debug.ParseLogMessage(message); } ConsoleEntryData newEntry = new ConsoleEntryData(); newEntry.verbosity = verbosity; newEntry.category = category; newEntry.callstack = logEntry.callstack; newEntry.message = logEntry.message; entries.Add(newEntry); if (DoesFilterMatch(verbosity)) { listView.AddEntry(newEntry); filteredEntries.Add(newEntry); } }
/// <summary> /// Updates the contents of the details panel according to the currently selected element. /// </summary> private void RefreshDetailsPanel() { detailsArea.Layout.Clear(); if (sSelectedElementIdx != -1) { GUILayoutX paddingX = detailsArea.Layout.AddLayoutX(); paddingX.AddSpace(5); GUILayoutY paddingY = paddingX.AddLayoutY(); paddingX.AddSpace(5); paddingY.AddSpace(5); GUILayoutY mainLayout = paddingY.AddLayoutY(); paddingY.AddSpace(5); ConsoleEntryData entry = filteredEntries[sSelectedElementIdx]; LocString message = new LocEdString(entry.message); GUILabel messageLabel = new GUILabel(message, EditorStyles.MultiLineLabel, GUIOption.FlexibleHeight()); mainLayout.AddElement(messageLabel); mainLayout.AddSpace(10); if (entry.callstack != null) { foreach (var call in entry.callstack) { string fileName = Path.GetFileName(call.file); string callMessage; if (string.IsNullOrEmpty(call.method)) { callMessage = "\tin " + fileName + ":" + call.line; } else { callMessage = "\t" + call.method + " in " + fileName + ":" + call.line; } GUIButton callBtn = new GUIButton(new LocEdString(callMessage)); mainLayout.AddElement(callBtn); CallStackEntry hoistedCall = call; callBtn.OnClick += () => { CodeEditor.OpenFile(hoistedCall.file, hoistedCall.line); }; } } mainLayout.AddFlexibleSpace(); } else { GUILayoutX centerX = detailsArea.Layout.AddLayoutX(); centerX.AddFlexibleSpace(); GUILayoutY centerY = centerX.AddLayoutY(); centerX.AddFlexibleSpace(); centerY.AddFlexibleSpace(); GUILabel nothingSelectedLbl = new GUILabel(new LocEdString("(No entry selected)")); centerY.AddElement(nothingSelectedLbl); centerY.AddFlexibleSpace(); } }