Emit signals when a sweep is not updated (with reason)

This commit is contained in:
Dan Paulat 2023-06-07 23:07:01 -05:00
parent 745eba34f2
commit 6b179fe35c
7 changed files with 44 additions and 1 deletions

View file

@ -1010,6 +1010,10 @@ void MapWidgetImpl::RadarProductViewConnect()
Q_EMIT widget_->RadarSweepUpdated();
},
Qt::QueuedConnection);
connect(radarProductView.get(),
&view::RadarProductView::SweepNotComputed,
widget_,
&MapWidget::RadarSweepNotUpdated);
}
}
@ -1027,6 +1031,10 @@ void MapWidgetImpl::RadarProductViewDisconnect()
&view::RadarProductView::SweepComputed,
this,
nullptr);
disconnect(radarProductView.get(),
&view::RadarProductView::SweepNotComputed,
widget_,
nullptr);
}
}

View file

@ -2,6 +2,7 @@
#include <scwx/common/products.hpp>
#include <scwx/qt/config/radar_site.hpp>
#include <scwx/qt/types/map_types.hpp>
#include <scwx/qt/types/radar_product_record.hpp>
#include <chrono>
@ -143,6 +144,7 @@ signals:
void MapStyleChanged(const std::string& styleName);
void RadarSiteUpdated(std::shared_ptr<config::RadarSite> radarSite);
void RadarSweepUpdated();
void RadarSweepNotUpdated(types::NoUpdateReason reason);
};
} // namespace map

View file

@ -21,6 +21,14 @@ enum class MapTime
Archive
};
enum class NoUpdateReason
{
NoChange,
NotLoaded,
InvalidProduct,
InvalidData
};
std::string GetMapTimeName(MapTime mapTime);
} // namespace types

View file

@ -402,6 +402,7 @@ void Level2ProductView::ComputeSweep()
if (p->dataBlockType_ == wsr88d::rda::DataBlockType::Unknown)
{
Q_EMIT SweepNotComputed(types::NoUpdateReason::InvalidProduct);
return;
}
@ -423,8 +424,14 @@ void Level2ProductView::ComputeSweep()
SelectTime(foundTime);
}
if (radarData == nullptr || radarData == p->elevationScan_)
if (radarData == nullptr)
{
Q_EMIT SweepNotComputed(types::NoUpdateReason::NotLoaded);
return;
}
if (radarData == p->elevationScan_)
{
Q_EMIT SweepNotComputed(types::NoUpdateReason::NoChange);
return;
}
@ -443,6 +450,7 @@ void Level2ProductView::ComputeSweep()
{
logger_->warn("No moment data for {}",
common::GetLevel2Name(p->product_));
Q_EMIT SweepNotComputed(types::NoUpdateReason::InvalidData);
return;
}

View file

@ -133,6 +133,7 @@ void Level3RadialView::ComputeSweep()
if (message == nullptr)
{
logger_->debug("Level 3 data not found");
Q_EMIT SweepNotComputed(types::NoUpdateReason::NotLoaded);
return;
}
@ -142,11 +143,13 @@ void Level3RadialView::ComputeSweep()
if (gpm == nullptr)
{
logger_->warn("Graphic Product Message not found");
Q_EMIT SweepNotComputed(types::NoUpdateReason::InvalidData);
return;
}
else if (gpm == graphic_product_message())
{
// Skip if this is the message we previously processed
Q_EMIT SweepNotComputed(types::NoUpdateReason::NoChange);
return;
}
set_graphic_product_message(gpm);
@ -160,6 +163,7 @@ void Level3RadialView::ComputeSweep()
if (descriptionBlock == nullptr || symbologyBlock == nullptr)
{
logger_->warn("Missing blocks");
Q_EMIT SweepNotComputed(types::NoUpdateReason::InvalidData);
return;
}
@ -168,6 +172,7 @@ void Level3RadialView::ComputeSweep()
if (numberOfLayers < 1)
{
logger_->warn("No layers present in symbology block");
Q_EMIT SweepNotComputed(types::NoUpdateReason::InvalidData);
return;
}
@ -219,6 +224,7 @@ void Level3RadialView::ComputeSweep()
else
{
logger_->debug("No radial data found");
Q_EMIT SweepNotComputed(types::NoUpdateReason::InvalidData);
return;
}
@ -227,6 +233,7 @@ void Level3RadialView::ComputeSweep()
if (radials < 1 || radials > 720)
{
logger_->warn("Unsupported number of radials: {}", radials);
Q_EMIT SweepNotComputed(types::NoUpdateReason::InvalidData);
return;
}
@ -254,6 +261,7 @@ void Level3RadialView::ComputeSweep()
if (gates < 1)
{
logger_->warn("No range bins in radial data");
Q_EMIT SweepNotComputed(types::NoUpdateReason::InvalidData);
return;
}

View file

@ -116,6 +116,7 @@ void Level3RasterView::ComputeSweep()
if (message == nullptr)
{
logger_->debug("Level 3 data not found");
Q_EMIT SweepNotComputed(types::NoUpdateReason::NotLoaded);
return;
}
@ -125,11 +126,13 @@ void Level3RasterView::ComputeSweep()
if (gpm == nullptr)
{
logger_->warn("Graphic Product Message not found");
Q_EMIT SweepNotComputed(types::NoUpdateReason::InvalidData);
return;
}
else if (gpm == graphic_product_message())
{
// Skip if this is the message we previously processed
Q_EMIT SweepNotComputed(types::NoUpdateReason::NoChange);
return;
}
set_graphic_product_message(gpm);
@ -143,6 +146,7 @@ void Level3RasterView::ComputeSweep()
if (descriptionBlock == nullptr || symbologyBlock == nullptr)
{
logger_->warn("Missing blocks");
Q_EMIT SweepNotComputed(types::NoUpdateReason::InvalidData);
return;
}
@ -151,6 +155,7 @@ void Level3RasterView::ComputeSweep()
if (numberOfLayers < 1)
{
logger_->warn("No layers present in symbology block");
Q_EMIT SweepNotComputed(types::NoUpdateReason::InvalidData);
return;
}
@ -182,6 +187,7 @@ void Level3RasterView::ComputeSweep()
if (rasterData == nullptr)
{
logger_->debug("No raster data found");
Q_EMIT SweepNotComputed(types::NoUpdateReason::InvalidData);
return;
}
@ -196,6 +202,7 @@ void Level3RasterView::ComputeSweep()
if (maxColumns == 0)
{
logger_->debug("No raster bins found");
Q_EMIT SweepNotComputed(types::NoUpdateReason::InvalidData);
return;
}

View file

@ -3,6 +3,7 @@
#include <scwx/common/color_table.hpp>
#include <scwx/common/products.hpp>
#include <scwx/qt/manager/radar_product_manager.hpp>
#include <scwx/qt/types/map_types.hpp>
#include <chrono>
#include <memory>
@ -75,6 +76,7 @@ protected slots:
signals:
void ColorTableUpdated();
void SweepComputed();
void SweepNotComputed(types::NoUpdateReason reason);
private:
std::unique_ptr<RadarProductViewImpl> p;