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;
        }
示例#2
0
        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;
            }
        }
示例#6
0
 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);
            }
        }
示例#10
0
        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;
        }
示例#12
0
        private void OnItemDoubleClick(object sender, ItemArgs e)
        {
            VirtualizingTreeViewItem treeViewItem = m_treeView.GetTreeViewItem(e.Items[0]);

            if (treeViewItem != null)
            {
                treeViewItem.IsExpanded = !treeViewItem.IsExpanded;
            }

            Input.ActivateInputField();
        }
示例#13
0
        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;
        }
示例#16
0
        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;
        }
示例#17
0
 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;
     }
 }
示例#18
0
        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();
            }
        }
示例#20
0
        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;
            }
        }
示例#21
0
        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;
        }
示例#23
0
        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();
            }
        }
示例#24
0
        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;
        }