//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
//**************** Copyright (c) 2016 Marko Pintera (marko.pintera@gmail.com). All rights reserved. **********************//
using System.Collections.Generic;
using bs;
namespace bs.Editor
{
/** @addtogroup Inspectors
* @{
*/
///
/// Renders an inspector for the resource.
///
[CustomInspector(typeof (ScriptCode))]
internal class ScriptCodeInspector : Inspector
{
private const int MAX_SHOWN_CHARACTERS = 3000;
private GUILabel textLabel = new GUILabel("", EditorStyles.MultiLineLabel, GUIOption.FixedHeight(500));
private GUITexture textBg = new GUITexture(null, EditorStylesInternal.ScrollAreaBg);
private GUIToggleField isEditorField = new GUIToggleField(new LocEdString("Is editor script"));
private GUIReimportButton reimportButton;
private string shownText = "";
private ScriptCodeImportOptions importOptions;
///
protected internal override void Initialize()
{
LoadResource();
ScriptCode scriptCode = InspectedObject as ScriptCode;
if (scriptCode == null)
return;
importOptions = GetImportOptions();
isEditorField.OnChanged += x =>
{
importOptions.EditorScript = x;
};
GUIPanel textPanel = Layout.AddPanel();
GUILayout textLayoutY = textPanel.AddLayoutY();
textLayoutY.AddSpace(5);
GUILayout textLayoutX = textLayoutY.AddLayoutX();
textLayoutX.AddSpace(5);
textLayoutX.AddElement(textLabel);
textLayoutX.AddSpace(5);
textLayoutY.AddSpace(5);
GUIPanel textBgPanel = textPanel.AddPanel(1);
textBgPanel.AddElement(textBg);
Layout.AddElement(isEditorField);
Layout.AddSpace(10);
reimportButton = new GUIReimportButton(InspectedResourcePath, Layout, () =>
{
ProjectLibrary.Reimport(InspectedResourcePath, importOptions, true);
});
UpdateGUIValues();
}
///
protected internal override InspectableState Refresh(bool force = false)
{
reimportButton.Update();
return InspectableState.NotModified;
}
///
/// Updates the GUI element values from the current import options object.
///
private void UpdateGUIValues()
{
isEditorField.Value = importOptions.EditorScript;
ScriptCode scriptCode = InspectedObject as ScriptCode;
if (scriptCode == null)
return;
string newText = scriptCode.Text;
string newShownText = scriptCode.Text.Substring(0, MathEx.Min(newText.Length, MAX_SHOWN_CHARACTERS));
if (newShownText != shownText)
{
textLabel.SetContent(newShownText);
shownText = newShownText;
}
}
///
/// Retrieves import options for the resource we're currently inspecting.
///
/// Script code import options object.
private ScriptCodeImportOptions GetImportOptions()
{
ScriptCode scriptCode = InspectedObject as ScriptCode;
ScriptCodeImportOptions output = null;
if (scriptCode != null)
{
LibraryEntry libEntry = ProjectLibrary.GetEntry(ProjectLibrary.GetPath(scriptCode));
if (libEntry != null && libEntry.Type == LibraryEntryType.File)
{
FileEntry fileEntry = (FileEntry)libEntry;
output = fileEntry.Options as ScriptCodeImportOptions;
}
}
if (output == null)
{
if (importOptions == null)
output = new ScriptCodeImportOptions();
else
output = importOptions;
}
return output;
}
}
/** @} */
}