CatalogueActionManager.cpp
190 lines
| 7.4 KiB
| text/x-c
|
CppLexer
r1163 | #include "Catalogue/CatalogueActionManager.h" | |||
#include <Actions/ActionsGuiController.h> | ||||
#include <Catalogue/CatalogueController.h> | ||||
r1232 | #include <DataSource/DataSourceItem.h> | |||
r1163 | #include <SqpApplication.h> | |||
#include <Variable/Variable.h> | ||||
#include <Visualization/VisualizationGraphWidget.h> | ||||
#include <Visualization/VisualizationSelectionZoneItem.h> | ||||
r1231 | #include <Catalogue/CatalogueEventsWidget.h> | |||
#include <Catalogue/CatalogueExplorer.h> | ||||
#include <Catalogue/CatalogueSideBarWidget.h> | ||||
r1163 | ||||
r1406 | //#include <CatalogueDao.h> | |||
//#include <DBCatalogue.h> | ||||
//#include <DBEvent.h> | ||||
//#include <DBEventProduct.h> | ||||
#include <Catalogue/CatalogueController.h> | ||||
#include <Event.hpp> | ||||
r1163 | ||||
#include <QBoxLayout> | ||||
#include <QComboBox> | ||||
#include <QDialog> | ||||
#include <QDialogButtonBox> | ||||
#include <QLineEdit> | ||||
#include <memory> | ||||
r1326 | const auto CATALOGUE_MENU_NAME = QObject::tr("Catalogues"); | |||
r1327 | const auto CATALOGUE_CREATE_EVENT_MENU_NAME = QObject::tr("New Event..."); | |||
r1326 | ||||
r1327 | const auto DEFAULT_EVENT_NAME = QObject::tr("Event"); | |||
const auto DEFAULT_CATALOGUE_NAME = QObject::tr("Catalogue"); | ||||
r1326 | ||||
r1406 | struct CatalogueActionManager::CatalogueActionManagerPrivate | |||
{ | ||||
r1231 | ||||
r1406 | CatalogueExplorer* m_CatalogueExplorer = nullptr; | |||
QVector<std::shared_ptr<SelectionZoneAction>> m_CreateInCatalogueActions; | ||||
r1231 | ||||
r1406 | CatalogueActionManagerPrivate(CatalogueExplorer* catalogueExplorer) | |||
r1231 | : m_CatalogueExplorer(catalogueExplorer) | |||
{ | ||||
} | ||||
r1406 | void createEventFromZones(const QString& eventName, | |||
const QVector<VisualizationSelectionZoneItem*>& zones, | ||||
const CatalogueController::Catalogue_ptr& catalogue = nullptr) | ||||
r1163 | { | |||
r1406 | auto event = CatalogueController::make_event_ptr(); | |||
event->name = eventName.toStdString(); | ||||
r1163 | ||||
r1406 | // std::list<DBEventProduct> productList; | |||
for (auto zone : zones) | ||||
{ | ||||
r1163 | auto graph = zone->parentGraphWidget(); | |||
r1406 | for (auto var : graph->variables()) | |||
{ | ||||
r1163 | ||||
r1406 | auto eventProduct = CatalogueController::Product_t(); | |||
r1294 | auto productId | |||
= var->metadata().value(DataSourceItem::ID_DATA_KEY, "UnknownID").toString(); | ||||
r1163 | auto zoneRange = zone->range(); | |||
r1406 | eventProduct.startTime = zoneRange.m_TStart; | |||
eventProduct.stopTime = zoneRange.m_TEnd; | ||||
r1163 | ||||
r1406 | eventProduct.name = productId.toStdString(); | |||
event->products.push_back(std::move(eventProduct)); | ||||
r1163 | } | |||
} | ||||
r1406 | sqpApp->catalogueController().add(event); | |||
if (catalogue) | ||||
{ | ||||
catalogue->add(event); | ||||
// TODO use notifications | ||||
// this shouldn't know GUI stuff and care about which widget to update | ||||
// 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); | ||||
// } | ||||
r1231 | } | |||
r1406 | else if (m_CatalogueExplorer->eventsWidget().isAllEventsDisplayed()) | |||
{ | ||||
// m_CatalogueExplorer->eventsWidget().addEvent(event); | ||||
// m_CatalogueExplorer->eventsWidget().setEventChanges(event, true); | ||||
r1163 | } | |||
} | ||||
r1327 | ||||
SelectionZoneAction::EnableFunction createEventEnableFuntion() const | ||||
{ | ||||
return [](auto zones) { | ||||
// Checks that all variables in the zones doesn't refer to the same product | ||||
QSet<QString> usedDatasource; | ||||
r1406 | for (auto zone : zones) | |||
{ | ||||
r1327 | auto graph = zone->parentGraphWidget(); | |||
auto variables = graph->variables(); | ||||
r1406 | for (auto var : variables) | |||
{ | ||||
r1327 | auto datasourceId | |||
= var->metadata().value(DataSourceItem::ID_DATA_KEY).toString(); | ||||
r1406 | if (!usedDatasource.contains(datasourceId)) | |||
{ | ||||
r1327 | usedDatasource.insert(datasourceId); | |||
} | ||||
r1406 | else | |||
{ | ||||
r1327 | return false; | |||
} | ||||
} | ||||
} | ||||
return true; | ||||
}; | ||||
} | ||||
r1163 | }; | |||
r1406 | CatalogueActionManager::CatalogueActionManager(CatalogueExplorer* catalogueExplorer) | |||
: impl { spimpl::make_unique_impl<CatalogueActionManagerPrivate>(catalogueExplorer) } | ||||
r1163 | { | |||
} | ||||
void CatalogueActionManager::installSelectionZoneActions() | ||||
{ | ||||
r1406 | // auto &actionController = sqpApp->actionsGuiController(); | |||
// auto createEventAction = actionController.addSectionZoneAction( | ||||
// {CATALOGUE_MENU_NAME, CATALOGUE_CREATE_EVENT_MENU_NAME}, QObject::tr("Without | ||||
// Catalogue"), [this](auto zones) { impl->createEventFromZones(DEFAULT_EVENT_NAME, | ||||
// zones); }); | ||||
// createEventAction->setEnableFunction(impl->createEventEnableFuntion()); | ||||
// createEventAction->setAllowedFiltering(false); | ||||
// auto createEventInNewCatalogueAction = actionController.addSectionZoneAction( | ||||
// {CATALOGUE_MENU_NAME, CATALOGUE_CREATE_EVENT_MENU_NAME}, QObject::tr("In New | ||||
// Catalogue"), [this](auto zones) { | ||||
// auto newCatalogue = std::make_shared<DBCatalogue>(); | ||||
// newCatalogue->setName(DEFAULT_CATALOGUE_NAME); | ||||
// sqpApp->catalogueController().addCatalogue(newCatalogue); | ||||
// impl->m_CatalogueExplorer->sideBarWidget().addCatalogue(newCatalogue, | ||||
// REPOSITORY_DEFAULT); | ||||
// impl->createEventFromZones(DEFAULT_EVENT_NAME, zones, newCatalogue); | ||||
// }); | ||||
// createEventInNewCatalogueAction->setEnableFunction(impl->createEventEnableFuntion()); | ||||
// createEventInNewCatalogueAction->setAllowedFiltering(false); | ||||
// refreshCreateInCatalogueAction(); | ||||
// actionController.addFilterForMenu({CATALOGUE_MENU_NAME, | ||||
// CATALOGUE_CREATE_EVENT_MENU_NAME}); | ||||
r1327 | } | |||
void CatalogueActionManager::refreshCreateInCatalogueAction() | ||||
{ | ||||
r1406 | // auto& actionController = sqpApp->actionsGuiController(); | |||
// for (auto action : impl->m_CreateInCatalogueActions) | ||||
// { | ||||
// actionController.removeAction(action); | ||||
// } | ||||
// impl->m_CreateInCatalogueActions.clear(); | ||||
// auto allCatalogues | ||||
// = impl->m_CatalogueExplorer->sideBarWidget().getCatalogues(REPOSITORY_DEFAULT); | ||||
// for (auto catalogue : allCatalogues) | ||||
// { | ||||
// auto catalogueName = catalogue->getName(); | ||||
// auto createEventInCatalogueAction = actionController.addSectionZoneAction( | ||||
// { CATALOGUE_MENU_NAME, CATALOGUE_CREATE_EVENT_MENU_NAME }, | ||||
// QObject::tr("In \"").append(catalogueName).append("\""), [this, catalogue](auto | ||||
// zones) { | ||||
// impl->createEventFromZones(DEFAULT_EVENT_NAME, zones, catalogue); | ||||
// }); | ||||
// createEventInCatalogueAction->setEnableFunction(impl->createEventEnableFuntion()); | ||||
// impl->m_CreateInCatalogueActions << createEventInCatalogueAction; | ||||
// } | ||||
r1163 | } | |||