From dc09ba073744292a4d4af0445e5095f424fffa22 Mon Sep 17 00:00:00 2001 From: rtk0c Date: Wed, 9 Jun 2021 22:18:32 -0700 Subject: Refactor asset management UI into AssetList --- core/src/Model/Workflow/Workflow.hpp | 11 ++++- core/src/Model/Workflow/Workflow_Main.cpp | 74 ++++++++++++++++++++++++++++--- 2 files changed, 78 insertions(+), 7 deletions(-) (limited to 'core/src/Model/Workflow') diff --git a/core/src/Model/Workflow/Workflow.hpp b/core/src/Model/Workflow/Workflow.hpp index e5e434a..95dcafe 100644 --- a/core/src/Model/Workflow/Workflow.hpp +++ b/core/src/Model/Workflow/Workflow.hpp @@ -277,6 +277,11 @@ private: class WorkflowAssetList final : public AssetListTyped { +private: + // AC = Asset Creator + std::string mACNewName; + NameSelectionError mACNewNameError = NameSelectionError::Empty; + public: virtual void DiscoverFiles(const std::function& callback) const override; @@ -289,7 +294,9 @@ public: virtual Workflow* LoadImpl(const SavedAsset& diskForm) const override; + virtual void DisplayAssetCreator(PopupState& state) 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; + virtual void DrawBigIcon(ListState& state, const SavedAsset& asset) const override; + virtual void DrawDetailsTableRow(ListState& state, const SavedAsset& asset) const override; }; diff --git a/core/src/Model/Workflow/Workflow_Main.cpp b/core/src/Model/Workflow/Workflow_Main.cpp index 131e0ae..99c70a7 100644 --- a/core/src/Model/Workflow/Workflow_Main.cpp +++ b/core/src/Model/Workflow/Workflow_Main.cpp @@ -2,10 +2,13 @@ #include "Model/GlobalStates.hpp" #include "Model/Project.hpp" +#include "UI/Localization.hpp" +#include "UI/UI.hpp" #include "Utils/UUID.hpp" #include #include +#include #include #include #include @@ -799,21 +802,82 @@ Workflow* WorkflowAssetList::LoadImpl(const SavedAsset& asset) const return workflow.release(); } +void WorkflowAssetList::DisplayAssetCreator(PopupState& state) +{ + auto ls = LocaleStrings::Instance.get(); + + auto ValidateNewName = [&]() -> void { + if (mACNewName.empty()) { + mACNewNameError = NameSelectionError::Empty; + return; + } + + if (FindByName(mACNewName)) { + mACNewNameError = NameSelectionError::Duplicated; + return; + } + + mACNewNameError = NameSelectionError::None; + }; + + auto ShowNewNameErrors = [&]() -> void { + switch (mACNewNameError) { + case NameSelectionError::None: break; + case NameSelectionError::Duplicated: + ImGui::ErrorMessage("Duplicate template name"); + break; + case NameSelectionError::Empty: + ImGui::ErrorMessage("Template name cannot be empty"); + break; + } + }; + + auto IsInputValid = [&]() -> bool { + return mACNewNameError == NameSelectionError::None; + }; + + auto ResetState = [&]() -> void { + mACNewName.clear(); + ValidateNewName(); + }; + + if (ImGui::InputText("Name", &mACNewName)) { + ValidateNewName(); + } + + ShowNewNameErrors(); + + if (ImGui::Button(ls->DialogConfirm.Get(), !IsInputValid())) { + ImGui::CloseCurrentPopup(); + + Create(SavedAsset{ + .Name = mACNewName, + }); + ResetState(); + } + ImGui::SameLine(); + if (ImGui::Button(ls->DialogCancel.Get())) { + ImGui::CloseCurrentPopup(); + } +} + void WorkflowAssetList::SetupDetailsTable(const char* tableId) const { - ImGui::BeginTable(tableId, 2); + ImGui::BeginTable(tableId, 1, ImGuiTableFlags_Borders); ImGui::TableSetupColumn("Name"); - ImGui::TableSetupColumn("Modified time"); ImGui::TableHeadersRow(); } -void WorkflowAssetList::DrawBigIcon(const SavedAsset& asset) const +void WorkflowAssetList::DrawBigIcon(ListState& state, const SavedAsset& asset) const { // TODO } -void WorkflowAssetList::DrawDetailsTableRow(const SavedAsset& asset) const +void WorkflowAssetList::DrawDetailsTableRow(ListState& state, const SavedAsset& asset) const { - // TODO + ImGui::TableNextColumn(); + if (ImGui::Selectable(asset.Name.c_str(), state.SelectedAsset == &asset, ImGuiSelectableFlags_SpanAllColumns)) { + state.SelectedAsset = &asset; + } } -- cgit v1.2.3-70-g09d2