diff options
author | rtk0c <[email protected]> | 2021-06-05 19:44:54 -0700 |
---|---|---|
committer | rtk0c <[email protected]> | 2021-06-05 19:44:54 -0700 |
commit | a180e1b56025c6b7d81d2e587ad90531d29de44c (patch) | |
tree | 1c88361320371b508c81b52a28ae0579fcdd1fd7 /core/src/Model/Template | |
parent | d3fa128d5408673b0ea8d3ba3435c38b258a5e7a (diff) |
Initial work on asset system (does not compile)
Diffstat (limited to 'core/src/Model/Template')
-rw-r--r-- | core/src/Model/Template/Template.hpp | 22 | ||||
-rw-r--r-- | core/src/Model/Template/Template_Main.cpp | 66 | ||||
-rw-r--r-- | core/src/Model/Template/fwd.hpp | 2 |
3 files changed, 78 insertions, 12 deletions
diff --git a/core/src/Model/Template/Template.hpp b/core/src/Model/Template/Template.hpp index 131a6ac..d876650 100644 --- a/core/src/Model/Template/Template.hpp +++ b/core/src/Model/Template/Template.hpp @@ -1,5 +1,6 @@ #pragma once +#include "Model/Assets.hpp" #include "cplt_fwd.hpp" #include <filesystem> @@ -7,7 +8,7 @@ #include <memory> #include <string> -class Template +class Template : public Asset { public: enum Kind @@ -18,6 +19,9 @@ public: KindCount = InvalidKind, }; + using CategoryType = TemplateAssetCategory; + static constinit const TemplateAssetCategory Category; + private: Kind mKind; @@ -32,7 +36,7 @@ public: Kind GetKind() const; - enum class ReadResult + enum ReadResult { RR_Success, RR_InvalidFormat, @@ -41,13 +45,13 @@ public: virtual void WriteTo(std::ostream& stream) const = 0; }; -class TemplateInfo +class TemplateAssetCategory : public AssetCategory { public: - std::filesystem::path Path; - std::string Name; - std::string PathStringCache = Path.string(); - Template::Kind Kind; - - std::unique_ptr<Template> LoadFromDisk() const; + 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 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 35da52b..9efbeae 100644 --- a/core/src/Model/Template/Template_Main.cpp +++ b/core/src/Model/Template/Template_Main.cpp @@ -1,5 +1,15 @@ #include "Template.hpp" +#include "Model/GlobalStates.hpp" +#include "Model/Project.hpp" + +#include <imgui.h> +#include <fstream> + +using namespace std::literals::string_view_literals; + +constinit const TemplateAssetCategory Template::Category{}; + Template::Template(Kind kind) : mKind{ kind } { @@ -10,8 +20,60 @@ Template::Kind Template::GetKind() const return mKind; } -std::unique_ptr<Template> TemplateInfo::LoadFromDisk() const +void TemplateAssetCategory::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 +{ + // TODO +} + +Template* TemplateAssetCategory::Load(const SavedAsset& diskForm) const +{ + std::ifstream ifs(diskForm.Path); + if (!ifs) return nullptr; + + uint32_t iKind; + ifs >> iKind; + + auto kind = (Template::Kind)iKind; + auto tmpl = Template::CreateByKind(kind); + + auto res = tmpl->ReadFrom(ifs); + if (res != Template::RR_Success) { + return nullptr; + } + + return tmpl.release(); +} + +void TemplateAssetCategory::SetupDetailsTable(const char* tableId) const +{ + ImGui::BeginTable(tableId, 3); + + ImGui::TableSetupColumn("Name"); + ImGui::TableSetupColumn("Type"); + ImGui::TableSetupColumn("Modified time"); + ImGui::TableHeadersRow(); +} + +void TemplateAssetCategory::DrawBigIcon(const SavedAsset& asset) const +{ + // TODO +} + +void TemplateAssetCategory::DrawDetailsTableRow(const SavedAsset& asset) const +{ + ImGui::TableNextColumn(); + ImGui::TextUnformatted(asset.Name.c_str()); + + ImGui::TableNextColumn(); + // TODO + //ImGui::TextUnformatted(Template::FormatKind(asset.)); + + ImGui::TableNextColumn(); // TODO - return nullptr; } diff --git a/core/src/Model/Template/fwd.hpp b/core/src/Model/Template/fwd.hpp index 6bc7349..aad9f14 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 TemplateInfo; +class TemplateAssetCategory; |