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 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 ExpandedLoop(ObjectCtrl _objectCtrl) { if (_objectCtrl == null) { return; } TreeViewItemContainerData itemContainerData = (TreeViewItemContainerData)this.virtualizingTreeView.GetItemContainerData((object)_objectCtrl); if (itemContainerData == null) { this.ExpandedLoop(_objectCtrl.Parent); } else if (itemContainerData.IsExpanded) { return; } this.virtualizingTreeView.Expand((object)_objectCtrl); }
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; }
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(); } }