Beispiel #1
0
        /// <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);
            }
        }
Beispiel #2
0
        /// <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);
            }
        }
Beispiel #3
0
        /// <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();
            }
        }