#pragma once #include "BsEditorPrerequisites.h" #include "BsModule.h" namespace BansheeEngine { class CodeEditor; class CodeEditorFactory; struct BS_ED_EXPORT CodeProjectReference { WString name; Path path; }; struct BS_ED_EXPORT CodeProjectData { WString name; Vector codeFiles; Vector nonCodeFiles; WString defines; Vector assemblyReferences; Vector projectReferences; }; struct BS_ED_EXPORT CodeSolutionData { WString name; Vector projects; }; class BS_ED_EXPORT CodeEditorManager : public Module { public: CodeEditorManager(); ~CodeEditorManager(); const Vector& getAvailableEditors() const { return mEditors; } void setActive(CodeEditorType editor); void openFile(const Path& path, UINT32 lineNumber) const; void syncSolution() const; private: Path getSolutionPath() const; CodeEditor* mActiveEditor; Map mFactoryPerEditor; Vector mEditors; Vector mFactories; }; class BS_ED_EXPORT CodeEditor { public: virtual void openFile(const Path& solutionPath, const Path& path, UINT32 lineNumber) const = 0; virtual void syncSolution(const CodeSolutionData& data, const Path& outputPath) const = 0; }; class BS_ED_EXPORT CodeEditorFactory { public: virtual const Vector& getAvailableEditors() const = 0; virtual CodeEditor* create(CodeEditorType editor) const = 0; }; }