//********************************** 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(); } /** @} */ }