/// <summary> /// Renders the header GUI of an individual <see cref="ValidationLogTreeViewItem"/> or /// <see cref="ValidationLogTreeViewHeader"/> based on where we are currently rendering in the /// <see cref="ValidationLogTreeView"/>. /// </summary> /// <param name="headerRect"></param> /// <param name="label"></param> /// <param name="treeViewItem"></param> private static void OnHeaderGUI(Rect headerRect, string label, TreeViewItem treeViewItem) { var vLogTreeViewItem = treeViewItem as ValidationLogTreeViewItem; var vLogTreeViewHeader = treeViewItem as ValidationLogTreeViewHeader; var vLog = vLogTreeViewItem != null ? vLogTreeViewItem.Log : null; var style = GraphicsTools.GetLogHeaderStyle(vLog); headerRect.y += 1f; // Do toggle var toggleRect = headerRect; toggleRect.width = 16f; var labelRect = new Rect(headerRect); labelRect.xMin += toggleRect.width + 2f; // If this header is for a grouping of logs, render the header showing the total count of // each type of log present. if (vLogTreeViewHeader != null) { labelRect.width -= 150f; GUI.Label(labelRect, label, style); var fieldRect = new Rect(labelRect) { xMin = labelRect.xMin + labelRect.width, width = 50f }; // Now that we have drawn our title, lets draw the aggregate logs if possible GUI.Label(fieldRect, new GUIContent(vLogTreeViewHeader.InfoCount.ToString(), GraphicsTools.InfoIconSmall)); fieldRect.x += 50f; GUI.Label(fieldRect, new GUIContent(vLogTreeViewHeader.WarningCount.ToString(), GraphicsTools.WarningIconSmall)); fieldRect.x += 50f; GUI.Label(fieldRect, new GUIContent(vLogTreeViewHeader.ErrorCount.ToString(), GraphicsTools.ErrorIconSmall)); } else { GUI.Label(labelRect, label, style); } }
/// <summary> /// Draws the appropriate row background for a <see cref="ValidationLog"/> <paramref name="log"/>. /// </summary> /// <param name="bgRect"></param> /// <param name="log"></param> private static void DrawRowBackground(Rect bgRect, ValidationLog log) { if (Event.current.type == EventType.Repaint) { var originalColor = GUI.color; GUI.color = GraphicsTools.GetLogHeaderColor(log); var rect = bgRect; rect.height = 25f; GraphicsTools.LogRowHeaderBackground.Draw(rect, false, false, false, false); GUI.color = originalColor; if (log == null) { return; } rect.y += rect.height; rect.height = bgRect.height - rect.height; GraphicsTools.LogRowBodyBackground.Draw(rect, false, false, false, false); } }
/// <summary> /// Renders the controls for an individual <see cref="ValidationLogTreeViewItem"/> <paramref name="viewItem"/> /// in <see cref="Rect"/> <paramref name="controlsRect"/>. /// </summary> /// <param name="controlsRect"></param> /// <param name="viewItem"></param> private static void OnControlsGUI(Rect controlsRect, ValidationLogTreeViewItem viewItem) { var rect = controlsRect; rect.y += 3f; rect.height = EditorGUIUtility.singleLineHeight; var prefixRect = new Rect(rect) { width = 80f }; var fieldRect = new Rect(rect) { width = rect.width - prefixRect.width, x = rect.x + prefixRect.width }; EditorGUI.LabelField(prefixRect, EditorConstants.TreeViewAreaLabel, EditorStyles.boldLabel); EditorGUI.LabelField(fieldRect, viewItem.Log.GetSourceDescription()); prefixRect.y += rect.height + EditorGUIUtility.standardVerticalSpacing; fieldRect.y = prefixRect.y; fieldRect.height = EditorGUIUtility.singleLineHeight; EditorGUI.LabelField(prefixRect, EditorConstants.TreeViewObjectLabel, EditorStyles.boldLabel); EditorGUI.LabelField(fieldRect, viewItem.Log.objectPath); prefixRect.y += rect.height + EditorGUIUtility.standardVerticalSpacing; fieldRect.y = prefixRect.y; fieldRect.height = (rect.height + EditorGUIUtility.standardVerticalSpacing) * 2f; var charactersPerRow = GraphicsTools.GetCharactersPerRow(fieldRect, viewItem.Log.message); var multiLineMessage = GraphicsTools.GetMultilineString(viewItem.Log.message, charactersPerRow); fieldRect.height = 2 * (EditorGUIUtility.standardVerticalSpacing + EditorGUIUtility.singleLineHeight); EditorGUI.LabelField(prefixRect, EditorConstants.TreeViewMessageLabel, EditorStyles.boldLabel); EditorGUI.TextArea(fieldRect, multiLineMessage, EditorStyles.label); EditorGUI.LabelField(fieldRect, multiLineMessage); rect.y = fieldRect.y + fieldRect.height + EditorGUIUtility.standardVerticalSpacing; var buttonRect = rect; buttonRect.width = 200f; buttonRect.height *= 1.25f; if ((viewItem.Log.source == LogSource.Scene || viewItem.Log.source == LogSource.Project) && viewItem.Log.HasObjectPath()) { EditorGUI.BeginDisabledGroup(!viewItem.Log.CanPingObject()); if (GUI.Button(buttonRect, EditorConstants.PingObjectButtonText)) { ProjectTools.TryPingObject(viewItem.Log); } EditorGUI.EndDisabledGroup(); } buttonRect.x += 220f; if (viewItem.Log.source == LogSource.Scene) { EditorGUI.BeginDisabledGroup(!viewItem.Log.CanLoadScene()); if (GUI.Button(buttonRect, EditorConstants.LoadSceneButtonText)) { EditorSceneManager.OpenScene(viewItem.Log.scenePath); } EditorGUI.EndDisabledGroup(); } }