mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Use uiOrdering to get all child fields
This commit is contained in:
@@ -25,6 +25,8 @@
|
||||
|
||||
#include "Riu3DMainWindowTools.h"
|
||||
|
||||
#include "cafSelectionManagerTools.h"
|
||||
|
||||
#include <QAction>
|
||||
|
||||
CAF_CMD_SOURCE_INIT( RicAddFieldToQuickAccessFeature, "RicAddFieldToQuickAccessFeature" );
|
||||
@@ -42,7 +44,9 @@ void RicAddFieldToQuickAccessFeature::onActionTriggered( bool isChecked )
|
||||
RimFieldReference fieldRef;
|
||||
fieldRef.setObject( firstObject );
|
||||
|
||||
caf::PdmUiPropertyViewDialog propertyDialog( Riu3DMainWindowTools::mainWindowWidget(), &fieldRef, "Select Field", "" );
|
||||
caf::PdmUiPropertyViewDialog propertyDialog( Riu3DMainWindowTools::mainWindowWidget(), &fieldRef, "Pin Field to Quick Access", "" );
|
||||
propertyDialog.setWindowIcon( QIcon( ":/pin.svg" ) );
|
||||
|
||||
if ( propertyDialog.exec() == QDialog::Accepted )
|
||||
{
|
||||
auto field = fieldRef.field();
|
||||
|
||||
@@ -28,7 +28,7 @@ CAF_PDM_SOURCE_INIT( RimFieldReference, "RimFieldReference" );
|
||||
RimFieldReference::RimFieldReference()
|
||||
{
|
||||
CAF_PDM_InitFieldNoDefault( &m_object, "Object", "Object" );
|
||||
CAF_PDM_InitFieldNoDefault( &m_fieldName, "FieldName", "FieldName" );
|
||||
CAF_PDM_InitFieldNoDefault( &m_fieldKeyword, "FieldKeyword", "Field Keyword" );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -38,10 +38,10 @@ void RimFieldReference::setObject( caf::PdmObject* object )
|
||||
{
|
||||
m_object = object;
|
||||
|
||||
std::vector<QString> fieldNames = RimFieldReference::fieldNames( object );
|
||||
if ( !fieldNames.empty() )
|
||||
auto keywordAndNames = RimFieldReference::fieldKeywordAndNames( object );
|
||||
if ( !keywordAndNames.empty() )
|
||||
{
|
||||
m_fieldName = fieldNames[0];
|
||||
m_fieldKeyword = keywordAndNames[0].first;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,27 +61,67 @@ void RimFieldReference::setField( caf::PdmFieldHandle* field )
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<QString> RimFieldReference::fieldNames( caf::PdmObject* object )
|
||||
std::vector<std::pair<QString, QString>> RimFieldReference::fieldKeywordAndNames( caf::PdmObject* object )
|
||||
{
|
||||
std::vector<QString> names;
|
||||
std::vector<std::pair<QString, QString>> names;
|
||||
|
||||
if ( object )
|
||||
{
|
||||
auto allFields = object->fields();
|
||||
for ( auto field : allFields )
|
||||
// Get the fields for the current uiOrdering. Calling object->fields() will not work as it will return all fields.
|
||||
caf::PdmUiOrdering uiOrdering;
|
||||
object->uiOrdering( "", uiOrdering );
|
||||
|
||||
std::vector<caf::PdmFieldHandle*> fields;
|
||||
for ( auto item : uiOrdering.uiItems() )
|
||||
{
|
||||
names.push_back( field->keyword() );
|
||||
findFieldsRecursively( item, fields );
|
||||
}
|
||||
|
||||
for ( auto item : fields )
|
||||
{
|
||||
if ( auto field = dynamic_cast<caf::PdmFieldHandle*>( item ) )
|
||||
{
|
||||
auto text = field->keyword();
|
||||
|
||||
if ( auto uiCapability = field->uiCapability() )
|
||||
{
|
||||
text = uiCapability->uiName();
|
||||
}
|
||||
|
||||
names.push_back( { field->keyword(), text } );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return names;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimFieldReference::findFieldsRecursively( caf::PdmUiItem* object, std::vector<caf::PdmFieldHandle*>& fields )
|
||||
{
|
||||
if ( auto uiFieldHandle = dynamic_cast<caf::PdmUiFieldHandle*>( object ) )
|
||||
{
|
||||
if ( uiFieldHandle->fieldHandle() ) fields.push_back( uiFieldHandle->fieldHandle() );
|
||||
}
|
||||
|
||||
if ( auto group = dynamic_cast<caf::PdmUiGroup*>( object ) )
|
||||
{
|
||||
for ( auto child : group->uiItems() )
|
||||
{
|
||||
findFieldsRecursively( child, fields );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimFieldReference::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
|
||||
{
|
||||
uiOrdering.add( &m_object );
|
||||
uiOrdering.add( &m_fieldKeyword );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -91,12 +131,12 @@ QList<caf::PdmOptionItemInfo> RimFieldReference::calculateValueOptions( const ca
|
||||
{
|
||||
QList<caf::PdmOptionItemInfo> options;
|
||||
|
||||
if ( fieldNeedingOptions == &m_fieldName )
|
||||
if ( fieldNeedingOptions == &m_fieldKeyword )
|
||||
{
|
||||
auto fieldNames = RimFieldReference::fieldNames( m_object );
|
||||
for ( const auto& name : fieldNames )
|
||||
auto keywordAndNames = RimFieldReference::fieldKeywordAndNames( m_object );
|
||||
for ( const auto& [keyword, name] : keywordAndNames )
|
||||
{
|
||||
options.push_back( caf::PdmOptionItemInfo( name, name ) );
|
||||
options.push_back( caf::PdmOptionItemInfo( name, keyword ) );
|
||||
}
|
||||
}
|
||||
else if ( fieldNeedingOptions == &m_object )
|
||||
@@ -129,7 +169,7 @@ caf::PdmFieldHandle* RimFieldReference::field() const
|
||||
{
|
||||
if ( !m_object() ) return nullptr;
|
||||
|
||||
return m_object->findField( m_fieldName() );
|
||||
return m_object->findField( m_fieldKeyword() );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -154,5 +194,5 @@ void RimFieldReference::setObjectsForSelection( const std::vector<caf::PdmObject
|
||||
void RimFieldReference::setField( caf::PdmObject* object, const QString& fieldName )
|
||||
{
|
||||
m_object = object;
|
||||
m_fieldName = fieldName;
|
||||
m_fieldKeyword = fieldName;
|
||||
}
|
||||
|
||||
@@ -51,11 +51,12 @@ private:
|
||||
|
||||
void setField( caf::PdmObject* object, const QString& fieldName );
|
||||
|
||||
static std::vector<QString> fieldNames( caf::PdmObject* object );
|
||||
static std::vector<std::pair<QString, QString>> fieldKeywordAndNames( caf::PdmObject* object );
|
||||
static void findFieldsRecursively( caf::PdmUiItem* object, std::vector<caf::PdmFieldHandle*>& fields );
|
||||
|
||||
private:
|
||||
caf::PdmPtrField<caf::PdmObject*> m_object;
|
||||
caf::PdmField<QString> m_fieldName;
|
||||
caf::PdmField<QString> m_fieldKeyword;
|
||||
|
||||
std::vector<caf::PdmObject*> m_objectsForSelection;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user