private void CellGUI(Rect cellRect, AssetProcessEventListTreeItem item, int column, ref RowGUIArgs args)
        {
            Color oldColor = GUI.color;

            CenterRectUsingSingleLineHeight(ref cellRect);
            var assetGuid        = item.Event.AssetGuid;
            var assetPath        = AssetDatabase.GUIDToAssetPath(assetGuid);
            var isAssetAvailable = string.IsNullOrEmpty(assetPath);

            var graphGuid = item.Event.GraphGuid;
            var graphPath = AssetDatabase.GUIDToAssetPath(graphGuid);
            var hasGraph  = !string.IsNullOrEmpty(graphPath);

            var isError = item.Event.Kind == AssetProcessEvent.EventKind.Error;

            switch (column)
            {
            case 0://Error?
            {
                var iconRect = new Rect(cellRect.x, cellRect.y - 6, 32, 32);
                GUI.DrawTexture(iconRect, ((isError)? m_errorIcon:m_infoIcon));
            }
            break;

            case 1://Asset
            {
                Texture2D icon = null;
                if (!isAssetAvailable)
                {
                    icon = AssetDatabase.GetCachedIcon(assetPath) as Texture2D;
                }
                var iconRect = new Rect(cellRect.x + 1, cellRect.y + 1, cellRect.height - 2, cellRect.height - 2);
                if (icon != null)
                {
                    GUI.DrawTexture(iconRect, icon, ScaleMode.ScaleToFit);
                }
                DefaultGUI.Label(
                    new Rect(cellRect.x + iconRect.width + 4, cellRect.y, cellRect.width - iconRect.width, cellRect.height),
                    (!isAssetAvailable)? Path.GetFileName(assetPath) : $"{item.Event.AssetName} (Removed)",
                    args.selected,
                    args.focused);
            }
            break;

            case 2://Graph
                if (hasGraph)
                {
                    DefaultGUI.Label(cellRect, $"{Path.GetFileNameWithoutExtension(graphPath)}.{item.Event.NodeName}", args.selected, args.focused);
                }
                break;
            }
            GUI.color = oldColor;
        }
        protected override TreeViewItem BuildRoot()
        {
            var root = new AssetProcessEventListTreeItem();

            var r = AssetProcessEventRecord.GetRecord();

            if (r != null && r.Events != null)
            {
                foreach (var e in r.Events)
                {
                    root.AddChild(new AssetProcessEventListTreeItem(e));
                }
            }

            return(root);
        }