void PopulateListViewWithSearchResults()
        {
            BuildFilterResults();

            foreach (var filteredItem in m_ListViewFilteredItems)
            {
                filteredItem.Release();
            }
            m_ListViewFilteredItems.Clear();
            foreach (var system in m_SearchResultsFlatSystemList)
            {
                var listViewItems = SystemTreeViewItem.Acquire(PlayerLoopSystemGraph.Current, system.Node, null, m_World);
                m_ListViewFilteredItems.Add(listViewItems);
            }

            m_SystemListView.Refresh();
        }
        void PopulateAllChildren(SystemTreeViewItem item)
        {
            if (item.SystemHandle != null)
            {
                var systemForSearch = new SystemForSearch(item.SystemHandle)
                {
                    Node = item.Node
                };
                m_AllSystemsForSearch.Add(systemForSearch);

                var keyString = Properties.Editor.TypeUtility.GetTypeDisplayName(item.SystemHandle.GetSystemType()).Replace(".", "|");

                // TODO: Find better solution to be able to uniquely identify each system.
                // At the moment, we are using system name to identify each system, which is not reliable
                // because there can be multiple systems with the same name in a world. This is only a
                // temporary solution to avoid the error of adding the same key into the map. We need to
                // find a proper solution to be able to uniquely identify each system.
                if (!m_SystemDependencyMap.ContainsKey(keyString))
                {
                    m_SystemDependencyMap.Add(keyString, SystemDependencyUtilities.GetDependencySystemNamesFromGivenSystemType(item.SystemHandle.GetSystemType()).ToArray());
                }
            }

            // Get last selected item.
            if (item.id == m_LastSelectedItemId)
            {
                m_LastSelectedItem?.Release();
                m_LastSelectedItem = SystemTreeViewItem.Acquire(item.Graph, item.Node, (SystemTreeViewItem)item.parent, item.World);
                m_SystemDetailsVisualElement.LastSelectedItem = m_LastSelectedItem;
            }

            if (!item.HasChildren)
            {
                return;
            }

            item.PopulateChildren();

            foreach (var child in item.children)
            {
                PopulateAllChildren(child as SystemTreeViewItem);
            }
        }
Exemplo n.º 3
0
        void PopulateAllChildren(SystemTreeViewItem item)
        {
            if (item.id == m_LastSelectedItemId)
            {
                m_LastSelectedItem = item;
                m_SystemDetailsVisualElement.LastSelectedItem = m_LastSelectedItem;
            }

            if (!item.HasChildren)
            {
                return;
            }

            item.PopulateChildren(SearchFilter, m_SystemDependencyList);

            foreach (var child in item.children)
            {
                PopulateAllChildren(child as SystemTreeViewItem);
            }
        }
Exemplo n.º 4
0
        void CreateSystemDetailsSection()
        {
            m_SystemDetailsVisualElement      = new SystemDetailsVisualElement();
            SystemTreeView.onSelectionChange += (selectedItems) =>
            {
                var item = selectedItems.OfType <SystemTreeViewItem>().FirstOrDefault();
                if (null == item)
                {
                    return;
                }

                switch (item.System)
                {
                case null:
                {
                    if (this.Contains(m_SystemDetailsVisualElement))
                    {
                        Remove(m_SystemDetailsVisualElement);
                    }

                    return;
                }
                }

                // Remember last selected item id so that query information can be properly updated.
                m_LastSelectedItemId = item.id;
                m_LastSelectedItem   = item;

                // Start fresh.
                if (this.Contains(m_SystemDetailsVisualElement))
                {
                    Remove(m_SystemDetailsVisualElement);
                }

                m_SystemDetailsVisualElement.Target           = item;
                m_SystemDetailsVisualElement.SearchFilter     = SearchFilter;
                m_SystemDetailsVisualElement.Parent           = this;
                m_SystemDetailsVisualElement.LastSelectedItem = m_LastSelectedItem;
                this.Add(m_SystemDetailsVisualElement);
            };
        }
        void OnSelectionChanged(SystemTreeViewItem selectedItem)
        {
            m_LastSelectedItem?.Release();
            m_LastSelectedItem = null;

            if (null == selectedItem)
            {
                return;
            }

            if (!selectedItem.SystemHandle.Valid)
            {
                if (Contains(m_SystemDetailsVisualElement))
                {
                    Remove(m_SystemDetailsVisualElement);
                }

                return;
            }

            // Remember last selected item id so that query information can be properly updated.
            m_LastSelectedItemId = selectedItem.id;

            m_LastSelectedItem = SystemTreeViewItem.Acquire(selectedItem.Graph, selectedItem.Node, (SystemTreeViewItem)selectedItem.parent, selectedItem.World);
            m_ScrollToItemId   = selectedItem.id;

            // Start fresh.
            if (Contains(m_SystemDetailsVisualElement))
            {
                Remove(m_SystemDetailsVisualElement);
            }

            m_SystemDetailsVisualElement.Target           = selectedItem;
            m_SystemDetailsVisualElement.SearchFilter     = SearchFilter;
            m_SystemDetailsVisualElement.Parent           = this;
            m_SystemDetailsVisualElement.LastSelectedItem = m_LastSelectedItem;
            Add(m_SystemDetailsVisualElement);
        }
        void ReleaseAllPooledItems()
        {
            foreach (var rootItem in m_TreeViewRootItems)
            {
                ((SystemTreeViewItem)rootItem).Release();
            }
            m_TreeViewRootItems.Clear();

            foreach (var filteredItem in m_ListViewFilteredItems)
            {
                filteredItem.Release();
            }
            m_ListViewFilteredItems.Clear();

            if (m_LastSelectedItem != null)
            {
                m_LastSelectedItem?.Release();
                m_LastSelectedItem = null;
            }

            m_SystemTreeView.Refresh();
            m_SystemListView.Refresh();
        }
        void RecreateTreeViewRootItems()
        {
            ReleaseAllPooledItems();

            if (World.All.Count > 0 && string.IsNullOrEmpty(SearchFilter.ErrorComponentType))
            {
                var graph = PlayerLoopSystemGraph.Current;

                foreach (var node in graph.Roots)
                {
                    if (!node.ShowForWorld(m_World))
                    {
                        continue;
                    }

                    var item = SystemTreeViewItem.Acquire(graph, node, null, m_World);
                    PopulateAllChildren(item);
                    m_TreeViewRootItems.Add(item);
                }

                m_SystemTreeView.Refresh();
            }
        }
Exemplo n.º 8
0
        public static SystemTreeViewItem GetSystemTreeViewItem(PlayerLoopSystemGraph graph, IPlayerLoopNode node, SystemTreeViewItem parent, World world)
        {
            var item = Pool <SystemTreeViewItem> .GetPooled(LifetimePolicy.Permanent);

            item.World  = world;
            item.Graph  = graph;
            item.Node   = node;
            item.parent = parent;
            return(item);
        }
Exemplo n.º 9
0
 public static void ReturnToPool(SystemTreeViewItem item)
 {
     Pool <SystemTreeViewItem> .Release(item);
 }
        public static SystemTreeViewItem Acquire(PlayerLoopSystemGraph graph, IPlayerLoopNode node, SystemTreeViewItem parent, World world)
        {
            var item = Pool.Acquire();

            item.World  = world;
            item.Graph  = graph;
            item.Node   = node;
            item.parent = parent;

            return(item);
        }