Skip to content

Commit 29f04c1

Browse files
author
Adrien GIVRY
committed
Improving the AssetProperties window (Previously AssetMetadataEditor)
`AssetMetadataEditor` has been renamed to `AssetProperties`. `AssetProperties` and `MaterialEditor` are now more consistent. Their use flow is now similar. You can either right click onto an asset and choose to edit its metadata or edit the material if it is one OR open the desired window (`AssetMetadataEditor` or `MaterialEditor`) and then drag and drop an asset to this window. The `AssetMetadataEditor` is now divided into two sections: - Settings - Info The first one, "Settings", will show every metadata associated to this asset and allow the user to modify their values. The second one, "Info", only display information about the asset (File type, file size, path...) SizeConverter static class has been added to OvTools to allow size unit conversions (Example: Bytes to Kilo Bytes, etc...).
1 parent eca3eee commit 29f04c1

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
@@ -146,7 +146,7 @@ xcopy "$(ProjectDir)Layout.ini" "$(SolutionDir)..\..\Build\$(ProjectName)\$(Conf
146146
<ClCompile Include="src\OvEditor\Core\PanelsManager.cpp" />
147147
<ClCompile Include="src\OvEditor\Core\ProjectHub.cpp" />
148148
<ClCompile Include="src\OvEditor\Panels\AssetBrowser.cpp" />
149-
<ClCompile Include="src\OvEditor\Panels\AssetMetadataEditor.cpp" />
149+
<ClCompile Include="src\OvEditor\Panels\AssetProperties.cpp" />
150150
<ClCompile Include="src\OvEditor\Panels\AssetView.cpp" />
151151
<ClCompile Include="src\OvEditor\Panels\AView.cpp" />
152152
<ClCompile Include="src\OvEditor\Panels\AViewControllable.cpp" />
@@ -177,7 +177,7 @@ xcopy "$(ProjectDir)Layout.ini" "$(SolutionDir)..\..\Build\$(ProjectName)\$(Conf
177177
<ClInclude Include="include\OvEditor\Core\GizmoBehaviour.h" />
178178
<ClInclude Include="include\OvEditor\Core\PanelsManager.h" />
179179
<ClInclude Include="include\OvEditor\Core\ProjectHub.h" />
180-
<ClInclude Include="include\OvEditor\Panels\AssetMetadataEditor.h" />
180+
<ClInclude Include="include\OvEditor\Panels\AssetProperties.h" />
181181
<ClInclude Include="include\OvEditor\Resources\RawShaders.h" />
182182
<ClInclude Include="include\OvEditor\Resources\RawTextures.h" />
183183
<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
@@ -32,7 +32,7 @@
3232
#include "OvEditor/Panels/AssetBrowser.h"
3333
#include "OvEditor/Panels/AssetView.h"
3434
#include "OvEditor/Panels/MaterialEditor.h"
35-
#include "OvEditor/Panels/AssetMetadataEditor.h"
35+
#include "OvEditor/Panels/AssetProperties.h"
3636
#include "OvEditor/Core/EditorActions.h"
3737
#include "OvEditor/Core/EditorResources.h"
3838

@@ -608,6 +608,18 @@ class FileContextualMenu : public BrowserItemContextualMenu
608608
}
609609

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

613625
virtual void DeleteItem() override
@@ -701,16 +713,6 @@ class ModelContextualMenu : public PreviewableContextualMenu<OvRendering::Resour
701713
}
702714
};
703715

704-
auto& editMetadata = CreateWidget<OvUI::Widgets::Menu::MenuItem>("Edit metadata");
705-
706-
editMetadata.ClickedEvent += [this]
707-
{
708-
auto& panel = EDITOR_PANEL(OvEditor::Panels::AssetMetadataEditor, "Asset Metadata Editor");
709-
panel.SetTarget(filePath);
710-
panel.Open();
711-
panel.Focus();
712-
};
713-
714716
if (!m_protected)
715717
{
716718
auto& generateMaterialsMenu = CreateWidget<OvUI::Widgets::Menu::MenuList>("Generate materials...");
@@ -853,16 +855,6 @@ class TextureContextualMenu : public PreviewableContextualMenu<OvRendering::Reso
853855
}
854856
};
855857

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

0 commit comments

Comments
 (0)