From bb6ca0848d16561d272f424634def1e8777375eb Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Sat, 30 Apr 2022 15:19:24 +0200 Subject: [PATCH] #8859 Add drop target for calculation variables --- .../RimSummaryCalculation.cpp | 9 ++++++ .../RimSummaryCalculationVariable.cpp | 29 +++++++++++++++++++ .../RimSummaryCalculationVariable.h | 4 +++ .../Summary/RimSummaryAddress.cpp | 2 +- .../Summary/RimSummaryAddress.h | 2 +- .../UserInterface/RiuDragDrop.cpp | 24 ++++++++++++--- .../UserInterface/RiuDragDrop.h | 2 ++ 7 files changed, 66 insertions(+), 6 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/RimSummaryCalculation.cpp b/ApplicationLibCode/ProjectDataModel/RimSummaryCalculation.cpp index 74fafdcb77..33d380f40f 100644 --- a/ApplicationLibCode/ProjectDataModel/RimSummaryCalculation.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimSummaryCalculation.cpp @@ -37,6 +37,7 @@ #include "RiuExpressionContextMenuManager.h" #include "cafPdmUiLineEditor.h" +#include "cafPdmUiTableViewEditor.h" #include "cafPdmUiTextEditor.h" #include @@ -465,6 +466,14 @@ void RimSummaryCalculation::defineEditorAttribute( const caf::PdmFieldHandle* fi myAttr->heightHint = -1; } } + else if ( field == &m_variables ) + { + auto* myAttr = dynamic_cast( attribute ); + if ( myAttr ) + { + myAttr->enableDropTarget = true; + } + } } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/RimSummaryCalculationVariable.cpp b/ApplicationLibCode/ProjectDataModel/RimSummaryCalculationVariable.cpp index 559e002b55..9b15ebd7da 100644 --- a/ApplicationLibCode/ProjectDataModel/RimSummaryCalculationVariable.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimSummaryCalculationVariable.cpp @@ -20,6 +20,7 @@ #include "RiaApplication.h" #include "RiaSummaryCurveDefinition.h" +#include "RiaSummaryTools.h" #include "RifEclipseSummaryAddressQMetaType.h" @@ -29,6 +30,7 @@ #include "RimSummaryCase.h" #include "RimSummaryCurve.h" +#include "RiuDragDrop.h" #include "RiuSummaryVectorSelectionDialog.h" #include "cafPdmUiPushButtonEditor.h" @@ -153,6 +155,33 @@ RimSummaryAddress* RimSummaryCalculationVariable::summaryAddress() return m_summaryAddress(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryCalculationVariable::setSummaryAddress( const RimSummaryAddress& address ) +{ + m_summaryAddress()->setAddress( address.address() ); + + auto summaryCase = RiaSummaryTools::summaryCaseById( address.caseId() ); + + if ( summaryCase ) m_case = summaryCase; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryCalculationVariable::handleDroppedMimeData( const QMimeData* data, + Qt::DropAction action, + caf::PdmFieldHandle* destinationField ) +{ + auto objects = RiuDragDrop::convertToObjects( data ); + if ( !objects.empty() ) + { + auto address = dynamic_cast( objects.front() ); + if ( address ) setSummaryAddress( *address ); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/RimSummaryCalculationVariable.h b/ApplicationLibCode/ProjectDataModel/RimSummaryCalculationVariable.h index 4ab6c8c91d..3ec04bcddb 100644 --- a/ApplicationLibCode/ProjectDataModel/RimSummaryCalculationVariable.h +++ b/ApplicationLibCode/ProjectDataModel/RimSummaryCalculationVariable.h @@ -49,6 +49,10 @@ public: RimSummaryCase* summaryCase(); RimSummaryAddress* summaryAddress(); + void setSummaryAddress( const RimSummaryAddress& address ); + + void handleDroppedMimeData( const QMimeData* data, Qt::DropAction action, caf::PdmFieldHandle* destinationField ) override; + private: void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddress.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddress.cpp index 9003c24ce4..9972780ce1 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddress.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddress.cpp @@ -138,7 +138,7 @@ void RimSummaryAddress::setAddress( const RifEclipseSummaryAddress& addr ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RifEclipseSummaryAddress RimSummaryAddress::address() +RifEclipseSummaryAddress RimSummaryAddress::address() const { return RifEclipseSummaryAddress( m_category(), m_quantityName().toStdString(), diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddress.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddress.h index 50ecbb2653..131225d527 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddress.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddress.h @@ -48,7 +48,7 @@ public: wrapFileReaderAddress( const RifEclipseSummaryAddress& addr, int caseId = -1, int ensembleId = -1 ); void setAddress( const RifEclipseSummaryAddress& addr ); - RifEclipseSummaryAddress address(); + RifEclipseSummaryAddress address() const; void setCaseId( int caseId ); int caseId() const; diff --git a/ApplicationLibCode/UserInterface/RiuDragDrop.cpp b/ApplicationLibCode/UserInterface/RiuDragDrop.cpp index 9db74aaae8..670ad02979 100644 --- a/ApplicationLibCode/UserInterface/RiuDragDrop.cpp +++ b/ApplicationLibCode/UserInterface/RiuDragDrop.cpp @@ -808,11 +808,29 @@ bool RiuDragDrop::handleGenericDropEvent( QEvent* event, std::vector RiuDragDrop::convertToObjects( const QMimeData* mimeData ) +{ + std::vector droppedObjects; if ( mimeData ) { QString mimeType = caf::PdmUiDragDropInterface::mimeTypeForObjectReferenceList(); - auto data = mimeData->data( mimeType ); + QByteArray data = mimeData->data( mimeType ); + if ( data.isEmpty() ) return {}; QStringList objectReferences; QDataStream in( &data, QIODevice::ReadOnly ); @@ -824,9 +842,7 @@ bool RiuDragDrop::handleGenericDropEvent( QEvent* event, std::vector& droppedObjects ); + static std::vector convertToObjects( const QMimeData* mimeData ); + protected: Qt::DropActions supportedDropActions() const override; Qt::ItemFlags flags( const QModelIndex& index ) const override;