diff --git a/scwx-qt/source/scwx/qt/model/radar_product_model.cpp b/scwx-qt/source/scwx/qt/model/radar_product_model.cpp index 0e12f55f..d965a23d 100644 --- a/scwx-qt/source/scwx/qt/model/radar_product_model.cpp +++ b/scwx-qt/source/scwx/qt/model/radar_product_model.cpp @@ -48,11 +48,18 @@ RadarProductModelImpl::RadarProductModelImpl(RadarProductModel* self) : this, [=](const std::string& radarSite) { + const QModelIndex rootIndex = + self_->createIndex(rootItem_->row(), 0, rootItem_.get()); + const int rootChildren = rootItem_->child_count(); + + self_->beginInsertRows(rootIndex, rootChildren, rootChildren); + TreeItem* radarSiteItem = new TreeItem({QString::fromStdString(radarSite)}); - rootItem_->AppendChild(radarSiteItem); + self_->endInsertRows(); + connect( manager::RadarProductManager::Instance(radarSite).get(), &manager::RadarProductManager::NewDataAvailable, @@ -69,8 +76,18 @@ RadarProductModelImpl::RadarProductModelImpl(RadarProductModel* self) : if (groupItem == nullptr) { + // Existing group item was not found, create it + const QModelIndex radarSiteIndex = + self_->createIndex(radarSiteItem->row(), 0, radarSiteItem); + const int radarSiteChildren = radarSiteItem->child_count(); + + self_->beginInsertRows( + radarSiteIndex, radarSiteChildren, radarSiteChildren); + groupItem = new TreeItem({groupName}); radarSiteItem->AppendChild(groupItem); + + self_->endInsertRows(); } TreeItem* productItem = nullptr; @@ -88,14 +105,33 @@ RadarProductModelImpl::RadarProductModelImpl(RadarProductModel* self) : if (productItem == nullptr) { + // Existing product item was not found, create it + const QModelIndex groupItemIndex = + self_->createIndex(groupItem->row(), 0, groupItem); + const int groupItemChildren = groupItem->child_count(); + + self_->beginInsertRows( + groupItemIndex, groupItemChildren, groupItemChildren); + productItem = new TreeItem({productName}); groupItem->AppendChild(productItem); + + self_->endInsertRows(); } } // Create leaf item for product time + const QModelIndex productItemIndex = + self_->createIndex(productItem->row(), 0, productItem); + const int productItemChildren = productItem->child_count(); + + self_->beginInsertRows( + productItemIndex, productItemChildren, productItemChildren); + productItem->AppendChild(new TreeItem { QString::fromStdString(util::TimeString(latestTime))}); + + self_->endInsertRows(); }, Qt::QueuedConnection); }, diff --git a/scwx-qt/source/scwx/qt/model/radar_product_model.hpp b/scwx-qt/source/scwx/qt/model/radar_product_model.hpp index 2d3f69d3..9fb45aa2 100644 --- a/scwx-qt/source/scwx/qt/model/radar_product_model.hpp +++ b/scwx-qt/source/scwx/qt/model/radar_product_model.hpp @@ -22,6 +22,8 @@ protected: private: std::unique_ptr p; + + friend class RadarProductModelImpl; }; } // namespace model