summaryrefslogtreecommitdiff
path: root/core/src/Model/Template
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/Model/Template')
-rw-r--r--core/src/Model/Template/Template.hpp22
-rw-r--r--core/src/Model/Template/Template_Main.cpp66
-rw-r--r--core/src/Model/Template/fwd.hpp2
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;