#7940 Python : Traverse inheritance stack to find correct script class name

This commit is contained in:
Magne Sjaastad 2021-09-02 08:55:35 +02:00
parent 16ec5f793a
commit b397c230ac
5 changed files with 43 additions and 10 deletions

View File

@ -2082,6 +2082,8 @@ std::vector<double> RimEclipseView::currentCellResultData() const
std::vector<double> resultData; std::vector<double> resultData;
if ( currentGridCellResults() && cellResult() ) if ( currentGridCellResults() && cellResult() )
{ {
if ( !currentGridCellResults()->hasResultEntry( cellResult()->eclipseResultAddress() ) ) return {};
int timeStep = 0; int timeStep = 0;
if ( cellResult()->hasDynamicResult() ) if ( cellResult()->hasDynamicResult() )
{ {
@ -2097,7 +2099,7 @@ std::vector<double> RimEclipseView::currentCellResultData() const
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimEclipseView::setCurrentCellResultData( const std::vector<double>& values ) void RimEclipseView::setCurrentCellResultData( const std::vector<double>& values )
{ {
if ( currentGridCellResults() && cellResult() ) if ( !values.empty() && currentGridCellResults() && cellResult() )
{ {
int timeStep = 0; int timeStep = 0;
if ( cellResult()->hasDynamicResult() ) if ( cellResult()->hasDynamicResult() )

View File

@ -520,7 +520,6 @@ const RigActiveCellInfo* RigCaseCellResultsData::activeCellInfo() const
void RigCaseCellResultsData::recalculateStatistics( const RigEclipseResultAddress& resVarAddr ) void RigCaseCellResultsData::recalculateStatistics( const RigEclipseResultAddress& resVarAddr )
{ {
size_t scalarResultIndex = findScalarResultIndexFromAddress( resVarAddr ); size_t scalarResultIndex = findScalarResultIndexFromAddress( resVarAddr );
CVF_TIGHT_ASSERT( scalarResultIndex < m_cellScalarResults.size() );
if ( scalarResultIndex < m_cellScalarResults.size() ) if ( scalarResultIndex < m_cellScalarResults.size() )
{ {
m_statisticsDataCache[scalarResultIndex]->clearAllStatistics(); m_statisticsDataCache[scalarResultIndex]->clearAllStatistics();

View File

@ -99,5 +99,13 @@ QString PdmObjectScriptingCapabilityRegister::scriptClassComment( const QString&
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
bool PdmObjectScriptingCapabilityRegister::isScriptable( const caf::PdmObject* object ) bool PdmObjectScriptingCapabilityRegister::isScriptable( const caf::PdmObject* object )
{ {
return s_classKeywordToScriptClassName.find( object->classKeyword() ) != s_classKeywordToScriptClassName.end(); return isScriptable( object->classKeyword() );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool PdmObjectScriptingCapabilityRegister::isScriptable( const QString& classKeyword )
{
return s_classKeywordToScriptClassName.find( classKeyword ) != s_classKeywordToScriptClassName.end();
} }

View File

@ -57,6 +57,7 @@ public:
static QString scriptClassComment( const QString& classKeyword ); static QString scriptClassComment( const QString& classKeyword );
static bool isScriptable( const caf::PdmObject* object ); static bool isScriptable( const caf::PdmObject* object );
static bool isScriptable( const QString& classKeyword );
private: private:
static std::map<QString, QString> s_classKeywordToScriptClassName; static std::map<QString, QString> s_classKeywordToScriptClassName;

View File

@ -73,15 +73,39 @@ void RiaGrpcServiceInterface::copyPdmObjectFromCafToRips( const caf::PdmObjectHa
CAF_ASSERT( source && destination && source->xmlCapability() ); CAF_ASSERT( source && destination && source->xmlCapability() );
QString classKeyword = source->xmlCapability()->classKeyword(); QString classKeyword = source->xmlCapability()->classKeyword();
QString scriptName = caf::PdmObjectScriptingCapabilityRegister::scriptClassNameFromClassKeyword( classKeyword );
destination->set_class_keyword( scriptName.toStdString() ); QString scriptClassName;
// Find first scriptable object in inheritance stack
{
auto pdmObject = dynamic_cast<const caf::PdmObject*>( source );
auto classKeywordStack = pdmObject->classInheritanceStack();
// Reverse to get leaf node first
classKeywordStack.reverse();
for ( const auto& candidateClassKeyword : classKeywordStack )
{
if ( caf::PdmObjectScriptingCapabilityRegister::isScriptable( candidateClassKeyword ) )
{
scriptClassName =
caf::PdmObjectScriptingCapabilityRegister::scriptClassNameFromClassKeyword( candidateClassKeyword );
break;
}
}
// Fallback to source object class name
if ( scriptClassName.isEmpty() ) scriptClassName = classKeyword;
}
destination->set_class_keyword( scriptClassName.toStdString() );
destination->set_address( reinterpret_cast<uint64_t>( source ) ); destination->set_address( reinterpret_cast<uint64_t>( source ) );
bool visible = true; bool visible = true;
if ( source->uiCapability() && source->uiCapability()->objectToggleField() ) if ( source->uiCapability() && source->uiCapability()->objectToggleField() )
{ {
const caf::PdmField<bool>* boolField = const auto* boolField = dynamic_cast<const caf::PdmField<bool>*>( source->uiCapability()->objectToggleField() );
dynamic_cast<const caf::PdmField<bool>*>( source->uiCapability()->objectToggleField() );
if ( boolField ) if ( boolField )
{ {
visible = boolField->value(); visible = boolField->value();
@ -124,8 +148,7 @@ void RiaGrpcServiceInterface::copyPdmObjectFromRipsToCaf( const rips::PdmObject*
if ( destination->uiCapability() && destination->uiCapability()->objectToggleField() ) if ( destination->uiCapability() && destination->uiCapability()->objectToggleField() )
{ {
caf::PdmField<bool>* boolField = auto* boolField = dynamic_cast<caf::PdmField<bool>*>( destination->uiCapability()->objectToggleField() );
dynamic_cast<caf::PdmField<bool>*>( destination->uiCapability()->objectToggleField() );
if ( boolField ) if ( boolField )
{ {
QVariant oldValue = boolField->toQVariant(); QVariant oldValue = boolField->toQVariant();
@ -185,7 +208,7 @@ bool RiaGrpcServiceInterface::assignFieldValue( const QString& stringValue
auto scriptability = field->template capability<caf::PdmAbstractFieldScriptingCapability>(); auto scriptability = field->template capability<caf::PdmAbstractFieldScriptingCapability>();
if ( field && scriptability != nullptr ) if ( field && scriptability != nullptr )
{ {
caf::PdmValueField* valueField = dynamic_cast<caf::PdmValueField*>( field ); auto* valueField = dynamic_cast<caf::PdmValueField*>( field );
QTextStream stream( stringValue.toLatin1() ); QTextStream stream( stringValue.toLatin1() );
caf::PdmScriptIOMessages messages; caf::PdmScriptIOMessages messages;
if ( valueField ) *oldValue = valueField->toQVariant(); if ( valueField ) *oldValue = valueField->toQVariant();