//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
//**************** Copyright (c) 2016 Marko Pintera (marko.pintera@gmail.com). All rights reserved. **********************//
using System.Collections.Generic;
using BansheeEngine;
namespace BansheeEditor
{
/** @addtogroup Inspectors
* @{
*/
///
/// Renders an inspector for the resource.
///
[CustomInspector(typeof(Texture))]
internal class TextureInspector : Inspector
{
private GUIEnumField formatField = new GUIEnumField(typeof(PixelFormat), new LocEdString("Format"));
private GUIToggleField generateMipsField = new GUIToggleField(new LocEdString("Generate mipmaps"));
private GUIIntField maximumMipsField = new GUIIntField(new LocEdString("Maximum mipmap level"));
private GUIToggleField srgbField = new GUIToggleField(new LocEdString("Gamma space"));
private GUIToggleField cpuCachedField = new GUIToggleField(new LocEdString("CPU cached"));
private GUIToggleField isCubemapField = new GUIToggleField(new LocEdString("Cubemap"));
private GUIEnumField cubemapSourceTypeField =
new GUIEnumField(typeof(CubemapSourceType), new LocEdString("Cubemap source"));
private GUIButton reimportButton = new GUIButton(new LocEdString("Reimport"));
private TextureImportOptions importOptions;
///
protected internal override void Initialize()
{
importOptions = GetImportOptions();
formatField.OnSelectionChanged += x => importOptions.Format = (PixelFormat)x;
generateMipsField.OnChanged += x => importOptions.GenerateMipmaps = x;
maximumMipsField.OnChanged += x => importOptions.MaxMipmapLevel = x;
srgbField.OnChanged += x => importOptions.IsSRGB = x;
cpuCachedField.OnChanged += x => importOptions.CPUCached = x;
isCubemapField.OnChanged += x => importOptions.IsCubemap = x;
cubemapSourceTypeField.OnSelectionChanged += x => importOptions.CubemapSourceType = (CubemapSourceType)x;
reimportButton.OnClick += TriggerReimport;
Layout.AddElement(formatField);
Layout.AddElement(generateMipsField);
Layout.AddElement(maximumMipsField);
Layout.AddElement(srgbField);
Layout.AddElement(cpuCachedField);
Layout.AddElement(isCubemapField);
Layout.AddElement(cubemapSourceTypeField);
Layout.AddSpace(10);
GUILayout reimportButtonLayout = Layout.AddLayoutX();
reimportButtonLayout.AddFlexibleSpace();
reimportButtonLayout.AddElement(reimportButton);
}
///
protected internal override InspectableState Refresh()
{
TextureImportOptions newImportOptions = GetImportOptions();
formatField.Value = (ulong)newImportOptions.Format;
generateMipsField.Value = newImportOptions.GenerateMipmaps;
maximumMipsField.Value = newImportOptions.MaxMipmapLevel;
srgbField.Value = newImportOptions.IsSRGB;
cpuCachedField.Value = newImportOptions.CPUCached;
isCubemapField.Value = newImportOptions.IsCubemap;
cubemapSourceTypeField.Value = (ulong) newImportOptions.CubemapSourceType;
cubemapSourceTypeField.Active = importOptions.IsCubemap;
importOptions = newImportOptions;
return InspectableState.NotModified;
}
///
/// Retrieves import options for the texture we're currently inspecting.
///
/// Texture import options object.
private TextureImportOptions GetImportOptions()
{
TextureImportOptions output = null;
LibraryEntry texEntry = ProjectLibrary.GetEntry(InspectedResourcePath);
if (texEntry != null && texEntry.Type == LibraryEntryType.File)
{
FileEntry texFileEntry = (FileEntry)texEntry;
output = texFileEntry.Options as TextureImportOptions;
}
if (output == null)
{
if (importOptions == null)
output = new TextureImportOptions();
else
output = importOptions;
}
return output;
}
///
/// Reimports the texture resource according to the currently set import options.
///
private void TriggerReimport()
{
ProjectLibrary.Reimport(InspectedResourcePath, importOptions, true);
}
}
/** @} */
}