using System.Collections.Generic;
using BansheeEngine;
namespace BansheeEditor
{
///
/// Renders an inspector for the resource.
///
[CustomInspector(typeof(Texture2D))]
internal class Texture2DInspector : 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 cpuReadableField = new GUIToggleField(new LocEdString("CPU readable"));
private GUIButton reimportButton = new GUIButton(new LocEdString("Reimport"));
private TextureImportOptions importOptions;
///
protected internal override void Initialize()
{
if (InspectedObject != null)
{
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;
cpuReadableField.OnChanged += x => importOptions.CPUReadable = x;
reimportButton.OnClick += TriggerReimport;
Layout.AddElement(formatField);
Layout.AddElement(generateMipsField);
Layout.AddElement(maximumMipsField);
Layout.AddElement(srgbField);
Layout.AddElement(cpuReadableField);
Layout.AddSpace(10);
GUILayout reimportButtonLayout = Layout.AddLayoutX();
reimportButtonLayout.AddFlexibleSpace();
reimportButtonLayout.AddElement(reimportButton);
}
}
///
protected internal override void Refresh()
{
TextureImportOptions newImportOptions = GetImportOptions();
formatField.Value = (ulong)newImportOptions.Format;
generateMipsField.Value = newImportOptions.GenerateMipmaps;
maximumMipsField.Value = newImportOptions.MaxMipmapLevel;
srgbField.Value = newImportOptions.IsSRGB;
cpuReadableField.Value = newImportOptions.CPUReadable;
importOptions = newImportOptions;
}
///
/// Retrieves import options for the texture we're currently inspecting.
///
/// Texture import options object.
private TextureImportOptions GetImportOptions()
{
Texture2D texture = InspectedObject as Texture2D;
TextureImportOptions output = null;
if (texture != null)
{
LibraryEntry texEntry = ProjectLibrary.GetEntry(ProjectLibrary.GetPath(texture));
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()
{
Texture2D texture = (Texture2D)InspectedObject;
string resourcePath = ProjectLibrary.GetPath(texture);
ProjectLibrary.Reimport(resourcePath, importOptions, true);
}
}
}