Exemplo n.º 1
0
        private void CreateNewShape(PBShapeType type, out GameObject go, out ExposeToEditor exposeToEditor)
        {
            go = PBShapeGenerator.CreateShape(type);
            go.AddComponent <PBMesh>();

            Renderer renderer = go.GetComponent <Renderer>();

            if (renderer != null && renderer.sharedMaterials.Length == 1 && renderer.sharedMaterials[0] == PBBuiltinMaterials.DefaultMaterial)
            {
                IMaterialPaletteManager paletteManager = IOC.Resolve <IMaterialPaletteManager>();
                if (paletteManager.Palette.Materials.Count > 0)
                {
                    renderer.sharedMaterial = paletteManager.Palette.Materials[0];
                }
            }

            IRuntimeEditor rte   = IOC.Resolve <IRuntimeEditor>();
            RuntimeWindow  scene = rte.GetWindow(RuntimeWindowType.Scene);
            Vector3        position;
            Quaternion     rotation;

            GetPositionAndRotation(scene, out position, out rotation);

            exposeToEditor        = go.AddComponent <ExposeToEditor>();
            go.transform.position = position + rotation * Vector3.up * exposeToEditor.Bounds.extents.y;
            go.transform.rotation = rotation;
        }
Exemplo n.º 2
0
        private object OnNewPolyShape(object arg)
        {
            GameObject     go;
            ExposeToEditor exposeToEditor;

            CreateNewShape(PBShapeType.Cube, out go, out exposeToEditor);
            go.name = "Poly Shape";

            IRuntimeEditor rte   = IOC.Resolve <IRuntimeEditor>();
            RuntimeWindow  scene = rte.GetWindow(RuntimeWindowType.Scene);
            Vector3        position;
            Quaternion     rotation;

            GetPositionAndRotation(scene, out position, out rotation);
            go.transform.position = position;
            go.transform.rotation = rotation;

            PBMesh pbMesh = go.GetComponent <PBMesh>();

            pbMesh.Clear();

            PBPolyShape polyShape = go.AddComponent <PBPolyShape>();

            polyShape.IsEditing = true;

            Editor.Undo.BeginRecord();
            Editor.Selection.activeGameObject = go;
            m_proBuilderTool.Mode             = ProBuilderToolMode.PolyShape;
            Editor.Undo.RegisterCreatedObjects(new[] { exposeToEditor });
            Editor.Undo.EndRecord();

            return(go);
        }
        protected override void OnEditorExist()
        {
            base.OnEditorExist();

            m_editor = IOC.Resolve <IRuntimeEditor>();
            m_editor.BeforeSceneSave += OnBeforeSceneSave;
        }
        public void AddCubeRegion(string command)
        {
            GameObject     cube   = CreateGameObject.CubeRegion();
            IRuntimeEditor editor = IOC.Resolve <IRuntimeEditor>();

            editor.Selection.activeGameObject = cube;
        }
Exemplo n.º 5
0
        private object OnNewShape(object arg)
        {
            GameObject     go;
            ExposeToEditor exposeToEditor;

            CreateNewShape((PBShapeType)arg, out go, out exposeToEditor);

            IRuntimeEditor             rte   = IOC.Resolve <IRuntimeEditor>();
            RuntimeWindow              scene = rte.GetWindow(RuntimeWindowType.Scene);
            IRuntimeSelectionComponent selectionComponent = null;

            if (scene != null)
            {
                selectionComponent = scene.IOCContainer.Resolve <IRuntimeSelectionComponent>();
            }

            Editor.Undo.BeginRecord();
            if (selectionComponent == null || selectionComponent.CanSelect)
            {
                Editor.Selection.activeGameObject = go;
            }

            Editor.Undo.RegisterCreatedObjects(new[] { exposeToEditor });
            Editor.Undo.EndRecord();

            return(go);
        }
        private void Start()
        {
            m_editor = IOC.Resolve <IRuntimeEditor>();
            m_editor.Undo.UndoCompleted += OnUndoCompleted;
            m_editor.Undo.RedoCompleted += OnRedoCompleted;
            m_resourcePreviewUtility     = IOC.Resolve <IResourcePreviewUtility>();
            m_editorsMap = IOC.Resolve <IEditorsMap>();

            if (Material == null)
            {
                Material = m_editor.Selection.activeObject as Material;
            }

            if (Material == null)
            {
                Debug.LogError("Select material");
                return;
            }

            m_previewTexture = new Texture2D(1, 1, TextureFormat.ARGB32, true);

            TxtMaterialName.text = Material.name;
            if (Material.shader != null)
            {
                TxtShaderName.text = Material.shader.name;
            }
            else
            {
                TxtShaderName.text = "Shader missing";
            }

            UpdatePreview(Material);
            BuildEditor();
        }
        public override void Drop(object[] dragObjects, PointerEventData pointerEventData)
        {
            base.Drop(dragObjects, pointerEventData);
            ProjectItem    dropTarget = (ProjectItem)m_listBox.DropTarget;
            IRuntimeEditor editor     = IOC.Resolve <IRuntimeEditor>();

            if (CanCreatePrefab(dropTarget, dragObjects))
            {
                ExposeToEditor dragObject = (ExposeToEditor)dragObjects[0];
                if (dropTarget.IsFolder)
                {
                    editor.CreatePrefab(dropTarget, dragObject, null, assetItem =>
                    {
                    });
                }
            }
            else
            {
                if (dragObjects[0] is ExposeToEditor)
                {
                    ExposeToEditor dragObject = (ExposeToEditor)dragObjects[0];
                    editor.CreatePrefab(m_folders[0], dragObject, null, assetItem =>
                    {
                    });
                }
            }
            m_listBox.ExternalItemDrop();
        }
Exemplo n.º 8
0
        private void Start()
        {
            m_editor = IOC.Resolve <IRuntimeEditor>();
            m_editor.Object.ComponentAdded += OnComponentAdded;

            m_editorsMap = IOC.Resolve <IEditorsMap>();


            GameObject          go = m_editor.Selection.activeGameObject;
            HashSet <Component> ignoreComponents = IgnoreComponents(go);

            InputName.text        = go.name;
            InputName.readOnly    = true;
            TogEnableDisable.isOn = go.activeSelf;

            InputName.onEndEdit.AddListener(OnEndEditName);
            TogEnableDisable.onValueChanged.AddListener(OnEnableDisable);

            Component[] components = go.GetComponents <Component>();
            for (int i = 0; i < components.Length; ++i)
            {
                Component component = components[i];
                CreateComponentEditor(go, component, ignoreComponents);
            }
        }
        public void AddDataVisualization(string dateType)
        {
            if (dateType == "pointcloud2")
            {
                GameObject createdObject = CreateGameObject.PointCloud2("PointCloud2", "/", true);

                // Focus and Select Created Object
                IRuntimeEditor editor = IOC.Resolve <IRuntimeEditor>();
                editor.Selection.activeGameObject = createdObject;
                Debug.Log($"New {createdObject} added");
            }
            else if (dateType == "boundingboxes")
            {
                GameObject createdObject = CreateGameObject.BoudingBoxes("BoundingBoxes", "/", true);

                // Focus and Select Created Object
                IRuntimeEditor editor = IOC.Resolve <IRuntimeEditor>();
                editor.Selection.activeGameObject = createdObject;
                Debug.Log($"New {createdObject} added");
            }
            else if (dateType == "trajectory")
            {
                GameObject createdObject = CreateGameObject.Trajectory("Trajectory", "/");

                IRuntimeEditor editor = IOC.Resolve <IRuntimeEditor>();
                editor.Selection.activeGameObject = createdObject;
                Debug.Log($"New {createdObject.name} added");
            }
            else if (dateType == "socialdistance")
            {
            }
            else if (dateType == "heatmap")
            {
            }
        }
        protected override void Awake()
        {
            base.Awake();
            m_editor = IOC.Resolve <IRuntimeEditor>();

            m_pivotPoint           = new GameObject("MeshEditorPivotPoint");
            m_pivotPoint.hideFlags = HideFlags.HideInHierarchy;
            m_pivotPoint.transform.SetParent(transform);
            ExposeToEditor exposeToEditor = m_pivotPoint.AddComponent <ExposeToEditor>();

            exposeToEditor.CanInspect      = false;
            exposeToEditor.CanDelete       = false;
            exposeToEditor.CanDuplicate    = false;
            exposeToEditor.CanRename       = false;
            exposeToEditor.CanCreatePrefab = false;

            LockAxes la = m_pivotPoint.AddComponent <LockAxes>();

            la.PositionZ          = true;
            la.RotationX          = la.RotationY = la.RotationScreen = la.RotationFree = true;
            la.ScaleZ             = true;
            la.PivotRotation      = true;
            la.PivotRotationValue = RuntimePivotRotation.Local;

            IOC.RegisterFallback <IMeshEditor>(this);

            if (m_editor != null)
            {
                m_editor.Selection.SelectionChanged += OnEditorSelectionChanged;
            }
        }
Exemplo n.º 11
0
        protected virtual void OnDrop(PointerEventData pointerEventData)
        {
            object[]       dragObjects = Editor.DragDrop.DragObjects;
            ProjectItem    dropTarget  = (ProjectItem)m_listBox.DropTarget;
            IRuntimeEditor editor      = IOC.Resolve <IRuntimeEditor>();

            if (dropTarget != null && dropTarget.IsFolder && CanCreatePrefab(dropTarget, dragObjects))
            {
                ExposeToEditor dragObject = (ExposeToEditor)dragObjects[0];
                if (dropTarget.IsFolder)
                {
                    editor.CreatePrefab(dropTarget, dragObject, null, assetItem => { });
                }
            }
            else
            {
                if (dragObjects[0] is ExposeToEditor)
                {
                    ExposeToEditor dragObject = (ExposeToEditor)dragObjects[0];
                    if (dragObject.CanCreatePrefab)
                    {
                        if (m_folders != null)
                        {
                            editor.CreatePrefab(m_folders[0], dragObject, null, assetItem => { });
                        }
                    }
                }
            }
            m_listBox.ExternalItemDrop();
        }
Exemplo n.º 12
0
        private void Start()
        {
            m_editor = IOC.Resolve <IRuntimeEditor>();
            m_editor.Undo.UndoCompleted += OnUndoCompleted;
            m_editor.Undo.RedoCompleted += OnRedoCompleted;
            m_editorsMap = IOC.Resolve <IEditorsMap>();

            if ((Materials == null || Materials.Length == 0) && m_editor.Selection.Length > 0)
            {
                Materials = m_editor.Selection.objects.Cast <Material>().ToArray();
            }

            if (Materials == null || Materials.Length == 0 || Materials[0] == null)
            {
                Debug.LogError("Select material");
                return;
            }

            m_previewTexture = new Texture2D(1, 1, TextureFormat.ARGB32, true);

            TxtMaterialName.text = GetMaterialName(Materials);
            TxtShaderName.text   = GetShaderName(Materials);

            UpdatePreview();
            BuildEditor();
        }
        private void OnAddComponent(Type type)
        {
            IRuntimeEditor editor = IOC.Resolve <IRuntimeEditor>();

            editor.Undo.BeginRecord();

            GameObject[] gameObjects = editor.Selection.gameObjects;
            for (int i = 0; i < gameObjects.Length; ++i)
            {
                GameObject     go             = gameObjects[i];
                ExposeToEditor exposeToEditor = go.GetComponent <ExposeToEditor>();
                foreach (RequireComponent requirement in type.GetCustomAttributes(true).OfType <RequireComponent>())
                {
                    if (requirement.m_Type0 != null && !go.GetComponent(requirement.m_Type0))
                    {
                        editor.Undo.AddComponent(exposeToEditor, requirement.m_Type0);
                    }
                    if (requirement.m_Type1 != null && !go.GetComponent(requirement.m_Type1))
                    {
                        editor.Undo.AddComponent(exposeToEditor, requirement.m_Type1);
                    }
                    if (requirement.m_Type2 != null && !go.GetComponent(requirement.m_Type2))
                    {
                        editor.Undo.AddComponent(exposeToEditor, requirement.m_Type2);
                    }
                }

                editor.Undo.AddComponent(exposeToEditor, type);
            }

            editor.Undo.EndRecord();
        }
Exemplo n.º 14
0
        protected virtual void Start()
        {
            m_projectView   = GetComponent <ProjectView>();
            m_projectTree   = m_projectView.ProjectTree.GetComponent <ProjectTreeViewImpl>();
            m_projectFolder = m_projectView.ProjectFolder.GetComponent <ProjectFolderViewImpl>();
            m_filterInput   = m_projectView.FilterInput;

            m_editor        = IOC.Resolve <IRuntimeEditor>();
            m_windowManager = IOC.Resolve <IWindowManager>();
            m_localization  = IOC.Resolve <ILocalization>();
            m_project       = IOC.Resolve <IProject>();
            if (m_project == null)
            {
                Debug.LogWarning("RTSLDeps.Get.Project is null");
                Destroy(gameObject);
                return;
            }

            m_resourcePreview = IOC.Resolve <IResourcePreviewUtility>();
            if (m_resourcePreview == null)
            {
                Debug.LogWarning("RTEDeps.Get.ResourcePreview is null");
            }

            DockPanel dockPanelsRoot = GetComponent <DockPanel>();

            if (dockPanelsRoot != null)
            {
                dockPanelsRoot.CursorHelper = Editor.CursorHelper;
            }

            UnityEventHelper.AddListener(m_filterInput, inputField => inputField.onValueChanged, OnFiltering);

            m_projectFolder.ItemDoubleClick  += OnProjectFolderItemDoubleClick;
            m_projectFolder.ItemRenamed      += OnProjectFolderItemRenamed;
            m_projectFolder.ItemsDeleted     += OnProjectFolderItemDeleted;
            m_projectFolder.SelectionChanged += OnProjectFolderSelectionChanged;

            m_projectTree.SelectionChanged += OnProjectTreeSelectionChanged;
            m_projectTree.ItemRenamed      += OnProjectTreeItemRenamed;
            m_projectTree.ItemsDeleted     += OnProjectTreeItemDeleted;

            m_project.OpenProjectCompleted    += OnProjectOpenCompleted;
            m_project.CloseProjectCompleted   += OnCloseProjectCompleted;
            m_project.ImportCompleted         += OnImportCompleted;
            m_project.BeforeDeleteCompleted   += OnBeforeDeleteCompleted;
            m_project.DeleteCompleted         += OnDeleteCompleted;
            m_project.RenameCompleted         += OnRenameCompleted;
            m_project.CreateCompleted         += OnCreateCompleted;
            m_project.MoveCompleted           += OnMoveCompleted;
            m_project.SaveCompleted           += OnSaveCompleted;
            m_project.DuplicateItemsCompleted += OnDuplicateCompleted;

            if (m_project.IsOpened)
            {
                m_projectTree.LoadProject(m_project.Root);
                m_projectTree.SelectedItem = m_project.Root;
            }
        }
Exemplo n.º 15
0
        private void OnAddComponent(Type type)
        {
            IRuntimeEditor editor = IOC.Resolve <IRuntimeEditor>();

            GameObject go = editor.Selection.activeGameObject;

            editor.Undo.AddComponent(go.GetComponent <ExposeToEditor>(), type);
        }
Exemplo n.º 16
0
 public void OnPointerClick(PointerEventData eventData)
 {
     if (m_text != null && m_text.gameObject.activeSelf)
     {
         IRuntimeEditor editor = IOC.Resolve <IRuntimeEditor>();
         editor.CreateOrActivateWindow(RuntimeWindowType.Console.ToString());
     }
 }
        private void Awake()
        {
            m_editorsMap = IOC.Resolve <IEditorsMap>();
            m_editor     = IOC.Resolve <IRuntimeEditor>();
            m_editor.Object.ComponentAdded += OnComponentAdded;

            GameObject[] selectedObjects = m_editor.Selection.gameObjects;
            foreach (GameObject go in m_editor.Selection.gameObjects)
            {
                ExposeToEditor exposeToEditor = go.GetComponent <ExposeToEditor>();
                if (exposeToEditor.GetType().Name == typeof(MyExposeToEditor).Name)
                {
                    MyExposeToEditor myExposeToEditor = (MyExposeToEditor)exposeToEditor;
                    if (myExposeToEditor.CanRename)
                    {
                        Header.SetActive(true);
                    }
                    else
                    {
                        Header.SetActive(false);
                    }
                }
            }
            InputName.text = GetObjectName(selectedObjects);
            InputName.onEndEdit.AddListener(OnEndEditName);

            m_selectedGameObjects = m_editor.Selection.gameObjects.Select(go => new GameObjectWrapper(go)).ToArray();
            IsActiveEditor.Init(m_selectedGameObjects, Strong.PropertyInfo((GameObjectWrapper x) => x.IsActive), string.Empty);


            m_editor.IsBusy = true;
            LayersEditor.LoadLayers(layersInfo =>
            {
                m_editor.IsBusy = false;
                List <RangeOptions.Option> layers = new List <RangeOptions.Option>();

                foreach (LayersInfo.Layer layer in layersInfo.Layers)
                {
                    if (!string.IsNullOrEmpty(layer.Name))
                    {
                        layers.Add(new RangeOptions.Option(string.Format("{0}: {1}", layer.Index, layer.Name), layer.Index));
                    }
                }

                LayerEditor.Options = layers.ToArray();
                LayerEditor.Init(m_editor.Selection.gameObjects, Strong.PropertyInfo((GameObject x) => x.layer), string.Empty);

                List <List <Component> > groups = GetComponentGroups(selectedObjects);
                for (int i = 0; i < groups.Count; ++i)
                {
                    List <Component> group = groups[i];
                    CreateComponentEditor(group);
                }

                UnityEventHelper.AddListener(EditLayersButton, btn => btn.onClick, OnEditLayersClick);
            });
        }
Exemplo n.º 18
0
        private void Awake()
        {
            m_editor = IOC.Resolve <IRuntimeEditor>();

            if (RenderPipelineInfo.Type != RPType.Legacy)
            {
                m_defaultMaterial = RenderPipelineInfo.DefaultMaterial;
            }
        }
Exemplo n.º 19
0
 private void OnItemsRemoved(object sender, ItemsRemovedArgs e)
 {
     if (Editor.ActiveWindow == this)
     {
         IRuntimeEditor editor = IOC.Resolve <IRuntimeEditor>();
         editor.Delete(e.Items.OfType <ExposeToEditor>().Select(exposed => exposed.gameObject).ToArray());
     }
     //Removal handled in RuntimeEditor class
 }
Exemplo n.º 20
0
 protected virtual void OnEditorExist()
 {
     m_editor = IOC.Resolve <IRuntimeEditor>();
     m_editor.IsOpenedChanged += OnIsOpenedChanged;
     if (m_editor.IsOpened)
     {
         OnEditorOpened();
     }
 }
        protected virtual void Awake()
        {
            m_localization  = IOC.Resolve <ILocalization>();
            m_hierarchyView = GetComponent <HierarchyView>();
            if (!m_hierarchyView.TreeViewPrefab)
            {
                Debug.LogError("Set TreeViewPrefab field");
                return;
            }

            m_project = IOC.Resolve <IProject>();
            m_editor  = IOC.Resolve <IRuntimeEditor>();

            m_filterInput = m_hierarchyView.FilterInput;
            if (m_filterInput != null)
            {
                m_filterInput.onValueChanged.AddListener(OnFiltering);
            }

            Transform parent = m_hierarchyView.TreePanel != null ? m_hierarchyView.TreePanel : transform;

            m_treeView                   = Instantiate(m_hierarchyView.TreeViewPrefab, parent).GetComponent <VirtualizingTreeView>();
            m_treeView.name              = "HierarchyTreeView";
            m_treeView.CanSelectAll      = false;
            m_treeView.SelectOnPointerUp = true;

            RectTransform rt = (RectTransform)m_treeView.transform;

            rt.Stretch();

            m_treeView.ItemDataBinding  += OnItemDataBinding;
            m_treeView.SelectionChanged += OnSelectionChanged;
            m_treeView.ItemsRemoving    += OnItemRemoving;
            m_treeView.ItemsRemoved     += OnItemsRemoved;
            m_treeView.ItemExpanding    += OnItemExpanding;
            m_treeView.ItemBeginDrag    += OnItemBeginDrag;
            m_treeView.ItemBeginDrop    += OnItemBeginDrop;
            m_treeView.ItemDrag         += OnItemDrag;
            m_treeView.ItemDrop         += OnItemDrop;
            m_treeView.ItemEndDrag      += OnItemEndDrag;
            m_treeView.ItemDragEnter    += OnItemDragEnter;
            m_treeView.ItemDragExit     += OnItemDragExit;
            m_treeView.ItemDoubleClick  += OnItemDoubleClicked;
            m_treeView.ItemClick        += OnItemClick;
            m_treeView.ItemBeginEdit    += OnItemBeginEdit;
            m_treeView.ItemEndEdit      += OnItemEndEdit;
            m_treeView.PointerEnter     += OnTreeViewPointerEnter;
            m_treeView.PointerExit      += OnTreeViewPointerExit;

            m_window = GetComponent <RuntimeWindow>();

            m_window.DragEnterEvent += OnDragEnter;
            m_window.DragLeaveEvent += OnDragLeave;
            m_window.DragEvent      += OnDrag;
            m_window.DropEvent      += OnDrop;
        }
Exemplo n.º 22
0
        private void Awake()
        {
            m_editor       = IOC.Resolve <IRuntimeEditor>();
            m_localization = IOC.Resolve <ILocalization>();

            if (RenderPipelineInfo.Type != RPType.Standard)
            {
                m_defaultMaterial = RenderPipelineInfo.DefaultMaterial;
            }
        }
Exemplo n.º 23
0
        protected virtual void AwakeOverride()
        {
            m_rte = RTE;
            IOC.Register <IRTE>(m_rte);
            IOC.Register(m_rte);


            m_resourcePreview = ResourcePreview;
            m_rteAppearance   = RTEAppearance;
        }
        public void AddDevice(string deviceType)
        {
            GameObject newDeviceObject = CreateGameObject.DeviceWithPointCloud(deviceType);

            // Focus and Select Created Object
            IRuntimeEditor editor = IOC.Resolve <IRuntimeEditor>();

            editor.Selection.activeGameObject = newDeviceObject;
            Debug.Log($"New {deviceType} added");
        }
Exemplo n.º 25
0
 private void SaveCurrentClip()
 {
     if (CurrentClip != null)
     {
         IRuntimeEditor editor = IOC.Resolve <IRuntimeEditor>();
         if (editor != null)
         {
             editor.SaveAsset(CurrentClip);
         }
     }
 }
Exemplo n.º 26
0
        protected override void OnEditorExist()
        {
            OverrideDefaultLayout();

            IRuntimeEditor editor = IOC.Resolve <IRuntimeEditor>();

            if (editor.IsOpened)
            {
                IWindowManager wm = IOC.Resolve <IWindowManager>();
                wm.SetLayout(DefaultLayout, RuntimeWindowType.Scene.ToString());
            }
        }
        private void Awake()
        {
            IOC.RegisterFallback <IMaterialPaletteManager>(this);

            m_editor              = IOC.Resolve <IRuntimeEditor>();
            m_editor.SceneLoaded += OnSceneLoaded;

            m_proBuilderTool = IOC.Resolve <IProBuilderTool>();

            InitPalette();
            IsReady = true;
        }
Exemplo n.º 28
0
        protected override void OnEditorExist()
        {
            IRuntimeEditor editor = IOC.Resolve <IRuntimeEditor>();

            if (editor.IsOpened)
            {
                IWindowManager wm = IOC.Resolve <IWindowManager>();
                wm.SetTopBar(m_topBarPrefab != null ? Instantiate(m_topBarPrefab) : null);
                wm.SetBottomBar(m_bottomBarPrefab != null ? Instantiate(m_bottomBarPrefab) : null);
                wm.SetLeftBar(m_leftBarPrefab != null ? Instantiate(m_leftBarPrefab) : null);
                wm.SetRightBar(m_rightBarPrefab != null ? Instantiate(m_rightBarPrefab) : null);
            }
        }
Exemplo n.º 29
0
        protected override void OnDeactivated()
        {
            base.OnDeactivated();
            IRuntimeEditor editor = IOC.Resolve <IRuntimeEditor>();

            if (editor.IsDirty && editor.Selection.activeObject != null)
            {
                editor.IsDirty = false;
                editor.SaveAsset(editor.Selection.activeObject, result =>
                {
                });
            }
        }
        protected virtual void Awake()
        {
            m_projectTreeView = GetComponent <ProjectTreeView>();
            m_showRootFolder  = m_projectTreeView.ShowRootFolder;
            m_folderIcon      = m_projectTreeView.FolderIcon;

            m_editor = IOC.Resolve <IRuntimeEditor>();
            if (Editor == null)
            {
                Debug.LogError("Editor is null");
                return;
            }

            m_project      = IOC.Resolve <IProject>();
            m_wm           = IOC.Resolve <IWindowManager>();
            m_localization = IOC.Resolve <ILocalization>();

            m_treeView      = Instantiate(m_projectTreeView.TreeViewPrefab, transform).GetComponent <VirtualizingTreeView>();
            m_treeView.name = "ProjectTreeView";

            m_treeView.CanReorder     = false;
            m_treeView.CanReparent    = ShowRootFolder;
            m_treeView.CanUnselectAll = false;
            m_treeView.CanDrag        = ShowRootFolder;
            m_treeView.CanRemove      = false;
            m_treeView.CanSelectAll   = false;

            m_treeView.SelectionChanged += OnSelectionChanged;
            m_treeView.ItemDataBinding  += OnItemDataBinding;
            m_treeView.ItemExpanding    += OnItemExpanding;
            m_treeView.ItemsRemoving    += OnItemsRemoving;
            m_treeView.ItemsRemoved     += OnItemsRemoved;
            m_treeView.ItemBeginEdit    += OnItemBeginEdit;
            m_treeView.ItemEndEdit      += OnItemEndEdit;
            m_treeView.ItemBeginDrag    += OnItemBeginDrag;
            m_treeView.ItemBeginDrop    += OnItemBeginDrop;
            m_treeView.ItemDragEnter    += OnItemDragEnter;
            m_treeView.ItemDrag         += OnItemDrag;
            m_treeView.ItemDragExit     += OnItemDragExit;
            m_treeView.ItemDrop         += OnItemDrop;
            m_treeView.ItemEndDrag      += OnItemEndDrag;
            m_treeView.ItemDoubleClick  += OnItemDoubleClick;
            m_treeView.ItemClick        += OnItemClick;

            m_projectTreeView.DragEnterEvent += OnDragEnter;
            m_projectTreeView.DragLeaveEvent += OnDragLeave;
            m_projectTreeView.DragEvent      += OnDrag;
            m_projectTreeView.DropEvent      += OnDrop;

            IOC.RegisterFallback <IProjectTree>(this);
        }