| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // This file is part of INSTINCT, the INS Toolkit for Integrated | ||
| 2 | // Navigation Concepts and Training by the Institute of Navigation of | ||
| 3 | // the University of Stuttgart, Germany. | ||
| 4 | // | ||
| 5 | // This Source Code Form is subject to the terms of the Mozilla Public | ||
| 6 | // License, v. 2.0. If a copy of the MPL was not distributed with this | ||
| 7 | // file, You can obtain one at https://mozilla.org/MPL/2.0/. | ||
| 8 | |||
| 9 | /// @file ColormapEditor.cpp | ||
| 10 | /// @brief Colormap editor window | ||
| 11 | /// @author T. Topp (topp@ins.uni-stuttgart.de) | ||
| 12 | /// @date 2023-09-22 | ||
| 13 | |||
| 14 | #include "ColormapEditor.hpp" | ||
| 15 | |||
| 16 | #include <imgui.h> | ||
| 17 | #include <imgui_stdlib.h> | ||
| 18 | #include <fmt/format.h> | ||
| 19 | #include <vector> | ||
| 20 | |||
| 21 | #include "util/Plot/Colormap.hpp" | ||
| 22 | #include "internal/FlowManager.hpp" | ||
| 23 | |||
| 24 | ✗ | void NAV::gui::windows::ShowColormapEditor(bool* show) | |
| 25 | { | ||
| 26 | ✗ | if (!ImGui::Begin("Colormap Editor", show)) | |
| 27 | { | ||
| 28 | ✗ | ImGui::End(); | |
| 29 | ✗ | return; | |
| 30 | } | ||
| 31 | |||
| 32 | ✗ | auto showColormaps = [](std::vector<Colormap>& colormaps, bool flow) { | |
| 33 | ✗ | int colormapRemovalIdx = -1; | |
| 34 | |||
| 35 | ✗ | if (ImGui::BeginTable("##{} colormap table", 4, ImGuiTableFlags_SizingFixedFit, ImVec2(0.0F, 0.0F))) | |
| 36 | { | ||
| 37 | ✗ | ImGui::TableSetupColumn("Name", ImGuiTableColumnFlags_WidthFixed, 150.0F); | |
| 38 | ✗ | ImGui::TableSetupColumn("Discrete", ImGuiTableColumnFlags_WidthFixed, 25.0F); | |
| 39 | ✗ | ImGui::TableSetupColumn("Map", ImGuiTableColumnFlags_WidthStretch); | |
| 40 | ✗ | ImGui::TableSetupColumn("Delete", ImGuiTableColumnFlags_WidthFixed, 20.0F); | |
| 41 | |||
| 42 | ✗ | for (size_t i = 0; i < colormaps.size(); i++) | |
| 43 | { | ||
| 44 | ✗ | auto& cmap = colormaps.at(i); | |
| 45 | |||
| 46 | ✗ | ImGui::TableNextColumn(); | |
| 47 | ✗ | ImGui::SetNextItemWidth(152.0F); | |
| 48 | ✗ | if (ImGui::InputText(fmt::format("##colormap name {}", i).c_str(), &cmap.name)) | |
| 49 | { | ||
| 50 | ✗ | if (flow) { flow::ApplyChanges(); } | |
| 51 | } | ||
| 52 | |||
| 53 | ✗ | ImGui::TableNextColumn(); | |
| 54 | ✗ | ImGui::SetNextItemWidth(145.0F); | |
| 55 | ✗ | if (ImGui::Checkbox(fmt::format("##colormap discrete {}", i).c_str(), &cmap.discrete)) | |
| 56 | { | ||
| 57 | ✗ | cmap.version++; | |
| 58 | ✗ | if (flow) { flow::ApplyChanges(); } | |
| 59 | } | ||
| 60 | ✗ | if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Discrete?"); } | |
| 61 | |||
| 62 | ✗ | ImGui::TableNextColumn(); | |
| 63 | ✗ | ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); | |
| 64 | ✗ | if (ColormapButton(fmt::format("##colormap button {}", i).c_str(), cmap, ImVec2(-1.0F, 0.0F))) | |
| 65 | { | ||
| 66 | ✗ | if (flow) { flow::ApplyChanges(); } | |
| 67 | } | ||
| 68 | |||
| 69 | ✗ | ImGui::TableNextColumn(); | |
| 70 | ✗ | if (ImGui::Button(fmt::format("X##remove colormap {}", i).c_str())) { colormapRemovalIdx = static_cast<int>(i); } | |
| 71 | ✗ | if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Remove?"); } | |
| 72 | } | ||
| 73 | |||
| 74 | ✗ | ImGui::EndTable(); | |
| 75 | } | ||
| 76 | |||
| 77 | ✗ | if (colormapRemovalIdx >= 0) | |
| 78 | { | ||
| 79 | ✗ | colormaps.erase(colormaps.begin() + static_cast<std::ptrdiff_t>(colormapRemovalIdx)); | |
| 80 | ✗ | if (flow) { flow::ApplyChanges(); } | |
| 81 | } | ||
| 82 | |||
| 83 | ✗ | if (ImGui::Button("Add##colormap")) | |
| 84 | { | ||
| 85 | ✗ | colormaps.emplace_back(); | |
| 86 | ✗ | if (flow) { flow::ApplyChanges(); } | |
| 87 | } | ||
| 88 | ✗ | }; | |
| 89 | |||
| 90 | ✗ | if (ImGui::BeginTabBar("Colormap TabBar")) | |
| 91 | { | ||
| 92 | ✗ | if (ImGui::BeginTabItem("Global")) | |
| 93 | { | ||
| 94 | ✗ | showColormaps(ColormapsGlobal, false); | |
| 95 | ✗ | ImGui::EndTabItem(); | |
| 96 | } | ||
| 97 | ✗ | if (ImGui::BeginTabItem("Flow")) | |
| 98 | { | ||
| 99 | ✗ | showColormaps(ColormapsFlow, true); | |
| 100 | ✗ | ImGui::EndTabItem(); | |
| 101 | } | ||
| 102 | ✗ | ImGui::EndTabBar(); | |
| 103 | } | ||
| 104 | |||
| 105 | ✗ | ImGui::End(); | |
| 106 | } | ||
| 107 |