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); } }
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); } }
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(); } }
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); }
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); }