| 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 PlotTooltip.hpp | ||
| 10 | /// @brief Plot Tooltips on hover | ||
| 11 | /// @author T. Topp (topp@ins.uni-stuttgart.de) | ||
| 12 | /// @date 2024-08-16 | ||
| 13 | |||
| 14 | #pragma once | ||
| 15 | |||
| 16 | #include <cstddef> | ||
| 17 | #include <optional> | ||
| 18 | #include <functional> | ||
| 19 | |||
| 20 | #include <imgui.h> | ||
| 21 | #include <implot.h> | ||
| 22 | |||
| 23 | #include "Navigation/Time/InsTime.hpp" | ||
| 24 | #include "util/Container/ScrollingBuffer.hpp" | ||
| 25 | |||
| 26 | namespace NAV | ||
| 27 | { | ||
| 28 | |||
| 29 | /// Plot Tooltip windows to show | ||
| 30 | struct PlotTooltip | ||
| 31 | { | ||
| 32 | /// @brief Constructor | ||
| 33 | /// @param[in] plotItemIdx The plot item index the tooltip belongs to | ||
| 34 | /// @param[in] dataIdx The data index the tooltip belongs to | ||
| 35 | /// @param[in] startPos Initial start position of the tooltip window | ||
| 36 | ✗ | PlotTooltip(size_t plotItemIdx, size_t dataIdx, const ImVec2& startPos) | |
| 37 | ✗ | : plotItemIdx(plotItemIdx), dataIdx(dataIdx), startPos(startPos) {} | |
| 38 | |||
| 39 | size_t plotItemIdx = 0; ///< The plot item index the tooltip belongs to | ||
| 40 | size_t dataIdx = 0; ///< The data index the tooltip belongs to | ||
| 41 | std::optional<ImVec2> startPos; ///< Initial start position of the tooltip window | ||
| 42 | }; | ||
| 43 | |||
| 44 | /// @brief Shows a tooltip if the plot is hovered | ||
| 45 | /// @param[in, out] tooltips Tooltip vector to show | ||
| 46 | /// @param[in] plotItemIdx Plot item index | ||
| 47 | /// @param[in] plotName Name of the plot item | ||
| 48 | /// @param[in] axis Axis to check for | ||
| 49 | /// @param[in] xData X axis data | ||
| 50 | /// @param[in] yData Y axis data | ||
| 51 | /// @param[in] otherHoverTooltipsShown Whether other hover tooltips are already shown | ||
| 52 | /// @param[in] showTooltipCallback Called inside the tooltip. Argument is the data index for which the tooltip is shown | ||
| 53 | /// @return True if a tooltip is shown | ||
| 54 | bool ShowPlotTooltip(std::vector<PlotTooltip>& tooltips, | ||
| 55 | size_t plotItemIdx, | ||
| 56 | const std::string& plotName, | ||
| 57 | ImAxis axis, | ||
| 58 | const ScrollingBuffer<double>& xData, | ||
| 59 | const ScrollingBuffer<double>& yData, | ||
| 60 | bool otherHoverTooltipsShown, | ||
| 61 | const std::function<void(size_t)>& showTooltipCallback); | ||
| 62 | |||
| 63 | /// @brief Shows all tooltip windows in the vector | ||
| 64 | /// @param[in, out] tooltips Tooltip vector to show | ||
| 65 | /// @param[in] plotItemIdx Plot item index | ||
| 66 | /// @param[in] plotName Name of the plot item | ||
| 67 | /// @param[in] uid Unique id for the window | ||
| 68 | /// @param[in] parentWindows Parent windows to stay on top of | ||
| 69 | /// @param[in] getInsTime Callback to get the time associated with the tooltip | ||
| 70 | /// @param[in] showTooltipCallback Called inside the tooltip. Argument is the data index and the unique id for which the tooltip is shown | ||
| 71 | void ShowPlotTooltipWindows(std::vector<PlotTooltip>& tooltips, | ||
| 72 | size_t plotItemIdx, | ||
| 73 | const std::string& plotName, | ||
| 74 | const std::string& uid, | ||
| 75 | const std::vector<int*>& parentWindows, | ||
| 76 | const std::function<InsTime(size_t)>& getInsTime, | ||
| 77 | const std::function<void(size_t, const char*)>& showTooltipCallback); | ||
| 78 | |||
| 79 | } // namespace NAV | ||
| 80 |