private void OnDetailsDatabinding(object sender, VirtualizingTreeViewItemDataBindingArgs e)
        {
            DetailPrototypeWrapper details = (DetailPrototypeWrapper)e.Item;
            RawImage image = e.ItemPresenter.GetComponentInChildren <RawImage>();

            if (image != null)
            {
                if (image.texture != null && image.texture.name == "TemporaryPreview")
                {
                    Destroy(image.texture);
                }

                if (details.Prototype.usePrototypeMesh && details.Prototype.prototype != null)
                {
                    IResourcePreviewUtility previewUtil = IOC.Resolve <IResourcePreviewUtility>();
                    Texture2D texture = new Texture2D(1, 1, TextureFormat.ARGB32, true);
                    texture.name = "TemporaryPreview";
                    texture.LoadImage(previewUtil.CreatePreviewData(details.Prototype.prototype));
                    image.texture = texture;
                }
                else
                {
                    image.texture = details.Prototype.prototypeTexture;
                }
            }
        }
        private void OnCreateDetail()
        {
            DetailPrototype[] oldDetails = TerrainData.detailPrototypes.ToArray();

            DetailPrototype detail = new DetailPrototype();

            detail.renderMode   = DetailRenderMode.Grass;
            detail.dryColor     = Color.white;
            detail.healthyColor = Color.white;

            List <DetailPrototype> newDetails = TerrainData.detailPrototypes.ToList();

            newDetails.Add(detail);
            TerrainData.detailPrototypes = newDetails.ToArray();
            DetailPrototypeWrapper wrapper = new DetailPrototypeWrapper(detail);

            m_detailsList.Add(wrapper);
            m_detailsList.SelectedItem = wrapper;

            RecordState(oldDetails);
        }