public virtual void InsertItems(ProjectItem[] items, bool selectAndScrollIntoView) { if (m_folders == null) { return; } items = items.Where(item => m_folders.Contains(item.Parent) && CanDisplayItem(item)).ToArray(); if (items.Length == 0) { return; } m_items = m_items.Union(items).ToList(); List <ProjectItem> sorted = m_items.Where(item => item.IsFolder).OrderBy(item => item.Name).Union(m_items.Where(item => !item.IsFolder).OrderBy(item => item.Name)).ToList(); ProjectItem selectItem = null; for (int i = 0; i < sorted.Count; ++i) { if (items.Contains(sorted[i])) { m_listBox.Insert(i, sorted[i]); selectItem = sorted[i]; } else { VirtualizingItemContainer itemContainer = m_listBox.GetItemContainer(sorted[i]); if (itemContainer != null) { m_listBox.DataBindItem(sorted[i], itemContainer); } } if (!m_idToItem.ContainsKey(sorted[i].ItemID)) { m_idToItem.Add(sorted[i].ItemID, sorted[i]); } } m_items = sorted; if (selectItem != null) { if (selectAndScrollIntoView) { m_listBox.SelectedItem = selectItem; m_listBox.ScrollIntoView(selectItem); } } }
private void OnCreateProjectClick() { InputDialog input = Instantiate(m_inputDialogPrefab); input.transform.position = Vector3.zero; m_windowManager.Dialog(m_localization.GetString("ID_RTEditor_ProjectsDialog_CreateProject", "Create Project"), input.transform, (sender, args) => { string projectName = input.Text; if (string.IsNullOrEmpty(projectName)) { args.Cancel = true; return; } if (m_treeView.Items != null && m_treeView.Items.OfType <ProjectInfo>().Any(p => p.Name == projectName)) { m_windowManager.MessageBox( m_localization.GetString("ID_RTEditor_ProjectsDialog_UnableToCreateProject", "Unable to create project"), m_localization.GetString("ID_RTEditor_ProjectsDialog_ProjectWithSameNameExists", "Project with the same name already exists")); args.Cancel = true; return; } Editor.IsBusy = true; m_project.CreateProject(projectName, (error, newProjectInfo) => { Editor.IsBusy = false; if (error.HasError) { m_windowManager.MessageBox(m_localization.GetString("ID_RTEditor_ProjectsDialog_UnableToCreateProject", "Unable to create project"), error.ErrorText); args.Cancel = true; return; } m_treeView.SelectedItem = null; ProjectInfo[] projectInfo = m_treeView.Items.OfType <ProjectInfo>().Union(new[] { newProjectInfo }).OrderBy(p => p.Name).ToArray(); m_treeView.Insert(Array.IndexOf(projectInfo, newProjectInfo), newProjectInfo); m_treeView.SelectedItem = newProjectInfo; m_treeView.ScrollIntoView(newProjectInfo); }); }, (sender, args) => { }, m_localization.GetString("ID_RTEditor_ProjectsDialog_Btn_Create", "Create"), m_localization.GetString("ID_RTEditor_ProjectsDialog_Btn_Cancel", "Cancel"), 120, 100, 350, 100); }
private void OnCreateProjectClick() { InputDialog input = Instantiate(m_inputDialogPrefab); input.transform.position = Vector3.zero; PopupWindow.Show("Create Project", input.transform, "Create", args => { string projectName = input.Text; if (string.IsNullOrEmpty(projectName)) { args.Cancel = true; return; } if (m_treeView.Items != null && m_treeView.Items.OfType <ProjectInfo>().Any(p => p.Name == projectName)) { PopupWindow.Show("Unable to create project", "Project with the same name already exists", "OK"); args.Cancel = true; return; } m_project.CreateProject(projectName, (error, newProjectInfo) => { if (error.HasError) { PopupWindow.Show("Unable to create project", error.ErrorText, "OK"); args.Cancel = true; return; } ProjectInfo[] projectInfo = m_treeView.Items.OfType <ProjectInfo>().Union(new[] { newProjectInfo }).OrderBy(p => p.Name).ToArray(); m_treeView.Insert(Array.IndexOf(projectInfo, newProjectInfo), newProjectInfo); m_treeView.SelectedItem = newProjectInfo; }); }, "Cancel"); }
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; }
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; } }
public void AddProperty(RuntimeAnimationProperty property) { if (property.ComponentTypeName == RuntimeAnimationProperty.k_SpecialAddButton) { IWindowManager wm = IOC.Resolve <IWindowManager>(); IAnimationSelectPropertiesDialog selectPropertiesDialog = null; Transform dialogTransform = IOC.Resolve <IWindowManager>().CreateDialogWindow(RuntimeWindowType.SelectAnimationProperties.ToString(), "Select Properties", (sender, args) => { }, (sender, args) => { }, 250, 250, 400, 400); selectPropertiesDialog = IOC.Resolve <IAnimationSelectPropertiesDialog>(); selectPropertiesDialog.View = this; selectPropertiesDialog.Target = Target.gameObject; } else { if (BeforePropertiesAdded != null) { BeforePropertiesAdded(this, EventArgs.Empty); } List <RuntimeAnimationProperty> addedProperties = new List <RuntimeAnimationProperty>(); List <int> addedIndexes = new List <int>(); if (m_propertiesTreeView.ItemsCount == 1) { m_propertiesTreeView.Insert(0, m_emptyTop); m_props.Insert(0, m_emptyTop); addedProperties.Add(m_emptyTop); addedIndexes.Add(0); } property = new RuntimeAnimationProperty(property); property.Parent = null; property.Children = null; if (!property.TryToCreateChildren()) { if (Reflection.IsPrimitive(property.Value.GetType())) { property.Curve = new AnimationCurve(); } } Clip.Add(property); m_propertiesTreeView.Insert(m_propertiesTreeView.ItemsCount - 1, property); addedProperties.Add(property); addedIndexes.Add(m_props.Count - 1); m_props.Insert(m_props.Count - 1, property); if (property.Children != null) { for (int i = 0; i < property.Children.Count; i++) { addedProperties.Add(property.Children[i]); addedIndexes.Add(m_props.Count - 1); m_props.Insert(m_props.Count - 1, property.Children[i]); Subscribe(property.Children[i]); } } else { Subscribe(property); } if (PropertiesAdded != null) { PropertiesAdded(new ItemsArg { Items = addedProperties.ToArray(), Rows = addedIndexes.ToArray() }); } } }
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(); } }