38 if (!label) { label =
"SNR Mask"; }
40 if (
isInactive()) { ImGui::PushStyleColor(ImGuiCol_Button, ImGui::GetStyle().Colors[ImGuiCol_TextDisabled]); }
41 if (ImGui::Button(fmt::format(
"{}", label).c_str()))
43 ImGui::OpenPopup(fmt::format(
"SNR Mask##Popup - {}", label).c_str());
47 ImGui::PopStyleColor();
48 if (ImGui::IsItemHovered())
50 ImGui::SetTooltip(
"Inactive due to all values being 0");
54 constexpr float INPUT_WIDTH = 40.0F;
56 if (ImGui::BeginPopup(fmt::format(
"SNR Mask##Popup - {}", label).c_str()))
58 if (ImGui::BeginTable(fmt::format(
"").c_str(),
elevations.size() + 2, ImGuiTableFlags_Borders))
60 ImGui::TableSetupColumn(
"Elevation:");
63 ImGui::TableSetupColumn(fmt::format(
"< {:.0f}",
rad2deg(elevation)).c_str());
65 ImGui::TableSetupColumn(
"");
66 ImGui::TableHeadersRow();
68 ImGui::TableNextColumn();
69 ImGui::TextUnformatted(
"All");
72 " this row is only used to change all frequencies at the same time.\n"
73 "- Grayed out when not all frequencies below have the same value.");
74 for (
size_t i = 0; i <
allOverride.first.size(); ++i)
76 ImGui::TableNextColumn();
77 ImGui::SetNextItemWidth(INPUT_WIDTH);
78 if (
allOverride.second && i != 0) { ImGui::BeginDisabled(); }
79 bool anyValueDiffers = std::ranges::any_of(
mask, [&](
const auto& freqMask) {
80 return allOverride.first.at(i) != freqMask.second.first.at(i);
82 if (anyValueDiffers) { ImGui::PushStyleColor(ImGuiCol_FrameBg, ImGui::GetStyle().Colors[ImGuiCol_TextDisabled]); }
88 for (
auto& freqSNRs :
mask)
90 freqSNRs.second.first.at(i) =
allOverride.first.at(i);
95 for (
size_t i = 0; i <
allOverride.first.size(); ++i)
98 for (
auto& freqSNRs :
mask)
100 freqSNRs.second.first.at(i) =
allOverride.first.at(i);
105 if (anyValueDiffers) { ImGui::PopStyleColor(); }
106 if (
allOverride.second && i != 0) { ImGui::EndDisabled(); }
108 ImGui::TableNextColumn();
109 if (ImGui::Checkbox(fmt::format(
"##lock together - all {}", label).c_str(), &
allOverride.second))
114 for (
size_t i = 0; i <
allOverride.first.size(); ++i)
117 for (
auto& freqSNRs :
mask)
119 freqSNRs.second.first.at(i) =
allOverride.first.at(i);
124 if (ImGui::IsItemHovered()) { ImGui::SetTooltip(
"Lock all values together"); }
126 for (
auto& [freq, SNRs] :
mask)
128 ImGui::TableNextColumn();
129 ImGui::TextUnformatted(fmt::format(
"{}", freq).c_str());
130 for (
size_t i = 0; i < SNRs.first.size(); ++i)
132 ImGui::TableNextColumn();
133 ImGui::SetNextItemWidth(INPUT_WIDTH);
134 if (SNRs.second && i != 0) { ImGui::BeginDisabled(); }
135 if (
ImGui::DragDouble(fmt::format(
"##{} {} {}", freq, label, i).c_str(), &SNRs.first.at(i), 1.0, 0.0, 100.0,
"%.1f"))
140 for (
size_t j = 1; j < SNRs.first.size(); ++j)
142 SNRs.first.at(j) = SNRs.first.at(i);
146 if (SNRs.second && i != 0) { ImGui::EndDisabled(); }
148 ImGui::TableNextColumn();
149 if (ImGui::Checkbox(fmt::format(
"##lock together - all {} {}", freq, label).c_str(), &SNRs.second))
154 for (
size_t i = 1; i < SNRs.first.size(); ++i)
156 SNRs.first.at(i) = SNRs.first[0];
160 if (ImGui::IsItemHovered()) { ImGui::SetTooltip(
"Lock all values together"); }
std::array< std::pair< Frequency, std::pair< std::array< double, elevations.size()>, bool > >, Frequency::GetAll().size()> mask
Masks for all frequencies and SNR [dbHz] values + lock together boolean.
bool DragDouble(const char *label, double *v, float v_speed, double v_min, double v_max, const char *format, ImGuiSliderFlags flags)
Shows a Drag GUI element for 'double'.