private void CellGUI(Rect cellRect, UTinyEntityGroupTreeViewItem item, ColumnType columnType, ref RowGUIArgs args)
        {
            // Center cell rect vertically (makes it easier to place controls, icons etc in the cells)
            CenterRectUsingSingleLineHeight(ref cellRect);

            var entityGroup = item.EntityGroup.Dereference(Model.Registry);

            using (new GUIEnabledScope(item.Editable))
            {
                switch (columnType)
                {
                case ColumnType.Icon:
                {
                    GUI.DrawTexture(cellRect, null == entityGroup ? UTinyIcons.Warning : UTinyIcons.EntityGroup,
                                    ScaleMode.ScaleToFit);
                }
                break;

                case ColumnType.Name:
                {
                    args.rowRect = cellRect;

                    using (new GUIColorScope(null == entityGroup ? Color.red : Color.white))
                    {
                        base.RowGUI(args);
                    }
                }
                break;

                case ColumnType.Startup:
                {
                    var mainModule = Model.MainModule.Dereference(Model.Registry);
                    if (entityGroup != null && mainModule.StartupEntityGroup.Equals(item.EntityGroup))
                    {
                        GUI.Label(cellRect, "X");
                    }
                }
                break;

                case ColumnType.Module:
                {
                    GUI.Label(cellRect, item.Module.Name);
                }
                break;
                }
            }
        }
        protected override TreeViewItem BuildRoot()
        {
            Model.ClearIds();

            var root = new TreeViewItem {
                id = 0, depth = -1
            };

            var entityGroupReferences = Model.GetEntityGroups();

            foreach (var entityGroupReference in entityGroupReferences)
            {
                var entityGroup     = entityGroupReference.Dereference(Model.Registry);
                var module          = UTinyUtility.GetModules(entityGroup).FirstOrDefault();
                var moduleReference = null != module ? (UTinyModule.Reference)module : UTinyModule.Reference.None;
                var editable        = moduleReference.Equals(Model.MainModule);

                if (null != entityGroup)
                {
                    if (!editable && State.FilterProjectOnly)
                    {
                        continue;
                    }
                }

                var item = new UTinyEntityGroupTreeViewItem(Model.Registry, Model.MainModule, moduleReference, entityGroupReference)
                {
                    id       = GenerateInstanceId(entityGroupReference),
                    Editable = editable
                };

                root.AddChild(item);
            }

            return(root);
        }