aboutsummaryrefslogtreecommitdiff
path: root/core/src/Model/Workflow
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2021-06-09 22:18:32 -0700
committerrtk0c <[email protected]>2021-06-09 22:18:32 -0700
commitdc09ba073744292a4d4af0445e5095f424fffa22 (patch)
tree999b3d641502805ddaa6291e95f0443113b8859a /core/src/Model/Workflow
parent19d8aeb010ffc967bf82986b7586b161364ab82f (diff)
Refactor asset management UI into AssetList
Diffstat (limited to 'core/src/Model/Workflow')
-rw-r--r--core/src/Model/Workflow/Workflow.hpp11
-rw-r--r--core/src/Model/Workflow/Workflow_Main.cpp74
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;
+ }
}