##// END OF EJS Templates
Some refactoring on PB11 wrappers...
Some refactoring on PB11 wrappers Most sciqlop core wrappers are moved into a dedicated python module. We needs to get rid off sqpapp! All current sciqlop modules should either be stateless or act as real singletons they must not need any app to be used. This will ease testing, wrapping and usage. Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>

File last commit:

r1328:eb278710ae3b
r1341:f18e017310bc
Show More
CatalogueActionManager.cpp
174 lines | 6.8 KiB | text/x-c | CppLexer
/ gui / src / Catalogue / CatalogueActionManager.cpp
Zone actions to create a new event
r1163 #include "Catalogue/CatalogueActionManager.h"
#include <Actions/ActionsGuiController.h>
#include <Catalogue/CatalogueController.h>
Use correct product ID when creating an event
r1232 #include <DataSource/DataSourceItem.h>
Zone actions to create a new event
r1163 #include <SqpApplication.h>
#include <Variable/Variable.h>
#include <Visualization/VisualizationGraphWidget.h>
#include <Visualization/VisualizationSelectionZoneItem.h>
Updates model after an event has been created through the colored zone
r1231 #include <Catalogue/CatalogueEventsWidget.h>
#include <Catalogue/CatalogueExplorer.h>
#include <Catalogue/CatalogueSideBarWidget.h>
Zone actions to create a new event
r1163
Some fixes
r1235 #include <CatalogueDao.h>
Zone actions to create a new event
r1163 #include <DBCatalogue.h>
#include <DBEvent.h>
#include <DBEventProduct.h>
#include <QBoxLayout>
#include <QComboBox>
#include <QDialog>
#include <QDialogButtonBox>
#include <QLineEdit>
#include <memory>
Rework event creation menus without popup dialog
r1326 const auto CATALOGUE_MENU_NAME = QObject::tr("Catalogues");
Refresh catalogue menu when the catalogue list changed
r1327 const auto CATALOGUE_CREATE_EVENT_MENU_NAME = QObject::tr("New Event...");
Rework event creation menus without popup dialog
r1326
Refresh catalogue menu when the catalogue list changed
r1327 const auto DEFAULT_EVENT_NAME = QObject::tr("Event");
const auto DEFAULT_CATALOGUE_NAME = QObject::tr("Catalogue");
Rework event creation menus without popup dialog
r1326
Zone actions to create a new event
r1163 struct CatalogueActionManager::CatalogueActionManagerPrivate {
Updates model after an event has been created through the colored zone
r1231
CatalogueExplorer *m_CatalogueExplorer = nullptr;
Refresh catalogue menu when the catalogue list changed
r1327 QVector<std::shared_ptr<SelectionZoneAction> > m_CreateInCatalogueActions;
Updates model after an event has been created through the colored zone
r1231
CatalogueActionManagerPrivate(CatalogueExplorer *catalogueExplorer)
: m_CatalogueExplorer(catalogueExplorer)
{
}
Zone actions to create a new event
r1163 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);
Link with selection zone on event creation
r1294 auto productId
= var->metadata().value(DataSourceItem::ID_DATA_KEY, "UnknownID").toString();
Zone actions to create a new event
r1163 auto zoneRange = zone->range();
eventProduct->setTStart(zoneRange.m_TStart);
eventProduct->setTEnd(zoneRange.m_TEnd);
Link with selection zone on event creation
r1294 eventProduct->setProductId(productId);
Zone actions to create a new event
r1163
productList.push_back(*eventProduct);
}
}
event->setEventProducts(productList);
Adaptation to last version of catalogue controller
r1164 sqpApp->catalogueController().addEvent(event);
Updates model after an event has been created through the colored zone
r1231
Zone actions to create a new event
r1163 if (catalogue) {
Add catalogue handling
r1302 catalogue->addEvent(event->getUniqId());
sqpApp->catalogueController().updateCatalogue(catalogue);
Updates model after an event has been created through the colored zone
r1231 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);
Zone actions to create a new event
r1163 }
}
Refresh catalogue menu when the catalogue list changed
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;
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;
};
}
Zone actions to create a new event
r1163 };
Updates model after an event has been created through the colored zone
r1231 CatalogueActionManager::CatalogueActionManager(CatalogueExplorer *catalogueExplorer)
: impl{spimpl::make_unique_impl<CatalogueActionManagerPrivate>(catalogueExplorer)}
Zone actions to create a new event
r1163 {
}
void CatalogueActionManager::installSelectionZoneActions()
{
auto &actionController = sqpApp->actionsGuiController();
auto createEventAction = actionController.addSectionZoneAction(
Rework event creation menus without popup dialog
r1326 {CATALOGUE_MENU_NAME, CATALOGUE_CREATE_EVENT_MENU_NAME}, QObject::tr("Without Catalogue"),
[this](auto zones) { impl->createEventFromZones(DEFAULT_EVENT_NAME, zones); });
Refresh catalogue menu when the catalogue list changed
r1327 createEventAction->setEnableFunction(impl->createEventEnableFuntion());
LineEdit to filter the create catalogue menu
r1328 createEventAction->setAllowedFiltering(false);
Zone actions to create a new event
r1163
Rework event creation menus without popup dialog
r1326 auto createEventInNewCatalogueAction = actionController.addSectionZoneAction(
{CATALOGUE_MENU_NAME, CATALOGUE_CREATE_EVENT_MENU_NAME}, QObject::tr("In New Catalogue"),
[this](auto zones) {
Zone actions to create a new event
r1163
Rework event creation menus without popup dialog
r1326 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);
Zone actions to create a new event
r1163 });
Refresh catalogue menu when the catalogue list changed
r1327 createEventInNewCatalogueAction->setEnableFunction(impl->createEventEnableFuntion());
LineEdit to filter the create catalogue menu
r1328 createEventInNewCatalogueAction->setAllowedFiltering(false);
Refresh catalogue menu when the catalogue list changed
r1327
refreshCreateInCatalogueAction();
LineEdit to filter the create catalogue menu
r1328
actionController.addFilterForMenu({CATALOGUE_MENU_NAME, CATALOGUE_CREATE_EVENT_MENU_NAME});
Refresh catalogue menu when the catalogue list changed
r1327 }
void CatalogueActionManager::refreshCreateInCatalogueAction()
{
auto &actionController = sqpApp->actionsGuiController();
Rework event creation menus without popup dialog
r1326
Refresh catalogue menu when the catalogue list changed
r1327 for (auto action : impl->m_CreateInCatalogueActions) {
actionController.removeAction(action);
}
impl->m_CreateInCatalogueActions.clear();
Rework event creation menus without popup dialog
r1326
auto allCatalogues
= impl->m_CatalogueExplorer->sideBarWidget().getCatalogues(REPOSITORY_DEFAULT);
Refresh catalogue menu when the catalogue list changed
r1327
Rework event creation menus without popup dialog
r1326 for (auto catalogue : allCatalogues) {
auto catalogueName = catalogue->getName();
auto createEventInCatalogueAction = actionController.addSectionZoneAction(
{CATALOGUE_MENU_NAME, CATALOGUE_CREATE_EVENT_MENU_NAME},
Refresh catalogue menu when the catalogue list changed
r1327 QObject::tr("In \"").append(catalogueName).append("\""), [this, catalogue](auto zones) {
Rework event creation menus without popup dialog
r1326 impl->createEventFromZones(DEFAULT_EVENT_NAME, zones, catalogue);
});
Refresh catalogue menu when the catalogue list changed
r1327 createEventInCatalogueAction->setEnableFunction(impl->createEventEnableFuntion());
impl->m_CreateInCatalogueActions << createEventInCatalogueAction;
Rework event creation menus without popup dialog
r1326 }
Zone actions to create a new event
r1163 }