Skip to content

Commit a82a007

Browse files
committed
Added external tool settings and presets
1 parent f3d1822 commit a82a007

File tree

5 files changed

+105
-10
lines changed

5 files changed

+105
-10
lines changed

Sources/Overload/OvEditor/include/OvEditor/Settings/EditorSettings.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
#pragma once
88

9+
#include <OvEditor/Utils/ExternalTools.h>
910
#include <OvTools/Eventing/Event.h>
1011

1112
namespace OvEditor::Settings
@@ -92,5 +93,7 @@ namespace OvEditor::Settings
9293
inline static Property<float> TranslationSnapUnit = { 1.0f };
9394
inline static Property<float> RotationSnapUnit = { 15.0f };
9495
inline static Property<float> ScalingSnapUnit = { 1.0f };
96+
inline static Property<std::string> FolderExternalToolName = std::string{ Utils::ExternalTools.front().name};
97+
inline static Property<std::string> FolderExternalToolCommand = std::string{ Utils::ExternalTools.front().command};
9598
};
9699
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* @project: Overload
3+
* @author: Overload Tech.
4+
* @licence: MIT
5+
*/
6+
7+
#pragma once
8+
9+
#include <string>
10+
#include <unordered_map>
11+
#include <array>
12+
13+
namespace OvEditor::Utils
14+
{
15+
struct ExternalTool
16+
{
17+
std::string_view name;
18+
std::string_view command;
19+
};
20+
21+
constexpr auto ExternalTools = std::to_array<ExternalTool>({
22+
ExternalTool{ "Visual Studio Code", "code \"{}\"" },
23+
ExternalTool{ "Sublime Text", "subl {}" },
24+
ExternalTool{ "Atom", "atom {}" },
25+
});
26+
}

Sources/Overload/OvEditor/src/OvEditor/Panels/AssetBrowser.cpp

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
#include <fstream>
88
#include <iostream>
99

10+
#include <OvEditor/Settings/EditorSettings.h>
11+
1012
#include <OvUI/Widgets/Texts/TextClickable.h>
1113
#include <OvUI/Widgets/Visual/Image.h>
1214
#include <OvUI/Widgets/Visual/Separator.h>
@@ -175,9 +177,27 @@ class BrowserItemContextualMenu : public OvUI::Plugins::ContextualMenu
175177

176178
class FolderContextualMenu : public BrowserItemContextualMenu
177179
{
180+
private:
181+
OvTools::Utils::OptRef<OvUI::Widgets::Menu::MenuItem> m_openInExternalTool;
182+
178183
public:
179184
FolderContextualMenu(const std::string& p_filePath, bool p_protected = false) : BrowserItemContextualMenu(p_filePath, p_protected) {}
180185

186+
auto GetOpenInExternalToolName() const
187+
{
188+
return std::format(
189+
"Open in {}",
190+
OvEditor::Settings::EditorSettings::FolderExternalToolName.Get()
191+
);
192+
}
193+
virtual void Execute() override
194+
{
195+
BrowserItemContextualMenu::Execute();
196+
197+
// Keep the "Open In External Tool" menu item label up to date
198+
m_openInExternalTool->name = GetOpenInExternalToolName();
199+
}
200+
181201
virtual void CreateList() override
182202
{
183203
auto& showInExplorer = CreateWidget<OvUI::Widgets::Menu::MenuItem>("Show in explorer");
@@ -186,15 +206,23 @@ class FolderContextualMenu : public BrowserItemContextualMenu
186206
OvTools::Utils::SystemCalls::ShowInExplorer(filePath);
187207
};
188208

189-
auto& openFolderInVsCode = CreateWidget<OvUI::Widgets::Menu::MenuItem>("Open In Visual Studio Code");
190-
openFolderInVsCode.ClickedEvent += [this]
209+
m_openInExternalTool = CreateWidget<OvUI::Widgets::Menu::MenuItem>(GetOpenInExternalToolName());
210+
m_openInExternalTool->ClickedEvent += [this]
191211
{
192-
const auto command = std::format("code \"{}\"", filePath);
212+
const auto command = std::vformat(
213+
OvEditor::Settings::EditorSettings::FolderExternalToolCommand.Get(),
214+
std::make_format_args(filePath)
215+
);
216+
193217
const auto result = std::system(command.c_str());
194218

195219
if (result != 0)
196220
{
197-
OVLOG_ERROR("Failed to open Visual Studio Code with error code: " + std::to_string(result));
221+
OVLOG_ERROR(std::format(
222+
"Failed to open {} with error code: {}",
223+
OvEditor::Settings::EditorSettings::FolderExternalToolName.Get(),
224+
std::to_string(result)
225+
));
198226
}
199227
};
200228

Sources/Overload/OvEditor/src/OvEditor/Panels/MenuBar.cpp

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,20 @@
1818
#include <OvCore/ECS/Components/CAudioSource.h>
1919
#include <OvCore/ECS/Components/CAudioListener.h>
2020

21+
#include <OvUI/Widgets/Buttons/Button.h>
2122
#include <OvUI/Widgets/Visual/Separator.h>
2223
#include <OvUI/Widgets/Sliders/SliderInt.h>
2324
#include <OvUI/Widgets/Sliders/SliderFloat.h>
2425
#include <OvUI/Widgets/Drags/DragFloat.h>
2526
#include <OvUI/Widgets/Selection/ColorEdit.h>
2627

27-
#include "OvEditor/Panels/MenuBar.h"
28-
#include "OvEditor/Panels/SceneView.h"
29-
#include "OvEditor/Panels/AssetView.h"
30-
#include "OvEditor/Core/EditorActions.h"
31-
#include "OvEditor/Settings/EditorSettings.h"
32-
#include "OvEditor/Utils/ActorCreationMenu.h"
28+
#include <OvEditor/Core/EditorActions.h>
29+
#include <OvEditor/Panels/AssetView.h>
30+
#include <OvEditor/Panels/MenuBar.h>
31+
#include <OvEditor/Panels/SceneView.h>
32+
#include <OvEditor/Settings/EditorSettings.h>
33+
#include <OvEditor/Utils/ActorCreationMenu.h>
34+
#include <OvEditor/Utils/ExternalTools.h>
3335

3436
using namespace OvUI::Panels;
3537
using namespace OvUI::Widgets;
@@ -69,6 +71,38 @@ void OvEditor::Panels::MenuBar::HandleShortcuts(float p_deltaTime)
6971

7072
void OvEditor::Panels::MenuBar::InitializeSettingsMenu()
7173
{
74+
using namespace OvEditor::Settings;
75+
76+
auto& folderInExternalToolSettings = m_settingsMenu->CreateWidget<Menu::MenuList>("Folder External Tool...");
77+
auto& folderExternalToolName = folderInExternalToolSettings.CreateWidget<InputFields::InputText>("", "Name");
78+
auto& folderExternalToolCommand = folderInExternalToolSettings.CreateWidget<InputFields::InputText>("", "Command");
79+
folderExternalToolCommand.selectAllOnClick = true;
80+
folderInExternalToolSettings.ClickedEvent += [&folderExternalToolCommand, &folderExternalToolName]
81+
{
82+
folderExternalToolName.content = EditorSettings::FolderExternalToolName;
83+
folderExternalToolCommand.content = EditorSettings::FolderExternalToolCommand;
84+
};
85+
folderExternalToolName.ContentChangedEvent += [](const auto& p_content)
86+
{
87+
EditorSettings::FolderExternalToolName = p_content;
88+
};
89+
folderExternalToolCommand.ContentChangedEvent += [](const auto& p_content)
90+
{
91+
EditorSettings::FolderExternalToolCommand = p_content;
92+
};
93+
folderInExternalToolSettings.CreateWidget<Visual::Separator>();
94+
folderInExternalToolSettings.CreateWidget<Texts::Text>("Load External Tool Preset:");
95+
for (auto& tool : Utils::ExternalTools)
96+
{
97+
folderInExternalToolSettings.CreateWidget<Buttons::Button>(std::string{ tool.name }, 300.0f).ClickedEvent += [&folderExternalToolName, &folderExternalToolCommand, &tool]
98+
{
99+
EditorSettings::FolderExternalToolName = std::string{ tool.name };
100+
EditorSettings::FolderExternalToolCommand = std::string{ tool.command };
101+
folderExternalToolName.content = tool.name;
102+
folderExternalToolCommand.content = tool.command;
103+
};
104+
}
105+
72106
m_settingsMenu->CreateWidget<MenuItem>("Spawn actors at origin", "", true, true).ValueChangedEvent += EDITOR_BIND(SetActorSpawnAtOrigin, std::placeholders::_1);
73107
m_settingsMenu->CreateWidget<MenuItem>("Vertical Synchronization", "", true, true).ValueChangedEvent += [this](bool p_value) { EDITOR_CONTEXT(device)->SetVsync(p_value); };
74108
auto& cameraSpeedMenu = m_settingsMenu->CreateWidget<MenuList>("Camera Speed");

Sources/Overload/OvEditor/src/OvEditor/Settings/EditorSettings.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ void OvEditor::Settings::EditorSettings::Save()
4242
iniFile.Add("translation_snap_unit", TranslationSnapUnit.Get());
4343
iniFile.Add("rotation_snap_unit", RotationSnapUnit.Get());
4444
iniFile.Add("scaling_snap_unit", ScalingSnapUnit.Get());
45+
iniFile.Add("folder_external_tool_name", FolderExternalToolName.Get());
46+
iniFile.Add("folder_external_tool_command", FolderExternalToolCommand.Get());
4547
iniFile.Rewrite();
4648
}
4749

@@ -57,4 +59,6 @@ void OvEditor::Settings::EditorSettings::Load()
5759
LoadIniEntry<float>(iniFile, "translation_snap_unit", TranslationSnapUnit);
5860
LoadIniEntry<float>(iniFile, "rotation_snap_unit", RotationSnapUnit);
5961
LoadIniEntry<float>(iniFile, "scaling_snap_unit", ScalingSnapUnit);
62+
LoadIniEntry<std::string>(iniFile, "folder_external_tool_name", FolderExternalToolName);
63+
LoadIniEntry<std::string>(iniFile, "folder_external_tool_command", FolderExternalToolCommand);
6064
}

0 commit comments

Comments
 (0)