public void LoadProject(ProjectItem root) { if (ShowRootFolder) { m_treeView.Items = new[] { root }; m_treeView.SelectedItem = root; } else { if (root.Children != null) { m_root.Children = root.Children.OrderBy(projectItem => projectItem.NameExt).ToList(); m_treeView.Items = m_root.Children.Where(projectItem => CanDisplayFolder(projectItem)).ToArray(); m_treeView.SelectedItem = m_treeView.Items.OfType <object>().FirstOrDefault(); } } VirtualizingTreeViewItem rootTreeViewItem = m_treeView.GetTreeViewItem(0); if (rootTreeViewItem != null) { rootTreeViewItem.IsExpanded = true; } m_root = root; }
private void AddItem(ProjectItem parentFolder, ProjectItem folder, string[] existingNames) { m_treeView.AddChild(parentFolder, folder); if (existingNames.Length > 0) { int index = Array.IndexOf(existingNames.Union(new[] { folder.Name }).OrderBy(n => n).ToArray(), folder.Name); if (index > 0) { m_treeView.SetNextSibling(parentFolder.Children.Where(c => c.IsFolder).OrderBy(c => c.Name).ElementAt(index - 1), folder); } else { m_treeView.SetPrevSibling(parentFolder.Children.Where(c => c.IsFolder).OrderBy(c => c.Name).ElementAt(index + 1), folder); } } ProjectItem projectItem = parentFolder; Expand(parentFolder); m_treeView.ScrollIntoView(folder); m_treeView.SelectedItem = folder; VirtualizingTreeViewItem treeViewItem = m_treeView.GetTreeViewItem(folder); treeViewItem.IsEditing = true; }
protected virtual void OnParentChanged(ExposeToEditor obj, ExposeToEditor oldParent, ExposeToEditor newParent) { if (Editor.IsPlaymodeStateChanging) { return; } if (!IsFilterEmpty) { return; } bool isNewParentExpanded = true; bool isOldParentExpanded = true; bool isLastChild = false; if (newParent != null) { isNewParentExpanded = m_treeView.IsExpanded(newParent); } if (oldParent != null) { TreeViewItemContainerData itemContainerData = (TreeViewItemContainerData)m_treeView.GetItemContainerData(oldParent); isLastChild = !oldParent.HasChildren(); //!itemContainerData.HasChildren(m_treeView); isOldParentExpanded = m_treeView.IsExpanded(oldParent); } if (isNewParentExpanded) { m_treeView.ChangeParent(newParent, obj); if (!isOldParentExpanded) { if (isLastChild) { VirtualizingTreeViewItem oldParentContainer = m_treeView.GetTreeViewItem(oldParent); if (oldParentContainer) { oldParentContainer.CanExpand = false; } } } } else { if (newParent != null) { VirtualizingTreeViewItem newParentTreeViewItem = m_treeView.GetTreeViewItem(newParent); if (newParentTreeViewItem != null) { newParentTreeViewItem.CanExpand = true; } } m_treeView.RemoveChild(oldParent, obj); } }
private void InsertOrdered(ProjectItem parent, ProjectItem item) { parent.AddChild(item); m_treeView.RemoveChild(parent, item, parent.Children.Count == 1); VirtualizingTreeViewItem treeViewItem = m_treeView.GetTreeViewItem(item); if (treeViewItem == null) { m_treeView.AddChild(parent, item); } ProjectItem[] orderedChildren = parent.Children.OrderBy(projectItem => projectItem.NameExt).ToArray(); int index = Array.IndexOf(orderedChildren, item); item.SetSiblingIndex(index); if (item.IsFolder) { if (index > 0) { object prevSibling = parent.Children[index - 1]; m_treeView.SetNextSibling(prevSibling, item); } else { if (parent.Children.Count > 1) { object nextSibling = parent.Children[1]; m_treeView.SetPrevSibling(nextSibling, item); } } } }
private void OnObjectAwaked(ExposeToEditor o) { if (o is ExposeToEditor) { if (m_isSpawningPrefab && m_treeView.DropAction != ItemDropAction.None) { VirtualizingTreeViewItem treeViewItem = m_treeView.GetTreeViewItem(m_treeView.DropTarget); GameObject dropTarget = (GameObject)m_treeView.DropTarget; if (m_treeView.DropAction == ItemDropAction.SetLastChild) { o.transform.SetParent(dropTarget.transform); if (m_treeView.IndexOf(o.gameObject) == -1) { m_treeView.AddChild(dropTarget, o.gameObject); } treeViewItem.CanExpand = true; treeViewItem.IsExpanded = true; } else { int index; if (m_treeView.DropAction == ItemDropAction.SetNextSibling) { index = m_treeView.IndexOf(dropTarget) + 1; } else { index = m_treeView.IndexOf(dropTarget); } o.transform.SetParent(dropTarget.transform.parent); o.transform.SetSiblingIndex(index); TreeViewItemContainerData itemContainerData = (TreeViewItemContainerData)m_treeView.Insert(index, o.gameObject); itemContainerData.Parent = treeViewItem.Parent; //TreeViewItem newTreeViewItem = (TreeViewItem)m_treeView.Insert(index, o.gameObject); //newTreeViewItem.Parent = treeViewItem.Parent; } } else { ExposeToEditor obj = o; GameObject parent = null; if (obj.Parent != null) { parent = obj.Parent.gameObject; } if (m_treeView.IndexOf(obj.gameObject) == -1) { m_treeView.AddChild(parent, obj.gameObject); } } m_isSpawningPrefab = false; } }
private void RenameFolder(string arg) { VirtualizingTreeViewItem treeViewItem = m_treeView.GetTreeViewItem(m_treeView.SelectedItem); if(treeViewItem != null && treeViewItem.CanEdit) { treeViewItem.IsEditing = true; } }
private void OnParentChanged(ExposeToEditor obj, ExposeToEditor oldParent, ExposeToEditor newParent) { if (!m_isStarted) { return; } if (RuntimeEditorApplication.IsPlaymodeStateChanging) { return; } GameObject newParentGO = null; GameObject oldParentGO = null; bool isNewParentExpanded = true; bool isOldParentExpanded = true; bool isLastChild = false; if (newParent != null) { newParentGO = newParent.gameObject; isNewParentExpanded = m_treeView.IsExpanded(newParentGO); } if (oldParent != null) { oldParentGO = oldParent.gameObject; isLastChild = (oldParent.ChildCount - oldParent.MarkedAsDestroyedChildCount) <= 1; isOldParentExpanded = m_treeView.IsExpanded(oldParentGO); } if (isNewParentExpanded) { m_treeView.ChangeParent(newParentGO, obj.gameObject); if (!isOldParentExpanded) { if (isLastChild) { VirtualizingTreeViewItem oldParentContainer = m_treeView.GetTreeViewItem(oldParentGO); if (oldParentContainer) { oldParentContainer.CanExpand = false; } } } } else { if (newParentGO != null) { VirtualizingTreeViewItem newParentTreeViewItem = m_treeView.GetTreeViewItem(newParentGO); if (newParentTreeViewItem != null) { newParentTreeViewItem.CanExpand = true; } } m_treeView.RemoveChild(oldParentGO, obj.gameObject, isLastChild); } }
protected virtual void RenameContextMenuCmd(string arg) { VirtualizingTreeViewItem treeViewItem = m_treeView.GetTreeViewItem(m_treeView.SelectedItem); if (treeViewItem != null && treeViewItem.CanEdit) { treeViewItem.IsEditing = true; } }
public void UpdateProjectItem(ProjectItem projectItem) { VirtualizingTreeViewItem treeViewItem = m_treeView.GetTreeViewItem(projectItem); if (treeViewItem != null) { m_treeView.DataBindItem(projectItem, treeViewItem); } }
public void UpdateProjectItem(ProjectItem projectItem) { VirtualizingTreeViewItem treeViewItem = m_treeView.GetTreeViewItem(projectItem); ItemContainerData containerData = m_treeView.GetItemContainerData(projectItem); if (treeViewItem != null && containerData != null) { m_treeView.DataBindItem(projectItem, containerData, treeViewItem); } }
private void Start() { m_treeViewItem = GetComponentInParent <VirtualizingTreeViewItem>(); m_treeView = GetComponentInParent <VirtualizingTreeView>(); m_toggle = GetComponent <Toggle>(); m_toggle.isOn = m_treeView.IsItemSelected(m_treeViewItem.Item); m_toggle.onValueChanged.AddListener(OnValueChanged); VirtualizingItemContainer.Selected += OnSelected; VirtualizingItemContainer.Unselected += OnUnselected; }
private void OnItemDoubleClick(object sender, ItemArgs e) { VirtualizingTreeViewItem treeViewItem = m_treeView.GetTreeViewItem(e.Items[0]); if (treeViewItem != null) { treeViewItem.IsExpanded = !treeViewItem.IsExpanded; } Input.ActivateInputField(); }
protected virtual void OnObjectDisabled(ExposeToEditor obj) { VirtualizingTreeViewItem tvItem = m_treeView.GetTreeViewItem(obj); if (tvItem == null) { return; } TextMeshProUGUI text = tvItem.GetComponentInChildren <TextMeshProUGUI>(); text.color = m_hierarchyView.DisabledItemColor; }
private void OnNameChanged(ExposeToEditor obj) { VirtualizingTreeViewItem tvItem = m_treeView.GetTreeViewItem(obj.gameObject); if (tvItem == null) { return; } Text text = tvItem.GetComponentInChildren <Text>(); text.text = obj.gameObject.name; }
private void OnObjectDisabled(ExposeToEditor obj) { VirtualizingTreeViewItem tvItem = m_treeView.GetTreeViewItem(obj.gameObject); if (tvItem == null) { return; } Text text = tvItem.GetComponentInChildren <Text>(); text.color = DisabledItemColor; }
protected virtual void OnNameChanged(ExposeToEditor obj) { VirtualizingTreeViewItem tvItem = m_treeView.GetTreeViewItem(obj); if (tvItem == null) { return; } TextMeshProUGUI text = tvItem.GetComponentInChildren <TextMeshProUGUI>(); text.text = obj.name; }
private void Toggle(ProjectItem projectItem) { VirtualizingTreeViewItem treeViewItem = m_treeView.GetTreeViewItem(projectItem); if (treeViewItem == null) { Toggle(projectItem.Parent); treeViewItem = m_treeView.GetTreeViewItem(projectItem); } else { treeViewItem.IsExpanded = !treeViewItem.IsExpanded; } }
public virtual void Rename(ProjectItem projectItem, string newName) { VirtualizingTreeViewItem tvItem = m_listBox.GetTreeViewItem(projectItem); if (tvItem == null) { return; } TextMeshProUGUI text = tvItem.ItemPresenter.GetComponentInChildren <TextMeshProUGUI>(true); if (text != null) { Rename(text, projectItem, newName); } }
protected virtual void OnDrop(PointerEventData pointerEventData) { if (!IsFilterEmpty) { return; } object[] dragObjects = Editor.DragDrop.DragObjects; if (CanDrop(dragObjects)) { ExposeToEditor dropTarget = (ExposeToEditor)m_treeView.DropTarget; VirtualizingTreeViewItem treeViewItem = null; if (dropTarget != null) { treeViewItem = m_treeView.GetTreeViewItem(m_treeView.DropTarget); } AssetItem[] loadAssetItems = dragObjects.Where(o => o is AssetItem && m_project.ToType((AssetItem)o) == typeof(GameObject)).Select(o => (AssetItem)o).ToArray(); if (loadAssetItems.Length > 0) { m_isSpawningPrefab = true; Editor.IsBusy = true; m_project.Load(loadAssetItems, (error, objects) => { Editor.IsBusy = false; if (error.HasError) { IWindowManager wm = IOC.Resolve <IWindowManager>(); wm.MessageBox(m_localization.GetString("ID_RTEditor_HierarchyView_UnableToLoadAssetItems", "Unable to load asset items"), error.ErrorText); return; } OnAssetItemsLoaded(objects, dropTarget, treeViewItem); }); } else { m_treeView.ExternalItemDrop(); } } else { m_treeView.ExternalItemDrop(); } }
public void ChangeParent(ProjectItem projectItem, ProjectItem oldParent) { if (!m_treeView.IsDropInProgress && m_treeView.GetItemContainerData(projectItem) != null) { m_treeView.ChangeParent(projectItem.Parent, projectItem); } VirtualizingTreeViewItem tvOldParent = m_treeView.GetTreeViewItem(oldParent); if (tvOldParent != null) { tvOldParent.CanExpand = oldParent.Children != null && oldParent.Children.Any(c => c.IsFolder); } VirtualizingTreeViewItem tvNewParent = m_treeView.GetTreeViewItem(projectItem.Parent); if (tvNewParent != null) { tvNewParent.CanExpand = true; } }
protected virtual void OnNameChanged(ExposeToEditor obj) { AssetItem assetItem = m_project.ToAssetItem(obj); if (assetItem == null) { return; } VirtualizingTreeViewItem tvItem = m_listBox.GetTreeViewItem(assetItem); if (tvItem == null) { return; } TextMeshProUGUI text = tvItem.ItemPresenter.GetComponentInChildren <TextMeshProUGUI>(true); if (!Rename(text, assetItem, obj.name)) { obj.SetName(assetItem.Name); } }
protected virtual void OnNameChanged(ExposeToEditor obj) { if (!IsFilterEmpty) { m_treeView.ItemsRemoving -= OnItemRemoving; m_treeView.ItemsRemoved -= OnItemsRemoved; if (Filter(obj)) { if (m_treeView.GetItemContainerData(obj) == null) { AddSortedByName(obj); m_treeView.SelectedItems = Editor.Selection.gameObjects.Select(go => go.GetComponent <ExposeToEditor>()).Where(exposed => exposed != null); } } else { m_treeView.RemoveChild(null, obj); } m_treeView.ItemsRemoving += OnItemRemoving; m_treeView.ItemsRemoved += OnItemsRemoved; } VirtualizingTreeViewItem tvItem = m_treeView.GetTreeViewItem(obj); if (tvItem == null) { return; } TextMeshProUGUI text = tvItem.GetComponentInChildren <TextMeshProUGUI>(); text.text = obj.name; }
public override void Drop(object[] dragObjects, PointerEventData pointerEventData) { base.Drop(dragObjects, pointerEventData); if (CanDrop(dragObjects)) { ExposeToEditor dropTarget = (ExposeToEditor)m_treeView.DropTarget; VirtualizingTreeViewItem treeViewItem = null; if (dropTarget != null) { treeViewItem = m_treeView.GetTreeViewItem(m_treeView.DropTarget); } AssetItem[] loadAssetItems = dragObjects.Where(o => o is AssetItem && m_project.ToType((AssetItem)o) == typeof(GameObject)).Select(o => (AssetItem)o).ToArray(); if (loadAssetItems.Length > 0) { m_isSpawningPrefab = true; Editor.IsBusy = true; m_project.Load(loadAssetItems, (error, objects) => { Editor.IsBusy = false; if (error.HasError) { IWindowManager wm = IOC.Resolve <IWindowManager>(); wm.MessageBox("Unable to load asset items.", error.ErrorText); return; } GameObject[] createdObjects = new GameObject[objects.Length]; for (int i = 0; i < objects.Length; ++i) { GameObject prefab = (GameObject)objects[i]; bool wasPrefabEnabled = prefab.activeSelf; prefab.SetActive(false); GameObject prefabInstance = Instantiate(prefab, Vector3.zero, Quaternion.identity); prefab.SetActive(wasPrefabEnabled); ExposeToEditor exposeToEditor = prefabInstance.GetComponent <ExposeToEditor>(); if (exposeToEditor == null) { exposeToEditor = prefabInstance.AddComponent <ExposeToEditor>(); } exposeToEditor.SetName(prefab.name); if (dropTarget == null) { exposeToEditor.transform.SetParent(null); m_treeView.Add(exposeToEditor); } else { if (m_treeView.DropAction == ItemDropAction.SetLastChild) { exposeToEditor.transform.SetParent(dropTarget.transform); m_treeView.AddChild(dropTarget, exposeToEditor); treeViewItem.CanExpand = true; treeViewItem.IsExpanded = true; } else if (m_treeView.DropAction != ItemDropAction.None) { int index; int siblingIndex; if (m_treeView.DropAction == ItemDropAction.SetNextSibling) { index = m_treeView.IndexOf(dropTarget) + 1; siblingIndex = dropTarget.transform.GetSiblingIndex() + 1; } else { index = m_treeView.IndexOf(dropTarget); siblingIndex = dropTarget.transform.GetSiblingIndex(); } exposeToEditor.transform.SetParent(dropTarget.transform.parent != null ? dropTarget.transform.parent : null); exposeToEditor.transform.SetSiblingIndex(siblingIndex); TreeViewItemContainerData newTreeViewItemData = (TreeViewItemContainerData)m_treeView.Insert(index, exposeToEditor); VirtualizingTreeViewItem newTreeViewItem = m_treeView.GetTreeViewItem(exposeToEditor); if (newTreeViewItem != null) { newTreeViewItem.Parent = treeViewItem.Parent; } else { newTreeViewItemData.Parent = treeViewItem.Parent; } } } prefabInstance.SetActive(true); createdObjects[i] = prefabInstance; } if (createdObjects.Length > 0) { IRuntimeEditor editor = IOC.Resolve <IRuntimeEditor>(); editor.RegisterCreatedObjects(createdObjects); } m_treeView.ExternalItemDrop(); m_isSpawningPrefab = false; }); } else { m_treeView.ExternalItemDrop(); } } else { m_treeView.ExternalItemDrop(); } }
private void OnAssetItemsLoaded(Object[] objects, ExposeToEditor dropTarget, VirtualizingTreeViewItem treeViewItem) { GameObject[] createdObjects = new GameObject[objects.Length]; for (int i = 0; i < objects.Length; ++i) { GameObject prefab = (GameObject)objects[i]; bool wasPrefabEnabled = prefab.activeSelf; prefab.SetActive(false); GameObject prefabInstance = InstantiatePrefab(prefab); prefab.SetActive(wasPrefabEnabled); ExposeToEditor exposeToEditor = prefabInstance.GetComponent <ExposeToEditor>(); if (exposeToEditor == null) { exposeToEditor = prefabInstance.AddComponent <ExposeToEditor>(); } exposeToEditor.SetName(prefab.name); if (dropTarget == null) { exposeToEditor.transform.SetParent(null); m_treeView.Add(exposeToEditor); } else { if (m_treeView.DropAction == ItemDropAction.SetLastChild) { exposeToEditor.transform.SetParent(dropTarget.transform); m_treeView.AddChild(dropTarget, exposeToEditor); treeViewItem.CanExpand = true; treeViewItem.IsExpanded = true; } if (m_lastDropAction != ItemDropAction.None) { int index; int siblingIndex; if (m_lastDropAction == ItemDropAction.SetNextSibling) { index = m_treeView.IndexOf(dropTarget) + 1; siblingIndex = dropTarget.transform.GetSiblingIndex() + 1; } else { index = m_treeView.IndexOf(dropTarget); siblingIndex = dropTarget.transform.GetSiblingIndex(); } exposeToEditor.transform.SetParent(dropTarget.transform.parent != null ? dropTarget.transform.parent : null); exposeToEditor.transform.SetSiblingIndex(siblingIndex); TreeViewItemContainerData newTreeViewItemData = (TreeViewItemContainerData)m_treeView.Insert(index, exposeToEditor); VirtualizingTreeViewItem newTreeViewItem = m_treeView.GetTreeViewItem(exposeToEditor); if (newTreeViewItem != null) { newTreeViewItem.Parent = treeViewItem.Parent; } else { newTreeViewItemData.Parent = treeViewItem.Parent; } } } OnActivatePrefabInstance(prefabInstance); createdObjects[i] = prefabInstance; } if (createdObjects.Length > 0) { IRuntimeEditor editor = IOC.Resolve <IRuntimeEditor>(); editor.RegisterCreatedObjects(createdObjects); } m_treeView.ExternalItemDrop(); m_isSpawningPrefab = false; }
protected virtual void RenameValidateContextMenuCmd(MenuItemValidationArgs args) { VirtualizingTreeViewItem treeViewItem = m_treeView.GetTreeViewItem(m_treeView.SelectedItem); args.IsValid = treeViewItem != null && treeViewItem.CanEdit; }