From eede5e75e31f783c585ccb2471c76e4e381bd0ae 2017-12-21 16:45:00 From: Thibaud Rabillard Date: 2017-12-21 16:45:00 Subject: [PATCH] Link with selection zone on event creation --- diff --git a/gui/include/Catalogue/CatalogueExplorer.h b/gui/include/Catalogue/CatalogueExplorer.h index 37d3ad9..079fd15 100644 --- a/gui/include/Catalogue/CatalogueExplorer.h +++ b/gui/include/Catalogue/CatalogueExplorer.h @@ -12,6 +12,10 @@ class CatalogueEventsWidget; class CatalogueSideBarWidget; class VisualizationWidget; +class VisualizationSelectionZoneItem; + +class DBEvent; + class CatalogueExplorer : public QDialog { Q_OBJECT @@ -25,6 +29,10 @@ public: CatalogueEventsWidget &eventsWidget() const; CatalogueSideBarWidget &sideBarWidget() const; + void clearSelectionZones(); + void addSelectionZoneItem(const std::shared_ptr &event, const QString &productId, + VisualizationSelectionZoneItem *selectionZone); + private: Ui::CatalogueExplorer *ui; diff --git a/gui/src/Catalogue/CatalogueActionManager.cpp b/gui/src/Catalogue/CatalogueActionManager.cpp index 398c83d..0521df5 100644 --- a/gui/src/Catalogue/CatalogueActionManager.cpp +++ b/gui/src/Catalogue/CatalogueActionManager.cpp @@ -48,14 +48,18 @@ struct CatalogueActionManager::CatalogueActionManagerPrivate { auto eventProduct = std::make_shared(); eventProduct->setEvent(*event); + auto productId + = var->metadata().value(DataSourceItem::ID_DATA_KEY, "UnknownID").toString(); + auto zoneRange = zone->range(); eventProduct->setTStart(zoneRange.m_TStart); eventProduct->setTEnd(zoneRange.m_TEnd); - eventProduct->setProductId( - var->metadata().value(DataSourceItem::ID_DATA_KEY, "UnknownID").toString()); + eventProduct->setProductId(productId); productList.push_back(*eventProduct); + + m_CatalogueExplorer->addSelectionZoneItem(event, productId, zone); } } diff --git a/gui/src/Catalogue/CatalogueExplorer.cpp b/gui/src/Catalogue/CatalogueExplorer.cpp index d90e973..3ce453a 100644 --- a/gui/src/Catalogue/CatalogueExplorer.cpp +++ b/gui/src/Catalogue/CatalogueExplorer.cpp @@ -19,6 +19,8 @@ struct CatalogueExplorer::CatalogueExplorerPrivate { std::unordered_map, QVector > m_SelectionZonesPerEvents; + QMetaObject::Connection m_Conn; + CatalogueExplorerPrivate(CatalogueExplorer *catalogueExplorer) : m_ActionManager(catalogueExplorer) { @@ -100,22 +102,7 @@ CatalogueExplorer::CatalogueExplorer(QWidget *parent) // Manage Selection Zones associated to events connect(ui->events, &CatalogueEventsWidget::selectionZoneAdded, [this](auto event, auto productId, auto zone) { - impl->m_SelectionZonesPerEvents[event] << zone; - connect(zone, &VisualizationSelectionZoneItem::rangeEdited, - [event, productId, this](auto range) { - auto productList = event->getEventProducts(); - for (auto &product : productList) { - if (product.getProductId() == productId) { - product.setTStart(range.m_TStart); - product.setTEnd(range.m_TEnd); - } - } - event->setEventProducts(productList); - sqpApp->catalogueController().updateEvent(event); - ui->events->refreshEvent(event); - ui->events->setEventChanges(event, true); - ui->inspector->refresh(); - }); + this->addSelectionZoneItem(event, productId, zone); }); connect(ui->events, &CatalogueEventsWidget::eventsRemoved, [this](auto events) { @@ -152,6 +139,7 @@ CatalogueExplorer::CatalogueExplorer(QWidget *parent) CatalogueExplorer::~CatalogueExplorer() { + disconnect(impl->m_Conn); delete ui; } @@ -169,3 +157,37 @@ CatalogueSideBarWidget &CatalogueExplorer::sideBarWidget() const { return *ui->catalogues; } + +void CatalogueExplorer::clearSelectionZones() +{ + impl->m_SelectionZonesPerEvents.clear(); +} + +void CatalogueExplorer::addSelectionZoneItem(const std::shared_ptr &event, + const QString &productId, + VisualizationSelectionZoneItem *selectionZone) +{ + impl->m_SelectionZonesPerEvents[event] << selectionZone; + connect(selectionZone, &VisualizationSelectionZoneItem::rangeEdited, + [event, productId, this](auto range) { + auto productList = event->getEventProducts(); + for (auto &product : productList) { + if (product.getProductId() == productId) { + product.setTStart(range.m_TStart); + product.setTEnd(range.m_TEnd); + } + } + event->setEventProducts(productList); + sqpApp->catalogueController().updateEvent(event); + ui->events->refreshEvent(event); + ui->events->setEventChanges(event, true); + ui->inspector->refresh(); + }); + + impl->m_Conn = connect(selectionZone, &VisualizationSelectionZoneItem::destroyed, + [event, selectionZone, this]() { + if (!impl->m_SelectionZonesPerEvents.empty()) { + impl->m_SelectionZonesPerEvents[event].removeAll(selectionZone); + } + }); +}