From d7ee2efaca226fc478e3f0c78abdbe86a887f17a Mon Sep 17 00:00:00 2001 From: rtk0c Date: Mon, 7 Jun 2021 12:19:51 -0700 Subject: Complete asset loading/saving and UI management logic --- core/src/UI/UI_Workflows.cpp | 54 +++++++++++++++----------------------------- 1 file changed, 18 insertions(+), 36 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 51cc4f8..7b2de2a 100644 --- a/core/src/UI/UI_Workflows.cpp +++ b/core/src/UI/UI_Workflows.cpp @@ -358,39 +358,17 @@ public: ImNodes::End(); } }; - -struct DrawTemplateList_State -{ - const WorkflowInfo* SelectedWorkflow = nullptr; -}; - -void DrawTemplateList(DrawTemplateList_State& state) -{ - auto& gs = GlobalStates::GetInstance(); - auto& workflows = gs.GetCurrentProject()->GetWorkflows(); - - // TODO sort the list - for (auto& info : workflows) { - if (ImGui::Selectable(info.Name.c_str(), state.SelectedWorkflow == &info)) { - state.SelectedWorkflow = &info; - } - if (ImGui::IsItemHovered()) { - ImGui::BeginTooltip(); - ImGui::Text("Path: %s", info.PathStringCache.c_str()); - ImGui::EndTooltip(); - } - } -} } // namespace void UI::WorkflowsTab() { auto ls = LocaleStrings::Instance.get(); auto& gs = GlobalStates::GetInstance(); + auto& project = *gs.GetCurrentProject(); bool openedDummy = true; static std::unique_ptr openWorkflow; - static DrawTemplateList_State state; + static AssetList::ListState state; // Toolbar item: close if (ImGui::Button(ls->Close.Get(), openWorkflow == nullptr)) { @@ -403,10 +381,10 @@ void UI::WorkflowsTab() ImGui::OpenPopup(ls->OpenWorkflowDialogTitle.Get()); } if (ImGui::BeginPopupModal(ls->OpenWorkflowDialogTitle.Get(), &openedDummy, ImGuiWindowFlags_AlwaysAutoResize)) { - DrawTemplateList(state); + project.Workflows.DrawDetails(state); - if (state.SelectedWorkflow) { - auto workflow = state.SelectedWorkflow->LoadFromDisk(); + if (state.SelectedAsset) { + auto workflow = project.Workflows.Load(*state.SelectedAsset); openWorkflow = std::make_unique(std::move(workflow)); } @@ -419,7 +397,7 @@ void UI::WorkflowsTab() ImGui::OpenPopup(ls->ManageWorkflowsDialogTitle.Get()); } if (ImGui::BeginPopupModal(ls->ManageWorkflowsDialogTitle.Get(), &openedDummy, ImGuiWindowFlags_AlwaysAutoResize)) { - DrawTemplateList(state); + project.Workflows.DrawDetails(state); enum class NameSelectionError { @@ -429,7 +407,7 @@ void UI::WorkflowsTab() }; static std::string newName; static NameSelectionError newNameError; - if (ImGui::Button(ls->Rename.Get(), state.SelectedWorkflow == nullptr)) { + if (ImGui::Button(ls->Rename.Get(), state.SelectedAsset == nullptr)) { ImGui::OpenPopup("Rename workflow"); newName.clear(); } @@ -439,16 +417,17 @@ void UI::WorkflowsTab() newNameError = NameSelectionError::Empty; } - auto& workflows = gs.GetCurrentProject()->GetWorkflows(); - if (workflows.find(newName) != workflows.end()) { + if (project.Workflows.FindByName(newName)) { newNameError = NameSelectionError::Duplicated; } } if (ImGui::Button(ls->DialogConfirm.Get(), newName.empty())) { - auto project = gs.GetCurrentProject(); - project->RenameWorkflow(state.SelectedWorkflow->Name, newName); - state.SelectedWorkflow = &project->GetWorkflows().at(newName); + auto workflow = project.Workflows.Rename( + state.SelectedAsset->Name, + newName); + + state.SelectedAsset = workflow; } ImGui::SameLine(); if (ImGui::Button(ls->DialogCancel.Get())) { @@ -468,12 +447,15 @@ void UI::WorkflowsTab() ImGui::EndPopup(); } - if (ImGui::Button(ls->Delete.Get(), state.SelectedWorkflow == nullptr)) { + if (ImGui::Button(ls->Delete.Get(), state.SelectedAsset == nullptr)) { ImGui::OpenPopup("Delete confirmation"); } if (ImGui::BeginPopupModal("Delete confirmation")) { if (ImGui::Button(ls->DialogConfirm.Get())) { - gs.GetCurrentProject()->RemoveWorkflow(state.SelectedWorkflow->Name); + auto& assetName = state.SelectedAsset->Name; + project.Workflows.Remove(assetName); + + state.SelectedAsset = nullptr; } ImGui::SameLine(); if (ImGui::Button(ls->DialogCancel.Get())) { -- cgit v1.2.3-70-g09d2