#include "Catalogue/CatalogueActionManager.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include struct CatalogueActionManager::CatalogueActionManagerPrivate { 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("id", "TODO").toString()); // todo productList.push_back(*eventProduct); } } event->setEventProducts(productList); sqpApp->catalogueController().addEvent(event); if (catalogue) { // TODO // catalogue->addEvent(event); } } }; CatalogueActionManager::CatalogueActionManager() : impl{spimpl::make_unique_impl()} { } void CatalogueActionManager::installSelectionZoneActions() { auto &actionController = sqpApp->actionsGuiController(); auto createEventEnableFuntion = [](auto zones) { QSet usedGraphs; for (auto zone : zones) { auto graph = zone->parentGraphWidget(); if (!usedGraphs.contains(graph)) { usedGraphs.insert(graph); } else { return false; } } return true; }; auto createEventAction = actionController.addSectionZoneAction( {QObject::tr("Catalogues")}, QObject::tr("New Event..."), [this](auto zones) { CreateEventDialog dialog; 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; if (dialog.exec() == QDialog::Accepted) { auto selectedCatalogue = dialog.selectedCatalogue(); if (!selectedCatalogue) { selectedCatalogue = std::make_shared(); selectedCatalogue->setName(dialog.catalogueName()); } impl->createEventFromZones(dialog.eventName(), zones, selectedCatalogue); } }); createEventInCatalogueAction->setEnableFunction(createEventEnableFuntion); }