aboutsummaryrefslogtreecommitdiff
path: root/core/src/Model/Template/Template_Main.cpp
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/Template_Main.cpp
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/Template_Main.cpp')
-rw-r--r--core/src/Model/Template/Template_Main.cpp90
1 files changed, 59 insertions, 31 deletions
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();
}