Example #1
0
        public EntityHierarchy(EntityHierarchyFoldingState entityHierarchyFoldingState)
        {
            m_EntityHierarchyFoldingState = entityHierarchyFoldingState;

            style.flexGrow  = 1.0f;
            m_ViewContainer = new VisualElement();
            m_ViewContainer.style.flexGrow = 1.0f;
            m_ViewContainer.RegisterCallback <PointerDownEvent>(evt =>
            {
                if (evt.button == (int)MouseButton.LeftMouse)
                {
                    Selection.activeObject = null;
                }
            });
            m_TreeView = new TreeView(m_TreeViewRootItems, Constants.ListView.ItemHeight, MakeTreeViewItem, ReleaseTreeViewItem, BindTreeViewItem)
            {
                selectionType = SelectionType.Single,
                name          = Constants.EntityHierarchy.FullViewName,
                style         = { flexGrow = 1 },
            };
            m_TreeView.onSelectionChange         += OnLocalSelectionChanged;
            m_TreeView.ItemExpandedStateChanging += (item, isExpanding) =>
            {
                var entityHierarchyItem = (EntityHierarchyItem)item;
                if (entityHierarchyItem.NodeId.Kind == NodeKind.Scene || entityHierarchyItem.NodeId.Kind == NodeKind.SubScene)
                {
                    m_EntityHierarchyFoldingState.OnFoldingStateChanged(entityHierarchyItem.NodeId, isExpanding);
                }
            };
            m_TreeView.Hide();
            m_ViewContainer.Add(m_TreeView);

            m_ListView = new ListView(m_ListViewFilteredItems, Constants.ListView.ItemHeight, MakeListViewItem, ReleaseListViewItem, BindListViewItem)
            {
                selectionType = SelectionType.Single,
                name          = Constants.EntityHierarchy.SearchViewName,
                style         = { flexGrow = 1 }
            };

            m_ListView.Hide();
            m_ViewContainer.Add(m_ListView);

            m_SearchEmptyMessage = new CenteredMessageElement();
            m_SearchEmptyMessage.Hide();
            Add(m_SearchEmptyMessage);

#if UNITY_2020_1_OR_NEWER
            m_ListView.onSelectionChange += OnLocalSelectionChanged;
#else
            m_ListView.onSelectionChanged += OnSelectionChanged;
#endif

            m_ItemsCache = new HierarchyItemsCache();

            m_CurrentViewMode = ViewMode.Full;

            Add(m_ViewContainer);
            Selection.selectionChanged += OnGlobalSelectionChanged;
        }
Example #2
0
        void RefreshView()
        {
            // This is split in two because RefreshSearchView
            // can change the current view mode if no result is found.
            // We need to refresh the data before deciding what to show
            if (m_CurrentViewMode == ViewMode.Full)
            {
                m_TreeView.PrepareItemsToExpand(m_TreeViewItemsToExpand);
                m_TreeView.Refresh();
            }
            else if (m_CurrentViewMode == ViewMode.Search)
            {
                RefreshSearchView();
            }

            switch (m_CurrentViewMode)
            {
            case ViewMode.Full:
                TrySelect(m_SelectedItem);

                m_SearchEmptyMessage.Hide();
                m_ListView.Hide();
                m_TreeView.Show();
                m_ViewContainer.Show();
                break;

            case ViewMode.Search:
                TrySelect(m_SelectedItem);

                m_SearchEmptyMessage.Hide();
                m_TreeView.Hide();
                m_ListView.Show();
                m_ViewContainer.Show();
                break;

            case ViewMode.Message:
                m_SearchEmptyMessage.Show();
                m_TreeView.Hide();
                m_ListView.Hide();
                m_ViewContainer.Hide();
                break;
            }
        }
        /// <summary>
        /// Refresh tree view to update with latest information.
        /// </summary>
        void Refresh()
        {
            // System details need to be updated also.
            m_SystemDetailsVisualElement.Target       = m_LastSelectedItem;
            m_SystemDetailsVisualElement.SearchFilter = SearchFilter;

            // Check if there is search result
            if (!SearchFilter.IsEmpty)
            {
                PopulateListViewWithSearchResults();
                var hasSearchResult = m_ListViewFilteredItems.Any();

                m_SystemListView.ToggleVisibility(hasSearchResult);
                m_SystemTreeView.Hide();

                m_SystemDetailsVisualElement.ToggleVisibility(hasSearchResult);
                m_SearchEmptyMessage.ToggleVisibility(!hasSearchResult);
                if (string.IsNullOrEmpty(SearchFilter.ErrorComponentType))
                {
                    m_SearchEmptyMessage.Title   = k_NoSystemsFoundTitle;
                    m_SearchEmptyMessage.Message = string.Empty;
                }
                else
                {
                    m_SearchEmptyMessage.Title   = k_ComponentTypeNotFoundTitle;
                    m_SearchEmptyMessage.Message = string.Format(k_ComponentTypeNotFoundContent, SearchFilter.ErrorComponentType);
                }

                // Remove detail section if not in the results.
                if (Contains(m_SystemDetailsVisualElement) && !m_ListViewFilteredItems.Contains(m_LastSelectedItem))
                {
                    Remove(m_SystemDetailsVisualElement);
                }
            }
            else
            {
                m_SystemListView.Hide();
                m_SystemTreeView.Show();

                m_SearchEmptyMessage.Hide();
                m_SystemDetailsVisualElement.Show();
            }

            SetSelection();
        }