Friendship ended with VISUAL STUDIO, Now RIDER is my best friend

This commit is contained in:
Simon Lübeß
2024-03-09 20:33:26 +01:00
parent 09624e4e59
commit 4e9a6b54f3
7 changed files with 167 additions and 8 deletions
@@ -0,0 +1,11 @@
using System;
namespace GlitchyEditor.CodeEditors;
interface IIdeAdapter
{
static void OpenScript(StringView fileName);
static void OpenScript(StringView fileName, int lineNumber);
static void OpenScriptProject();
}
@@ -0,0 +1,38 @@
using System;
using System.Diagnostics;
using GlitchyEngine;
using System.Collections;
namespace GlitchyEditor.CodeEditors;
class RiderIdeAdapter : IIdeAdapter
{
public static void OpenScript(StringView fileName)
{
OpenScript(fileName, 0);
}
public static void OpenScript(StringView fileName, int lineNumber)
{
String solutionPath = scope .();
Editor.Instance.CurrentProject.PathInProject(solutionPath, scope $"{Editor.Instance.CurrentProject.Name}.sln");
ProcessStartInfo startInfo = scope .();
startInfo.SetFileName(Application.Instance.Settings.ScriptSettings.RiderPath);
startInfo.SetArguments(scope $"{solutionPath} --line {lineNumber} {fileName}");
scope SpawnedProcess().Start(startInfo);
}
public static void OpenScriptProject()
{
String solutionPath = scope .();
Editor.Instance.CurrentProject.PathInProject(solutionPath, scope $"{Editor.Instance.CurrentProject.Name}.sln");
ProcessStartInfo startInfo = scope .();
startInfo.SetFileName(Application.Instance.Settings.ScriptSettings.RiderPath);
startInfo.SetArguments(solutionPath);
scope SpawnedProcess().Start(startInfo);
}
}
@@ -3,9 +3,9 @@ using System.Diagnostics;
using GlitchyEngine;
using System.Collections;
namespace GlitchyEditor;
namespace GlitchyEditor.CodeEditors;
class VisualStudioUtility
class VisualStudioIdeAdapter : IIdeAdapter
{
public static bool IsRunning()
{
@@ -10,6 +10,7 @@ using GlitchyEngine.Content;
using GlitchyEngine;
using GlitchyEditor.Assets;
using System.Diagnostics;
using GlitchyEditor.CodeEditors;
namespace GlitchyEditor.EditWindows
{
@@ -242,7 +243,7 @@ namespace GlitchyEditor.EditWindows
if (ImGui.MenuItem("Open C# Project..."))
{
VisualStudioUtility.OpenScriptProject();
RiderIdeAdapter.OpenScriptProject();
}
ImGui.AttachTooltip("Opens the C# Solution of this project.");
@@ -865,7 +866,7 @@ namespace GlitchyEditor.EditWindows
if (entry->Path.EndsWith(".cs"))
{
// Obviously windows only
VisualStudioUtility.OpenScript(entry->Path);
RiderIdeAdapter.OpenScript(entry->Path);
}
else if (Path.OpenFolder(entry->Path) case .Err)
Log.EngineLogger.Error("Failed to open file.");
+2 -1
View File
@@ -7,6 +7,7 @@ using GlitchLog;
using GlitchyEngine.Scripting;
using GlitchyEngine.Renderer;
using GlitchyEngine;
using GlitchyEditor.CodeEditors;
namespace GlitchyEditor.EditWindows;
@@ -315,7 +316,7 @@ class LogWindow : EditorWindow
{
if (message.Source.MessageOrigin != null)
{
VisualStudioUtility.OpenScript(message.Source.MessageOrigin.FileName);
RiderIdeAdapter.OpenScript(message.Source.MessageOrigin.FileName);
}
}
+14 -1
View File
@@ -26,12 +26,25 @@ namespace GlitchyEngine
namespace GlitchyEditor;
[Reflect]
enum ScriptIde
{
Rider,
VisualStudio
}
[Reflect]
class ScriptSettings
{
[Setting("Script", "Visual Studio path", "The path of the Visual Studio devenv.exe"), BonInclude]
[Setting("Tools", "Visual Studio path", "The path of Visual Studio's \"devenv.exe\""), BonInclude]
public String VisualStudioPath ~ delete _;
[Setting("Tools", "Rider path", "The path to JetBrains Rider IDE (rider64.exe)"), BonInclude]
public String RiderPath ~ delete _;
[Setting("Tools", "IDE", "The IDE that will be used to open scripts for editing."), BonInclude]
public ScriptIde SelectedIde;
public void Apply()
{
if (String.IsNullOrWhiteSpace(VisualStudioPath))
+97 -2
View File
@@ -264,15 +264,110 @@ namespace GlitchyEditor
char8[256] buffer = .();
value.CopyTo(buffer);
value?.CopyTo(buffer);
if (ImGui.InputText(scope $"##{setting.Name}", &buffer, buffer.Count))
{
value..Clear().Append(&buffer);
if (value != null)
value..Clear().Append(&buffer);
else
SetSettingValue!(new String(&buffer));
_settingsChanged = true;
}
}
/*if (fieldInfo.FieldType.IsEnum)
{
uint64 enumValue = 0;
fieldInfo.GetValueReference(setting.SettingsObject);
// Assign value
switch (fieldInfo.FieldType.Size)
{
case 1: enumValue = *(uint8*)&enumValue;
case 2: *(uint16*)&enumValue = *(uint16*)&enumValue;
case 4: *(uint32*)&enumValue = *(uint32*)&enumValue;
case 8: *(uint64*)&enumValue = *(uint64*)&enumValue;
}
bool found = false;
for (var field in valType.GetFields())
{
if (field.[Friend]mFieldData.mFlags.HasFlag(.EnumCase) &&
*(int64*)&field.[Friend]mFieldData.[Friend]mData == valueData)
{
writer.Enum(field.Name);
found = true;
break;
}
}
// Find field on enum
bool found = false;
for (var field in valType.GetFields())
if (field.[Friend]mFieldData.mFlags.HasFlag(.EnumCase)
&& name == field.Name)
{
// Add value of enum case to current enum value
enumValue |= *(int64*)&field.[Friend]mFieldData.[Friend]mData;
found = true;
break;
}
if (!found)
Error!("Enum case not found", reader, valType);
uint64 value = 0;
StringView selectedValue;
for (FieldInfo enumField in fieldInfo.FieldType.GetFields())
{
if (enumField.[Friend]mFieldData.mFlags.HasFlag(.EnumCase))
{
hasCaseData = true;
if (name == enumField.Name)
{
unionPayload = ValueView(enumField.FieldType, val.dataPtr);
foundCase = true;
break;
}
unionDiscrIndex++;
}
else if (enumField.[Friend]mFieldData.mFlags.HasFlag(.EnumDiscriminator))
{
let discrType = enumField.FieldType;
Debug.Assert(discrType.IsInteger);
discrVal = ValueView(discrType, (uint8*)val.dataPtr + enumField.[Friend]mFieldData.mData);
}
}
ImGui.BeginCombo(scope $"##{setting.Name}", null);
for (var v in Enum.GetValues(fieldInfo.FieldType))
{
}
ImGui.EndCombo();
/*// Find field on enum
bool found = false;
for (var field in valType.GetFields())
if (field.[Friend]mFieldData.mFlags.HasFlag(.EnumCase)
&& name == field.Name)
{
// Add value of enum case to current enum value
enumValue |= *(int64*)&field.[Friend]mFieldData.[Friend]mData;
found = true;
break;
}*/
}*/
}
ImGui.EndTable();