Propagate variable changed signal to RicUserDefinedCalculatorUi

- ensure that the UI is updated
- if the grid size is different, set destination case equal to the input variable case
This commit is contained in:
Magne Sjaastad
2023-11-10 08:15:43 +01:00
parent 917fd9b3b5
commit fb890300c5
5 changed files with 50 additions and 14 deletions

View File

@@ -25,7 +25,6 @@
#include "cafPdmUiListEditor.h" #include "cafPdmUiListEditor.h"
#include "cafPdmUiObjectEditorHandle.h" #include "cafPdmUiObjectEditorHandle.h"
#include "cafPdmUiPushButtonEditor.h" #include "cafPdmUiPushButtonEditor.h"
#include "cafPdmUiTreeSelectionEditor.h"
CAF_PDM_ABSTRACT_SOURCE_INIT( RicUserDefinedCalculatorUi, "RicUserDefinedCalculator" ); CAF_PDM_ABSTRACT_SOURCE_INIT( RicUserDefinedCalculatorUi, "RicUserDefinedCalculator" );
@@ -38,7 +37,6 @@ RicUserDefinedCalculatorUi::RicUserDefinedCalculatorUi()
CAF_PDM_InitFieldNoDefault( &m_currentCalculation, "CurrentCalculation", "" ); CAF_PDM_InitFieldNoDefault( &m_currentCalculation, "CurrentCalculation", "" );
m_currentCalculation.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN ); m_currentCalculation.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN );
// m_currentCalculation.uiCapability()->setUiEditorTypeName(caf::PdmUiTreeSelectionEditor::uiEditorTypeName());
m_currentCalculation.uiCapability()->setUiEditorTypeName( caf::PdmUiListEditor::uiEditorTypeName() ); m_currentCalculation.uiCapability()->setUiEditorTypeName( caf::PdmUiListEditor::uiEditorTypeName() );
CAF_PDM_InitFieldNoDefault( &m_newCalculation, "NewCalculation", "New Calculation" ); CAF_PDM_InitFieldNoDefault( &m_newCalculation, "NewCalculation", "New Calculation" );
@@ -47,7 +45,7 @@ RicUserDefinedCalculatorUi::RicUserDefinedCalculatorUi()
CAF_PDM_InitFieldNoDefault( &m_deleteCalculation, "DeleteCalculation", "Delete Calculation" ); CAF_PDM_InitFieldNoDefault( &m_deleteCalculation, "DeleteCalculation", "Delete Calculation" );
RicUserDefinedCalculatorUi::assignPushButtonEditor( &m_deleteCalculation ); RicUserDefinedCalculatorUi::assignPushButtonEditor( &m_deleteCalculation );
m_calcContextMenuMgr = std::unique_ptr<RiuCalculationsContextMenuManager>( new RiuCalculationsContextMenuManager() ); m_calcContextMenuMgr = std::make_unique<RiuCalculationsContextMenuManager>();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -64,6 +62,8 @@ RimUserDefinedCalculation* RicUserDefinedCalculatorUi::currentCalculation() cons
void RicUserDefinedCalculatorUi::setCurrentCalculation( RimUserDefinedCalculation* calculation ) void RicUserDefinedCalculatorUi::setCurrentCalculation( RimUserDefinedCalculation* calculation )
{ {
m_currentCalculation = calculation; m_currentCalculation = calculation;
connectSignals( m_currentCalculation() );
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -101,6 +101,7 @@ void RicUserDefinedCalculatorUi::fieldChangedByUi( const caf::PdmFieldHandle* ch
m_newCalculation = false; m_newCalculation = false;
m_currentCalculation = calculationCollection()->addCalculation(); m_currentCalculation = calculationCollection()->addCalculation();
connectSignals( m_currentCalculation );
updateConnectedEditors(); updateConnectedEditors();
} }
@@ -117,6 +118,10 @@ void RicUserDefinedCalculatorUi::fieldChangedByUi( const caf::PdmFieldHandle* ch
caf::PdmUiObjectEditorHandle::updateUiAllObjectEditors(); caf::PdmUiObjectEditorHandle::updateUiAllObjectEditors();
} }
} }
else if ( changedField == &m_currentCalculation && m_currentCalculation() )
{
connectSignals( m_currentCalculation() );
}
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -126,7 +131,7 @@ void RicUserDefinedCalculatorUi::defineUiOrdering( QString uiConfigName, caf::Pd
{ {
if ( !m_currentCalculation() && !calculationCollection()->calculations().empty() ) if ( !m_currentCalculation() && !calculationCollection()->calculations().empty() )
{ {
m_currentCalculation = calculationCollection()->calculations()[0]; setCurrentCalculation( calculationCollection()->calculations()[0] );
} }
{ {
@@ -182,7 +187,7 @@ void RicUserDefinedCalculatorUi::assignPushButtonEditor( caf::PdmFieldHandle* fi
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RicUserDefinedCalculatorUi::assignPushButtonEditorText( caf::PdmUiEditorAttribute* attribute, const QString& text ) void RicUserDefinedCalculatorUi::assignPushButtonEditorText( caf::PdmUiEditorAttribute* attribute, const QString& text )
{ {
caf::PdmUiPushButtonEditorAttribute* attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute ); auto* attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute );
if ( attrib ) if ( attrib )
{ {
attrib->m_buttonText = text; attrib->m_buttonText = text;
@@ -252,7 +257,7 @@ void RicUserDefinedCalculatorUi::onEditorWidgetsCreated()
for ( const auto& e : m_currentCalculation.uiCapability()->connectedEditors() ) for ( const auto& e : m_currentCalculation.uiCapability()->connectedEditors() )
{ {
caf::PdmUiListEditor* listEditor = dynamic_cast<caf::PdmUiListEditor*>( e ); auto* listEditor = dynamic_cast<caf::PdmUiListEditor*>( e );
if ( !listEditor ) continue; if ( !listEditor ) continue;
QWidget* widget = listEditor->editorWidget(); QWidget* widget = listEditor->editorWidget();
@@ -261,3 +266,22 @@ void RicUserDefinedCalculatorUi::onEditorWidgetsCreated()
m_calcContextMenuMgr->attachWidget( widget, this ); m_calcContextMenuMgr->attachWidget( widget, this );
} }
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicUserDefinedCalculatorUi::onVariableUpdated( const SignalEmitter* emitter )
{
updateConnectedEditors();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicUserDefinedCalculatorUi::connectSignals( RimUserDefinedCalculation* calculation )
{
if ( calculation )
{
calculation->variableUpdated.connect( this, &RicUserDefinedCalculatorUi::onVariableUpdated );
}
}

View File

@@ -19,9 +19,11 @@
#pragma once #pragma once
#include "RiuCalculationsContextMenuManager.h" #include "RiuCalculationsContextMenuManager.h"
#include "cafPdmField.h" #include "cafPdmField.h"
#include "cafPdmObject.h" #include "cafPdmObject.h"
#include "cafPdmPtrField.h" #include "cafPdmPtrField.h"
#include <memory> #include <memory>
class RimUserDefinedCalculationCollection; class RimUserDefinedCalculationCollection;
@@ -52,14 +54,16 @@ protected:
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override;
QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override;
void onEditorWidgetsCreated() override;
// TODO : Move to a common caf helper class // TODO : Move to a common caf helper class
static void assignPushButtonEditor( caf::PdmFieldHandle* fieldHandle ); static void assignPushButtonEditor( caf::PdmFieldHandle* fieldHandle );
static void assignPushButtonEditorText( caf::PdmUiEditorAttribute* attribute, const QString& text ); static void assignPushButtonEditorText( caf::PdmUiEditorAttribute* attribute, const QString& text );
private: private:
QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; void onVariableUpdated( const SignalEmitter* emitter );
void onEditorWidgetsCreated() override; void connectSignals( RimUserDefinedCalculation* calculation );
private: private:
caf::PdmPtrField<RimUserDefinedCalculation*> m_currentCalculation; caf::PdmPtrField<RimUserDefinedCalculation*> m_currentCalculation;

View File

@@ -295,16 +295,20 @@ void RimGridCalculation::initAfterRead()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimGridCalculation::onVariableUpdated( const SignalEmitter* emitter ) void RimGridCalculation::onVariableUpdated( const SignalEmitter* emitter )
{ {
if ( m_destinationCase == nullptr ) if ( auto variable = dynamic_cast<const RimGridCalculationVariable*>( emitter ) )
{ {
auto variable = dynamic_cast<const RimGridCalculationVariable*>( emitter ); if ( auto variableCase = variable->eclipseCase() )
if ( variable && variable->eclipseCase() )
{ {
m_destinationCase = variable->eclipseCase(); if ( !m_destinationCase || !m_destinationCase->isGridSizeEqualTo( variableCase ) )
{
m_destinationCase = variableCase;
}
}
}
updateConnectedEditors(); updateConnectedEditors();
}
} variableUpdated.send();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@@ -42,6 +42,7 @@ CAF_PDM_XML_ABSTRACT_SOURCE_INIT( RimUserDefinedCalculation, "RimUserDefinedCalc
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RimUserDefinedCalculation::RimUserDefinedCalculation() RimUserDefinedCalculation::RimUserDefinedCalculation()
: variableUpdated( this )
{ {
CAF_PDM_InitObject( "RimUserDefinedCalculation", ":/octave.png", "Calculation", "" ); CAF_PDM_InitObject( "RimUserDefinedCalculation", ":/octave.png", "Calculation", "" );

View File

@@ -36,6 +36,9 @@ class RimUserDefinedCalculation : public caf::PdmObject
{ {
CAF_PDM_HEADER_INIT; CAF_PDM_HEADER_INIT;
public:
caf::Signal<> variableUpdated;
public: public:
RimUserDefinedCalculation(); RimUserDefinedCalculation();