diff options
author | rtk0c <[email protected]> | 2021-08-15 09:17:02 -0700 |
---|---|---|
committer | rtk0c <[email protected]> | 2021-08-15 09:17:02 -0700 |
commit | 64a6dbcfdb89a5f57d93d47a2be0c741dda4662d (patch) | |
tree | 241eaba2351f3a7e6343ce93532e19a4b93757d3 /core/src/Model/Template | |
parent | f0326e5c5deca0fb719d8522b45c59364b566300 (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.hpp | 11 | ||||
-rw-r--r-- | core/src/Model/Template/Template.hpp | 25 | ||||
-rw-r--r-- | core/src/Model/Template/Template_Main.cpp | 90 |
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(); } |