aboutsummaryrefslogtreecommitdiff
path: root/core/src/Model/Template/Template_Main.cpp
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/Template/Template_Main.cpp
parent19d8aeb010ffc967bf82986b7586b161364ab82f (diff)
Refactor asset management UI into AssetList
Diffstat (limited to 'core/src/Model/Template/Template_Main.cpp')
-rw-r--r--core/src/Model/Template/Template_Main.cpp96
1 files changed, 88 insertions, 8 deletions
diff --git a/core/src/Model/Template/Template_Main.cpp b/core/src/Model/Template/Template_Main.cpp
index 9bebc21..ebec490 100644
--- a/core/src/Model/Template/Template_Main.cpp
+++ b/core/src/Model/Template/Template_Main.cpp
@@ -2,9 +2,12 @@
#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_stdlib.h>
#include <fstream>
using namespace std::literals::string_view_literals;
@@ -86,30 +89,107 @@ Template* TemplateAssetList::LoadImpl(const SavedAsset& asset) const
return tmpl.release();
}
+void TemplateAssetList::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 ShowNewKindErrors = [&]() -> void {
+ if (mACNewKind == Template::InvalidKind) {
+ ImGui::ErrorMessage("Must select a valid template type");
+ }
+ };
+
+ auto IsInputValid = [&]() -> bool {
+ return mACNewNameError == NameSelectionError::None &&
+ mACNewKind != Template::InvalidKind;
+ };
+
+ auto ResetState = [&]() -> void {
+ mACNewName.clear();
+ mACNewKind = Template::InvalidKind;
+ ValidateNewName();
+ };
+
+ if (ImGui::InputText("Name", &mACNewName)) {
+ ValidateNewName();
+ }
+
+ if (ImGui::BeginCombo("Type", Template::FormatKind(mACNewKind))) {
+ for (int i = 0; i < Template::KindCount; ++i) {
+ auto kind = static_cast<Template::Kind>(i);
+ if (ImGui::Selectable(Template::FormatKind(kind), mACNewKind == kind)) {
+ mACNewKind = kind;
+ }
+ }
+ ImGui::EndCombo();
+ }
+
+ ShowNewNameErrors();
+ ShowNewKindErrors();
+
+ if (ImGui::Button(ls->DialogConfirm.Get(), !IsInputValid())) {
+ ImGui::CloseCurrentPopup();
+
+ Create(SavedAsset{
+ .Name = mACNewName,
+ .Payload = static_cast<uint64_t>(mACNewKind),
+ });
+ ResetState();
+ }
+ ImGui::SameLine();
+ if (ImGui::Button(ls->DialogCancel.Get())) {
+ ImGui::CloseCurrentPopup();
+ }
+}
+
void TemplateAssetList::SetupDetailsTable(const char* tableId) const
{
- ImGui::BeginTable(tableId, 3);
+ ImGui::BeginTable(tableId, 2, ImGuiTableFlags_Borders);
ImGui::TableSetupColumn("Name");
ImGui::TableSetupColumn("Type");
- ImGui::TableSetupColumn("Modified time");
ImGui::TableHeadersRow();
}
-void TemplateAssetList::DrawBigIcon(const SavedAsset& asset) const
+void TemplateAssetList::DrawBigIcon(ListState& state, const SavedAsset& asset) const
{
// TODO
}
-void TemplateAssetList::DrawDetailsTableRow(const SavedAsset& asset) const
+void TemplateAssetList::DrawDetailsTableRow(ListState& state, const SavedAsset& asset) const
{
ImGui::TableNextColumn();
- ImGui::TextUnformatted(asset.Name.c_str());
+ if (ImGui::Selectable(asset.Name.c_str(), state.SelectedAsset == &asset, ImGuiSelectableFlags_SpanAllColumns)) {
+ state.SelectedAsset = &asset;
+ }
ImGui::TableNextColumn();
auto kind = static_cast<Template::Kind>(asset.Payload);
ImGui::TextUnformatted(Template::FormatKind(kind));
-
- ImGui::TableNextColumn();
- // TODO
}