##// END OF EJS Templates
Implements test execute() method...
Implements test execute() method For each iteration of the test, this method generates available operations according to states of the variables, and execute an operation that has been chosen randomly.

File last commit:

r1196:b6390f556418
r1205:0c07405da56c
Show More
CatalogueActionManager.cpp
107 lines | 3.7 KiB | text/x-c | CppLexer
/ gui / src / Catalogue / CatalogueActionManager.cpp
#include "Catalogue/CatalogueActionManager.h"
#include <Actions/ActionsGuiController.h>
#include <Catalogue/CatalogueController.h>
#include <SqpApplication.h>
#include <Variable/Variable.h>
#include <Visualization/VisualizationGraphWidget.h>
#include <Visualization/VisualizationSelectionZoneItem.h>
#include <Catalogue/CreateEventDialog.h>
#include <DBCatalogue.h>
#include <DBEvent.h>
#include <DBEventProduct.h>
#include <QBoxLayout>
#include <QComboBox>
#include <QDialog>
#include <QDialogButtonBox>
#include <QLineEdit>
#include <memory>
struct CatalogueActionManager::CatalogueActionManagerPrivate {
void createEventFromZones(const QString &eventName,
const QVector<VisualizationSelectionZoneItem *> &zones,
const std::shared_ptr<DBCatalogue> &catalogue = nullptr)
{
auto event = std::make_shared<DBEvent>();
event->setName(eventName);
std::list<DBEventProduct> productList;
for (auto zone : zones) {
auto graph = zone->parentGraphWidget();
for (auto var : graph->variables()) {
auto eventProduct = std::make_shared<DBEventProduct>();
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<CatalogueActionManagerPrivate>()}
{
}
void CatalogueActionManager::installSelectionZoneActions()
{
auto &actionController = sqpApp->actionsGuiController();
auto createEventEnableFuntion = [](auto zones) {
QSet<VisualizationGraphWidget *> 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<DBCatalogue>();
selectedCatalogue->setName(dialog.catalogueName());
}
impl->createEventFromZones(dialog.eventName(), zones, selectedCatalogue);
}
});
createEventInCatalogueAction->setEnableFunction(createEventEnableFuntion);
}