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);
        }