aboutsummaryrefslogtreecommitdiff
path: root/core/src/Model/Template
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2021-08-15 09:17:02 -0700
committerrtk0c <[email protected]>2021-08-15 09:17:02 -0700
commit64a6dbcfdb89a5f57d93d47a2be0c741dda4662d (patch)
tree241eaba2351f3a7e6343ce93532e19a4b93757d3 /core/src/Model/Template
parentf0326e5c5deca0fb719d8522b45c59364b566300 (diff)
Fix issues and cleanup
- Fix compile error on MSVC where <vector> is not included properly - Fix creating a workflow actually saves to the templates/ directory - Fix renaming assets are not saved to disk - TODO ser/deser still not working - Cleanup AssetList::* pure virtual setup (fewer splits)
Diffstat (limited to 'core/src/Model/Template')
-rw-r--r--core/src/Model/Template/TableTemplate.hpp11
-rw-r--r--core/src/Model/Template/Template.hpp25
-rw-r--r--core/src/Model/Template/Template_Main.cpp90
3 files changed, 76 insertions, 50 deletions
diff --git a/core/src/Model/Template/TableTemplate.hpp b/core/src/Model/Template/TableTemplate.hpp
index 141e952..c651ce1 100644
--- a/core/src/Model/Template/TableTemplate.hpp
+++ b/core/src/Model/Template/TableTemplate.hpp
@@ -43,7 +43,7 @@ public:
TextAlignment HorizontalAlignment = AlignCenter;
TextAlignment VerticalAlignment = AlignCenter;
CellType Type = ConstantCell;
- /// The id of the group description object, if this cell isn't a constant or singluar parameter cell. Otherwise, this value is -1.
+ /// The id of the group description object, if this cell isn't a constant or singular parameter cell. Otherwise, this value is -1.
int DataId = -1;
public:
@@ -57,11 +57,12 @@ public:
// TODO support reverse (bottom to top) filling order
// TODO support horizontal filling order
-/// Parameter group information for a grouped array of cells. When instanciated, an array of 0 or more
+
+/// Parameter group information for a grouped array of cells. When instantiated, an array of 0 or more
/// elements shall be provided by the user, which will replace the group of templated cells with a list
/// of rows, each instantiated with the n-th element in the provided array.
/// \code
-/// [["foo", "bar", "foobar"],
+/// [["foo", "bar", "foobar"],
/// ["a", "b", c"],
/// ["1", "2", "3"],
/// ["x", "y", "z"]]
@@ -210,6 +211,6 @@ public:
lxw_workbook* InstantiateToExcelWorkbook(const TableInstantiationParameters& params) const;
lxw_worksheet* InstantiateToExcelWorksheet(lxw_workbook* workbook, const TableInstantiationParameters& params) const;
- virtual ReadResult ReadFrom(std::istream& stream) override;
- virtual void WriteTo(std::ostream& stream) const override;
+ ReadResult ReadFrom(std::istream& stream) override;
+ void WriteTo(std::ostream& stream) const override;
};
diff --git a/core/src/Model/Template/Template.hpp b/core/src/Model/Template/Template.hpp
index 7d43130..30fdc75 100644
--- a/core/src/Model/Template/Template.hpp
+++ b/core/src/Model/Template/Template.hpp
@@ -31,7 +31,7 @@ public:
static bool IsInstance(const Template* tmpl);
Template(Kind kind);
- virtual ~Template() = default;
+ ~Template() override = default;
Kind GetKind() const;
@@ -57,20 +57,17 @@ public:
using AssetListTyped::AssetListTyped;
protected:
- virtual void DiscoverFiles(const std::function<void(SavedAsset)>& callback) const override;
+ void DiscoverFiles(const std::function<void(SavedAsset)>& callback) 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;
+ std::string RetrieveNameFromFile(const std::filesystem::path& file) const override;
+ uuids::uuid RetrieveUuidFromFile(const std::filesystem::path& file) const override;
+ 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;
+ bool SaveInstance(const SavedAsset& assetInfo, const Asset* asset) const override;
+ Template* LoadInstance(const SavedAsset& assetInfo) const override;
+ Template* CreateInstance(const SavedAsset& assetInfo) const override;
+ bool RenameInstanceOnDisk(const SavedAsset& assetInfo, std::string_view oldName) const override;
- virtual Template* LoadImpl(const SavedAsset& diskForm) const override;
-
- virtual void DisplayAssetCreator(ListState& state) override;
-
- virtual void SetupDetailsTable(const char* tableId) const override;
- virtual void DrawBigIcon(ListState& state, const SavedAsset& asset) const override;
- virtual void DrawDetailsTableRow(ListState& state, const SavedAsset& asset) const override;
+ void DisplayAssetCreator(ListState& state) override;
+ void DisplayDetailsTable(ListState& state) const override;
};
diff --git a/core/src/Model/Template/Template_Main.cpp b/core/src/Model/Template/Template_Main.cpp
index a681c4a..19803aa 100644
--- a/core/src/Model/Template/Template_Main.cpp
+++ b/core/src/Model/Template/Template_Main.cpp
@@ -2,8 +2,8 @@
#include "Model/GlobalStates.hpp"
#include "Model/Project.hpp"
-#include "Utils/I18n.hpp"
#include "UI/UI.hpp"
+#include "Utils/I18n.hpp"
#include "Utils/UUID.hpp"
#include <imgui.h>
@@ -57,28 +57,33 @@ fs::path TemplateAssetList::RetrievePathFromAsset(const SavedAsset& asset) const
return GetConnectedProject().GetTemplatePath(fileName);
}
-void TemplateAssetList::SaveEmptyInstance(const SavedAsset& asset) const
+bool TemplateAssetList::SaveInstance(const SavedAsset& assetInfo, const Asset* asset) const
{
- auto path = RetrievePathFromAsset(asset);
+ auto path = RetrievePathFromAsset(assetInfo);
- std::ofstream ofs(path);
- if (!ofs) return;
- ofs << (uint64_t)asset.Name.size();
- ofs << asset.Name;
- ofs << static_cast<Template::Kind>(asset.Payload);
-}
+ std::ofstream ofs(path, std::ios::binary);
+ if (!ofs) return false;
+ ofs << (uint64_t)assetInfo.Name.size();
+ ofs << assetInfo.Name;
+ ofs << static_cast<Template::Kind>(assetInfo.Payload);
-Template* TemplateAssetList::CreateEmptyInstance(const SavedAsset& asset) const
-{
- auto kind = static_cast<Template::Kind>(asset.Payload);
- return Template::CreateByKind(kind).release();
+ if (auto tmpl = static_cast<const Template*>(asset)) {
+ tmpl->WriteTo(ofs);
+ }
+
+ return true;
}
-Template* TemplateAssetList::LoadImpl(const SavedAsset& asset) const
+static std::unique_ptr<Template> LoadTemplateFromFile(const fs::path& path)
{
- std::ifstream ifs(RetrievePathFromAsset(asset));
+ std::ifstream ifs(path, std::ios::binary);
if (!ifs) return nullptr;
+ // TODO fix serialization
+ uint64_t nameSize;
+ ifs >> nameSize;
+ ifs.seekg(nameSize, std::ios::end);
+
uint32_t iKind;
ifs >> iKind;
@@ -90,7 +95,32 @@ Template* TemplateAssetList::LoadImpl(const SavedAsset& asset) const
return nullptr;
}
- return tmpl.release();
+ return tmpl;
+}
+
+Template* TemplateAssetList::LoadInstance(const SavedAsset& assetInfo) const
+{
+ return ::LoadTemplateFromFile(RetrievePathFromAsset(assetInfo)).release();
+}
+
+Template* TemplateAssetList::CreateInstance(const SavedAsset& assetInfo) const
+{
+ auto kind = static_cast<Template::Kind>(assetInfo.Payload);
+ return Template::CreateByKind(kind).release();
+}
+
+bool TemplateAssetList::RenameInstanceOnDisk(const SavedAsset& assetInfo, std::string_view oldName) const
+{
+ // Get asset path, which is only dependent on UUID
+ auto path = RetrievePathFromAsset(assetInfo);
+
+ auto tmpl = ::LoadTemplateFromFile(path);
+ if (!tmpl) return false;
+
+ // Rewrite the asset with the updated name (note the given assetInfo already has the update name)
+ SaveInstance(assetInfo, tmpl.get());
+
+ return true;
}
void TemplateAssetList::DisplayAssetCreator(ListState& state)
@@ -170,28 +200,26 @@ void TemplateAssetList::DisplayAssetCreator(ListState& state)
}
}
-void TemplateAssetList::SetupDetailsTable(const char* tableId) const
+void TemplateAssetList::DisplayDetailsTable(ListState& state) const
{
- ImGui::BeginTable(tableId, 2, ImGuiTableFlags_Borders);
+ ImGui::BeginTable("AssetDetailsTable", 2, ImGuiTableFlags_Borders);
ImGui::TableSetupColumn(I18N_TEXT("Name", L10N_NAME));
ImGui::TableSetupColumn(I18N_TEXT("Type", L10N_TYPE));
ImGui::TableHeadersRow();
-}
-void TemplateAssetList::DrawBigIcon(ListState& state, const SavedAsset& asset) const
-{
- // TODO
-}
+ for (auto& asset : this->GetAssets()) {
+ ImGui::TableNextRow();
-void TemplateAssetList::DrawDetailsTableRow(ListState& state, const SavedAsset& asset) const
-{
- ImGui::TableNextColumn();
- if (ImGui::Selectable(asset.Name.c_str(), state.SelectedAsset == &asset, ImGuiSelectableFlags_SpanAllColumns | ImGuiSelectableFlags_DontClosePopups)) {
- state.SelectedAsset = &asset;
+ ImGui::TableNextColumn();
+ if (ImGui::Selectable(asset.Name.c_str(), state.SelectedAsset == &asset, ImGuiSelectableFlags_SpanAllColumns | ImGuiSelectableFlags_DontClosePopups)) {
+ state.SelectedAsset = &asset;
+ }
+
+ ImGui::TableNextColumn();
+ auto kind = static_cast<Template::Kind>(asset.Payload);
+ ImGui::TextUnformatted(Template::FormatKind(kind));
}
- ImGui::TableNextColumn();
- auto kind = static_cast<Template::Kind>(asset.Payload);
- ImGui::TextUnformatted(Template::FormatKind(kind));
+ ImGui::EndTable();
}