void DoSelected(int itemId)
        {
            m_SelectedItemId = itemId;
            if (m_SelectedItem != null)
            {
                m_SelectedItem.content.RemoveFromClassList(k_PlainViewSelectedVariantUssClassName);
                m_SelectedItem.content.RemoveFromClassList(k_ViewSelectedWithNoFocusVariantUssClassName);
                if (!EditorGUIUtility.isProSkin)
                {
                    m_SelectedItem.SwitchToLightSkinIcon();
                }
            }

            foreach (var plainViewItem in m_PlainViewItems)
            {
                if (plainViewItem.Id.Equals(itemId))
                {
                    m_SelectedItem = plainViewItem;
                    m_SelectedItem.content.AddToClassList(k_PlainViewSelectedVariantUssClassName);
                    if (!EditorGUIUtility.isProSkin)
                    {
                        m_SelectedItem.SwitchToDarkSkinIcon();
                    }

                    SaveViewData();
                }
            }
        }
        void OnPlainViewItemMouseDown(MouseDownEvent evt, LibraryPlainViewItem plainViewItem)
        {
            if (evt.button != (int)MouseButton.LeftMouse)
            {
                return;
            }

            DoSelected(plainViewItem.Id);
        }
        LibraryPlainViewItem GetDummyItemView()
        {
            foreach (var item in m_DummyItems.Where(item => item.parent == null))
            {
                return(item);
            }

            var newItem = new LibraryPlainViewItem(null);

            m_DummyItems.Add(newItem);
            return(newItem);
        }
        void FillView(IEnumerable <ITreeViewItem> items, VisualElement itemsParent = null)
        {
            foreach (var item in items)
            {
                if (item is BuilderLibraryTreeItem libraryTreeItem)
                {
                    if (libraryTreeItem.isHeader)
                    {
                        var categoryFoldout = new LibraryFoldout {
                            text = libraryTreeItem.data
                        };
                        if (libraryTreeItem.isEditorOnly)
                        {
                            categoryFoldout.tag = BuilderConstants.EditorOnlyTag;
                            categoryFoldout.Q(LibraryFoldout.TagLabelName).AddToClassList(BuilderConstants.TagPillClassName);
                        }
                        categoryFoldout.contentContainer.RegisterCallback <GeometryChangedEvent>(e => AdjustSpace(categoryFoldout));
                        categoryFoldout.AddToClassList(k_PlainViewFoldoutStyle);
                        Add(categoryFoldout);
                        FillView(libraryTreeItem.children, categoryFoldout);
                        continue;
                    }

                    var plainViewItem = new LibraryPlainViewItem(libraryTreeItem);
                    plainViewItem.AddManipulator(new ContextualMenuManipulator(OnContextualMenuPopulateEvent));
                    plainViewItem.RegisterCallback <MouseDownEvent, LibraryPlainViewItem>(OnPlainViewItemMouseDown, plainViewItem);

                    LinkToTreeViewItem(plainViewItem, libraryTreeItem);

                    // The element set up is not yet completed at this point.
                    // SetupView has to be called as well.
                    plainViewItem.RegisterCallback <AttachToPanelEvent>(e =>
                    {
                        RegisterControlContainer(plainViewItem);
                    });

                    plainViewItem.RegisterCallback <MouseDownEvent>(e =>
                    {
                        if (e.clickCount == 2)
                        {
                            AddItemToTheDocument(libraryTreeItem);
                        }
                    });
                    itemsParent?.Add(plainViewItem);
                    m_PlainViewItems.Add(plainViewItem);
                }
            }
        }
        LibraryPlainViewItem GetDummyItemView()
        {
            foreach (var item in m_DummyItems.Where(item => item.parent == null))
            {
                return(item);
            }

            var id = (int)Random.Range(0, float.MaxValue);

            while (m_Items.Any(i => i.id == id))
            {
                id = (int)Random.Range(0, float.MaxValue);
            }
            var newItem = new LibraryPlainViewItem(new TreeViewItemData <BuilderLibraryTreeItem>(id, null));

            m_DummyItems.Add(newItem);
            return(newItem);
        }