#8250 AppFwk : Introduce variadic macros

Use variadic macros to to support optional parameters in initialization macros
This commit is contained in:
Magne Sjaastad
2021-11-14 14:13:01 +01:00
parent 6940e588b6
commit 1b869a9356
12 changed files with 130 additions and 73 deletions

View File

@@ -50,56 +50,83 @@
#include <type_traits>
#define CAF_PDM_InitScriptableField( field, keyword, default, uiName, iconResourceName, toolTip, whatsThis ) \
CAF_PDM_InitField( field, \
keyword, \
default, \
uiName, \
iconResourceName, \
caf::PdmAbstractFieldScriptingCapability::helpString( toolTip, keyword ), \
whatsThis ); \
caf::AddScriptingCapabilityToField( field, keyword )
#define CAF_PDM_InitScriptableField( field, keyword, default, uiName, ... ) \
{ \
std::vector<QString> arguments = { __VA_ARGS__ }; \
QString iconResourceName; \
QString toolTip; \
QString whatsThis; \
if ( arguments.size() > 0 ) iconResourceName = arguments[0]; \
if ( arguments.size() > 1 ) toolTip = arguments[1]; \
if ( arguments.size() > 2 ) whatsThis = arguments[2]; \
\
CAF_PDM_InitField( field, \
keyword, \
default, \
uiName, \
iconResourceName, \
caf::PdmAbstractFieldScriptingCapability::helpString( toolTip, keyword ), \
whatsThis ); \
caf::AddScriptingCapabilityToField( field, keyword ); \
}
#define CAF_PDM_InitScriptableFieldNoDefault( field, keyword, uiName, iconResourceName, toolTip, whatsThis ) \
CAF_PDM_InitFieldNoDefault( field, \
keyword, \
uiName, \
iconResourceName, \
caf::PdmAbstractFieldScriptingCapability::helpString( toolTip, keyword ), \
whatsThis ); \
caf::AddScriptingCapabilityToField( field, keyword )
#define CAF_PDM_InitScriptableFieldNoDefault( field, keyword, uiName, ... ) \
{ \
std::vector<QString> arguments = { __VA_ARGS__ }; \
QString iconResourceName; \
QString toolTip; \
QString whatsThis; \
if ( arguments.size() > 0 ) iconResourceName = arguments[0]; \
if ( arguments.size() > 1 ) toolTip = arguments[1]; \
if ( arguments.size() > 2 ) whatsThis = arguments[2]; \
\
CAF_PDM_InitFieldNoDefault( field, \
keyword, \
uiName, \
iconResourceName, \
caf::PdmAbstractFieldScriptingCapability::helpString( toolTip, keyword ), \
whatsThis ); \
caf::AddScriptingCapabilityToField( field, keyword ); \
}
#define CAF_PDM_InitScriptableFieldWithScriptKeyword( field, \
keyword, \
scriptKeyword, \
default, \
uiName, \
iconResourceName, \
toolTip, \
whatsThis ) \
CAF_PDM_InitField( field, \
keyword, \
default, \
uiName, \
iconResourceName, \
caf::PdmAbstractFieldScriptingCapability::helpString( toolTip, scriptKeyword ), \
whatsThis ); \
caf::AddScriptingCapabilityToField( field, scriptKeyword )
#define CAF_PDM_InitScriptableFieldWithScriptKeyword( field, keyword, scriptKeyword, default, uiName, ... ) \
{ \
std::vector<QString> arguments = { __VA_ARGS__ }; \
QString iconResourceName; \
QString toolTip; \
QString whatsThis; \
if ( arguments.size() > 0 ) iconResourceName = arguments[0]; \
if ( arguments.size() > 1 ) toolTip = arguments[1]; \
if ( arguments.size() > 2 ) whatsThis = arguments[2]; \
\
CAF_PDM_InitField( field, \
keyword, \
default, \
uiName, \
iconResourceName, \
caf::PdmAbstractFieldScriptingCapability::helpString( toolTip, scriptKeyword ), \
whatsThis ); \
caf::AddScriptingCapabilityToField( field, scriptKeyword ); \
}
#define CAF_PDM_InitScriptableFieldWithScriptKeywordNoDefault( field, \
keyword, \
scriptKeyword, \
uiName, \
iconResourceName, \
toolTip, \
whatsThis ) \
CAF_PDM_InitFieldNoDefault( field, \
keyword, \
uiName, \
iconResourceName, \
caf::PdmAbstractFieldScriptingCapability::helpString( toolTip, scriptKeyword ), \
whatsThis ); \
caf::AddScriptingCapabilityToField( field, scriptKeyword )
#define CAF_PDM_InitScriptableFieldWithScriptKeywordNoDefault( field, keyword, scriptKeyword, uiName, ... ) \
{ \
std::vector<QString> arguments = { __VA_ARGS__ }; \
QString iconResourceName; \
QString toolTip; \
QString whatsThis; \
if ( arguments.size() > 0 ) iconResourceName = arguments[0]; \
if ( arguments.size() > 1 ) toolTip = arguments[1]; \
if ( arguments.size() > 2 ) whatsThis = arguments[2]; \
\
CAF_PDM_InitFieldNoDefault( field, \
keyword, \
uiName, \
iconResourceName, \
caf::PdmAbstractFieldScriptingCapability::helpString( toolTip, scriptKeyword ), \
whatsThis ); \
caf::AddScriptingCapabilityToField( field, scriptKeyword ); \
}
namespace caf
{

View File

@@ -48,7 +48,15 @@
class QTextStream;
#define CAF_PDM_InitScriptableObject( uiName, iconResourceName, toolTip, whatsThis ) \
#define CAF_PDM_InitScriptableObject( uiName, ... ) \
std::vector<QString> arguments = { __VA_ARGS__ }; \
QString iconResourceName; \
QString toolTip; \
QString whatsThis; \
if ( arguments.size() > 0 ) iconResourceName = arguments[0]; \
if ( arguments.size() > 1 ) toolTip = arguments[1]; \
if ( arguments.size() > 2 ) whatsThis = arguments[2]; \
\
CAF_PDM_InitObject( uiName, iconResourceName, toolTip, whatsThis ); \
caf::PdmObjectScriptingCapabilityRegister::registerScriptClassNameAndComment( classKeyword(), \
classKeyword(), \

View File

@@ -76,7 +76,7 @@ public:
m_proxyDouble.registerGetMethod( this, &SimpleObj::doubleMember );
AddUiCapabilityToField( &m_proxyDouble );
AddXmlCapabilityToField( &m_proxyDouble );
CAF_PDM_InitFieldNoDefault( &m_proxyDouble, "ProxyDouble", "ProxyDouble", "", "", "" );
CAF_PDM_InitFieldNoDefault( &m_proxyDouble, "ProxyDouble", "ProxyDouble" );
#endif
}
@@ -190,9 +190,9 @@ public:
"ScriptClassName_InheritedDemoObj",
"Script comment test" );
CAF_PDM_InitScriptableFieldNoDefault( &m_texts, "Texts", "Some words", "", "", "" );
CAF_PDM_InitScriptableFieldNoDefault( &m_numbers, "Numbers", "Some words", "", "", "" );
CAF_PDM_InitFieldNoDefault( &m_testEnumField, "TestEnumValue", "An Enum", "", "", "" );
CAF_PDM_InitScriptableFieldNoDefault( &m_texts, "Texts", "Some words" );
CAF_PDM_InitScriptableFieldNoDefault( &m_numbers, "Numbers", "Some words" );
CAF_PDM_InitFieldNoDefault( &m_testEnumField, "TestEnumValue", "An Enum" );
CAF_PDM_InitFieldNoDefault( &m_simpleObjectsField,
"SimpleObjects",
"SimpleObjectsField",
@@ -218,7 +218,7 @@ class MyPdmDocument : public caf::PdmDocument
public:
MyPdmDocument()
{
CAF_PDM_InitObject( "PdmObjectCollection", "", "", "" );
CAF_PDM_InitObject( "PdmObjectCollection" );
CAF_PDM_InitFieldNoDefault( &objects, "PdmObjects", "", "", "", "" )
}