summaryrefslogtreecommitdiff
path: root/core/src/Model/Assets.hpp
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2021-06-09 22:18:32 -0700
committerrtk0c <[email protected]>2021-06-09 22:18:32 -0700
commitdc09ba073744292a4d4af0445e5095f424fffa22 (patch)
tree999b3d641502805ddaa6291e95f0443113b8859a /core/src/Model/Assets.hpp
parent19d8aeb010ffc967bf82986b7586b161364ab82f (diff)
Refactor asset management UI into AssetList
Diffstat (limited to 'core/src/Model/Assets.hpp')
-rw-r--r--core/src/Model/Assets.hpp41
1 files changed, 31 insertions, 10 deletions
diff --git a/core/src/Model/Assets.hpp b/core/src/Model/Assets.hpp
index feb4432..e035f51 100644
--- a/core/src/Model/Assets.hpp
+++ b/core/src/Model/Assets.hpp
@@ -1,8 +1,9 @@
-#pragma once
+#pragma once
#include "Utils/UUID.hpp"
-#include <tsl/array_map.h>
+#include "Assets.hpp"
+
#include <filesystem>
#include <iosfwd>
#include <memory>
@@ -27,15 +28,22 @@ public:
virtual ~Asset() = default;
};
+enum class NameSelectionError
+{
+ None,
+ Duplicated,
+ Empty,
+};
+
class AssetList
{
private:
- tsl::array_map<char, SavedAsset> mAssets;
- tsl::array_map<char, std::unique_ptr<Asset>> mCache;
- int mCacheSizeLimit = 0;
+ class Private;
+ std::unique_ptr<Private> mPrivate;
public:
- virtual ~AssetList() = default;
+ AssetList();
+ virtual ~AssetList();
// TODO support file watches
void Reload();
@@ -58,8 +66,16 @@ public:
{
const SavedAsset* SelectedAsset = nullptr;
};
- void DrawBigIcons(ListState& state);
- void DrawDetails(ListState& state);
+ void DisplayBigIconsList(ListState& state);
+ void DisplayDetailsTable(ListState& state);
+
+ struct PopupState : public ListState
+ {
+ };
+ void OpenBigIconsPopup();
+ void DisplayBigIconsPopup(PopupState& state);
+ void OpenDetailsPopup();
+ void DisplayDetailsPopup(PopupState& state);
protected:
virtual void DiscoverFiles(const std::function<void(SavedAsset)>& callback) const = 0;
@@ -77,10 +93,15 @@ protected:
virtual uuids::uuid RetrieveUuidFromFile(const std::filesystem::path& file) const = 0;
virtual std::filesystem::path RetrievePathFromAsset(const SavedAsset& asset) const = 0;
+ virtual void DisplayAssetCreator(PopupState& state) = 0;
+
/// This should call ImGui::BeginTable() along with other accessories such as setting up the header row.
virtual void SetupDetailsTable(const char* tableId) const = 0;
- virtual void DrawBigIcon(const SavedAsset& asset) const = 0;
- virtual void DrawDetailsTableRow(const SavedAsset& asset) const = 0;
+ virtual void DrawBigIcon(ListState& state, const SavedAsset& asset) const = 0;
+ virtual void DrawDetailsTableRow(ListState& state, const SavedAsset& asset) const = 0;
+
+private:
+ void DisplayPopupControls(PopupState& state);
};
template <class T>