diff --git a/ApplicationCode/Commands/RicExportMultipleSnapshotsFeature.cpp b/ApplicationCode/Commands/RicExportMultipleSnapshotsFeature.cpp index 126afef97c..ff3aac0a75 100644 --- a/ApplicationCode/Commands/RicExportMultipleSnapshotsFeature.cpp +++ b/ApplicationCode/Commands/RicExportMultipleSnapshotsFeature.cpp @@ -22,13 +22,14 @@ #include "RimProject.h" #include "RiuExportMultipleSnapshotsWidget.h" +#include "cafCmdExecCommandManager.h" + #include CAF_CMD_SOURCE_INIT(RicExportMultipleSnapshotsFeature, "RicExportMultipleSnapshotsFeature"); - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -48,6 +49,9 @@ void RicExportMultipleSnapshotsFeature::onActionTriggered(bool isChecked) if (proj) { + // Enable the command system to be able to assign a value to multiple fields at the same time + caf::CmdExecCommandSystemActivator activator; + RiuExportMultipleSnapshotsWidget dlg(nullptr, proj); dlg.exec(); } diff --git a/ApplicationCode/ProjectDataModel/RimMultiSnapshotDefinition.cpp b/ApplicationCode/ProjectDataModel/RimMultiSnapshotDefinition.cpp index daf01c3a3d..29fddf1abe 100644 --- a/ApplicationCode/ProjectDataModel/RimMultiSnapshotDefinition.cpp +++ b/ApplicationCode/ProjectDataModel/RimMultiSnapshotDefinition.cpp @@ -18,6 +18,13 @@ #include "RimMultiSnapshotDefinition.h" +#include "RiaApplication.h" +#include "RimCase.h" +#include "RimProject.h" +#include "RimView.h" + +#include "cafPdmPointer.h" + CAF_PDM_SOURCE_INIT(RimMultiSnapshotDefinition, "MultiSnapshotDefinition"); @@ -43,4 +50,41 @@ RimMultiSnapshotDefinition::~RimMultiSnapshotDefinition() { } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QList RimMultiSnapshotDefinition::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly) +{ + QList options; + + RimProject* proj = RiaApplication::instance()->project(); + + if (fieldNeedingOptions == &caseObject && proj) + { + std::vector cases; + proj->allCases(cases); + + for (RimCase* c : cases) + { + options.push_back(caf::PdmOptionItemInfo(c->caseUserDescription(), QVariant::fromValue(caf::PdmPointer(c)))); + } + + options.push_back(caf::PdmOptionItemInfo("All", QVariant::fromValue(caf::PdmPointer(nullptr)))); + } + else if (fieldNeedingOptions == &viewObject) + { + if (caseObject()) + { + std::vector views = caseObject()->views(); + for (RimView* view : views) + { + options.push_back(caf::PdmOptionItemInfo(view->name(), QVariant::fromValue(caf::PdmPointer(view)))); + } + } + + options.push_back(caf::PdmOptionItemInfo("All", QVariant::fromValue(caf::PdmPointer(nullptr)))); + } + + return options; +} diff --git a/ApplicationCode/ProjectDataModel/RimMultiSnapshotDefinition.h b/ApplicationCode/ProjectDataModel/RimMultiSnapshotDefinition.h index 709d6b872a..05b12ca594 100644 --- a/ApplicationCode/ProjectDataModel/RimMultiSnapshotDefinition.h +++ b/ApplicationCode/ProjectDataModel/RimMultiSnapshotDefinition.h @@ -42,4 +42,6 @@ public: caf::PdmField timeStepStart; caf::PdmField timeStepEnd; + + virtual QList calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly) override; }; diff --git a/ApplicationCode/UserInterface/RiuExportMultipleSnapshotsWidget.cpp b/ApplicationCode/UserInterface/RiuExportMultipleSnapshotsWidget.cpp index 60eae9670f..d4d4d6f281 100644 --- a/ApplicationCode/UserInterface/RiuExportMultipleSnapshotsWidget.cpp +++ b/ApplicationCode/UserInterface/RiuExportMultipleSnapshotsWidget.cpp @@ -18,6 +18,7 @@ #include "RiuExportMultipleSnapshotsWidget.h" +#include "RimMultiSnapshotDefinition.h" #include "RimProject.h" #include "cafCmdFeatureManager.h" @@ -36,8 +37,8 @@ /// //-------------------------------------------------------------------------------------------------- RiuExportMultipleSnapshotsWidget::RiuExportMultipleSnapshotsWidget(QWidget* parent, RimProject* project) - : m_rimProject(project), - QDialog(parent) + : QDialog(parent), + m_rimProject(project) { setWindowTitle("Export Multiple Snapshots"); @@ -52,14 +53,13 @@ RiuExportMultipleSnapshotsWidget::RiuExportMultipleSnapshotsWidget(QWidget* pare m_pdmTableView->setListField(&(project->multiSnapshotDefinitions())); + // Set active child array to be able to use generic delete caf::SelectionManager::instance()->setActiveChildArrayFieldHandle(&(project->multiSnapshotDefinitions())); dialogLayout->addWidget(m_pdmTableView); - - // Buttons - QDialogButtonBox* buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + QDialogButtonBox* buttonBox = new QDialogButtonBox(QDialogButtonBox::Close); connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); @@ -71,6 +71,8 @@ RiuExportMultipleSnapshotsWidget::RiuExportMultipleSnapshotsWidget(QWidget* pare //-------------------------------------------------------------------------------------------------- RiuExportMultipleSnapshotsWidget::~RiuExportMultipleSnapshotsWidget() { + m_pdmTableView->setListField(nullptr); + caf::SelectionManager::instance()->setActiveChildArrayFieldHandle(nullptr); } @@ -82,10 +84,28 @@ void RiuExportMultipleSnapshotsWidget::customMenuRequested(QPoint pos) caf::CmdFeatureManager* commandManager = caf::CmdFeatureManager::instance(); QMenu menu; - menu.addAction(commandManager->action("PdmListField_AddItem", "Add new row")); + menu.addAction(commandManager->action("PdmListField_DeleteItem","Delete row")); + + QAction* newRowAction = new QAction("Add new row", this); + connect(newRowAction, SIGNAL(triggered()), SLOT(addSnapshotItem())); + menu.addAction(newRowAction); // Qt doc: QAbstractScrollArea and its subclasses that map the context menu event to coordinates of the viewport(). QPoint globalPos = m_pdmTableView->tableView()->viewport()->mapToGlobal(pos); menu.exec(globalPos); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuExportMultipleSnapshotsWidget::addSnapshotItem() +{ + if (!m_rimProject) return; + + RimMultiSnapshotDefinition* multiSnapshot = new RimMultiSnapshotDefinition(); + // TODO: init with available time step from + + m_rimProject->multiSnapshotDefinitions.push_back(multiSnapshot); + m_rimProject->multiSnapshotDefinitions.uiCapability()->updateConnectedEditors(); +} diff --git a/ApplicationCode/UserInterface/RiuExportMultipleSnapshotsWidget.h b/ApplicationCode/UserInterface/RiuExportMultipleSnapshotsWidget.h index f05b949b84..d305932979 100644 --- a/ApplicationCode/UserInterface/RiuExportMultipleSnapshotsWidget.h +++ b/ApplicationCode/UserInterface/RiuExportMultipleSnapshotsWidget.h @@ -37,8 +37,9 @@ public: private slots: void customMenuRequested(QPoint pos); + void addSnapshotItem(); private: - RimProject* m_rimProject; + RimProject* m_rimProject; caf::PdmUiTableView* m_pdmTableView; };