(#467) Moving curves onto a track inserts them in front of existing curves

Dragging and dropping curves onto a curve appends curves after the given
curve.
This commit is contained in:
Pål Hagen 2015-10-22 16:56:10 +02:00
parent b18ae1a14a
commit e9f94fc959
7 changed files with 86 additions and 3 deletions

View File

@ -44,13 +44,25 @@ void RicWellLogPlotTrackFeatureImpl::moveCurvesToWellLogPlotTrack(RimWellLogPlot
oldPlotTrack->updateConnectedEditors();
}
wellLogPlotTrack->addCurve(curves[cIdx]);
wellLogPlotTrack->insertCurve(curves[cIdx], cIdx);
}
wellLogPlotTrack->updateAxisRangesAndReplot();
wellLogPlotTrack->updateConnectedEditors();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicWellLogPlotTrackFeatureImpl::moveCurvesToWellLogPlotTrack(RimWellLogPlotTrack* wellLogPlotTrack, const std::vector<RimWellLogPlotCurve*>& curves, RimWellLogPlotCurve* insertAfterCurve)
{
CVF_ASSERT(wellLogPlotTrack && insertAfterCurve);
wellLogPlotTrack->moveCurves(insertAfterCurve, curves);
wellLogPlotTrack->updateAxisRangesAndReplot();
wellLogPlotTrack->updateConnectedEditors();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -33,6 +33,7 @@ class RicWellLogPlotTrackFeatureImpl
public:
static void moveCurvesToWellLogPlotTrack(RimWellLogPlotTrack* wellLogPlotTrack, const std::vector<RimWellLogPlotCurve*>& curves);
static void moveCurvesToWellLogPlotTrack(RimWellLogPlotTrack* wellLogPlotTrack, const std::vector<RimWellLogPlotCurve*>& curves, RimWellLogPlotCurve* insertAfterCurve);
static void moveTracksToWellLogPlot(RimWellLogPlot* wellLogPlot, const std::vector<RimWellLogPlotTrack*>& tracks);
static void moveTracks(RimWellLogPlotTrack* insertAfterTrack, const std::vector<RimWellLogPlotTrack*>& tracks);
};

View File

@ -56,7 +56,7 @@ public:
void insertTrack(RimWellLogPlotTrack* track, size_t index);
size_t trackCount() { return tracks.size();}
void removeTrack(RimWellLogPlotTrack* track);
void moveTracks(RimWellLogPlotTrack* insertAfterTrack, const std::vector<RimWellLogPlotTrack*>& tracks);
void moveTracks(RimWellLogPlotTrack* insertAfterTrack, const std::vector<RimWellLogPlotTrack*>& tracksToMove);
void loadDataAndUpdate();
void updateTracks();

View File

@ -118,6 +118,19 @@ void RimWellLogPlotTrack::addCurve(RimWellLogPlotCurve* curve)
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimWellLogPlotTrack::insertCurve(RimWellLogPlotCurve* curve, size_t index)
{
curves.insert(index, curve);
if (m_wellLogTrackPlotWidget)
{
curve->setPlot(m_wellLogTrackPlotWidget);
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -131,6 +144,31 @@ void RimWellLogPlotTrack::removeCurve(RimWellLogPlotCurve* curve)
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimWellLogPlotTrack::moveCurves(RimWellLogPlotCurve* insertAfterCurve, const std::vector<RimWellLogPlotCurve*>& curvesToMove)
{
for (size_t cIdx = 0; cIdx < curvesToMove.size(); cIdx++)
{
RimWellLogPlotCurve* curve = curvesToMove[cIdx];
RimWellLogPlotTrack* wellLogPlotTrack;
curve->firstAnchestorOrThisOfType(wellLogPlotTrack);
if (wellLogPlotTrack)
{
wellLogPlotTrack->removeCurve(curve);
wellLogPlotTrack->updateConnectedEditors();
}
}
size_t index = curves.index(insertAfterCurve) + 1;
for (size_t cIdx = 0; cIdx < curvesToMove.size(); cIdx++)
{
insertCurve(curvesToMove[cIdx], index + cIdx);
}
}
//--------------------------------------------------------------------------------------------------
///

View File

@ -46,7 +46,9 @@ public:
void setDescription(const QString& description);
void addCurve(RimWellLogPlotCurve* curve);
void insertCurve(RimWellLogPlotCurve* curve, size_t index);
void removeCurve(RimWellLogPlotCurve* curve);
void moveCurves(RimWellLogPlotCurve* insertAfterCurve, const std::vector<RimWellLogPlotCurve*>& curvesToMove);
size_t curveCount() { return curves.size(); }
void recreateViewer();

View File

@ -241,6 +241,13 @@ bool RiuDragDrop::dropMimeData(const QMimeData *data, Qt::DropAction action, int
return handleGridCaseGroupDrop(action, objectGroup, gridCaseGroup);
}
RimWellLogPlotCurve* wellLogPlotCurve;
objHandle->firstAnchestorOrThisOfType(wellLogPlotCurve);
if (wellLogPlotCurve)
{
return handleWellLogPlotCurveDrop(action, objectGroup, wellLogPlotCurve);
}
RimWellLogPlotTrack* wellLogPlotTrack;
objHandle->firstAnchestorOrThisOfType(wellLogPlotTrack);
if (wellLogPlotTrack)
@ -361,6 +368,27 @@ bool RiuDragDrop::handleWellLogPlotTrackDrop(Qt::DropAction action, caf::PdmObje
return false;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RiuDragDrop::handleWellLogPlotCurveDrop(Qt::DropAction action, caf::PdmObjectGroup& objectGroup, RimWellLogPlotCurve* wellLogPlotCurve)
{
std::vector<RimWellLogPlotCurve*> wellLogPlotCurves = RiuTypedPdmObjects<RimWellLogPlotCurve>::typedObjectsFromGroup(objectGroup);
if (wellLogPlotCurves.size() > 0)
{
if (action == Qt::MoveAction)
{
RimWellLogPlotTrack* wellLogPlotTrack;
wellLogPlotCurve->firstAnchestorOrThisOfType(wellLogPlotTrack);
RicWellLogPlotTrackFeatureImpl::moveCurvesToWellLogPlotTrack(wellLogPlotTrack, wellLogPlotCurves, wellLogPlotCurve);
return true;
}
}
return false;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -31,8 +31,9 @@ namespace caf
}
class RimIdenticalGridCaseGroup;
class RimWellLogPlotTrack;
class RimWellLogPlot;
class RimWellLogPlotTrack;
class RimWellLogPlotCurve;
//--------------------------------------------------------------------------------------------------
///
@ -56,6 +57,7 @@ private:
bool handleGridCaseGroupDrop(Qt::DropAction action, caf::PdmObjectGroup& objectGroup, RimIdenticalGridCaseGroup* gridCaseGroup);
bool handleWellLogPlotTrackDrop(Qt::DropAction action, caf::PdmObjectGroup& objectGroup, RimWellLogPlotTrack* wellLogPlotTrack);
bool handleWellLogPlotDrop(Qt::DropAction action, caf::PdmObjectGroup& objectGroup, RimWellLogPlot* wellLogPlot);
bool handleWellLogPlotCurveDrop(Qt::DropAction action, caf::PdmObjectGroup& objectGroup, RimWellLogPlotCurve* wellLogPlotCurve);
static void objectGroupFromModelIndexes(caf::PdmObjectGroup* objectGroup, const QModelIndexList &indexes);
static std::vector<caf::PdmPointer<caf::PdmObjectHandle> > objectHandlesFromSelection();