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/UI/UI_Workflows.cpp | 107 ++++++++++--------------------------------- 1 file changed, 25 insertions(+), 82 deletions(-) (limited to 'core/src/UI/UI_Workflows.cpp') diff --git a/core/src/UI/UI_Workflows.cpp b/core/src/UI/UI_Workflows.cpp index 7b2de2a..3c23c30 100644 --- a/core/src/UI/UI_Workflows.cpp +++ b/core/src/UI/UI_Workflows.cpp @@ -363,12 +363,18 @@ public: void UI::WorkflowsTab() { auto ls = LocaleStrings::Instance.get(); - auto& gs = GlobalStates::GetInstance(); - auto& project = *gs.GetCurrentProject(); + auto& project = *GlobalStates::GetInstance().GetCurrentProject(); + + enum class PopupType + { + None, + WorkflowSelect, + Management, + }; - bool openedDummy = true; static std::unique_ptr openWorkflow; - static AssetList::ListState state; + static AssetList::PopupState popup; + static PopupType popupType = PopupType::None; // Toolbar item: close if (ImGui::Button(ls->Close.Get(), openWorkflow == nullptr)) { @@ -378,93 +384,30 @@ void UI::WorkflowsTab() // Toolbar item: open... ImGui::SameLine(); if (ImGui::Button(ls->OpenWorkflow.Get())) { - ImGui::OpenPopup(ls->OpenWorkflowDialogTitle.Get()); - } - if (ImGui::BeginPopupModal(ls->OpenWorkflowDialogTitle.Get(), &openedDummy, ImGuiWindowFlags_AlwaysAutoResize)) { - project.Workflows.DrawDetails(state); - - if (state.SelectedAsset) { - auto workflow = project.Workflows.Load(*state.SelectedAsset); - openWorkflow = std::make_unique(std::move(workflow)); - } - - ImGui::EndPopup(); + project.Workflows.OpenDetailsPopup(); + popupType = PopupType::WorkflowSelect; } // Toolbar item: manage... ImGui::SameLine(); if (ImGui::Button(ls->ManageWorkflows.Get())) { - ImGui::OpenPopup(ls->ManageWorkflowsDialogTitle.Get()); + project.Workflows.OpenDetailsPopup(); + popupType = PopupType::Management; } - if (ImGui::BeginPopupModal(ls->ManageWorkflowsDialogTitle.Get(), &openedDummy, ImGuiWindowFlags_AlwaysAutoResize)) { - project.Workflows.DrawDetails(state); - - enum class NameSelectionError - { - None, - Duplicated, - Empty, - }; - static std::string newName; - static NameSelectionError newNameError; - if (ImGui::Button(ls->Rename.Get(), state.SelectedAsset == nullptr)) { - ImGui::OpenPopup("Rename workflow"); - newName.clear(); - } - if (ImGui::BeginPopupModal("Rename workflow")) { - if (ImGui::InputText("New name", &newName)) { - if (newName.empty()) { - newNameError = NameSelectionError::Empty; - } - - if (project.Workflows.FindByName(newName)) { - newNameError = NameSelectionError::Duplicated; - } - } - - if (ImGui::Button(ls->DialogConfirm.Get(), newName.empty())) { - auto workflow = project.Workflows.Rename( - state.SelectedAsset->Name, - newName); - state.SelectedAsset = workflow; + project.Workflows.DisplayDetailsPopup(popup); + switch (popupType) { + case PopupType::WorkflowSelect: + if (ImGui::Button("Open", popup.SelectedAsset == nullptr)) { + auto workflow = project.Workflows.Load(*popup.SelectedAsset); + openWorkflow = std::make_unique(std::move(workflow)); } - ImGui::SameLine(); - if (ImGui::Button(ls->DialogCancel.Get())) { - ImGui::CloseCurrentPopup(); - } - - switch (newNameError) { - case NameSelectionError::None: break; - case NameSelectionError::Duplicated: - ImGui::ErrorMessage("Duplicate workflow name"); - break; - case NameSelectionError::Empty: - ImGui::ErrorMessage("Workflow name cannot be empty"); - break; - } - - ImGui::EndPopup(); - } - - if (ImGui::Button(ls->Delete.Get(), state.SelectedAsset == nullptr)) { - ImGui::OpenPopup("Delete confirmation"); - } - if (ImGui::BeginPopupModal("Delete confirmation")) { - if (ImGui::Button(ls->DialogConfirm.Get())) { - auto& assetName = state.SelectedAsset->Name; - project.Workflows.Remove(assetName); - - state.SelectedAsset = nullptr; - } - ImGui::SameLine(); - if (ImGui::Button(ls->DialogCancel.Get())) { - ImGui::CloseCurrentPopup(); - } - ImGui::EndPopup(); - } + project.Workflows.DisplayDetailsPopup(popup); + break; - ImGui::EndPopup(); + default: + project.Workflows.DisplayDetailsPopup(popup); + break; } if (openWorkflow) { -- cgit v1.2.3-70-g09d2