diff --git a/Source/Editor/Modules/SourceCodeEditing/CodeEditingModule.cs b/Source/Editor/Modules/SourceCodeEditing/CodeEditingModule.cs index e379e911b..af0187248 100644 --- a/Source/Editor/Modules/SourceCodeEditing/CodeEditingModule.cs +++ b/Source/Editor/Modules/SourceCodeEditing/CodeEditingModule.cs @@ -325,7 +325,7 @@ namespace FlaxEditor.Modules.SourceCodeEditing var codeEditor = options.SourceCode.SourceCodeEditor; if (codeEditor != "None") { - foreach (var e in Editor.Instance.CodeEditing.Editors) + foreach (var e in _editors) { if (string.Equals(codeEditor, e.Name, StringComparison.OrdinalIgnoreCase)) { @@ -334,7 +334,10 @@ namespace FlaxEditor.Modules.SourceCodeEditing } } } - Editor.Instance.CodeEditing.SelectedEditor = editor; + if (editor == null && _editors.Count != 0) + editor = _editors[0]; + + SelectedEditor = editor; } /// diff --git a/Source/Editor/Modules/SourceCodeEditing/DefaultSourceCodeEditor.cs b/Source/Editor/Modules/SourceCodeEditing/DefaultSourceCodeEditor.cs index 074dade6a..00057e9a7 100644 --- a/Source/Editor/Modules/SourceCodeEditing/DefaultSourceCodeEditor.cs +++ b/Source/Editor/Modules/SourceCodeEditing/DefaultSourceCodeEditor.cs @@ -41,9 +41,9 @@ namespace FlaxEditor.Modules.SourceCodeEditing var vsCode = codeEditing.GetInBuildEditor(CodeEditorTypes.VSCode); var rider = codeEditing.GetInBuildEditor(CodeEditorTypes.Rider); -#if PLATFORM_WINDOW +#if PLATFORM_WINDOWS // Favor the newest Visual Studio - for (int i = (int)CodeEditorTypes.VS2019; i >= (int)CodeEditorTypes.VS2008; i--) + for (int i = (int)CodeEditorTypes.VS2026; i >= (int)CodeEditorTypes.VS2008; i--) { var visualStudio = codeEditing.GetInBuildEditor((CodeEditorTypes)i); if (visualStudio != null) @@ -74,7 +74,7 @@ namespace FlaxEditor.Modules.SourceCodeEditing public string Name => "Default"; /// - public string GenerateProjectCustomArgs => null; + public string GenerateProjectCustomArgs => _currentEditor?.GenerateProjectCustomArgs; /// public void OpenSolution() diff --git a/Source/Editor/Modules/SourceCodeEditing/InBuildSourceCodeEditor.cs b/Source/Editor/Modules/SourceCodeEditing/InBuildSourceCodeEditor.cs index a2a333805..222a7a0bc 100644 --- a/Source/Editor/Modules/SourceCodeEditing/InBuildSourceCodeEditor.cs +++ b/Source/Editor/Modules/SourceCodeEditing/InBuildSourceCodeEditor.cs @@ -22,71 +22,14 @@ namespace FlaxEditor.Modules.SourceCodeEditing public InBuildSourceCodeEditor(CodeEditorTypes type) { Type = type; - switch (type) - { - case CodeEditorTypes.Custom: - Name = "Custom"; - break; - case CodeEditorTypes.SystemDefault: - Name = "System Default"; - break; - case CodeEditorTypes.VS2008: - Name = "Visual Studio 2008"; - break; - case CodeEditorTypes.VS2010: - Name = "Visual Studio 2010"; - break; - case CodeEditorTypes.VS2012: - Name = "Visual Studio 2012"; - break; - case CodeEditorTypes.VS2013: - Name = "Visual Studio 2013"; - break; - case CodeEditorTypes.VS2015: - Name = "Visual Studio 2015"; - break; - case CodeEditorTypes.VS2017: - Name = "Visual Studio 2017"; - break; - case CodeEditorTypes.VS2019: - Name = "Visual Studio 2019"; - break; - case CodeEditorTypes.VS2022: - Name = "Visual Studio 2022"; - break; - case CodeEditorTypes.VS2026: - Name = "Visual Studio 2026"; - break; - case CodeEditorTypes.VSCode: - Name = "Visual Studio Code"; - break; - case CodeEditorTypes.VSCodeInsiders: - Name = "Visual Studio Code - Insiders"; - break; - case CodeEditorTypes.Rider: - Name = "Rider"; - break; - default: throw new ArgumentOutOfRangeException(nameof(type), type, null); - } + Name = CodeEditingManager.GetName(type); } /// public string Name { get; set; } /// - public string GenerateProjectCustomArgs - { - get - { - switch (Type) - { - case CodeEditorTypes.VSCodeInsiders: - case CodeEditorTypes.VSCode: return "-vscode -vs2022"; - case CodeEditorTypes.Rider: return "-vs2022"; - default: return null; - } - } - } + public string GenerateProjectCustomArgs => CodeEditingManager.GetGenerateProjectCustomArgs(Type); /// public void OpenSolution() diff --git a/Source/Editor/Scripting/CodeEditor.cpp b/Source/Editor/Scripting/CodeEditor.cpp index b372da189..fcc8eef7c 100644 --- a/Source/Editor/Scripting/CodeEditor.cpp +++ b/Source/Editor/Scripting/CodeEditor.cpp @@ -139,6 +139,34 @@ CodeEditor* CodeEditingManager::GetCodeEditor(CodeEditorTypes editorType) return nullptr; } +String CodeEditingManager::GetName(CodeEditorTypes editorType) +{ + const auto editor = GetCodeEditor(editorType); + if (editor) + { + return editor->GetName(); + } + else + { + LOG(Warning, "Missing code editor type {0}", (int32)editorType); + return String::Empty; + } +} + +String CodeEditingManager::GetGenerateProjectCustomArgs(CodeEditorTypes editorType) +{ + const auto editor = GetCodeEditor(editorType); + if (editor) + { + return editor->GetGenerateProjectCustomArgs(); + } + else + { + LOG(Warning, "Missing code editor type {0}", (int32)editorType); + return String::Empty; + } +} + void CodeEditingManager::OpenFile(CodeEditorTypes editorType, const String& path, int32 line) { const auto editor = GetCodeEditor(editorType); diff --git a/Source/Editor/Scripting/CodeEditor.h b/Source/Editor/Scripting/CodeEditor.h index 9cc71977b..0baae21b0 100644 --- a/Source/Editor/Scripting/CodeEditor.h +++ b/Source/Editor/Scripting/CodeEditor.h @@ -109,9 +109,18 @@ public: /// /// Gets the name of the editor. /// - /// The name + /// The name. virtual String GetName() const = 0; + /// + /// Gets the custom arguments for the Flax.Build tool to add when generating project files for this code editor. + /// + /// The custom arguments to generate project files. + virtual String GetGenerateProjectCustomArgs() const + { + return String::Empty; + } + /// /// Opens the file. /// @@ -169,6 +178,20 @@ public: /// The editor object or null if not found. static CodeEditor* GetCodeEditor(CodeEditorTypes editorType); + /// + /// Gets the name of the editor. + /// + /// The code editor type. + /// The name. + API_FUNCTION() static String GetName(CodeEditorTypes editorType); + + /// + /// Gets the custom arguments for the Flax.Build tool to add when generating project files for this code editor. + /// + /// The code editor type. + /// The custom arguments to generate project files. + API_FUNCTION() static String GetGenerateProjectCustomArgs(CodeEditorTypes editorType); + /// /// Opens the file. Handles async opening. /// diff --git a/Source/Editor/Scripting/CodeEditors/RiderCodeEditor.cpp b/Source/Editor/Scripting/CodeEditors/RiderCodeEditor.cpp index 8884ca322..b63815dce 100644 --- a/Source/Editor/Scripting/CodeEditors/RiderCodeEditor.cpp +++ b/Source/Editor/Scripting/CodeEditors/RiderCodeEditor.cpp @@ -257,12 +257,17 @@ String RiderCodeEditor::GetName() const return TEXT("Rider"); } +String RiderCodeEditor::GetGenerateProjectCustomArgs() const +{ + return TEXT("-vs2022"); +} + void RiderCodeEditor::OpenFile(const String& path, int32 line) { // Generate project files if solution is missing if (!FileSystem::FileExists(_solutionPath)) { - ScriptsBuilder::GenerateProject(TEXT("-vs2022")); + ScriptsBuilder::GenerateProject(GetGenerateProjectCustomArgs()); } // Open file @@ -290,7 +295,7 @@ void RiderCodeEditor::OpenSolution() // Generate project files if solution is missing if (!FileSystem::FileExists(_solutionPath)) { - ScriptsBuilder::GenerateProject(TEXT("-vs2022")); + ScriptsBuilder::GenerateProject(GetGenerateProjectCustomArgs()); } // Open solution @@ -312,5 +317,5 @@ void RiderCodeEditor::OpenSolution() void RiderCodeEditor::OnFileAdded(const String& path) { - ScriptsBuilder::GenerateProject(); + ScriptsBuilder::GenerateProject(GetGenerateProjectCustomArgs()); } diff --git a/Source/Editor/Scripting/CodeEditors/RiderCodeEditor.h b/Source/Editor/Scripting/CodeEditors/RiderCodeEditor.h index d9bf00947..f3c43b5b2 100644 --- a/Source/Editor/Scripting/CodeEditors/RiderCodeEditor.h +++ b/Source/Editor/Scripting/CodeEditors/RiderCodeEditor.h @@ -35,6 +35,7 @@ public: // [CodeEditor] CodeEditorTypes GetType() const override; String GetName() const override; + String GetGenerateProjectCustomArgs() const override; void OpenFile(const String& path, int32 line) override; void OpenSolution() override; void OnFileAdded(const String& path) override; diff --git a/Source/Editor/Scripting/CodeEditors/VisualStudio/VisualStudioEditor.cpp b/Source/Editor/Scripting/CodeEditors/VisualStudio/VisualStudioEditor.cpp index 5c06eec9c..2d79cc02b 100644 --- a/Source/Editor/Scripting/CodeEditors/VisualStudio/VisualStudioEditor.cpp +++ b/Source/Editor/Scripting/CodeEditors/VisualStudio/VisualStudioEditor.cpp @@ -145,7 +145,46 @@ CodeEditorTypes VisualStudioEditor::GetType() const String VisualStudioEditor::GetName() const { - return String(ToString(_version)); + const Char* name; + switch (_version) + { + case VisualStudioVersion::VS2008: + name = TEXT("Visual Studio 2008"); + break; + case VisualStudioVersion::VS2010: + name = TEXT("Visual Studio 2010"); + break; + case VisualStudioVersion::VS2012: + name = TEXT("Visual Studio 2012"); + break; + case VisualStudioVersion::VS2013: + name = TEXT("Visual Studio 2013"); + break; + case VisualStudioVersion::VS2015: + name = TEXT("Visual Studio 2015"); + break; + case VisualStudioVersion::VS2017: + name = TEXT("Visual Studio 2017"); + break; + case VisualStudioVersion::VS2019: + name = TEXT("Visual Studio 2019"); + break; + case VisualStudioVersion::VS2022: + name = TEXT("Visual Studio 2022"); + break; + case VisualStudioVersion::VS2026: + name = TEXT("Visual Studio 2026"); + break; + default: + name = ToString(_version); + break; + } + return String(name); +} + +String VisualStudioEditor::GetGenerateProjectCustomArgs() const +{ + return String::Format(TEXT("-{0}"), String(ToString(_version)).ToLower()); } void VisualStudioEditor::OpenFile(const String& path, int32 line) @@ -153,7 +192,7 @@ void VisualStudioEditor::OpenFile(const String& path, int32 line) // Generate project files if solution is missing if (!FileSystem::FileExists(_solutionPath)) { - ScriptsBuilder::GenerateProject(); + ScriptsBuilder::GenerateProject(GetGenerateProjectCustomArgs()); } // Open file @@ -172,7 +211,7 @@ void VisualStudioEditor::OpenSolution() // Generate project files if solution is missing if (!FileSystem::FileExists(_solutionPath)) { - ScriptsBuilder::GenerateProject(); + ScriptsBuilder::GenerateProject(GetGenerateProjectCustomArgs()); } // Open solution @@ -187,7 +226,7 @@ void VisualStudioEditor::OpenSolution() void VisualStudioEditor::OnFileAdded(const String& path) { // TODO: finish dynamic files adding to the project - for now just regenerate it - ScriptsBuilder::GenerateProject(); + ScriptsBuilder::GenerateProject(GetGenerateProjectCustomArgs()); return; if (!FileSystem::FileExists(_solutionPath)) { diff --git a/Source/Editor/Scripting/CodeEditors/VisualStudio/VisualStudioEditor.h b/Source/Editor/Scripting/CodeEditors/VisualStudio/VisualStudioEditor.h index 1bf1f1433..5c32a1171 100644 --- a/Source/Editor/Scripting/CodeEditors/VisualStudio/VisualStudioEditor.h +++ b/Source/Editor/Scripting/CodeEditors/VisualStudio/VisualStudioEditor.h @@ -56,6 +56,7 @@ public: // [CodeEditor] CodeEditorTypes GetType() const override; String GetName() const override; + String GetGenerateProjectCustomArgs() const override; void OpenFile(const String& path, int32 line) override; void OpenSolution() override; void OnFileAdded(const String& path) override; diff --git a/Source/Editor/Scripting/CodeEditors/VisualStudioCodeEditor.cpp b/Source/Editor/Scripting/CodeEditors/VisualStudioCodeEditor.cpp index 5eba7f20c..bf2ef6bb6 100644 --- a/Source/Editor/Scripting/CodeEditors/VisualStudioCodeEditor.cpp +++ b/Source/Editor/Scripting/CodeEditors/VisualStudioCodeEditor.cpp @@ -128,6 +128,11 @@ String VisualStudioCodeEditor::GetName() const return _isInsiders ? TEXT("Visual Studio Code - Insiders") : TEXT("Visual Studio Code"); } +String VisualStudioCodeEditor::GetGenerateProjectCustomArgs() const +{ + return TEXT("-vs2022 -vscode"); +} + void VisualStudioCodeEditor::OpenFile(const String& path, int32 line) { // Generate VS solution files for intellisense diff --git a/Source/Editor/Scripting/CodeEditors/VisualStudioCodeEditor.h b/Source/Editor/Scripting/CodeEditors/VisualStudioCodeEditor.h index 0212f207e..5091e1134 100644 --- a/Source/Editor/Scripting/CodeEditors/VisualStudioCodeEditor.h +++ b/Source/Editor/Scripting/CodeEditors/VisualStudioCodeEditor.h @@ -37,6 +37,7 @@ public: // [CodeEditor] CodeEditorTypes GetType() const override; String GetName() const override; + String GetGenerateProjectCustomArgs() const override; void OpenFile(const String& path, int32 line) override; void OpenSolution() override; bool UseAsyncForOpen() const override;