Render data not available status in the upper right (overlay layer)

This commit is contained in:
Dan Paulat 2025-08-30 18:28:46 -05:00
parent f679f37fc1
commit 341096af1d

View file

@ -92,8 +92,15 @@ public:
Impl(const Impl&&) = delete; Impl(const Impl&&) = delete;
Impl& operator=(const Impl&&) = delete; Impl& operator=(const Impl&&) = delete;
void RenderProductName(const std::shared_ptr<MapContext>& mapContext);
void
RenderProductDetails(const std::shared_ptr<MapContext>& mapContext,
const QMapLibre::CustomLayerRenderParameters& params);
void RenderAttribution(const std::shared_ptr<MapContext>& mapContext,
const QMapLibre::CustomLayerRenderParameters& params);
void SetupGeoIcons(); void SetupGeoIcons();
void SetCusorLocation(common::Coordinate coordinate); void SetCursorLocation(common::Coordinate coordinate);
OverlayLayer* self_; OverlayLayer* self_;
@ -173,7 +180,7 @@ OverlayLayer::~OverlayLayer()
p->cursorScaleConnection_.disconnect(); p->cursorScaleConnection_.disconnect();
} }
void OverlayLayer::Impl::SetCusorLocation(common::Coordinate coordinate) void OverlayLayer::Impl::SetCursorLocation(common::Coordinate coordinate)
{ {
geoIcons_->SetIconLocation( geoIcons_->SetIconLocation(
cursorIcon_, coordinate.latitude_, coordinate.longitude_); cursorIcon_, coordinate.latitude_, coordinate.longitude_);
@ -388,7 +395,7 @@ void OverlayLayer::Render(const std::shared_ptr<MapContext>& mapContext,
p->geoIcons_->SetIconVisible(p->cursorIcon_, cursorIconVisible); p->geoIcons_->SetIconVisible(p->cursorIcon_, cursorIconVisible);
if (cursorIconVisible) if (cursorIconVisible)
{ {
p->SetCusorLocation(mapContext->mouse_coordinate()); p->SetCursorLocation(mapContext->mouse_coordinate());
} }
// Location Icon // Location Icon
@ -425,6 +432,51 @@ void OverlayLayer::Render(const std::shared_ptr<MapContext>& mapContext,
} }
} }
p->RenderProductName(mapContext);
p->RenderProductDetails(mapContext, params);
// Map Center Icon
if (params.width != p->lastWidth_ || params.height != p->lastHeight_)
{
// Draw the icon in the center of the widget
p->icons_->SetIconLocation(
p->mapCenterIcon_, params.width / 2.0, params.height / 2.0);
}
p->icons_->SetIconVisible(p->mapCenterIcon_,
generalSettings.show_map_center().GetValue());
const QMargins colorTableMargins = mapContext->color_table_margins();
if (colorTableMargins != p->lastColorTableMargins_ || p->firstRender_)
{
// Draw map logo with a 10x10 indent from the bottom left
p->icons_->SetIconLocation(p->mapLogoIcon_,
10 + colorTableMargins.left(),
10 + colorTableMargins.bottom());
}
p->icons_->SetIconVisible(p->mapLogoIcon_,
generalSettings.show_map_logo().GetValue());
DrawLayer::RenderWithoutImGui(params);
p->RenderAttribution(mapContext, params);
p->firstRender_ = false;
p->lastWidth_ = params.width;
p->lastHeight_ = params.height;
p->lastBearing_ = params.bearing;
p->lastFontSize_ = ImGui::GetFontSize();
p->lastColorTableMargins_ = colorTableMargins;
ImGuiFrameEnd();
SCWX_GL_CHECK_ERROR();
}
void OverlayLayer::Impl::RenderProductName(
const std::shared_ptr<MapContext>& mapContext)
{
auto radarProductView = mapContext->radar_product_view();
if (radarProductView != nullptr) if (radarProductView != nullptr)
{ {
// Render product name // Render product name
@ -456,14 +508,37 @@ void OverlayLayer::Render(const std::shared_ptr<MapContext>& mapContext,
ImGui::End(); ImGui::End();
} }
} }
}
if (p->sweepTimeString_.length() > 0) void OverlayLayer::Impl::RenderProductDetails(
const std::shared_ptr<MapContext>& mapContext,
const QMapLibre::CustomLayerRenderParameters& params)
{ {
// Render time auto radarProductView = mapContext->radar_product_view();
ImGui::SetNextWindowPos(ImVec2 {static_cast<float>(params.width), 0.0f}, ImGui::SetNextWindowPos(ImVec2 {static_cast<float>(params.width), 0.0f},
ImGuiCond_Always, ImGuiCond_Always,
ImVec2 {1.0f, 0.0f}); ImVec2 {1.0f, 0.0f});
ImGui::Begin("Sweep Time",
if (radarProductView != nullptr &&
radarProductView->load_status() ==
types::RadarProductLoadStatus::ProductNotAvailable)
{
ImGui::Begin("Product Details",
nullptr,
ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize |
ImGuiWindowFlags_AlwaysAutoResize);
ImGui::PushStyleColor(ImGuiCol_Text, IM_COL32(255, 0, 0, 255));
ImGui::TextUnformatted("NO DATA AVAILABLE");
ImGui::PopStyleColor();
ImGui::End();
}
else if (sweepTimeString_.length() > 0)
{
// Render time
ImGui::Begin("Product Details",
nullptr, nullptr,
ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize |
ImGuiWindowFlags_AlwaysAutoResize); ImGuiWindowFlags_AlwaysAutoResize);
@ -471,12 +546,12 @@ void OverlayLayer::Render(const std::shared_ptr<MapContext>& mapContext,
if (radarProductView != nullptr && ImGui::IsWindowHovered()) if (radarProductView != nullptr && ImGui::IsWindowHovered())
{ {
// Show a detailed product description when the sweep time is hovered // Show a detailed product description when the sweep time is hovered
p->sweepTimePicked_ = true; sweepTimePicked_ = true;
auto fields = radarProductView->GetDescriptionFields(); auto fields = radarProductView->GetDescriptionFields();
if (fields.empty()) if (fields.empty())
{ {
ImGui::TextUnformatted(p->sweepTimeString_.c_str()); ImGui::TextUnformatted(sweepTimeString_.c_str());
} }
else else
{ {
@ -496,34 +571,19 @@ void OverlayLayer::Render(const std::shared_ptr<MapContext>& mapContext,
} }
else else
{ {
ImGui::TextUnformatted(p->sweepTimeString_.c_str()); ImGui::TextUnformatted(sweepTimeString_.c_str());
} }
ImGui::End(); ImGui::End();
} }
// Map Center Icon
if (params.width != p->lastWidth_ || params.height != p->lastHeight_)
{
// Draw the icon in the center of the widget
p->icons_->SetIconLocation(
p->mapCenterIcon_, params.width / 2.0, params.height / 2.0);
} }
p->icons_->SetIconVisible(p->mapCenterIcon_,
generalSettings.show_map_center().GetValue());
void OverlayLayer::Impl::RenderAttribution(
const std::shared_ptr<MapContext>& mapContext,
const QMapLibre::CustomLayerRenderParameters& params)
{
const QMargins colorTableMargins = mapContext->color_table_margins(); const QMargins colorTableMargins = mapContext->color_table_margins();
if (colorTableMargins != p->lastColorTableMargins_ || p->firstRender_) auto& generalSettings = settings::GeneralSettings::Instance();
{
// Draw map logo with a 10x10 indent from the bottom left
p->icons_->SetIconLocation(p->mapLogoIcon_,
10 + colorTableMargins.left(),
10 + colorTableMargins.bottom());
}
p->icons_->SetIconVisible(p->mapLogoIcon_,
generalSettings.show_map_logo().GetValue());
DrawLayer::RenderWithoutImGui(params);
auto mapCopyrights = mapContext->map_copyrights(); auto mapCopyrights = mapContext->map_copyrights();
if (mapCopyrights.length() > 0 && if (mapCopyrights.length() > 0 &&
@ -550,17 +610,6 @@ void OverlayLayer::Render(const std::shared_ptr<MapContext>& mapContext,
ImGui::PopFont(); ImGui::PopFont();
ImGui::PopStyleVar(); ImGui::PopStyleVar();
} }
p->firstRender_ = false;
p->lastWidth_ = params.width;
p->lastHeight_ = params.height;
p->lastBearing_ = params.bearing;
p->lastFontSize_ = ImGui::GetFontSize();
p->lastColorTableMargins_ = colorTableMargins;
ImGuiFrameEnd();
SCWX_GL_CHECK_ERROR();
} }
void OverlayLayer::Deinitialize() void OverlayLayer::Deinitialize()