diff --git a/Source/Editor/Modules/SourceCodeEditing/CodeEditingModule.cs b/Source/Editor/Modules/SourceCodeEditing/CodeEditingModule.cs
index e379e911b..fc70d0e81 100644
--- a/Source/Editor/Modules/SourceCodeEditing/CodeEditingModule.cs
+++ b/Source/Editor/Modules/SourceCodeEditing/CodeEditingModule.cs
@@ -334,6 +334,9 @@ namespace FlaxEditor.Modules.SourceCodeEditing
}
}
}
+ if (editor == null)
+ editor = Editor.Instance.CodeEditing.Editors[0];
+
Editor.Instance.CodeEditing.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..48b475275 100644
--- a/Source/Editor/Scripting/CodeEditors/VisualStudio/VisualStudioEditor.cpp
+++ b/Source/Editor/Scripting/CodeEditors/VisualStudio/VisualStudioEditor.cpp
@@ -148,12 +148,17 @@ String VisualStudioEditor::GetName() const
return String(ToString(_version));
}
+String VisualStudioEditor::GetGenerateProjectCustomArgs() const
+{
+ return String::Format(TEXT("-{0}"), String(ToString(_version)).ToLower());
+}
+
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 +177,7 @@ void VisualStudioEditor::OpenSolution()
// Generate project files if solution is missing
if (!FileSystem::FileExists(_solutionPath))
{
- ScriptsBuilder::GenerateProject();
+ ScriptsBuilder::GenerateProject(GetGenerateProjectCustomArgs());
}
// Open solution
@@ -187,7 +192,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;