diff options
author | rtk0c <[email protected]> | 2021-06-09 22:18:32 -0700 |
---|---|---|
committer | rtk0c <[email protected]> | 2021-06-09 22:18:32 -0700 |
commit | dc09ba073744292a4d4af0445e5095f424fffa22 (patch) | |
tree | 999b3d641502805ddaa6291e95f0443113b8859a /core/src/Model/Workflow | |
parent | 19d8aeb010ffc967bf82986b7586b161364ab82f (diff) |
Refactor asset management UI into AssetList
Diffstat (limited to 'core/src/Model/Workflow')
-rw-r--r-- | core/src/Model/Workflow/Workflow.hpp | 11 | ||||
-rw-r--r-- | core/src/Model/Workflow/Workflow_Main.cpp | 74 |
2 files changed, 78 insertions, 7 deletions
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<Workflow> { +private: + // AC = Asset Creator + std::string mACNewName; + NameSelectionError mACNewNameError = NameSelectionError::Empty; + public: virtual void DiscoverFiles(const std::function<void(SavedAsset)>& 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 <imgui.h> #include <imgui_node_editor.h> +#include <imgui_stdlib.h> #include <tsl/robin_set.h> #include <cassert> #include <fstream> @@ -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; + } } |