diff options
author | rtk0c <[email protected]> | 2021-06-09 22:18:32 -0700 |
---|---|---|
committer | rtk0c <[email protected]> | 2021-06-09 22:18:32 -0700 |
commit | dc09ba073744292a4d4af0445e5095f424fffa22 (patch) | |
tree | 999b3d641502805ddaa6291e95f0443113b8859a /core/src/Model/Assets.hpp | |
parent | 19d8aeb010ffc967bf82986b7586b161364ab82f (diff) |
Refactor asset management UI into AssetList
Diffstat (limited to 'core/src/Model/Assets.hpp')
-rw-r--r-- | core/src/Model/Assets.hpp | 41 |
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> |