Skip to content

Commit b41c6ec

Browse files
authored
Merge pull request #126 from adriengivry/feature/improving_asset_metadata_editor
Improving the AssetProperties window (Previously AssetMetadataEditor)
2 parents d0b4e02 + 29f04c1 commit b41c6ec

13 files changed

Lines changed: 507 additions & 263 deletions

File tree

Sources/Overload/OvCore/include/OvCore/Helpers/GUIDrawer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ namespace OvCore::Helpers
7979
static OvUI::Widgets::Texts::Text& DrawShader(OvUI::Internal::WidgetContainer& p_root, const std::string& p_name, OvRendering::Resources::Shader*& p_data, OvTools::Eventing::Event<>* p_updateNotifier = nullptr);
8080
static OvUI::Widgets::Texts::Text& DrawMaterial(OvUI::Internal::WidgetContainer& p_root, const std::string& p_name, OvCore::Resources::Material*& p_data, OvTools::Eventing::Event<>* p_updateNotifier = nullptr);
8181
static OvUI::Widgets::Texts::Text& DrawSound(OvUI::Internal::WidgetContainer& p_root, const std::string& p_name, OvAudio::Resources::Sound*& p_data, OvTools::Eventing::Event<>* p_updateNotifier = nullptr);
82+
static OvUI::Widgets::Texts::Text& DrawAsset(OvUI::Internal::WidgetContainer& p_root, const std::string& p_name, std::string& p_data, OvTools::Eventing::Event<>* p_updateNotifier = nullptr);
8283

8384
template <typename T>
8485
static void DrawScalar(OvUI::Internal::WidgetContainer& p_root, const std::string& p_name, std::function<T(void)> p_gatherer, std::function<void(T)> p_provider, float p_step = 1.f, T p_min = std::numeric_limits<T>::min(), T p_max = std::numeric_limits<T>::max());

Sources/Overload/OvCore/src/OvCore/Helpers/GUIDrawer.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,38 @@ OvUI::Widgets::Texts::Text& OvCore::Helpers::GUIDrawer::DrawSound(OvUI::Internal
291291
return widget;
292292
}
293293

294+
OvUI::Widgets::Texts::Text& OvCore::Helpers::GUIDrawer::DrawAsset(OvUI::Internal::WidgetContainer& p_root, const std::string& p_name, std::string& p_data, OvTools::Eventing::Event<>* p_updateNotifier)
295+
{
296+
CreateTitle(p_root, p_name);
297+
298+
const std::string displayedText = (p_data.empty() ? std::string("Empty") : p_data);
299+
auto& rightSide = p_root.CreateWidget<OvUI::Widgets::Layout::Group>();
300+
301+
auto& widget = rightSide.CreateWidget<OvUI::Widgets::Texts::Text>(displayedText);
302+
303+
widget.AddPlugin<OvUI::Plugins::DDTarget<std::pair<std::string, OvUI::Widgets::Layout::Group*>>>("File").DataReceivedEvent += [&widget, &p_data, p_updateNotifier](auto p_receivedData)
304+
{
305+
p_data = p_receivedData.first;
306+
widget.content = p_receivedData.first;
307+
if (p_updateNotifier)
308+
p_updateNotifier->Invoke();
309+
};
310+
311+
widget.lineBreak = false;
312+
313+
auto& resetButton = rightSide.CreateWidget<OvUI::Widgets::Buttons::ButtonSmall>("Clear");
314+
resetButton.idleBackgroundColor = ClearButtonColor;
315+
resetButton.ClickedEvent += [&widget, &p_data, p_updateNotifier]
316+
{
317+
p_data = "";
318+
widget.content = "Empty";
319+
if (p_updateNotifier)
320+
p_updateNotifier->Invoke();
321+
};
322+
323+
return widget;
324+
}
325+
294326
void OvCore::Helpers::GUIDrawer::DrawBoolean(OvUI::Internal::WidgetContainer & p_root, const std::string & p_name, std::function<bool(void)> p_gatherer, std::function<void(bool)> p_provider)
295327
{
296328
CreateTitle(p_root, p_name);

Sources/Overload/OvEditor/OvEditor.vcxproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ xcopy "$(ProjectDir)Layout.ini" "$(SolutionDir)..\..\Build\$(ProjectName)\$(Conf
147147
<ClCompile Include="src\OvEditor\Core\PanelsManager.cpp" />
148148
<ClCompile Include="src\OvEditor\Core\ProjectHub.cpp" />
149149
<ClCompile Include="src\OvEditor\Panels\AssetBrowser.cpp" />
150-
<ClCompile Include="src\OvEditor\Panels\AssetMetadataEditor.cpp" />
150+
<ClCompile Include="src\OvEditor\Panels\AssetProperties.cpp" />
151151
<ClCompile Include="src\OvEditor\Panels\AssetView.cpp" />
152152
<ClCompile Include="src\OvEditor\Panels\AView.cpp" />
153153
<ClCompile Include="src\OvEditor\Panels\AViewControllable.cpp" />
@@ -178,7 +178,7 @@ xcopy "$(ProjectDir)Layout.ini" "$(SolutionDir)..\..\Build\$(ProjectName)\$(Conf
178178
<ClInclude Include="include\OvEditor\Core\GizmoBehaviour.h" />
179179
<ClInclude Include="include\OvEditor\Core\PanelsManager.h" />
180180
<ClInclude Include="include\OvEditor\Core\ProjectHub.h" />
181-
<ClInclude Include="include\OvEditor\Panels\AssetMetadataEditor.h" />
181+
<ClInclude Include="include\OvEditor\Panels\AssetProperties.h" />
182182
<ClInclude Include="include\OvEditor\Resources\RawShaders.h" />
183183
<ClInclude Include="include\OvEditor\Resources\RawTextures.h" />
184184
<ClInclude Include="include\OvEditor\Panels\AssetBrowser.h" />

Sources/Overload/OvEditor/OvEditor.vcxproj.filters

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@
102102
<ClCompile Include="src\OvEditor\Settings\EditorSettings.cpp">
103103
<Filter>Source Files</Filter>
104104
</ClCompile>
105-
<ClCompile Include="src\OvEditor\Panels\AssetMetadataEditor.cpp">
105+
<ClCompile Include="src\OvEditor\Panels\AssetProperties.cpp">
106106
<Filter>Source Files</Filter>
107107
</ClCompile>
108108
</ItemGroup>
@@ -197,7 +197,7 @@
197197
<ClInclude Include="include\OvEditor\Settings\EditorSettings.h">
198198
<Filter>Header Files</Filter>
199199
</ClInclude>
200-
<ClInclude Include="include\OvEditor\Panels\AssetMetadataEditor.h">
200+
<ClInclude Include="include\OvEditor\Panels\AssetProperties.h">
201201
<Filter>Header Files</Filter>
202202
</ClInclude>
203203
</ItemGroup>

Sources/Overload/OvEditor/include/OvEditor/Panels/AssetMetadataEditor.h renamed to Sources/Overload/OvEditor/include/OvEditor/Panels/AssetProperties.h

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <variant>
1010

1111
#include <OvTools/Filesystem/IniFile.h>
12+
#include <OvTools/Eventing/Event.h>
1213

1314
#include <OvUI/Widgets/Texts/Text.h>
1415
#include <OvUI/Panels/PanelWindow.h>
@@ -20,7 +21,7 @@
2021

2122
namespace OvEditor::Panels
2223
{
23-
class AssetMetadataEditor : public OvUI::Panels::PanelWindow
24+
class AssetProperties : public OvUI::Panels::PanelWindow
2425
{
2526
public:
2627
using EditableAssets = std::variant<OvRendering::Resources::Model*, OvRendering::Resources::Texture*>;
@@ -31,7 +32,7 @@ namespace OvEditor::Panels
3132
* @param p_opened
3233
* @param p_windowSettings
3334
*/
34-
AssetMetadataEditor
35+
AssetProperties
3536
(
3637
const std::string& p_title,
3738
bool p_opened,
@@ -44,22 +45,40 @@ namespace OvEditor::Panels
4445
*/
4546
void SetTarget(const std::string& p_path);
4647

48+
/**
49+
* Refresh the panel to show the current target settings
50+
*/
51+
void Refresh();
52+
4753
/**
4854
* Launch the preview of the target asset
4955
*/
5056
void Preview();
5157

5258
private:
5359
void CreateHeaderButtons();
60+
void CreateAssetSelector();
5461
void CreateSettings();
62+
void CreateInfo();
5563
void CreateModelSettings();
5664
void CreateTextureSettings();
5765
void Apply();
5866

5967
private:
6068
std::string m_resource;
6169

62-
OvUI::Widgets::Layout::Columns<2>* m_settings = nullptr;
70+
OvTools::Eventing::Event<> m_targetChanged;
71+
OvUI::Widgets::Layout::Group* m_settings = nullptr;
72+
OvUI::Widgets::Layout::Group* m_info = nullptr;
73+
OvUI::Widgets::Buttons::Button* m_applyButton = nullptr;
74+
OvUI::Widgets::Buttons::Button* m_revertButton = nullptr;
75+
OvUI::Widgets::Buttons::Button* m_previewButton = nullptr;
76+
OvUI::Widgets::Buttons::Button* m_resetButton = nullptr;
77+
OvUI::Widgets::AWidget* m_headerSeparator = nullptr;
78+
OvUI::Widgets::AWidget* m_headerLineBreak = nullptr;
79+
OvUI::Widgets::Layout::Columns<2>* m_settingsColumns = nullptr;
80+
OvUI::Widgets::Layout::Columns<2>* m_infoColumns = nullptr;
81+
OvUI::Widgets::Texts::Text* m_assetSelector = nullptr;
6382
std::unique_ptr<OvTools::Filesystem::IniFile> m_metadata;
6483
};
6584
}

Sources/Overload/OvEditor/src/OvEditor/Core/Editor.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
#include "OvEditor/Panels/Toolbar.h"
2323
#include "OvEditor/Panels/MaterialEditor.h"
2424
#include "OvEditor/Panels/ProjectSettings.h"
25-
#include "OvEditor/Panels/AssetMetadataEditor.h"
25+
#include "OvEditor/Panels/AssetProperties.h"
2626

2727
using namespace OvCore::ResourceManagement;
2828
using namespace OvEditor::Panels;
@@ -66,7 +66,7 @@ void OvEditor::Core::Editor::SetupUI()
6666
m_panelsManager.CreatePanel<OvEditor::Panels::Toolbar>("Toolbar", true, settings);
6767
m_panelsManager.CreatePanel<OvEditor::Panels::MaterialEditor>("Material Editor", false, settings);
6868
m_panelsManager.CreatePanel<OvEditor::Panels::ProjectSettings>("Project Settings", false, settings);
69-
m_panelsManager.CreatePanel<OvEditor::Panels::AssetMetadataEditor>("Asset Metadata Editor", false, settings);
69+
m_panelsManager.CreatePanel<OvEditor::Panels::AssetProperties>("Asset Properties", false, settings);
7070

7171
m_canvas.MakeDockspace(true);
7272
m_context.uiManager->SetCanvas(m_canvas);

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

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
#include "OvEditor/Panels/AssetBrowser.h"
3434
#include "OvEditor/Panels/AssetView.h"
3535
#include "OvEditor/Panels/MaterialEditor.h"
36-
#include "OvEditor/Panels/AssetMetadataEditor.h"
36+
#include "OvEditor/Panels/AssetProperties.h"
3737
#include "OvEditor/Core/EditorActions.h"
3838
#include "OvEditor/Core/EditorResources.h"
3939

@@ -611,6 +611,18 @@ class FileContextualMenu : public BrowserItemContextualMenu
611611
}
612612

613613
BrowserItemContextualMenu::CreateList();
614+
615+
616+
auto& editMetadata = CreateWidget<OvUI::Widgets::Menu::MenuItem>("Properties");
617+
618+
editMetadata.ClickedEvent += [this]
619+
{
620+
auto& panel = EDITOR_PANEL(OvEditor::Panels::AssetProperties, "Asset Properties");
621+
std::string resourcePath = EDITOR_EXEC(GetResourcePath(filePath, m_protected));
622+
panel.SetTarget(resourcePath);
623+
panel.Open();
624+
panel.Focus();
625+
};
614626
}
615627

616628
virtual void DeleteItem() override
@@ -704,16 +716,6 @@ class ModelContextualMenu : public PreviewableContextualMenu<OvRendering::Resour
704716
}
705717
};
706718

707-
auto& editMetadata = CreateWidget<OvUI::Widgets::Menu::MenuItem>("Edit metadata");
708-
709-
editMetadata.ClickedEvent += [this]
710-
{
711-
auto& panel = EDITOR_PANEL(OvEditor::Panels::AssetMetadataEditor, "Asset Metadata Editor");
712-
panel.SetTarget(filePath);
713-
panel.Open();
714-
panel.Focus();
715-
};
716-
717719
if (!m_protected)
718720
{
719721
auto& generateMaterialsMenu = CreateWidget<OvUI::Widgets::Menu::MenuList>("Generate materials...");
@@ -856,16 +858,6 @@ class TextureContextualMenu : public PreviewableContextualMenu<OvRendering::Reso
856858
}
857859
};
858860

859-
auto& editMetadata = CreateWidget<OvUI::Widgets::Menu::MenuItem>("Edit metadata");
860-
861-
editMetadata.ClickedEvent += [this]
862-
{
863-
auto& panel = EDITOR_PANEL(OvEditor::Panels::AssetMetadataEditor, "Asset Metadata Editor");
864-
panel.SetTarget(filePath);
865-
panel.Open();
866-
panel.Focus();
867-
};
868-
869861
PreviewableContextualMenu::CreateList();
870862
}
871863
};

0 commit comments

Comments
 (0)