#include "Catalogue/CatalogueActionManager.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include struct CatalogueActionManager::CatalogueActionManagerPrivate { CatalogueExplorer *m_CatalogueExplorer = nullptr; CatalogueActionManagerPrivate(CatalogueExplorer *catalogueExplorer) : m_CatalogueExplorer(catalogueExplorer) { } void createEventFromZones(const QString &eventName, const QVector &zones, const std::shared_ptr &catalogue = nullptr) { auto event = std::make_shared(); event->setName(eventName); std::list productList; for (auto zone : zones) { auto graph = zone->parentGraphWidget(); for (auto var : graph->variables()) { auto eventProduct = std::make_shared(); eventProduct->setEvent(*event); 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()); productList.push_back(*eventProduct); } } event->setEventProducts(productList); sqpApp->catalogueController().addEvent(event); if (catalogue) { catalogue->addEvent(event->getUniqId()); sqpApp->catalogueController().updateCatalogue(catalogue); m_CatalogueExplorer->sideBarWidget().setCatalogueChanges(catalogue, true); if (m_CatalogueExplorer->eventsWidget().displayedCatalogues().contains(catalogue)) { m_CatalogueExplorer->eventsWidget().addEvent(event); m_CatalogueExplorer->eventsWidget().setEventChanges(event, true); } } else if (m_CatalogueExplorer->eventsWidget().isAllEventsDisplayed()) { m_CatalogueExplorer->eventsWidget().addEvent(event); m_CatalogueExplorer->eventsWidget().setEventChanges(event, true); } } }; CatalogueActionManager::CatalogueActionManager(CatalogueExplorer *catalogueExplorer) : impl{spimpl::make_unique_impl(catalogueExplorer)} { } void CatalogueActionManager::installSelectionZoneActions() { auto &actionController = sqpApp->actionsGuiController(); auto createEventEnableFuntion = [](auto zones) { // Checks that all variables in the zones doesn't refer to the same product QSet usedDatasource; for (auto zone : zones) { auto graph = zone->parentGraphWidget(); auto variables = graph->variables(); for (auto var : variables) { auto datasourceId = var->metadata().value(DataSourceItem::ID_DATA_KEY).toString(); if (!usedDatasource.contains(datasourceId)) { usedDatasource.insert(datasourceId); } else { return false; } } } return true; }; auto createEventAction = actionController.addSectionZoneAction( {QObject::tr("Catalogues")}, QObject::tr("New Event..."), [this](auto zones) { CreateEventDialog dialog( impl->m_CatalogueExplorer->sideBarWidget().getCatalogues(REPOSITORY_DEFAULT)); dialog.hideCatalogueChoice(); if (dialog.exec() == QDialog::Accepted) { impl->createEventFromZones(dialog.eventName(), zones); } }); createEventAction->setEnableFunction(createEventEnableFuntion); auto createEventInCatalogueAction = actionController.addSectionZoneAction( {QObject::tr("Catalogues")}, QObject::tr("New Event in Catalogue..."), [this](auto zones) { CreateEventDialog dialog( impl->m_CatalogueExplorer->sideBarWidget().getCatalogues(REPOSITORY_DEFAULT)); if (dialog.exec() == QDialog::Accepted) { auto selectedCatalogue = dialog.selectedCatalogue(); if (!selectedCatalogue) { selectedCatalogue = std::make_shared(); selectedCatalogue->setName(dialog.catalogueName()); sqpApp->catalogueController().addCatalogue(selectedCatalogue); impl->m_CatalogueExplorer->sideBarWidget().addCatalogue(selectedCatalogue, REPOSITORY_DEFAULT); } impl->createEventFromZones(dialog.eventName(), zones, selectedCatalogue); } }); createEventInCatalogueAction->setEnableFunction(createEventEnableFuntion); }