25 ImGui::SetNextItemOpen(detailView, firstOpen ? ImGuiCond_Always : ImGuiCond_Once);
27 auto d = std::ranges::find_if(
data, [&](
const auto& dat) {
28 return dat.description == displayName;
30 if (d ==
data.end()) {
return; }
32 if (std::ranges::any_of(d->rawData, [&](
const auto& raw) {
33 return raw.second->insTime != insTime;
36 bool sameLine =
false;
37 for (
const auto& raw : d->rawData)
39 auto timeString = fmt::format(
"{}", raw.second->insTime.toYMDHMS(
GPST));
40 auto len =
static_cast<int>(raw.first.length()) -
static_cast<int>(timeString.length());
42 if (raw.second->hasTooltip())
44 ImGui::SetCursorPosX(ImGui::GetCursorPosX() + ImGui::GetStyle().ItemInnerSpacing.x);
48 ImGui::SetCursorPosX(ImGui::GetCursorPosX() + ImGui::GetStyle().ItemInnerSpacing.x);
53 ImGui::TextUnformatted(fmt::format(
"{}{:{w}}", timeString,
" ", fmt::arg(
"w", len)).c_str());
55 else { ImGui::TextUnformatted(timeString.c_str()); }
61 if (std::none_of(d->rawData.begin(), d->rawData.end(), [](
const auto& raw) { return raw.second->hasTooltip(); })) {
return; }
63 if (ImGui::BeginTabBar(fmt::format(
"##dyndata {}",
id).c_str(), ImGuiTabBarFlags_None))
65 for (
const auto& raw : d->rawData)
67 if (!raw.second->hasTooltip()) {
continue; }
68 auto timeString = fmt::format(
"{}", raw.second->insTime.toYMDHMS(
GPST));
69 if (ImGui::BeginTabItem(fmt::format(
"{}##{} {}", raw.first, timeString,
id).c_str()))
71 raw.second->guiTooltip(detailView, firstOpen, displayName, fmt::format(
"{} {} {}", raw.first, timeString,
id).c_str(), rootWindow);
void guiTooltip(bool detailView, bool firstOpen, const char *displayName, const char *id, int *rootWindow) const override
Shows a GUI tooltip to look into details of the observation.