(#339) Added RicExecuteScriptForCasesFeature

This commit is contained in:
Pål Hagen
2015-08-18 16:36:37 +02:00
parent d466d58164
commit ea87fc0746
8 changed files with 129 additions and 11 deletions

View File

@@ -41,6 +41,9 @@
#include "RimWellPathImport.h"
#include "RimCalcScript.h"
#include "RiuMainWindow.h"
#include "RiaApplication.h"
#include "cafPdmUiTreeOrdering.h"
#include <QDir>
@@ -579,13 +582,14 @@ void RimProject::actionsBasedOnSelection(QMenu& contextMenu)
commandIds << "RicCloseCaseFeature";
commandIds << "RicNewViewFeature";
commandIds << "RicEclipseCaseNewGroupFeature";
//commandIds << "RicEclipseCaseExecuteScript";
commandIds << "RicExecuteScriptForCasesFeature";
}
else if (dynamic_cast<RimGeoMechCase*>(uiItem))
{
commandIds << "RicPasteGeoMechViewsFeature";
commandIds << "RicNewViewFeature";
commandIds << "RicCloseCaseFeature";
commandIds << "RicExecuteScriptForCasesFeature";
}
else if (dynamic_cast<RimIdenticalGridCaseGroup*>(uiItem))
{
@@ -663,7 +667,6 @@ void RimProject::actionsBasedOnSelection(QMenu& contextMenu)
commandIds << "RicToggleItemsFeature";
}
caf::CmdFeatureManager* commandManager = caf::CmdFeatureManager::instance();
for (int i = 0; i < commandIds.size(); i++)
{
@@ -671,6 +674,42 @@ void RimProject::actionsBasedOnSelection(QMenu& contextMenu)
{
contextMenu.addSeparator();
}
else if (commandIds[i] == "RicExecuteScriptForCasesFeature")
{
// Execute script on selection of cases
RiuMainWindow* ruiMainWindow = RiuMainWindow::instance();
if (ruiMainWindow)
{
std::vector<RimCase*> cases;
ruiMainWindow->selectedCases(cases);
if (cases.size() > 0)
{
QMenu* executeMenu = contextMenu.addMenu("Execute script");
RiaApplication* app = RiaApplication::instance();
RimProject* proj = app->project();
if (proj && proj->scriptCollection())
{
RimScriptCollection* rootScriptCollection = proj->scriptCollection();
// Root script collection holds a list of subdirectories of user defined script folders
for (size_t i = 0; i < rootScriptCollection->subDirectories.size(); i++)
{
RimScriptCollection* subDir = rootScriptCollection->subDirectories[i];
if (subDir)
{
appendScriptItems(executeMenu, subDir);
}
}
}
contextMenu.addSeparator();
contextMenu.addMenu(executeMenu);
}
}
}
else
{
caf::CmdFeature* feature = commandManager->getCommandFeature(commandIds[i].toStdString());
@@ -685,6 +724,36 @@ void RimProject::actionsBasedOnSelection(QMenu& contextMenu)
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimProject::appendScriptItems(QMenu* menu, RimScriptCollection* scriptCollection)
{
CVF_ASSERT(menu);
QDir dir(scriptCollection->directory);
QMenu* subMenu = menu->addMenu(dir.dirName());
RiuMainWindow* mainWindow = RiuMainWindow::instance();
for (size_t i = 0; i < scriptCollection->calcScripts.size(); i++)
{
RimCalcScript* calcScript = scriptCollection->calcScripts[i];
QFileInfo fi(calcScript->absolutePath());
QString menuText = fi.baseName();
QAction* scriptAction = subMenu->addAction(menuText, mainWindow, SLOT(slotExecuteScriptForSelectedCases()));
scriptAction->setData(QVariant(calcScript->absolutePath()));
}
for (size_t i = 0; i < scriptCollection->subDirectories.size(); i++)
{
RimScriptCollection* subDir = scriptCollection->subDirectories[i];
appendScriptItems(subMenu, subDir);
}
}
//--------------------------------------------------------------------------------------------------
///

View File

@@ -91,6 +91,9 @@ protected:
virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "");
private:
void appendScriptItems(QMenu* menu, RimScriptCollection* scriptCollection);
private:
caf::PdmField<QString> m_projectFileVersionString;

View File

@@ -628,6 +628,7 @@ void RimUiTreeView::slotExecuteScript()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
// OBSOLETE - see RicExecuteScriptFeature
void RimUiTreeView::slotExecuteScriptForSelectedCases()
{
QAction* action = qobject_cast<QAction*>(sender());