#8859 Add drop target for calculation variables

This commit is contained in:
Magne Sjaastad 2022-04-30 15:19:24 +02:00
parent feb1c417c5
commit bb6ca0848d
7 changed files with 66 additions and 6 deletions

View File

@ -37,6 +37,7 @@
#include "RiuExpressionContextMenuManager.h"
#include "cafPdmUiLineEditor.h"
#include "cafPdmUiTableViewEditor.h"
#include "cafPdmUiTextEditor.h"
#include <algorithm>
@ -465,6 +466,14 @@ void RimSummaryCalculation::defineEditorAttribute( const caf::PdmFieldHandle* fi
myAttr->heightHint = -1;
}
}
else if ( field == &m_variables )
{
auto* myAttr = dynamic_cast<caf::PdmUiTableViewEditorAttribute*>( attribute );
if ( myAttr )
{
myAttr->enableDropTarget = true;
}
}
}
//--------------------------------------------------------------------------------------------------

View File

@ -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<RimSummaryAddress*>( objects.front() );
if ( address ) setSummaryAddress( *address );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -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;

View File

@ -138,7 +138,7 @@ void RimSummaryAddress::setAddress( const RifEclipseSummaryAddress& addr )
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RimSummaryAddress::address()
RifEclipseSummaryAddress RimSummaryAddress::address() const
{
return RifEclipseSummaryAddress( m_category(),
m_quantityName().toStdString(),

View File

@ -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;

View File

@ -808,11 +808,29 @@ bool RiuDragDrop::handleGenericDropEvent( QEvent* event, std::vector<caf::PdmObj
}
}
if ( mimeData )
{
auto objects = convertToObjects( mimeData );
droppedObjects.insert( droppedObjects.end(), objects.begin(), objects.end() );
bResult = true;
}
return bResult;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<caf::PdmObjectHandle*> RiuDragDrop::convertToObjects( const QMimeData* mimeData )
{
std::vector<caf::PdmObjectHandle*> 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<caf::PdmObj
auto obj = caf::PdmReferenceHelper::objectFromReference( proj, objRef );
if ( obj ) droppedObjects.push_back( obj );
}
bResult = true;
}
return bResult;
return droppedObjects;
}

View File

@ -56,6 +56,8 @@ public:
static bool handleGenericDropEvent( QEvent* event, std::vector<caf::PdmObjectHandle*>& droppedObjects );
static std::vector<caf::PdmObjectHandle*> convertToObjects( const QMimeData* mimeData );
protected:
Qt::DropActions supportedDropActions() const override;
Qt::ItemFlags flags( const QModelIndex& index ) const override;