(#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

@ -6,7 +6,7 @@ endif()
set (SOURCE_GROUP_HEADER_FILES
${CEE_CURRENT_LIST_DIR}RicCloseCaseFeature.h
${CEE_CURRENT_LIST_DIR}RicEclipseCaseExecuteScriptFeature.h
${CEE_CURRENT_LIST_DIR}RicExecuteScriptForCasesFeature.h
${CEE_CURRENT_LIST_DIR}RicEclipseCaseNewGroupFeature.h
${CEE_CURRENT_LIST_DIR}RicEclipseCaseNewGroupExec.h
${CEE_CURRENT_LIST_DIR}RicEclipseCasePasteFeature.h
@ -49,7 +49,7 @@ ${CEE_CURRENT_LIST_DIR}RicDeleteItemFeature.h
set (SOURCE_GROUP_SOURCE_FILES
${CEE_CURRENT_LIST_DIR}RicCloseCaseFeature.cpp
${CEE_CURRENT_LIST_DIR}RicEclipseCaseExecuteScriptFeature.cpp
${CEE_CURRENT_LIST_DIR}RicExecuteScriptForCasesFeature.cpp
${CEE_CURRENT_LIST_DIR}RicEclipseCaseNewGroupFeature.cpp
${CEE_CURRENT_LIST_DIR}RicEclipseCaseNewGroupExec.cpp
${CEE_CURRENT_LIST_DIR}RicEclipseCasePasteFeature.cpp

View File

@ -17,7 +17,7 @@
//
/////////////////////////////////////////////////////////////////////////////////
#include "RicEclipseCaseExecuteScriptFeature.h"
#include "RicExecuteScriptForCasesFeature.h"
#include "RimCase.h"
@ -25,12 +25,12 @@
#include <QAction>
CAF_CMD_SOURCE_INIT(RicEclipseCaseExecuteScriptFeature, "RicEclipseCaseExecuteScriptFeature");
CAF_CMD_SOURCE_INIT(RicExecuteScriptForCasesFeature, "RicExecuteScriptForCasesFeature");
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RicEclipseCaseExecuteScriptFeature::isCommandEnabled()
bool RicExecuteScriptForCasesFeature::isCommandEnabled()
{
std::vector<RimCase*> selection;
caf::SelectionManager::instance()->objectsByType(&selection);
@ -48,14 +48,15 @@ bool RicEclipseCaseExecuteScriptFeature::isCommandEnabled()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicEclipseCaseExecuteScriptFeature::onActionTriggered(bool isChecked)
void RicExecuteScriptForCasesFeature::onActionTriggered(bool isChecked)
{
// Dummy - handled by RiuMainWindow::slotExecuteScriptForSelectedCases()
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicEclipseCaseExecuteScriptFeature::setupActionLook(QAction* actionToSetup)
void RicExecuteScriptForCasesFeature::setupActionLook(QAction* actionToSetup)
{
actionToSetup->setText("Execute Script");
actionToSetup->setText("Execute script");
}

View File

@ -25,7 +25,7 @@
//==================================================================================================
///
//==================================================================================================
class RicEclipseCaseExecuteScriptFeature : public caf::CmdFeature
class RicExecuteScriptForCasesFeature : public caf::CmdFeature
{
CAF_CMD_HEADER_INIT;

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());

View File

@ -2253,3 +2253,46 @@ void RiuMainWindow::customMenuRequested(const QPoint& pos)
menu.exec(globalPos);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuMainWindow::slotExecuteScriptForSelectedCases()
{
QAction* action = qobject_cast<QAction*>(sender());
if (!action) return;
QString scriptAbsolutePath = action->data().toString();
RiaApplication* app = RiaApplication::instance();
QString octavePath = app->octavePath();
if (!octavePath.isEmpty())
{
// TODO: Must rename RimCalcScript::absolutePath to absoluteFileName, as the code below is confusing
// absolutePath() is a function in QFileInfo
QFileInfo fi(scriptAbsolutePath);
QString octaveFunctionSearchPath = fi.absolutePath();
QStringList arguments = app->octaveArguments();
arguments.append("--path");
arguments << octaveFunctionSearchPath;
arguments << scriptAbsolutePath;
std::vector<RimCase*> selection;
caf::SelectionManager::instance()->objectsByType(&selection);
// Get case ID from selected cases in selection model
std::vector<int> caseIdsInSelection;
for (size_t i = 0; i < selection.size(); i++)
{
RimCase* casePtr = selection[i];
caseIdsInSelection.push_back(casePtr->caseId);
}
if (caseIdsInSelection.size() > 0)
{
RiaApplication::instance()->launchProcessForMultipleCases(octavePath, arguments, caseIdsInSelection);
}
}
}

View File

@ -283,6 +283,7 @@ private slots:
void selectedObjectsChanged();
void customMenuRequested(const QPoint& pos);
void slotExecuteScriptForSelectedCases();
// Animation slots