mirror of
https://github.com/OPM/ResInsight.git
synced 2026-10-24 22:27:55 -05:00
Adds new virtual method configureCapabilities to PdmFieldHandle
This makes it possible to configure the capabilities of a field one place and avoids duplication. Extends scripting capabilities by introducing a `dataType` method to `PdmAbstractFieldScriptingCapability`. This allows the Python generator to retrieve the data type of a field directly from its scriptability, providing a more flexible and extensible way to determine the data type for scripting purposes.
This commit is contained in:
1 parent
25b69f3c14
commit
dc2816a91c
12 files changed
+108
-4
No files matched your search
@@ -106,3 +106,11 @@ QStringList PdmAbstractFieldScriptingCapability::enumScriptTexts() const
|
||||
{
|
||||
return QStringList();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QString PdmAbstractFieldScriptingCapability::dataType() const
|
||||
{
|
||||
return {};
|
||||
}
|
||||
@@ -69,6 +69,7 @@ public:
|
||||
static QString helpString( const QString& existingTooltip, const QString& keyword );
|
||||
|
||||
virtual QStringList enumScriptTexts() const;
|
||||
virtual QString dataType() const;
|
||||
|
||||
protected:
|
||||
PdmFieldHandle* m_owner;
|
||||
|
||||
@@ -140,7 +140,12 @@ QString caf::PdmPythonGenerator::generate( PdmObjectFactory* factory, std::vecto
|
||||
auto pdmChildArrayField = dynamic_cast<const PdmChildArrayFieldHandle*>( field );
|
||||
if ( pdmValueField )
|
||||
{
|
||||
QString dataType = PdmPythonGenerator::dataTypeString( field, false );
|
||||
QString dataType = scriptability->dataType();
|
||||
if ( dataType.isEmpty() )
|
||||
{
|
||||
dataType = PdmPythonGenerator::dataTypeString( field, false );
|
||||
}
|
||||
|
||||
if ( field->xmlCapability()->isVectorField() )
|
||||
{
|
||||
dataType = QString( "List[%1]" ).arg( dataType );
|
||||
|
||||
@@ -11,10 +11,26 @@ void AppEnum<InheritedDemoObj::TestEnumType>::setUp()
|
||||
addItem( InheritedDemoObj::T3, "T3", "A B letter" );
|
||||
setDefault( InheritedDemoObj::T1 );
|
||||
}
|
||||
|
||||
template <>
|
||||
void AppEnum<MyEnum>::setUp()
|
||||
{
|
||||
addItem( MyEnum::T1, "T1", "T1" );
|
||||
addItem( MyEnum::T2, "T2", "T2" );
|
||||
addItem( MyEnum::T3, "T3", "T3" );
|
||||
addItem( MyEnum::T4, "T4", "T4" );
|
||||
addItem( MyEnum::T5, "T5", "T5" );
|
||||
addItem( MyEnum::T6, "T6", "T6" );
|
||||
setDefault( MyEnum::T1 );
|
||||
}
|
||||
} // namespace caf
|
||||
|
||||
CAF_PDM_SOURCE_INIT( SimpleObj, "SimpleObj" );
|
||||
|
||||
namespace caf
|
||||
{
|
||||
} // namespace caf
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -28,13 +44,11 @@ SimpleObj::SimpleObj()
|
||||
CAF_PDM_InitField( &m_dir, "Dir", 123.56, "Direction", "", "Tooltip", "WhatsThis" );
|
||||
CAF_PDM_InitField( &m_up, "Up", 0.0, "Up value", "", "Tooltip", "WhatsThis" );
|
||||
CAF_PDM_InitFieldNoDefault( &m_numbers, "Numbers", "Important Numbers", "", "Tooltip", "WhatsThis" );
|
||||
#if 1
|
||||
m_proxyDouble.registerSetMethod( this, &SimpleObj::setDoubleMember );
|
||||
m_proxyDouble.registerGetMethod( this, &SimpleObj::doubleMember );
|
||||
addUiCapabilityToField( &m_proxyDouble );
|
||||
addXmlCapabilityToField( &m_proxyDouble );
|
||||
CAF_PDM_InitFieldNoDefault( &m_proxyDouble, "ProxyDouble", "ProxyDouble" );
|
||||
#endif
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -131,8 +145,9 @@ InheritedDemoObj::InheritedDemoObj()
|
||||
CAF_PDM_InitScriptableFieldNoDefault( &m_texts, "Texts", "Some words" );
|
||||
CAF_PDM_InitScriptableFieldNoDefault( &m_numbers, "Numbers", "Some words" );
|
||||
CAF_PDM_InitScriptableFieldNoDefault( &m_optionalNumber, "OptionalNumber", "Optional Number" );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_testEnumField, "TestEnumValue", "An Enum" );
|
||||
CAF_PDM_InitScriptableFieldNoDefault( &m_myAppEnum, "MyAppEnumValue", "My App Enum" );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_simpleObjectsField,
|
||||
"SimpleObjects",
|
||||
"SimpleObjectsField",
|
||||
|
||||
@@ -23,6 +23,43 @@
|
||||
#include <memory>
|
||||
|
||||
/// Demo objects to show the usage of the Pdm system
|
||||
enum class MyEnum
|
||||
{
|
||||
T1,
|
||||
T2,
|
||||
T3,
|
||||
T4,
|
||||
T5,
|
||||
T6
|
||||
};
|
||||
|
||||
// This is a specialized class that can be used to implement custom behavior in configureCapabilities
|
||||
// It is required to have a specialization of PdmFieldScriptingCapability for this class, as the new class
|
||||
// MyAppEnumField is not known to the template
|
||||
class MyAppEnumField : public caf::PdmField<caf::AppEnum<MyEnum>>
|
||||
{
|
||||
public:
|
||||
MyAppEnumField() {
|
||||
|
||||
};
|
||||
|
||||
void configureCapabilities() override {};
|
||||
};
|
||||
|
||||
namespace caf
|
||||
{
|
||||
template <>
|
||||
class PdmFieldScriptingCapability<MyAppEnumField> : public PdmFieldScriptingCapability<caf::PdmField<caf::AppEnum<MyEnum>>>
|
||||
{
|
||||
public:
|
||||
PdmFieldScriptingCapability( MyAppEnumField* field, const QString& fieldName, bool giveOwnership )
|
||||
: PdmFieldScriptingCapability<caf::PdmField<caf::AppEnum<MyEnum>>>( field, fieldName, giveOwnership )
|
||||
{
|
||||
}
|
||||
|
||||
QString dataType() const override { return "str"; }
|
||||
};
|
||||
}; // namespace caf
|
||||
|
||||
class SimpleObj : public caf::PdmObject
|
||||
{
|
||||
@@ -62,6 +99,7 @@ public:
|
||||
caf::PdmField<double> m_doubleField;
|
||||
caf::PdmField<int> m_intField;
|
||||
caf::PdmField<QString> m_textField;
|
||||
MyAppEnumField m_myAppEnum;
|
||||
|
||||
caf::PdmChildField<SimpleObj*> m_simpleObjPtrField;
|
||||
caf::PdmChildField<SimpleObj*> m_simpleObjPtrField2;
|
||||
|
||||
@@ -32,6 +32,14 @@ PdmFieldHandle::~PdmFieldHandle()
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
/// This function is called to configure capabilities for the field handle. This can be used to avoid duplicated code
|
||||
/// when setting options for *.uiCapability() and *.xmlCapability().
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void PdmFieldHandle::configureCapabilities()
|
||||
{
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -21,6 +21,8 @@ public:
|
||||
PdmFieldHandle() { m_ownerObject = nullptr; }
|
||||
virtual ~PdmFieldHandle();
|
||||
|
||||
virtual void configureCapabilities();
|
||||
|
||||
QString keyword() const { return m_keyword; }
|
||||
bool matchesKeyword( const QString& keyword ) const;
|
||||
PdmObjectHandle* ownerObject();
|
||||
|
||||
@@ -110,6 +110,7 @@ class PdmObjectCapability;
|
||||
\
|
||||
addXmlCapabilityToField( field ); \
|
||||
addUiCapabilityToField( field ); \
|
||||
configureCapabilities( field ); \
|
||||
registerClassWithField( classKeyword(), field ); \
|
||||
\
|
||||
static caf::PdmUiItemInfo objDescr( uiName, QString( iconResourceName ), toolTip, whatsThis, keyword ); \
|
||||
@@ -139,6 +140,7 @@ class PdmObjectCapability;
|
||||
\
|
||||
addXmlCapabilityToField( field ); \
|
||||
addUiCapabilityToField( field ); \
|
||||
configureCapabilities( field ); \
|
||||
registerClassWithField( classKeyword(), field ); \
|
||||
\
|
||||
static caf::PdmUiItemInfo objDescr( uiName, QString( iconResourceName ), toolTip, whatsThis, keyword ); \
|
||||
|
||||
@@ -97,6 +97,12 @@ void addUiCapabilityToField( FieldType* field )
|
||||
}
|
||||
}
|
||||
|
||||
template <typename FieldType>
|
||||
void configureCapabilities( FieldType* field )
|
||||
{
|
||||
field->configureCapabilities();
|
||||
}
|
||||
|
||||
} // End of namespace caf
|
||||
|
||||
#include "cafInternalPdmUiFieldCapability.inl"
|
||||
@@ -188,6 +188,12 @@ QList<PdmOptionItemInfo> PdmFieldUiCap<FieldType>::valueOptions() const
|
||||
m_optionEntryCache = uiObj( m_field->ownerObject() )->calculateValueOptions( this->m_field );
|
||||
}
|
||||
|
||||
// Check if the field can provide value option
|
||||
if ( m_optionEntryCache.empty() && m_valueOptionsGenerator )
|
||||
{
|
||||
m_optionEntryCache = m_valueOptionsGenerator();
|
||||
}
|
||||
|
||||
// If we got no options, use the options defined by the type. Normally only caf::AppEnum type
|
||||
|
||||
if ( m_optionEntryCache.empty() )
|
||||
|
||||
@@ -235,6 +235,14 @@ void PdmUiFieldHandle::setAttributes( const std::vector<std::pair<QString, QStri
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void PdmUiFieldHandle::setValueOptionsGenerator( const std::function<QList<PdmOptionItemInfo>()>& valueOptionsGenerator )
|
||||
{
|
||||
m_valueOptionsGenerator = valueOptionsGenerator;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -38,6 +38,11 @@ public:
|
||||
std::vector<std::pair<QString, QString>> attributes() const override;
|
||||
void setAttributes( const std::vector<std::pair<QString, QString>>& attributes ) override;
|
||||
|
||||
void setValueOptionsGenerator( const std::function<QList<PdmOptionItemInfo>()>& valueOptionsGenerator );
|
||||
|
||||
protected:
|
||||
std::function<QList<PdmOptionItemInfo>()> m_valueOptionsGenerator;
|
||||
|
||||
private:
|
||||
friend class PdmUiCommandSystemProxy;
|
||||
friend class CmdFieldChangeExec;
|
||||
|
||||
Reference in new issue
Block a user