mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 19:10:06 +00:00
Initialize geoLines with existing alert segments on layer creation
This commit is contained in:
parent
09cdb03699
commit
1bf93c6318
1 changed files with 31 additions and 5 deletions
|
|
@ -94,7 +94,7 @@ public:
|
||||||
std::shared_ptr<manager::TextEventManager> textEventManager_ {
|
std::shared_ptr<manager::TextEventManager> textEventManager_ {
|
||||||
manager::TextEventManager::Instance()};
|
manager::TextEventManager::Instance()};
|
||||||
|
|
||||||
std::mutex alertMutex_ {};
|
std::shared_mutex alertMutex_ {};
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void AlertAdded(const std::shared_ptr<SegmentRecord>& segmentRecord,
|
void AlertAdded(const std::shared_ptr<SegmentRecord>& segmentRecord,
|
||||||
|
|
@ -136,6 +136,7 @@ public:
|
||||||
const std::shared_ptr<AlertLayerHandler::SegmentRecord>& segmentRecord);
|
const std::shared_ptr<AlertLayerHandler::SegmentRecord>& segmentRecord);
|
||||||
void UpdateAlert(
|
void UpdateAlert(
|
||||||
const std::shared_ptr<AlertLayerHandler::SegmentRecord>& segmentRecord);
|
const std::shared_ptr<AlertLayerHandler::SegmentRecord>& segmentRecord);
|
||||||
|
void ConnectAlertHandlerSignals();
|
||||||
void ConnectSignals();
|
void ConnectSignals();
|
||||||
|
|
||||||
static void AddLine(std::shared_ptr<gl::draw::GeoLines>& geoLines,
|
static void AddLine(std::shared_ptr<gl::draw::GeoLines>& geoLines,
|
||||||
|
|
@ -193,13 +194,33 @@ void AlertLayer::Initialize()
|
||||||
|
|
||||||
DrawLayer::Initialize();
|
DrawLayer::Initialize();
|
||||||
|
|
||||||
|
auto& alertLayerHandler = AlertLayerHandler::Instance();
|
||||||
|
|
||||||
|
// Take a shared lock to prevent handling additional alerts while populating
|
||||||
|
// initial lists
|
||||||
|
std::shared_lock lock {alertLayerHandler.alertMutex_};
|
||||||
|
|
||||||
for (auto alertActive : {false, true})
|
for (auto alertActive : {false, true})
|
||||||
{
|
{
|
||||||
auto& geoLines = p->geoLines_.at(alertActive);
|
auto& geoLines = p->geoLines_.at(alertActive);
|
||||||
|
|
||||||
geoLines->StartLines();
|
geoLines->StartLines();
|
||||||
|
|
||||||
|
// Populate initial segments
|
||||||
|
auto segmentsIt =
|
||||||
|
alertLayerHandler.segmentsByType_.find({p->phenomenon_, alertActive});
|
||||||
|
if (segmentsIt != alertLayerHandler.segmentsByType_.cend())
|
||||||
|
{
|
||||||
|
for (auto& segment : segmentsIt->second)
|
||||||
|
{
|
||||||
|
p->AddAlert(segment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
geoLines->FinishLines();
|
geoLines->FinishLines();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
p->ConnectAlertHandlerSignals();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AlertLayer::Render(const QMapLibre::CustomLayerRenderParameters& params)
|
void AlertLayer::Render(const QMapLibre::CustomLayerRenderParameters& params)
|
||||||
|
|
@ -311,12 +332,12 @@ void AlertLayerHandler::HandleAlert(const types::TextEventKey& key,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AlertLayer::Impl::ConnectSignals()
|
void AlertLayer::Impl::ConnectAlertHandlerSignals()
|
||||||
{
|
{
|
||||||
auto timelineManager = manager::TimelineManager::Instance();
|
auto& alertLayerHandler = AlertLayerHandler::Instance();
|
||||||
|
|
||||||
QObject::connect(
|
QObject::connect(
|
||||||
&AlertLayerHandler::Instance(),
|
&alertLayerHandler,
|
||||||
&AlertLayerHandler::AlertAdded,
|
&AlertLayerHandler::AlertAdded,
|
||||||
receiver_.get(),
|
receiver_.get(),
|
||||||
[this](
|
[this](
|
||||||
|
|
@ -329,7 +350,7 @@ void AlertLayer::Impl::ConnectSignals()
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
QObject::connect(
|
QObject::connect(
|
||||||
&AlertLayerHandler::Instance(),
|
&alertLayerHandler,
|
||||||
&AlertLayerHandler::AlertUpdated,
|
&AlertLayerHandler::AlertUpdated,
|
||||||
receiver_.get(),
|
receiver_.get(),
|
||||||
[this](
|
[this](
|
||||||
|
|
@ -340,6 +361,11 @@ void AlertLayer::Impl::ConnectSignals()
|
||||||
UpdateAlert(segmentRecord);
|
UpdateAlert(segmentRecord);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void AlertLayer::Impl::ConnectSignals()
|
||||||
|
{
|
||||||
|
auto timelineManager = manager::TimelineManager::Instance();
|
||||||
|
|
||||||
QObject::connect(timelineManager.get(),
|
QObject::connect(timelineManager.get(),
|
||||||
&manager::TimelineManager::SelectedTimeUpdated,
|
&manager::TimelineManager::SelectedTimeUpdated,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue