//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
//**************** Copyright (c) 2016 Marko Pintera (marko.pintera@gmail.com). All rights reserved. **********************//
using System;
using System.IO;
using System.Runtime.CompilerServices;
using bs;
namespace bs.Editor
{
/** @addtogroup Script
* @{
*/
///
/// Contains all supported external code editors
///
public enum CodeEditorType // Note: Must match C++ CodeEditorType enum
{
VS2008,
VS2010,
VS2012,
VS2013,
VS2015,
VS2017,
MonoDevelop,
None
}
///
/// Handles interaction with the external application used for editing scripts.
///
public static class CodeEditor
{
///
/// Contains resource types that are relevant to the code editor.
///
public static readonly ResourceType[] CodeTypes =
{
ResourceType.ScriptCode,
ResourceType.PlainText,
ResourceType.Shader,
ResourceType.ShaderInclude
};
private static bool isSolutionDirty;
///
/// Currently active code editor.
///
public static CodeEditorType ActiveEditor
{
set { Internal_SetActiveEditor(value); }
get { return Internal_GetActiveEditor(); }
}
///
/// Checks if the code editor's solution requires updating.
///
internal static bool IsSolutionDirty
{
get { return isSolutionDirty; }
}
///
/// Returns a list of all code editors available on this machine.
///
public static CodeEditorType[] AvailableEditors
{
get { return Internal_GetAvailableEditors(); }
}
///
/// Returns the absolute path at which the code editor solution is stored at.
///
public static string SolutionPath
{
get { return Internal_GetSolutionPath(); }
}
///
/// Opens a script file in the currently active code editor.
///
/// Path to the script file to open, either absolute or relative to the project resources folder.
/// Line in the file to focus the editor on.
public static void OpenFile(string path, int line)
{
if (IsSolutionDirty || !File.Exists(SolutionPath))
SyncSolution();
Internal_OpenFile(path, line);
}
///
/// Generates a solution file for the active editor, which includes all scripts in the project.
///
public static void SyncSolution()
{
Internal_SyncSolution();
isSolutionDirty = false;
}
///
/// Notifies the code editor that code file structure has changed and the solution needs to be rebuilt.
///
internal static void MarkSolutionDirty()
{
isSolutionDirty = true;
}
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern void Internal_SetActiveEditor(CodeEditorType type);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern CodeEditorType Internal_GetActiveEditor();
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern CodeEditorType[] Internal_GetAvailableEditors();
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern void Internal_OpenFile(string path, int line);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern void Internal_SyncSolution();
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern string Internal_GetSolutionPath();
}
/** @} */
}