mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
@@ -32,23 +32,71 @@
|
|||||||
#include "cafSelectionManager.h"
|
#include "cafSelectionManager.h"
|
||||||
|
|
||||||
#include <QAction>
|
#include <QAction>
|
||||||
|
#include "RimGeoMechView.h"
|
||||||
|
#include "RimEclipseView.h"
|
||||||
|
#include "RimIdenticalGridCaseGroup.h"
|
||||||
|
#include "RimEclipseInputProperty.h"
|
||||||
|
#include "RimCellRangeFilter.h"
|
||||||
|
#include "RimEclipsePropertyFilter.h"
|
||||||
|
#include "RimGeoMechPropertyFilter.h"
|
||||||
|
#include "RimViewController.h"
|
||||||
|
#include "RimWellLogCurve.h"
|
||||||
|
#include "RimSummaryCurve.h"
|
||||||
|
#include "RimSummaryCurveFilter.h"
|
||||||
|
#include "RimIntersection.h"
|
||||||
|
#include "RimIntersectionBox.h"
|
||||||
|
#include "RimFormationNames.h"
|
||||||
|
#include "RimFormationNamesCollection.h"
|
||||||
|
#include "RimSummaryPlot.h"
|
||||||
|
|
||||||
namespace caf
|
namespace caf
|
||||||
{
|
{
|
||||||
CAF_CMD_SOURCE_INIT(RicDeleteItemFeature, "RicDeleteItemFeature");
|
CAF_CMD_SOURCE_INIT(RicDeleteItemFeature, "RicDeleteItemFeature");
|
||||||
|
|
||||||
|
bool isDeletable(PdmUiItem * uiItem)
|
||||||
|
{
|
||||||
|
if (dynamic_cast<RimGeoMechView*>(uiItem)) return true;
|
||||||
|
if (dynamic_cast<RimEclipseView*>(uiItem)) return true;
|
||||||
|
if (dynamic_cast<RimIdenticalGridCaseGroup*>(uiItem)) return true;
|
||||||
|
if (dynamic_cast<RimEclipseInputProperty*>(uiItem)) return true;
|
||||||
|
if (dynamic_cast<RimCellRangeFilter*>(uiItem)) return true;
|
||||||
|
if (dynamic_cast<RimEclipsePropertyFilter*>(uiItem)) return true;
|
||||||
|
if (dynamic_cast<RimGeoMechPropertyFilter*>(uiItem)) return true;
|
||||||
|
if (dynamic_cast<RimViewController*>(uiItem)) return true;
|
||||||
|
if (dynamic_cast<RimWellLogPlot*>(uiItem)) return true;
|
||||||
|
if (dynamic_cast<RimWellLogCurve*>(uiItem)) return true;
|
||||||
|
if (dynamic_cast<RimSummaryPlot*>(uiItem)) return true;
|
||||||
|
if (dynamic_cast<RimSummaryCurve*>(uiItem)) return true;
|
||||||
|
if (dynamic_cast<RimSummaryCurveFilter*>(uiItem)) return true;
|
||||||
|
if (dynamic_cast<RimIntersection*>(uiItem)) return true;
|
||||||
|
if (dynamic_cast<RimIntersectionBox*>(uiItem)) return true;
|
||||||
|
if (dynamic_cast<RimFormationNames*>(uiItem)) return true;
|
||||||
|
if (dynamic_cast<RimFormationNamesCollection*>(uiItem)) return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
bool RicDeleteItemFeature::isCommandEnabled()
|
bool RicDeleteItemFeature::isCommandEnabled()
|
||||||
{
|
{
|
||||||
caf::PdmObject* currentPdmObject = dynamic_cast<caf::PdmObject*>(caf::SelectionManager::instance()->selectedItem());
|
std::vector<PdmUiItem*> items;
|
||||||
if (!currentPdmObject) return false;
|
caf::SelectionManager::instance()->selectedItems(items);
|
||||||
|
|
||||||
|
if (items.empty() ) return false;
|
||||||
|
|
||||||
caf::PdmChildArrayFieldHandle* childArrayFieldHandle = dynamic_cast<caf::PdmChildArrayFieldHandle*>(currentPdmObject->parentField());
|
for (PdmUiItem* item : items)
|
||||||
if (!childArrayFieldHandle) return false;
|
{
|
||||||
|
if (!isDeletable(item)) return false;
|
||||||
|
|
||||||
|
caf::PdmObject* currentPdmObject = dynamic_cast<caf::PdmObject*>(item);
|
||||||
|
if ( !currentPdmObject ) return false;
|
||||||
|
|
||||||
|
caf::PdmChildArrayFieldHandle* childArrayFieldHandle = dynamic_cast<caf::PdmChildArrayFieldHandle*>(currentPdmObject->parentField());
|
||||||
|
if ( !childArrayFieldHandle ) return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,36 +109,42 @@ void RicDeleteItemFeature::onActionTriggered(bool isChecked)
|
|||||||
SelectionManager::instance()->selectedItems(items);
|
SelectionManager::instance()->selectedItems(items);
|
||||||
assert(items.size() > 0);
|
assert(items.size() > 0);
|
||||||
|
|
||||||
caf::PdmObject* currentPdmObject = dynamic_cast<caf::PdmObject*>(items[0]);
|
for (PdmUiItem* item: items)
|
||||||
assert(currentPdmObject);
|
|
||||||
|
|
||||||
caf::PdmChildArrayFieldHandle* childArrayFieldHandle = dynamic_cast<caf::PdmChildArrayFieldHandle*>(currentPdmObject->parentField());
|
|
||||||
|
|
||||||
int indexAfter = -1;
|
|
||||||
|
|
||||||
std::vector<PdmObjectHandle*> childObjects;
|
|
||||||
childArrayFieldHandle->childObjects(&childObjects);
|
|
||||||
|
|
||||||
for (size_t i = 0; i < childObjects.size(); i++)
|
|
||||||
{
|
{
|
||||||
if (childObjects[i] == currentPdmObject)
|
if (!isDeletable(item)) continue;
|
||||||
|
|
||||||
|
caf::PdmObject* currentPdmObject = dynamic_cast<caf::PdmObject*>(item);
|
||||||
|
if ( !currentPdmObject) continue;
|
||||||
|
|
||||||
|
caf::PdmChildArrayFieldHandle* childArrayFieldHandle = dynamic_cast<caf::PdmChildArrayFieldHandle*>(currentPdmObject->parentField());
|
||||||
|
if ( !childArrayFieldHandle) continue;
|
||||||
|
|
||||||
|
int indexAfter = -1;
|
||||||
|
|
||||||
|
std::vector<PdmObjectHandle*> childObjects;
|
||||||
|
childArrayFieldHandle->childObjects(&childObjects);
|
||||||
|
|
||||||
|
for ( size_t i = 0; i < childObjects.size(); i++ )
|
||||||
{
|
{
|
||||||
indexAfter = static_cast<int>(i);
|
if ( childObjects[i] == currentPdmObject )
|
||||||
|
{
|
||||||
|
indexAfter = static_cast<int>(i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Did not find currently selected pdm object in the current list field
|
||||||
|
assert(indexAfter != -1);
|
||||||
|
|
||||||
|
RicDeleteItemExec* executeCmd = new RicDeleteItemExec(SelectionManager::instance()->notificationCenter());
|
||||||
|
|
||||||
|
RicDeleteItemExecData* data = executeCmd->commandData();
|
||||||
|
data->m_rootObject = PdmReferenceHelper::findRoot(childArrayFieldHandle);
|
||||||
|
data->m_pathToField = PdmReferenceHelper::referenceFromRootToField(data->m_rootObject, childArrayFieldHandle);
|
||||||
|
data->m_indexToObject = indexAfter;
|
||||||
|
|
||||||
|
|
||||||
|
CmdExecCommandManager::instance()->processExecuteCommand(executeCmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Did not find currently selected pdm object in the current list field
|
|
||||||
assert(indexAfter != -1);
|
|
||||||
|
|
||||||
RicDeleteItemExec* executeCmd = new RicDeleteItemExec(SelectionManager::instance()->notificationCenter());
|
|
||||||
|
|
||||||
RicDeleteItemExecData* data = executeCmd->commandData();
|
|
||||||
data->m_rootObject = PdmReferenceHelper::findRoot(childArrayFieldHandle);
|
|
||||||
data->m_pathToField = PdmReferenceHelper::referenceFromRootToField(data->m_rootObject, childArrayFieldHandle);
|
|
||||||
data->m_indexToObject = indexAfter;
|
|
||||||
|
|
||||||
|
|
||||||
CmdExecCommandManager::instance()->processExecuteCommand(executeCmd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -34,7 +34,12 @@ CAF_CMD_SOURCE_INIT(RicSummaryCurveSwitchAxisFeature, "RicSummaryCurveSwitchAxis
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
bool RicSummaryCurveSwitchAxisFeature::isCommandEnabled()
|
bool RicSummaryCurveSwitchAxisFeature::isCommandEnabled()
|
||||||
{
|
{
|
||||||
return true;
|
std::set<RimSummaryCurveFilter*> selectedCurveFilters;
|
||||||
|
std::set<RimSummaryCurve*> selectedSoloCurves;
|
||||||
|
|
||||||
|
RicSummaryCurveSwitchAxisFeature::extractSelectedCurveFiltersAndSoloCurves(&selectedCurveFilters,
|
||||||
|
&selectedSoloCurves);
|
||||||
|
return (selectedCurveFilters.size() || selectedSoloCurves.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@@ -42,13 +47,33 @@ bool RicSummaryCurveSwitchAxisFeature::isCommandEnabled()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RicSummaryCurveSwitchAxisFeature::onActionTriggered(bool isChecked)
|
void RicSummaryCurveSwitchAxisFeature::onActionTriggered(bool isChecked)
|
||||||
{
|
{
|
||||||
RimSummaryCurve* summaryCurve = RicSummaryCurveSwitchAxisFeature::selectedSummaryCurve();
|
std::set<RimSummaryCurveFilter*> selectedCurveFilters;
|
||||||
RimSummaryCurveFilter* summaryCurveFilter = RicSummaryCurveSwitchAxisFeature::selectedSummaryCurveFilter();
|
std::set<RimSummaryCurve*> selectedSoloCurves;
|
||||||
if (summaryCurve)
|
|
||||||
|
RicSummaryCurveSwitchAxisFeature::extractSelectedCurveFiltersAndSoloCurves(&selectedCurveFilters,
|
||||||
|
&selectedSoloCurves);
|
||||||
|
|
||||||
|
for (RimSummaryCurveFilter* summaryCurveFilter: selectedCurveFilters)
|
||||||
|
{
|
||||||
|
RimDefines::PlotAxis plotAxis = summaryCurveFilter->associatedPlotAxis();
|
||||||
|
|
||||||
|
if ( plotAxis == RimDefines::PLOT_AXIS_LEFT )
|
||||||
|
{
|
||||||
|
summaryCurveFilter->setPlotAxis(RimDefines::PLOT_AXIS_RIGHT);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
summaryCurveFilter->setPlotAxis(RimDefines::PLOT_AXIS_LEFT);
|
||||||
|
}
|
||||||
|
|
||||||
|
summaryCurveFilter->updateConnectedEditors();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (RimSummaryCurve* summaryCurve : selectedSoloCurves)
|
||||||
{
|
{
|
||||||
RimDefines::PlotAxis plotAxis = summaryCurve->associatedPlotAxis();
|
RimDefines::PlotAxis plotAxis = summaryCurve->associatedPlotAxis();
|
||||||
|
|
||||||
if (plotAxis == RimDefines::PLOT_AXIS_LEFT)
|
if ( plotAxis == RimDefines::PLOT_AXIS_LEFT )
|
||||||
{
|
{
|
||||||
summaryCurve->setPlotAxis(RimDefines::PLOT_AXIS_RIGHT);
|
summaryCurve->setPlotAxis(RimDefines::PLOT_AXIS_RIGHT);
|
||||||
}
|
}
|
||||||
@@ -62,22 +87,7 @@ void RicSummaryCurveSwitchAxisFeature::onActionTriggered(bool isChecked)
|
|||||||
|
|
||||||
RimSummaryPlot* plot = nullptr;
|
RimSummaryPlot* plot = nullptr;
|
||||||
summaryCurve->firstAncestorOrThisOfType(plot);
|
summaryCurve->firstAncestorOrThisOfType(plot);
|
||||||
if (plot) plot->updateAxes();
|
if ( plot ) plot->updateAxes();
|
||||||
}
|
|
||||||
else if (summaryCurveFilter)
|
|
||||||
{
|
|
||||||
RimDefines::PlotAxis plotAxis = summaryCurveFilter->associatedPlotAxis();
|
|
||||||
|
|
||||||
if (plotAxis == RimDefines::PLOT_AXIS_LEFT)
|
|
||||||
{
|
|
||||||
summaryCurveFilter->setPlotAxis(RimDefines::PLOT_AXIS_RIGHT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
summaryCurveFilter->setPlotAxis(RimDefines::PLOT_AXIS_LEFT);
|
|
||||||
}
|
|
||||||
|
|
||||||
summaryCurveFilter->updateConnectedEditors();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,22 +100,50 @@ void RicSummaryCurveSwitchAxisFeature::setupActionLook(QAction* actionToSetup)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
/// Solo curves means selected curves that does not have a selected curvefilter as parent
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
RimSummaryCurve* RicSummaryCurveSwitchAxisFeature::selectedSummaryCurve()
|
void RicSummaryCurveSwitchAxisFeature::extractSelectedCurveFiltersAndSoloCurves(std::set<RimSummaryCurveFilter*>* selectedCurveFilters,
|
||||||
|
std::set<RimSummaryCurve*>* selectedSoloCurves)
|
||||||
{
|
{
|
||||||
std::vector<RimSummaryCurve*> selection;
|
|
||||||
caf::SelectionManager::instance()->objectsByType(&selection);
|
|
||||||
return selection.size() > 0 ? selection[0] : nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
selectedSoloCurves->clear();
|
||||||
///
|
{
|
||||||
//--------------------------------------------------------------------------------------------------
|
std::vector<RimSummaryCurve*> selection;
|
||||||
RimSummaryCurveFilter* RicSummaryCurveSwitchAxisFeature::selectedSummaryCurveFilter()
|
caf::SelectionManager::instance()->objectsByType(&selection);
|
||||||
{
|
for (RimSummaryCurve* curve: selection)
|
||||||
std::vector<RimSummaryCurveFilter*> selection;
|
{
|
||||||
caf::SelectionManager::instance()->objectsByType(&selection);
|
selectedSoloCurves->insert(curve);
|
||||||
return selection.size() > 0 ? selection[0] : nullptr;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
selectedCurveFilters->clear();
|
||||||
|
{
|
||||||
|
std::vector<RimSummaryCurveFilter*> selection;
|
||||||
|
caf::SelectionManager::instance()->objectsByType(&selection);
|
||||||
|
for ( RimSummaryCurveFilter* curveFilter: selection )
|
||||||
|
{
|
||||||
|
selectedCurveFilters->insert(curveFilter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<RimSummaryCurve*> curvesToRemove;
|
||||||
|
|
||||||
|
for (RimSummaryCurve* curve: (*selectedSoloCurves))
|
||||||
|
{
|
||||||
|
RimSummaryCurveFilter* parentCurveFilter;
|
||||||
|
curve->firstAncestorOrThisOfType(parentCurveFilter);
|
||||||
|
if (parentCurveFilter)
|
||||||
|
{
|
||||||
|
if (selectedCurveFilters->count(parentCurveFilter) > 0 )
|
||||||
|
{
|
||||||
|
curvesToRemove.push_back(curve);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (RimSummaryCurve* curve: curvesToRemove)
|
||||||
|
{
|
||||||
|
selectedSoloCurves->erase(curve);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -20,9 +20,13 @@
|
|||||||
|
|
||||||
#include "cafCmdFeature.h"
|
#include "cafCmdFeature.h"
|
||||||
|
|
||||||
|
#include <set>
|
||||||
|
|
||||||
class RimSummaryCurve;
|
class RimSummaryCurve;
|
||||||
class RimSummaryCurveFilter;
|
class RimSummaryCurveFilter;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
///
|
///
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
@@ -36,6 +40,6 @@ protected:
|
|||||||
virtual void setupActionLook( QAction* actionToSetup ) override;
|
virtual void setupActionLook( QAction* actionToSetup ) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static RimSummaryCurve* selectedSummaryCurve();
|
static void extractSelectedCurveFiltersAndSoloCurves(std::set<RimSummaryCurveFilter*>* selectedCurveFilters,
|
||||||
static RimSummaryCurveFilter* selectedSummaryCurveFilter();
|
std::set<RimSummaryCurve*>* selectedSoloCurves);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -374,9 +374,12 @@ QStringList RimContextCommandBuilder::commandsFromSelection()
|
|||||||
{
|
{
|
||||||
commandIds << "RicExecuteScriptForCasesFeature";
|
commandIds << "RicExecuteScriptForCasesFeature";
|
||||||
}
|
}
|
||||||
else if (dynamic_cast<RimSummaryCurve*>(uiItem))
|
else if (dynamic_cast<RimSummaryCurve*>(uiItem) ||
|
||||||
|
dynamic_cast<RimSummaryCurveFilter*>(uiItem) )
|
||||||
{
|
{
|
||||||
commandIds << "RicCopyReferencesToClipboardFeature";
|
commandIds << "RicCopyReferencesToClipboardFeature";
|
||||||
|
commandIds << "RicSummaryCurveSwitchAxisFeature";
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (dynamic_cast<RimWellLogCurve*>(uiItem) ||
|
else if (dynamic_cast<RimWellLogCurve*>(uiItem) ||
|
||||||
dynamic_cast<RimWellLogTrack*>(uiItem) ||
|
dynamic_cast<RimWellLogTrack*>(uiItem) ||
|
||||||
@@ -387,6 +390,11 @@ QStringList RimContextCommandBuilder::commandsFromSelection()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (uiItems.size() > 1)
|
||||||
|
{
|
||||||
|
commandIds << "RicDeleteItemFeature";
|
||||||
|
}
|
||||||
|
|
||||||
if (RicToggleItemsFeatureImpl::isToggleCommandsAvailable())
|
if (RicToggleItemsFeatureImpl::isToggleCommandsAvailable())
|
||||||
{
|
{
|
||||||
commandIds << "Separator";
|
commandIds << "Separator";
|
||||||
|
|||||||
Reference in New Issue
Block a user