diff options
author | rtk0c <[email protected]> | 2021-06-07 12:19:51 -0700 |
---|---|---|
committer | rtk0c <[email protected]> | 2021-06-07 12:19:51 -0700 |
commit | d7ee2efaca226fc478e3f0c78abdbe86a887f17a (patch) | |
tree | 81670fefb7cdba3c5fa0ab890f7d84e24c194bdb /core/src/Model/Template | |
parent | a180e1b56025c6b7d81d2e587ad90531d29de44c (diff) |
Complete asset loading/saving and UI management logic
Diffstat (limited to 'core/src/Model/Template')
-rw-r--r-- | core/src/Model/Template/Template.hpp | 19 | ||||
-rw-r--r-- | core/src/Model/Template/Template_Main.cpp | 62 | ||||
-rw-r--r-- | core/src/Model/Template/fwd.hpp | 2 |
3 files changed, 63 insertions, 20 deletions
diff --git a/core/src/Model/Template/Template.hpp b/core/src/Model/Template/Template.hpp index d876650..600bb26 100644 --- a/core/src/Model/Template/Template.hpp +++ b/core/src/Model/Template/Template.hpp @@ -19,8 +19,7 @@ public: KindCount = InvalidKind, }; - using CategoryType = TemplateAssetCategory; - static constinit const TemplateAssetCategory Category; + using CategoryType = TemplateAssetList; private: Kind mKind; @@ -45,12 +44,20 @@ public: virtual void WriteTo(std::ostream& stream) const = 0; }; -class TemplateAssetCategory : public AssetCategory +class TemplateAssetList final : public AssetListTyped<Template> { -public: +protected: virtual void DiscoverFiles(const std::function<void(SavedAsset)>& callback) const override; - virtual Template* CreateEmpty(const SavedAsset& diskForm) const override; - virtual Template* Load(const SavedAsset& diskForm) const override; + + virtual std::string RetrieveNameFromFile(const std::filesystem::path& file) const override; + virtual uuids::uuid RetrieveUuidFromFile(const std::filesystem::path& file) const override; + virtual std::filesystem::path RetrievePathFromAsset(const SavedAsset& asset) const override; + + virtual void SaveEmptyInstance(const SavedAsset& asset) const override; + virtual Template* CreateEmptyInstance(const SavedAsset& diskForm) const override; + + virtual Template* LoadImpl(const SavedAsset& diskForm) const override; + virtual void SetupDetailsTable(const char* tableId) const override; virtual void DrawBigIcon(const SavedAsset& asset) const override; virtual void DrawDetailsTableRow(const SavedAsset& asset) const override; diff --git a/core/src/Model/Template/Template_Main.cpp b/core/src/Model/Template/Template_Main.cpp index 9efbeae..92ad050 100644 --- a/core/src/Model/Template/Template_Main.cpp +++ b/core/src/Model/Template/Template_Main.cpp @@ -4,11 +4,11 @@ #include "Model/Project.hpp" #include <imgui.h> +#include <uuid.h> #include <fstream> using namespace std::literals::string_view_literals; - -constinit const TemplateAssetCategory Template::Category{}; +namespace fs = std::filesystem; Template::Template(Kind kind) : mKind{ kind } @@ -20,26 +20,62 @@ Template::Kind Template::GetKind() const return mKind; } -void TemplateAssetCategory::DiscoverFiles(const std::function<void(SavedAsset)>& callback) const +void TemplateAssetList::DiscoverFiles(const std::function<void(SavedAsset)>& callback) const { auto& gs = GlobalStates::GetInstance(); DiscoverFilesByExtension(callback, gs.GetCurrentProject()->GetTemplatesDirectory(), ".cplt-template"sv); } -Template* TemplateAssetCategory::CreateEmpty(const SavedAsset& diskForm) const +std::string TemplateAssetList::RetrieveNameFromFile(const fs::path& file) const { - // TODO + std::ifstream ifs(file); + if (!ifs) return ""; + + std::string name; + ifs >> name; + return name; +} + +uuids::uuid TemplateAssetList::RetrieveUuidFromFile(const fs::path& file) const +{ + return uuids::uuid::from_string(file.stem().string()); } -Template* TemplateAssetCategory::Load(const SavedAsset& diskForm) const +fs::path TemplateAssetList::RetrievePathFromAsset(const SavedAsset& asset) const { - std::ifstream ifs(diskForm.Path); + auto uuid = uuids::uuid_random_generator{}(); + auto fileName = uuids::to_string(uuid); + fileName.append(".cplt-template"); + + auto& gs = GlobalStates::GetInstance(); + return gs.GetCurrentProject()->GetTemplatePath(fileName); +} + +void TemplateAssetList::SaveEmptyInstance(const SavedAsset& asset) const +{ + auto path = RetrievePathFromAsset(asset); + + std::ofstream ofs(path); + if (!ofs) return; + ofs << asset.Name; + ofs << static_cast<Template::Kind>(asset.Payload); +} + +Template* TemplateAssetList::CreateEmptyInstance(const SavedAsset& asset) const +{ + auto kind = static_cast<Template::Kind>(asset.Payload); + return Template::CreateByKind(kind).release(); +} + +Template* TemplateAssetList::LoadImpl(const SavedAsset& asset) const +{ + std::ifstream ifs(RetrievePathFromAsset(asset)); if (!ifs) return nullptr; uint32_t iKind; ifs >> iKind; - auto kind = (Template::Kind)iKind; + auto kind = static_cast<Template::Kind>(iKind); auto tmpl = Template::CreateByKind(kind); auto res = tmpl->ReadFrom(ifs); @@ -50,7 +86,7 @@ Template* TemplateAssetCategory::Load(const SavedAsset& diskForm) const return tmpl.release(); } -void TemplateAssetCategory::SetupDetailsTable(const char* tableId) const +void TemplateAssetList::SetupDetailsTable(const char* tableId) const { ImGui::BeginTable(tableId, 3); @@ -60,19 +96,19 @@ void TemplateAssetCategory::SetupDetailsTable(const char* tableId) const ImGui::TableHeadersRow(); } -void TemplateAssetCategory::DrawBigIcon(const SavedAsset& asset) const +void TemplateAssetList::DrawBigIcon(const SavedAsset& asset) const { // TODO } -void TemplateAssetCategory::DrawDetailsTableRow(const SavedAsset& asset) const +void TemplateAssetList::DrawDetailsTableRow(const SavedAsset& asset) const { ImGui::TableNextColumn(); ImGui::TextUnformatted(asset.Name.c_str()); ImGui::TableNextColumn(); - // TODO - //ImGui::TextUnformatted(Template::FormatKind(asset.)); + auto kind = static_cast<Template::Kind>(asset.Payload); + ImGui::TextUnformatted(Template::FormatKind(kind)); ImGui::TableNextColumn(); // TODO diff --git a/core/src/Model/Template/fwd.hpp b/core/src/Model/Template/fwd.hpp index aad9f14..b0acb28 100644 --- a/core/src/Model/Template/fwd.hpp +++ b/core/src/Model/Template/fwd.hpp @@ -8,4 +8,4 @@ class TableTemplate; // Template.hpp class Template; -class TemplateAssetCategory; +class TemplateAssetList; |