diff --git a/ApplicationCode/Commands/WellLogCommands/RicWellLogPlotTrackFeatureImpl.cpp b/ApplicationCode/Commands/WellLogCommands/RicWellLogPlotTrackFeatureImpl.cpp index bbfcefeb77..6ae7047974 100644 --- a/ApplicationCode/Commands/WellLogCommands/RicWellLogPlotTrackFeatureImpl.cpp +++ b/ApplicationCode/Commands/WellLogCommands/RicWellLogPlotTrackFeatureImpl.cpp @@ -24,10 +24,6 @@ #include "RiuQwtPlotWidget.h" #include "RiuWellLogPlot.h" -#include "RimGridCrossPlot.h" -#include "RimGridCrossPlotCollection.h" -#include "RimSummaryPlot.h" -#include "RimSummaryPlotCollection.h" #include "RimWellLogCurve.h" #include "RimWellLogPlot.h" #include "RimWellLogTrack.h" @@ -87,3 +83,33 @@ void RicWellLogPlotTrackFeatureImpl::moveCurvesToWellLogPlotTrack( RimWellLogTra destTrack->updateParentPlotZoom(); destTrack->updateConnectedEditors(); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicWellLogPlotTrackFeatureImpl::moveTracksToWellLogPlot( RimWellLogPlot* wellLogPlot, + const std::vector& tracksToMove, + RimWellLogTrack* insertAfterTrack ) +{ + CVF_ASSERT( wellLogPlot ); + + for ( size_t tIdx = 0; tIdx < tracksToMove.size(); tIdx++ ) + { + RimWellLogTrack* plot = tracksToMove[tIdx]; + caf::PdmObject* pdmObject = dynamic_cast( plot ); + RimWellLogPlot* srcPlot; + pdmObject->firstAncestorOrThisOfType( srcPlot ); + if ( srcPlot ) + { + srcPlot->removePlot( plot ); + } + } + + size_t insertionStartIndex = 0; + if ( insertAfterTrack ) insertionStartIndex = wellLogPlot->plotIndex( insertAfterTrack ) + 1; + + for ( size_t tIdx = 0; tIdx < tracksToMove.size(); tIdx++ ) + { + wellLogPlot->insertPlot( tracksToMove[tIdx], insertionStartIndex + tIdx ); + } +} diff --git a/ApplicationCode/Commands/WellLogCommands/RicWellLogPlotTrackFeatureImpl.h b/ApplicationCode/Commands/WellLogCommands/RicWellLogPlotTrackFeatureImpl.h index 46ba0a31d5..ce811cdb55 100644 --- a/ApplicationCode/Commands/WellLogCommands/RicWellLogPlotTrackFeatureImpl.h +++ b/ApplicationCode/Commands/WellLogCommands/RicWellLogPlotTrackFeatureImpl.h @@ -21,6 +21,7 @@ #include +class RimWellLogPlot; class RimWellLogTrack; class RimWellLogCurve; @@ -33,4 +34,7 @@ public: static void moveCurvesToWellLogPlotTrack( RimWellLogTrack* dstTrack, const std::vector& curves, RimWellLogCurve* insertAfterCurve ); + static void moveTracksToWellLogPlot( RimWellLogPlot* wellLogPlot, + const std::vector& tracks, + RimWellLogTrack* trackToInsertAfter ); }; diff --git a/ApplicationCode/ProjectDataModel/RimDepthTrackPlot.cpp b/ApplicationCode/ProjectDataModel/RimDepthTrackPlot.cpp index 1666e2b9d2..818422b1a3 100644 --- a/ApplicationCode/ProjectDataModel/RimDepthTrackPlot.cpp +++ b/ApplicationCode/ProjectDataModel/RimDepthTrackPlot.cpp @@ -686,6 +686,8 @@ void RimDepthTrackPlot::onPlotAdditionOrRemoval() { calculateAvailableDepthRange(); updateZoom(); + updateSubPlotNames(); + updateConnectedEditors(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/UserInterface/RiuDragDrop.cpp b/ApplicationCode/UserInterface/RiuDragDrop.cpp index c5dcc4d75c..bb652d7e95 100644 --- a/ApplicationCode/UserInterface/RiuDragDrop.cpp +++ b/ApplicationCode/UserInterface/RiuDragDrop.cpp @@ -297,6 +297,20 @@ bool RiuDragDrop::dropMimeData( const QMimeData* data, Qt::DropAction action, in return handleWellLogPlotCurveDrop( action, draggedObjects, wellLogPlotCurve ); } + RimWellLogTrack* wellLogPlotTrack; + dropTarget->firstAncestorOrThisOfType( wellLogPlotTrack ); + if ( wellLogPlotTrack ) + { + return handleWellLogPlotTrackDrop( action, draggedObjects, wellLogPlotTrack, row ); + } + + RimWellLogPlot* wellLogPlot; + dropTarget->firstAncestorOrThisOfType( wellLogPlot ); + if ( wellLogPlot ) + { + return handleWellLogPlotDrop( action, draggedObjects, wellLogPlot, row ); + } + RimMultiPlot* multiPlot; dropTarget->firstAncestorOrThisOfType( multiPlot ); if ( multiPlot ) @@ -446,6 +460,93 @@ bool RiuDragDrop::handleWellLogPlotCurveDrop( Qt::DropAction action, return false; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RiuDragDrop::handleWellLogPlotTrackDrop( Qt::DropAction action, + caf::PdmObjectGroup& draggedObjects, + RimWellLogTrack* trackTarget, + int insertAtPosition ) +{ + std::vector wellLogFileChannels = + RiuTypedPdmObjects::typedObjectsFromGroup( draggedObjects ); + if ( wellLogFileChannels.size() > 0 ) + { + if ( action == Qt::CopyAction ) + { + RicWellLogTools::addWellLogChannelsToPlotTrack( trackTarget, wellLogFileChannels ); + return true; + } + } + + std::vector wellLogPlotCurves = + RiuTypedPdmObjects::typedObjectsFromGroup( draggedObjects ); + if ( wellLogPlotCurves.size() > 0 ) + { + if ( action == Qt::MoveAction ) + { + RimWellLogCurve* insertAfter = nullptr; + if ( insertAtPosition > 0 ) + { + auto visibleCurves = trackTarget->visibleCurves(); + if ( !visibleCurves.empty() ) + { + int insertAfterPosition = std::min( insertAtPosition - 1, (int)visibleCurves.size() - 1 ); + insertAfter = visibleCurves[insertAfterPosition]; + } + } + RicWellLogPlotTrackFeatureImpl::moveCurvesToWellLogPlotTrack( trackTarget, wellLogPlotCurves, insertAfter ); + return true; + } + } + + std::vector wellLogPlotTracks = + RiuTypedPdmObjects::typedObjectsFromGroup( draggedObjects ); + if ( wellLogPlotTracks.size() > 0 ) + { + if ( action == Qt::MoveAction ) + { + RimWellLogPlot* wellLogPlot; + trackTarget->firstAncestorOrThisOfType( wellLogPlot ); + return handleWellLogPlotDrop( action, draggedObjects, wellLogPlot, insertAtPosition ); + } + } + + return false; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RiuDragDrop::handleWellLogPlotDrop( Qt::DropAction action, + caf::PdmObjectGroup& draggedObjects, + RimWellLogPlot* wellLogPlotTarget, + int insertAtPosition ) +{ + std::vector wellLogPlotTracks = + RiuTypedPdmObjects::typedObjectsFromGroup( draggedObjects ); + if ( wellLogPlotTracks.size() > 0 ) + { + if ( action == Qt::MoveAction ) + { + RimWellLogTrack* insertAfter = nullptr; + if ( insertAtPosition > 0 ) + { + auto visibleTracks = wellLogPlotTarget->visiblePlots(); + if ( !visibleTracks.empty() ) + { + int insertAfterPosition = std::min( insertAtPosition - 1, (int)visibleTracks.size() - 1 ); + insertAfter = dynamic_cast( visibleTracks[insertAfterPosition] ); + } + } + RicWellLogPlotTrackFeatureImpl::moveTracksToWellLogPlot( wellLogPlotTarget, wellLogPlotTracks, insertAfter ); + return true; + } + } + + return false; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/UserInterface/RiuDragDrop.h b/ApplicationCode/UserInterface/RiuDragDrop.h index 486d928618..492f8ffd0c 100644 --- a/ApplicationCode/UserInterface/RiuDragDrop.h +++ b/ApplicationCode/UserInterface/RiuDragDrop.h @@ -65,6 +65,12 @@ private: caf::PdmObjectGroup& objectGroup, RimWellLogTrack* wellLogPlotTrack, int insertAtPosition ); + + bool handleWellLogPlotDrop( Qt::DropAction action, + caf::PdmObjectGroup& objectGroup, + RimWellLogPlot* wellLogPlot, + int insertAtPosition ); + bool handleMultiPlotDrop( Qt::DropAction action, caf::PdmObjectGroup& objectGroup, RimMultiPlot* multiPlot,