#6320 Refactor of PdmScripting

* Make base class abstract
* Implement support for IOHandling for PdmChild and PdmChildArray fields
This commit is contained in:
Gaute Lindkvist committed 2020-08-25 08:33:47 +02:00
1 parent 2ec5f83dad
commit f82b2f73ec
107 files changed
+1492 -1113

No files matched your search

+10 -10
View File
@@ -4,20 +4,20 @@ project (cafPdmScripting)
set( PROJECT_FILES
cafPdmCodeGenerator.h
cafPdmFieldScriptability.h
cafPdmFieldScriptability.cpp
cafPdmFieldIOScriptability.h
cafPdmFieldIOScriptability.cpp
cafPdmObjectMethod.h
cafPdmObjectMethod.cpp
cafPdmObjectScriptabilityRegister.h
cafPdmObjectScriptabilityRegister.cpp
cafPdmAbstractFieldScriptingCapability.h
cafPdmAbstractFieldScriptingCapability.cpp
cafPdmFieldScriptingCapability.h
cafPdmFieldScriptingCapability.cpp
cafPdmObjectMethod.h
cafPdmObjectMethod.cpp
cafPdmObjectScriptingCapabilityRegister.h
cafPdmObjectScriptingCapabilityRegister.cpp
cafPdmPythonGenerator.h
cafPdmPythonGenerator.cpp
cafPdmScriptIOMessages.h
cafPdmScriptIOMessages.cpp
cafPdmObjectScriptability.h
cafPdmObjectScriptability.cpp
cafPdmObjectScriptingCapability.h
cafPdmObjectScriptingCapability.cpp
cafPdmScriptResponse.h
cafPdmScriptResponse.cpp
cafPdmMarkdownGenerator.h
@@ -33,7 +33,7 @@
// for more details.
//
//##################################################################################################
#include "cafPdmFieldScriptability.h"
#include "cafPdmAbstractFieldScriptingCapability.h"
#include "cafPdmFieldHandle.h"
#include "cafPdmPythonGenerator.h"
@@ -43,7 +43,9 @@ using namespace caf;
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
PdmFieldScriptability::PdmFieldScriptability( caf::PdmFieldHandle* owner, const QString& scriptFieldName, bool giveOwnership )
PdmAbstractFieldScriptingCapability::PdmAbstractFieldScriptingCapability( caf::PdmFieldHandle* owner,
const QString& scriptFieldName,
bool giveOwnership )
{
m_IOWriteable = true;
m_owner = owner;
@@ -54,14 +56,14 @@ PdmFieldScriptability::PdmFieldScriptability( caf::PdmFieldHandle* owner, const
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
PdmFieldScriptability::~PdmFieldScriptability()
PdmAbstractFieldScriptingCapability::~PdmAbstractFieldScriptingCapability()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const QString PdmFieldScriptability::scriptFieldName() const
const QString PdmAbstractFieldScriptingCapability::scriptFieldName() const
{
return m_scriptFieldName;
}
@@ -69,7 +71,7 @@ const QString PdmFieldScriptability::scriptFieldName() const
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool PdmFieldScriptability::isIOWriteable() const
bool PdmAbstractFieldScriptingCapability::isIOWriteable() const
{
return m_IOWriteable;
}
@@ -77,46 +79,15 @@ bool PdmFieldScriptability::isIOWriteable() const
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmFieldScriptability::setIOWriteable( bool writeable )
void PdmAbstractFieldScriptingCapability::setIOWriteable( bool writeable )
{
m_IOWriteable = writeable;
}
//--------------------------------------------------------------------------------------------------
/// Empty default implementation that doesn't offer any script IO for the field
//--------------------------------------------------------------------------------------------------
void PdmFieldScriptability::readFromField( QTextStream& outputStream,
bool quoteStrings /*= true*/,
bool quoteNonBuiltins /*= false*/ ) const
{
}
//--------------------------------------------------------------------------------------------------
/// Empty default implementation that doesn't offer any script IO for the field
//--------------------------------------------------------------------------------------------------
void PdmFieldScriptability::writeToField( QTextStream& inputStream,
caf::PdmObjectFactory* objectFactory,
caf::PdmScriptIOMessages* errorMessageContainer,
bool stringsAreQuoted /*= true*/,
caf::PdmObjectHandle* existingObjectsRoot /*= nullptr*/ )
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmFieldScriptability::addToField( caf::PdmFieldHandle* field, const QString& fieldName )
{
if ( field->template capability<PdmFieldScriptability>() == nullptr )
{
new PdmFieldScriptability( field, fieldName, true );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString PdmFieldScriptability::helpString( const QString& existingTooltip, const QString& keyword )
QString PdmAbstractFieldScriptingCapability::helpString( const QString& existingTooltip, const QString& keyword )
{
QString snake_case = caf::PdmPythonGenerator::camelToSnakeCase( keyword );
@@ -0,0 +1,77 @@
//##################################################################################################
//
// Custom Visualization Core library
// Copyright (C) Ceetron Solutions AS
//
// This library may be used under the terms of either the GNU General Public License or
// the GNU Lesser General Public License as follows:
//
// GNU General Public License Usage
// This library is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <<http://www.gnu.org/licenses/gpl.html>>
// for more details.
//
// GNU Lesser General Public License Usage
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation; either version 2.1 of the License, or
// (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU Lesser General Public License at <<http://www.gnu.org/licenses/lgpl-2.1.html>>
// for more details.
//
//##################################################################################################
#pragma once
#include "cafPdmFieldCapability.h"
#include <QString>
class QTextStream;
namespace caf
{
class PdmFieldHandle;
class PdmObjectFactory;
class PdmObjectHandle;
class PdmScriptIOMessages;
class PdmAbstractFieldScriptingCapability : public PdmFieldCapability
{
public:
PdmAbstractFieldScriptingCapability( caf::PdmFieldHandle* owner, const QString& scriptFieldName, bool giveOwnership );
virtual ~PdmAbstractFieldScriptingCapability();
const QString scriptFieldName() const;
bool isIOWriteable() const;
void setIOWriteable( bool writeable );
virtual void
readFromField( QTextStream& outputStream, bool quoteStrings = true, bool quoteNonBuiltins = false ) const = 0;
virtual void writeToField( QTextStream& inputStream,
caf::PdmObjectFactory* objectFactory,
caf::PdmScriptIOMessages* errorMessageContainer,
bool stringsAreQuoted = true,
caf::PdmObjectHandle* existingObjectsRoot = nullptr ) = 0;
static QString helpString( const QString& existingTooltip, const QString& keyword );
protected:
PdmFieldHandle* m_owner;
QString m_scriptFieldName;
bool m_IOWriteable;
};
} // namespace caf
@@ -1,115 +0,0 @@
//##################################################################################################
//
// Custom Visualization Core library
// Copyright (C) Ceetron Solutions AS
//
// This library may be used under the terms of either the GNU General Public License or
// the GNU Lesser General Public License as follows:
//
// GNU General Public License Usage
// This library is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <<http://www.gnu.org/licenses/gpl.html>>
// for more details.
//
// GNU Lesser General Public License Usage
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation; either version 2.1 of the License, or
// (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU Lesser General Public License at <<http://www.gnu.org/licenses/lgpl-2.1.html>>
// for more details.
//
//##################################################################################################
#pragma once
#include "cafPdmFieldCapability.h"
#include <QString>
class QTextStream;
namespace caf
{
class PdmFieldHandle;
class PdmObjectFactory;
class PdmObjectHandle;
class PdmScriptIOMessages;
#define CAF_PDM_InitScriptableField( field, keyword, default, uiName, iconResourceName, toolTip, whatsThis ) \
CAF_PDM_InitField( field, \
keyword, \
default, \
uiName, \
iconResourceName, \
caf::PdmFieldScriptability::helpString( toolTip, keyword ), \
whatsThis ); \
caf::PdmFieldScriptability::addToField( field, keyword )
#define CAF_PDM_InitScriptableFieldNoDefault( field, keyword, uiName, iconResourceName, toolTip, whatsThis ) \
CAF_PDM_InitFieldNoDefault( field, \
keyword, \
uiName, \
iconResourceName, \
caf::PdmFieldScriptability::helpString( toolTip, keyword ), \
whatsThis ); \
caf::PdmFieldScriptability::addToField( field, keyword )
#define CAF_PDM_InitScriptableFieldWithKeyword( field, keyword, scriptKeyword, default, uiName, iconResourceName, toolTip, whatsThis ) \
CAF_PDM_InitField( field, \
keyword, \
default, \
uiName, \
iconResourceName, \
caf::PdmFieldScriptability::helpString( toolTip, scriptKeyword ), \
whatsThis ); \
caf::PdmFieldScriptability::addToField( field, scriptKeyword )
#define CAF_PDM_InitScriptableFieldWithKeywordNoDefault( field, keyword, scriptKeyword, uiName, iconResourceName, toolTip, whatsThis ) \
CAF_PDM_InitFieldNoDefault( field, \
keyword, \
uiName, \
iconResourceName, \
caf::PdmFieldScriptability::helpString( toolTip, scriptKeyword ), \
whatsThis ); \
caf::PdmFieldScriptability::addToField( field, scriptKeyword )
class PdmFieldScriptability : public PdmFieldCapability
{
public:
PdmFieldScriptability( caf::PdmFieldHandle* owner, const QString& scriptFieldName, bool giveOwnership );
virtual ~PdmFieldScriptability();
const QString scriptFieldName() const;
bool isIOWriteable() const;
void setIOWriteable( bool writeable );
virtual void readFromField( QTextStream& outputStream, bool quoteStrings = true, bool quoteNonBuiltins = false ) const;
virtual void writeToField( QTextStream& inputStream,
caf::PdmObjectFactory* objectFactory,
caf::PdmScriptIOMessages* errorMessageContainer,
bool stringsAreQuoted = true,
caf::PdmObjectHandle* existingObjectsRoot = nullptr );
static void addToField( caf::PdmFieldHandle* field, const QString& fieldName );
static QString helpString( const QString& existingTooltip, const QString& keyword );
protected:
PdmFieldHandle* m_owner;
QString m_scriptFieldName;
bool m_IOWriteable;
};
} // namespace caf
@@ -33,17 +33,17 @@
// for more details.
//
//##################################################################################################
#include "cafPdmFieldIOScriptability.h"
#include "cafPdmFieldScriptingCapability.h"
using namespace caf;
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmFieldScriptabilityIOHandler<QString>::writeToField( QString& fieldValue,
QTextStream& inputStream,
caf::PdmScriptIOMessages* errorMessageContainer,
bool stringsAreQuoted )
void PdmFieldScriptingCapabilityIOHandler<QString>::writeToField( QString& fieldValue,
QTextStream& inputStream,
caf::PdmScriptIOMessages* errorMessageContainer,
bool stringsAreQuoted )
{
fieldValue = "";
@@ -116,10 +116,10 @@ void PdmFieldScriptabilityIOHandler<QString>::writeToField( QString&
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmFieldScriptabilityIOHandler<QString>::readFromField( const QString& fieldValue,
QTextStream& outputStream,
bool quoteStrings,
bool quoteNonBuiltin )
void PdmFieldScriptingCapabilityIOHandler<QString>::readFromField( const QString& fieldValue,
QTextStream& outputStream,
bool quoteStrings,
bool quoteNonBuiltin )
{
outputStream << "\"";
for ( int i = 0; i < fieldValue.size(); ++i )
@@ -136,10 +136,10 @@ void PdmFieldScriptabilityIOHandler<QString>::readFromField( const QString& fiel
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmFieldScriptabilityIOHandler<bool>::writeToField( bool& fieldValue,
QTextStream& inputStream,
caf::PdmScriptIOMessages* errorMessageContainer,
bool stringsAreQuoted )
void PdmFieldScriptingCapabilityIOHandler<bool>::writeToField( bool& fieldValue,
QTextStream& inputStream,
caf::PdmScriptIOMessages* errorMessageContainer,
bool stringsAreQuoted )
{
errorMessageContainer->skipWhiteSpaceWithLineNumberCount( inputStream );
QString accumulatedFieldValue;
@@ -175,10 +175,10 @@ void PdmFieldScriptabilityIOHandler<bool>::writeToField( bool&
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmFieldScriptabilityIOHandler<bool>::readFromField( const bool& fieldValue,
QTextStream& outputStream,
bool quoteStrings,
bool quoteNonBuiltin )
void PdmFieldScriptingCapabilityIOHandler<bool>::readFromField( const bool& fieldValue,
QTextStream& outputStream,
bool quoteStrings,
bool quoteNonBuiltin )
{
// Lower-case true/false is used in the documentation.
outputStream << ( fieldValue ? "true" : "false" );
@@ -36,7 +36,9 @@
#pragma once
#include "cafAppEnum.h"
#include "cafPdmFieldScriptability.h"
#include "cafPdmAbstractFieldScriptingCapability.h"
#include "cafPdmChildArrayField.h"
#include "cafPdmChildField.h"
#include "cafPdmPtrArrayField.h"
#include "cafPdmPtrField.h"
#include "cafPdmScriptIOMessages.h"
@@ -45,61 +47,61 @@
#include <QStringList>
#include <QTextStream>
#define CAF_PDM_InitScriptableFieldWithIO( field, keyword, default, uiName, iconResourceName, toolTip, whatsThis ) \
CAF_PDM_InitField( field, \
keyword, \
default, \
uiName, \
iconResourceName, \
caf::PdmFieldScriptability::helpString( toolTip, keyword ), \
whatsThis ); \
caf::AddFieldIOScriptabilityToField( field, keyword )
#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_InitScriptableFieldWithIONoDefault( field, keyword, uiName, iconResourceName, toolTip, whatsThis ) \
CAF_PDM_InitFieldNoDefault( field, \
keyword, \
uiName, \
iconResourceName, \
caf::PdmFieldScriptability::helpString( toolTip, keyword ), \
whatsThis ); \
caf::AddFieldIOScriptabilityToField( 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_InitScriptableFieldWithIOAndScriptName( field, \
keyword, \
scriptKeyword, \
default, \
uiName, \
iconResourceName, \
toolTip, \
whatsThis ) \
CAF_PDM_InitField( field, \
keyword, \
default, \
uiName, \
iconResourceName, \
caf::PdmFieldScriptability::helpString( toolTip, scriptKeyword ), \
whatsThis ); \
caf::AddFieldIOScriptabilityToField( field, scriptKeyword )
#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_InitScriptableFieldWithIOAndScriptNameNoDefault( field, \
keyword, \
scriptKeyword, \
uiName, \
iconResourceName, \
toolTip, \
whatsThis ) \
CAF_PDM_InitFieldNoDefault( field, \
keyword, \
uiName, \
iconResourceName, \
caf::PdmFieldScriptability::helpString( toolTip, scriptKeyword ), \
whatsThis ); \
caf::AddFieldIOScriptabilityToField( 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 )
namespace caf
{
template <typename DataType>
struct PdmFieldScriptabilityIOHandler
struct PdmFieldScriptingCapabilityIOHandler
{
static void writeToField( DataType& fieldValue,
QTextStream& inputStream,
@@ -127,7 +129,7 @@ struct PdmFieldScriptabilityIOHandler
};
template <>
struct PdmFieldScriptabilityIOHandler<QString>
struct PdmFieldScriptingCapabilityIOHandler<QString>
{
static void writeToField( QString& fieldValue,
QTextStream& inputStream,
@@ -140,7 +142,7 @@ struct PdmFieldScriptabilityIOHandler<QString>
};
template <>
struct PdmFieldScriptabilityIOHandler<bool>
struct PdmFieldScriptingCapabilityIOHandler<bool>
{
static void writeToField( bool& fieldValue,
QTextStream& inputStream,
@@ -153,7 +155,7 @@ struct PdmFieldScriptabilityIOHandler<bool>
};
template <typename T>
struct PdmFieldScriptabilityIOHandler<AppEnum<T>>
struct PdmFieldScriptingCapabilityIOHandler<AppEnum<T>>
{
static void writeToField( AppEnum<T>& fieldValue,
QTextStream& inputStream,
@@ -204,7 +206,7 @@ struct PdmFieldScriptabilityIOHandler<AppEnum<T>>
};
template <typename T>
struct PdmFieldScriptabilityIOHandler<std::vector<T>>
struct PdmFieldScriptingCapabilityIOHandler<std::vector<T>>
{
static void writeToField( std::vector<T>& fieldValue,
QTextStream& inputStream,
@@ -231,7 +233,7 @@ struct PdmFieldScriptabilityIOHandler<std::vector<T>>
}
T value;
PdmFieldScriptabilityIOHandler<T>::writeToField( value, inputStream, errorMessageContainer, true );
PdmFieldScriptingCapabilityIOHandler<T>::writeToField( value, inputStream, errorMessageContainer, true );
fieldValue.push_back( value );
}
}
@@ -251,7 +253,7 @@ struct PdmFieldScriptabilityIOHandler<std::vector<T>>
outputStream << "[";
for ( size_t i = 0; i < fieldValue.size(); ++i )
{
PdmFieldScriptabilityIOHandler<T>::readFromField( fieldValue[i], outputStream, quoteNonBuiltins );
PdmFieldScriptingCapabilityIOHandler<T>::readFromField( fieldValue[i], outputStream, quoteNonBuiltins );
if ( i < fieldValue.size() - 1 )
{
outputStream << ", ";
@@ -262,7 +264,7 @@ struct PdmFieldScriptabilityIOHandler<std::vector<T>>
};
template <typename T>
struct PdmFieldScriptabilityIOHandler<std::vector<T*>>
struct PdmFieldScriptingCapabilityIOHandler<std::vector<T*>>
{
static void writeToField( std::vector<T*>& fieldValue,
const std::vector<T*>& allObjectsOfType,
@@ -289,7 +291,10 @@ struct PdmFieldScriptabilityIOHandler<std::vector<T*>>
}
T* value;
PdmFieldScriptabilityIOHandler<T*>::writeToField( value, allObjectsOfType, inputStream, errorMessageContainer );
PdmFieldScriptingCapabilityIOHandler<T*>::writeToField( value,
allObjectsOfType,
inputStream,
errorMessageContainer );
fieldValue.push_back( value );
}
}
@@ -309,7 +314,7 @@ struct PdmFieldScriptabilityIOHandler<std::vector<T*>>
outputStream << "[";
for ( size_t i = 0; i < fieldValue.size(); ++i )
{
PdmFieldScriptabilityIOHandler<T*>::readFromField( fieldValue[i], outputStream, quoteNonBuiltins );
PdmFieldScriptingCapabilityIOHandler<T*>::readFromField( fieldValue[i], outputStream, quoteNonBuiltins );
if ( i < fieldValue.size() - 1 )
{
outputStream << ", ";
@@ -320,7 +325,7 @@ struct PdmFieldScriptabilityIOHandler<std::vector<T*>>
};
template <typename DataType>
struct PdmFieldScriptabilityIOHandler<DataType*>
struct PdmFieldScriptingCapabilityIOHandler<DataType*>
{
static void writeToField( DataType*& fieldValue,
const std::vector<DataType*>& allObjectsOfType,
@@ -331,10 +336,10 @@ struct PdmFieldScriptabilityIOHandler<DataType*>
QString fieldString;
bool stringsAreQuoted = false;
PdmFieldScriptabilityIOHandler<QString>::writeToField( fieldString,
inputStream,
errorMessageContainer,
stringsAreQuoted );
PdmFieldScriptingCapabilityIOHandler<QString>::writeToField( fieldString,
inputStream,
errorMessageContainer,
stringsAreQuoted );
if ( inputStream.status() == QTextStream::ReadCorruptData )
{
@@ -367,8 +372,19 @@ struct PdmFieldScriptabilityIOHandler<DataType*>
bool quoteStrings = true,
bool quoteNonBuiltins = false )
{
outputStream
<< QString( "%1:%2" ).arg( DataType::classKeywordStatic() ).arg( reinterpret_cast<uint64_t>( fieldValue ) );
if ( fieldValue )
{
QString textOutput =
QString( "%1:%2" ).arg( DataType::classKeywordStatic() ).arg( reinterpret_cast<uint64_t>( fieldValue ) );
if ( quoteNonBuiltins )
{
outputStream << QString( "\"%1\"" ).arg( textOutput );
}
else
{
outputStream << textOutput;
}
}
}
};
@@ -378,11 +394,11 @@ struct PdmFieldScriptabilityIOHandler<DataType*>
//
//==================================================================================================
template <typename FieldType>
class PdmFieldIOScriptability : public PdmFieldScriptability
class PdmFieldScriptingCapability : public PdmAbstractFieldScriptingCapability
{
public:
PdmFieldIOScriptability( FieldType* field, const QString& fieldName, bool giveOwnership )
: PdmFieldScriptability( field, fieldName, giveOwnership )
PdmFieldScriptingCapability( FieldType* field, const QString& fieldName, bool giveOwnership )
: PdmAbstractFieldScriptingCapability( field, fieldName, giveOwnership )
{
m_field = field;
}
@@ -396,10 +412,10 @@ public:
caf::PdmObjectHandle* existingObjectsRoot = nullptr ) override
{
typename FieldType::FieldDataType value;
PdmFieldScriptabilityIOHandler<typename FieldType::FieldDataType>::writeToField( value,
inputStream,
errorMessageContainer,
stringsAreQuoted );
PdmFieldScriptingCapabilityIOHandler<typename FieldType::FieldDataType>::writeToField( value,
inputStream,
errorMessageContainer,
stringsAreQuoted );
if ( this->isIOWriteable() )
{
@@ -409,10 +425,10 @@ public:
void readFromField( QTextStream& outputStream, bool quoteStrings = true, bool quoteNonBuiltins = false ) const override
{
PdmFieldScriptabilityIOHandler<typename FieldType::FieldDataType>::readFromField( m_field->value(),
outputStream,
quoteStrings,
quoteNonBuiltins );
PdmFieldScriptingCapabilityIOHandler<typename FieldType::FieldDataType>::readFromField( m_field->value(),
outputStream,
quoteStrings,
quoteNonBuiltins );
}
private:
@@ -420,11 +436,11 @@ private:
};
template <typename DataType>
class PdmFieldIOScriptability<PdmPtrField<DataType*>> : public PdmFieldScriptability
class PdmFieldScriptingCapability<PdmPtrField<DataType*>> : public PdmAbstractFieldScriptingCapability
{
public:
PdmFieldIOScriptability( PdmPtrField<DataType*>* field, const QString& fieldName, bool giveOwnership )
: PdmFieldScriptability( field, fieldName, giveOwnership )
PdmFieldScriptingCapability( PdmPtrField<DataType*>* field, const QString& fieldName, bool giveOwnership )
: PdmAbstractFieldScriptingCapability( field, fieldName, giveOwnership )
{
m_field = field;
}
@@ -441,7 +457,10 @@ public:
existingObjectsRoot->descendantsIncludingThisOfType( allObjectsOfType );
DataType* object = nullptr;
PdmFieldScriptabilityIOHandler<DataType*>::writeToField( object, allObjectsOfType, inputStream, errorMessageContainer );
PdmFieldScriptingCapabilityIOHandler<DataType*>::writeToField( object,
allObjectsOfType,
inputStream,
errorMessageContainer );
if ( object && this->isIOWriteable() )
{
@@ -451,10 +470,10 @@ public:
void readFromField( QTextStream& outputStream, bool quoteStrings = true, bool quoteNonBuiltins = false ) const override
{
PdmFieldScriptabilityIOHandler<DataType*>::readFromField( m_field->value(),
outputStream,
quoteStrings,
quoteNonBuiltins );
PdmFieldScriptingCapabilityIOHandler<DataType*>::readFromField( m_field->value(),
outputStream,
quoteStrings,
quoteNonBuiltins );
}
private:
@@ -462,11 +481,56 @@ private:
};
template <typename DataType>
class PdmFieldIOScriptability<PdmPtrArrayField<DataType*>> : public PdmFieldScriptability
class PdmFieldScriptingCapability<PdmChildField<DataType*>> : public PdmAbstractFieldScriptingCapability
{
public:
PdmFieldIOScriptability( PdmPtrArrayField<DataType*>* field, const QString& fieldName, bool giveOwnership )
: PdmFieldScriptability( field, fieldName, giveOwnership )
PdmFieldScriptingCapability( PdmChildField<DataType*>* field, const QString& fieldName, bool giveOwnership )
: PdmAbstractFieldScriptingCapability( field, fieldName, giveOwnership )
{
m_field = field;
}
// Xml Serializing
public:
void writeToField( QTextStream& inputStream,
PdmObjectFactory* objectFactory,
PdmScriptIOMessages* errorMessageContainer,
bool stringsAreQuoted = true,
caf::PdmObjectHandle* existingObjectsRoot = nullptr ) override
{
std::vector<DataType*> allObjectsOfType;
existingObjectsRoot->descendantsIncludingThisOfType( allObjectsOfType );
DataType* object = nullptr;
PdmFieldScriptingCapabilityIOHandler<DataType*>::writeToField( object,
allObjectsOfType,
inputStream,
errorMessageContainer );
if ( object && this->isIOWriteable() )
{
m_field->setValue( object );
}
}
void readFromField( QTextStream& outputStream, bool quoteStrings = true, bool quoteNonBuiltins = false ) const override
{
PdmFieldScriptingCapabilityIOHandler<DataType*>::readFromField( m_field->value(),
outputStream,
quoteStrings,
quoteNonBuiltins );
}
private:
PdmChildField<DataType*>* m_field;
};
template <typename DataType>
class PdmFieldScriptingCapability<PdmPtrArrayField<DataType*>> : public PdmAbstractFieldScriptingCapability
{
public:
PdmFieldScriptingCapability( PdmPtrArrayField<DataType*>* field, const QString& fieldName, bool giveOwnership )
: PdmAbstractFieldScriptingCapability( field, fieldName, giveOwnership )
{
m_field = field;
}
@@ -483,10 +547,10 @@ public:
existingObjectsRoot->descendantsIncludingThisOfType( allObjectsOfType );
std::vector<DataType*> objects;
PdmFieldScriptabilityIOHandler<std::vector<DataType*>>::writeToField( objects,
allObjectsOfType,
inputStream,
errorMessageContainer );
PdmFieldScriptingCapabilityIOHandler<std::vector<DataType*>>::writeToField( objects,
allObjectsOfType,
inputStream,
errorMessageContainer );
if ( this->isIOWriteable() )
{
@@ -496,22 +560,67 @@ public:
void readFromField( QTextStream& outputStream, bool quoteStrings = true, bool quoteNonBuiltins = false ) const override
{
PdmFieldScriptabilityIOHandler<std::vector<DataType*>>::readFromField( m_field->ptrReferencedObjects(),
outputStream,
quoteStrings,
quoteNonBuiltins );
PdmFieldScriptingCapabilityIOHandler<std::vector<DataType*>>::readFromField( m_field->ptrReferencedObjects(),
outputStream,
quoteStrings,
quoteNonBuiltins );
}
private:
PdmPtrArrayField<DataType*>* m_field;
};
template <typename FieldType>
void AddFieldIOScriptabilityToField( FieldType* field, const QString& fieldName )
template <typename DataType>
class PdmFieldScriptingCapability<PdmChildArrayField<DataType*>> : public PdmAbstractFieldScriptingCapability
{
if ( field->template capability<PdmFieldIOScriptability<FieldType>>() == nullptr )
public:
PdmFieldScriptingCapability( PdmChildArrayField<DataType*>* field, const QString& fieldName, bool giveOwnership )
: PdmAbstractFieldScriptingCapability( field, fieldName, giveOwnership )
{
new PdmFieldIOScriptability<FieldType>( field, fieldName, true );
m_field = field;
}
// Xml Serializing
public:
void writeToField( QTextStream& inputStream,
PdmObjectFactory* objectFactory,
PdmScriptIOMessages* errorMessageContainer,
bool stringsAreQuoted = true,
caf::PdmObjectHandle* existingObjectsRoot = nullptr ) override
{
std::vector<DataType*> allObjectsOfType;
existingObjectsRoot->descendantsIncludingThisOfType( allObjectsOfType );
std::vector<DataType*> objects;
PdmFieldScriptingCapabilityIOHandler<std::vector<DataType*>>::writeToField( objects,
allObjectsOfType,
inputStream,
errorMessageContainer );
if ( this->isIOWriteable() )
{
m_field->setValue( objects );
}
}
void readFromField( QTextStream& outputStream, bool quoteStrings = true, bool quoteNonBuiltins = false ) const override
{
PdmFieldScriptingCapabilityIOHandler<std::vector<DataType*>>::readFromField( m_field->childObjects(),
outputStream,
quoteStrings,
quoteNonBuiltins );
}
private:
PdmChildArrayField<DataType*>* m_field;
};
template <typename FieldType>
void AddScriptingCapabilityToField( FieldType* field, const QString& fieldName )
{
if ( field->template capability<PdmFieldScriptingCapability<FieldType>>() == nullptr )
{
new PdmFieldScriptingCapability<FieldType>( field, fieldName, true );
}
}
@@ -36,16 +36,17 @@
#include "cafPdmMarkdownBuilder.h"
#include "cafPdmAbstractFieldScriptingCapability.h"
#include "cafPdmChildArrayField.h"
#include "cafPdmChildField.h"
#include "cafPdmFieldScriptability.h"
#include "cafPdmObject.h"
#include "cafPdmObjectFactory.h"
#include "cafPdmObjectScriptabilityRegister.h"
#include "cafPdmObjectScriptingCapabilityRegister.h"
#include "cafPdmProxyValueField.h"
#include "cafPdmPythonGenerator.h"
#include "cafPdmXmlFieldHandle.h"
#include <QRegularExpression>
#include <QTextStream>
@@ -99,8 +100,8 @@ QString caf::PdmMarkdownBuilder::generateDocDataModelObjects( std::vector<std::s
for ( auto it = classInheritanceStack.begin(); it != classInheritanceStack.end(); ++it )
{
const QString& classKeyword = *it;
QString scriptClassComment = PdmObjectScriptabilityRegister::scriptClassComment( classKeyword );
const QString& classKeyword = *it;
QString scriptClassComment = PdmObjectScriptingCapabilityRegister::scriptClassComment( classKeyword );
std::map<QString, QString> attributesGenerated;
@@ -112,7 +113,7 @@ QString caf::PdmMarkdownBuilder::generateDocDataModelObjects( std::vector<std::s
object->fields( fields );
for ( auto field : fields )
{
auto scriptability = field->template capability<PdmFieldScriptability>();
auto scriptability = field->template capability<PdmAbstractFieldScriptingCapability>();
if ( scriptability != nullptr )
{
QString snake_field_name = PdmPythonGenerator::camelToSnakeCase( scriptability->scriptFieldName() );
@@ -200,7 +201,7 @@ QString caf::PdmMarkdownBuilder::generateDocDataModelObjects( std::vector<std::s
{
QString dataType = PdmPythonGenerator::dataTypeString( field, false );
QString scriptDataType =
PdmObjectScriptabilityRegister::scriptClassNameFromClassKeyword( dataType );
PdmObjectScriptingCapabilityRegister::scriptClassNameFromClassKeyword( dataType );
QString commentDataType = field->xmlCapability()->isVectorField()
? QString( "List of %1" ).arg( scriptDataType )
@@ -250,7 +251,7 @@ QString caf::PdmMarkdownBuilder::generateDocDataModelObjects( std::vector<std::s
for ( auto it = classInheritanceStack.begin(); it != classInheritanceStack.end(); ++it )
{
const QString& classKeyword = *it;
QString scriptClassName = PdmObjectScriptabilityRegister::scriptClassNameFromClassKeyword( classKeyword );
QString scriptClassName = PdmObjectScriptingCapabilityRegister::scriptClassNameFromClassKeyword( classKeyword );
if ( scriptClassName.isEmpty() ) scriptClassName = classKeyword;
if ( !classesWritten.count( scriptClassName ) )
@@ -386,7 +387,7 @@ QString caf::PdmMarkdownBuilder::generateDocCommandObjects( std::vector<std::sha
attributes.push_back( {snake_field_name, comment, pythonDataType} );
}
QString comment = caf::PdmObjectScriptabilityRegister::scriptClassComment( object->classKeyword() );
QString comment = caf::PdmObjectScriptingCapabilityRegister::scriptClassComment( object->classKeyword() );
objs.push_back( {snakeCommandName, comment, attributes} );
// objectsAndAttributes[snakeCommandName] = attributes;
}
@@ -37,7 +37,7 @@
#include "cafPdmMarkdownGenerator.h"
#include "cafPdmMarkdownBuilder.h"
#include "cafPdmObjectScriptabilityRegister.h"
#include "cafPdmObjectScriptingCapabilityRegister.h"
using namespace caf;
@@ -59,7 +59,7 @@ QString caf::PdmMarkdownGenerator::generate( PdmObjectFactory* factory ) const
std::vector<std::shared_ptr<const PdmObject>> allObjects = caf::PdmMarkdownBuilder::createAllObjects( factory );
for ( auto obj : allObjects )
{
if ( PdmObjectScriptabilityRegister::isScriptable( obj.get() ) )
if ( PdmObjectScriptingCapabilityRegister::isScriptable( obj.get() ) )
{
scriptableObjects.push_back( obj );
}
@@ -93,7 +93,7 @@ protected:
}
private:
friend class PdmObjectScriptability;
friend class PdmObjectScriptingCapability;
PdmPointer<PdmObjectHandle> m_self;
};
@@ -33,9 +33,9 @@
// for more details.
//
//##################################################################################################
#include "cafPdmObjectScriptability.h"
#include "cafPdmObjectScriptingCapability.h"
#include "cafPdmFieldScriptability.h"
#include "cafPdmAbstractFieldScriptingCapability.h"
#include "cafPdmObject.h"
#include "cafPdmObjectHandle.h"
#include "cafPdmScriptIOMessages.h"
@@ -48,7 +48,7 @@ using namespace caf;
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
PdmObjectScriptability::PdmObjectScriptability( PdmObjectHandle* owner, bool giveOwnership )
PdmObjectScriptingCapability::PdmObjectScriptingCapability( PdmObjectHandle* owner, bool giveOwnership )
: m_owner( owner )
{
m_owner->addCapability( this, giveOwnership );
@@ -57,16 +57,16 @@ PdmObjectScriptability::PdmObjectScriptability( PdmObjectHandle* owner, bool giv
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
PdmObjectScriptability::~PdmObjectScriptability()
PdmObjectScriptingCapability::~PdmObjectScriptingCapability()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmObjectScriptability::readFields( QTextStream& inputStream,
PdmObjectFactory* objectFactory,
PdmScriptIOMessages* errorMessageContainer )
void PdmObjectScriptingCapability::readFields( QTextStream& inputStream,
PdmObjectFactory* objectFactory,
PdmScriptIOMessages* errorMessageContainer )
{
std::set<QString> readFields;
bool isLastArgumentRead = false;
@@ -147,10 +147,12 @@ void PdmObjectScriptability::readFields( QTextStream& inputStream,
// Make field read its data
PdmFieldHandle* fieldHandle = m_owner->findField( keyword );
if ( fieldHandle && fieldHandle->xmlCapability() && fieldHandle->capability<PdmFieldScriptability>() )
if ( fieldHandle && fieldHandle->xmlCapability() &&
fieldHandle->capability<PdmAbstractFieldScriptingCapability>() )
{
PdmXmlFieldHandle* xmlFieldHandle = fieldHandle->xmlCapability();
PdmFieldScriptability* scriptability = fieldHandle->capability<PdmFieldScriptability>();
PdmXmlFieldHandle* xmlFieldHandle = fieldHandle->xmlCapability();
PdmAbstractFieldScriptingCapability* scriptability =
fieldHandle->capability<PdmAbstractFieldScriptingCapability>();
if ( xmlFieldHandle->isIOReadable() )
{
@@ -212,15 +214,16 @@ void PdmObjectScriptability::readFields( QTextStream& inputStream,
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmObjectScriptability::writeFields( QTextStream& outputStream ) const
void PdmObjectScriptingCapability::writeFields( QTextStream& outputStream ) const
{
std::vector<PdmFieldHandle*> fields;
m_owner->fields( fields );
int writtenFieldCount = 0;
for ( size_t it = 0; it < fields.size(); ++it )
{
const PdmXmlFieldHandle* xmlField = fields[it]->xmlCapability();
const PdmFieldScriptability* scriptability = fields[it]->capability<PdmFieldScriptability>();
const PdmXmlFieldHandle* xmlField = fields[it]->xmlCapability();
const PdmAbstractFieldScriptingCapability* scriptability =
fields[it]->capability<PdmAbstractFieldScriptingCapability>();
if ( scriptability && xmlField && xmlField->isIOWritable() )
{
QString keyword = xmlField->fieldHandle()->keyword();
@@ -0,0 +1,243 @@
//##################################################################################################
//
// Custom Visualization Core library
// Copyright (C) Ceetron Solutions AS
//
// This library may be used under the terms of either the GNU General Public License or
// the GNU Lesser General Public License as follows:
//
// GNU General Public License Usage
// This library is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <<http://www.gnu.org/licenses/gpl.html>>
// for more details.
//
// GNU Lesser General Public License Usage
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation; either version 2.1 of the License, or
// (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU Lesser General Public License at <<http://www.gnu.org/licenses/lgpl-2.1.html>>
// for more details.
//
//##################################################################################################
#include "cafPdmObjectScriptingCapability.h"
#include "cafPdmAbstractFieldScriptingCapability.h"
#include "cafPdmObject.h"
#include "cafPdmObjectHandle.h"
#include "cafPdmScriptIOMessages.h"
#include "cafPdmXmlFieldHandle.h"
#include <QTextStream>
using namespace caf;
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
PdmObjectScriptingCapability::PdmObjectScriptingCapability( PdmObjectHandle* owner, bool giveOwnership )
: m_owner( owner )
{
m_owner->addCapability( this, giveOwnership );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
PdmObjectScriptingCapability::~PdmObjectScriptingCapability()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmObjectScriptingCapability::readFields( QTextStream& inputStream,
PdmObjectFactory* objectFactory,
PdmScriptIOMessages* errorMessageContainer )
{
std::set<QString> readFields;
bool isLastArgumentRead = false;
while ( !inputStream.atEnd() && !isLastArgumentRead )
{
// Read field keyword
bool fieldDataFound = false;
bool isEndOfArgumentFound = false;
QString keyword;
{
errorMessageContainer->skipWhiteSpaceWithLineNumberCount( inputStream );
{
QChar currentChar;
while ( !inputStream.atEnd() )
{
currentChar = errorMessageContainer->readCharWithLineNumberCount( inputStream );
if ( currentChar == QChar( '=' ) || currentChar == QChar( ')' ) || currentChar == QChar( ',' ) ||
currentChar.isSpace() )
{
break;
}
else
{
keyword += currentChar;
}
}
if ( currentChar.isSpace() )
{
errorMessageContainer->skipWhiteSpaceWithLineNumberCount( inputStream );
currentChar = errorMessageContainer->readCharWithLineNumberCount( inputStream );
}
if ( currentChar == QChar( '=' ) )
{
fieldDataFound = true;
}
else if ( currentChar == QChar( ')' ) )
{
if ( !keyword.isNull() )
{
errorMessageContainer->addError(
QString( "Can't find the '=' after the argument named '%1' in the command '%2'" )
.arg( keyword )
.arg( errorMessageContainer->currentCommand ) );
}
isLastArgumentRead = true;
}
else if ( currentChar == QChar( ',' ) )
{
errorMessageContainer->addError(
QString( "Can't find the '=' after the argument named '%1' in the command '%2'" )
.arg( keyword )
.arg( errorMessageContainer->currentCommand ) );
isEndOfArgumentFound = true;
}
else
{
errorMessageContainer->addError(
QString( "Can't find the '=' after the argument named '%1' in the command '%2'" )
.arg( keyword )
.arg( errorMessageContainer->currentCommand ) );
}
}
if ( readFields.count( keyword ) )
{
// Warning message: Referenced the same argument several times
errorMessageContainer->addWarning( "The argument: \"" + keyword +
"\" is referenced several times in the command: \"" +
errorMessageContainer->currentCommand + "\"" );
}
}
if ( fieldDataFound )
{
// Make field read its data
PdmFieldHandle* fieldHandle = m_owner->findField( keyword );
if ( fieldHandle && fieldHandle->xmlCapability() &&
fieldHandle->capability<PdmAbstractFieldScriptingCapability>() )
{
PdmXmlFieldHandle* xmlFieldHandle = fieldHandle->xmlCapability();
PdmAbstractFieldScriptingCapability* scriptability =
fieldHandle->capability<PdmAbstractFieldScriptingCapability>();
if ( xmlFieldHandle->isIOReadable() )
{
errorMessageContainer->currentArgument = keyword;
scriptability->writeToField( inputStream, objectFactory, errorMessageContainer );
errorMessageContainer->currentArgument = keyword;
}
}
else
{
// Error message: Unknown argument name
errorMessageContainer->addWarning( "The argument: \"" + keyword + "\" does not exist in the command: \"" +
errorMessageContainer->currentCommand + "\"" );
}
}
// Skip to end of argument ',' or end of call ')'
if ( !( isLastArgumentRead || isEndOfArgumentFound ) )
{
QChar currentChar;
bool isOutsideQuotes = true;
while ( !inputStream.atEnd() )
{
currentChar = errorMessageContainer->readCharWithLineNumberCount( inputStream );
if ( isOutsideQuotes )
{
if ( currentChar == QChar( ',' ) )
{
break;
}
if ( currentChar == QChar( ')' ) )
{
isLastArgumentRead = true;
break;
}
if ( currentChar == QChar( '\"' ) )
{
isOutsideQuotes = false;
}
}
else
{
if ( currentChar == QChar( '\"' ) )
{
isOutsideQuotes = true;
}
if ( currentChar == QChar( '\\' ) )
{
currentChar = errorMessageContainer->readCharWithLineNumberCount( inputStream );
}
}
}
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmObjectScriptingCapability::writeFields( QTextStream& outputStream ) const
{
std::vector<PdmFieldHandle*> fields;
m_owner->fields( fields );
int writtenFieldCount = 0;
for ( size_t it = 0; it < fields.size(); ++it )
{
const PdmXmlFieldHandle* xmlField = fields[it]->xmlCapability();
const PdmAbstractFieldScriptingCapability* scriptability =
fields[it]->capability<PdmAbstractFieldScriptingCapability>();
if ( scriptability && xmlField && xmlField->isIOWritable() )
{
QString keyword = xmlField->fieldHandle()->keyword();
CAF_ASSERT( PdmXmlObjectHandle::isValidXmlElementName( keyword ) );
if ( writtenFieldCount >= 1 )
{
outputStream << ", ";
}
outputStream << keyword << " = ";
scriptability->readFromField( outputStream );
writtenFieldCount++;
}
}
}
@@ -38,7 +38,7 @@
#include "cafPdmChildArrayField.h"
#include "cafPdmObjectCapability.h"
#include "cafPdmObjectMethod.h"
#include "cafPdmObjectScriptabilityRegister.h"
#include "cafPdmObjectScriptingCapabilityRegister.h"
#include <QString>
@@ -48,13 +48,17 @@
class QTextStream;
#define CAF_PDM_InitScriptableObject( uiName, iconResourceName, toolTip, whatsThis ) \
CAF_PDM_InitObject( uiName, iconResourceName, toolTip, whatsThis ); \
caf::PdmObjectScriptabilityRegister::registerScriptClassNameAndComment( classKeyword(), classKeyword(), whatsThis );
#define CAF_PDM_InitScriptableObject( uiName, iconResourceName, toolTip, whatsThis ) \
CAF_PDM_InitObject( uiName, iconResourceName, toolTip, whatsThis ); \
caf::PdmObjectScriptingCapabilityRegister::registerScriptClassNameAndComment( classKeyword(), \
classKeyword(), \
whatsThis );
#define CAF_PDM_InitScriptableObjectWithNameAndComment( uiName, iconResourceName, toolTip, whatsThis, scriptClassName, scriptComment ) \
CAF_PDM_InitObject( uiName, iconResourceName, toolTip, whatsThis ); \
caf::PdmObjectScriptabilityRegister::registerScriptClassNameAndComment( classKeyword(), scriptClassName, scriptComment );
caf::PdmObjectScriptingCapabilityRegister::registerScriptClassNameAndComment( classKeyword(), \
scriptClassName, \
scriptComment );
namespace caf
{
@@ -68,12 +72,12 @@ class PdmScriptIOMessages;
//
//
//==================================================================================================
class PdmObjectScriptability : public PdmObjectCapability
class PdmObjectScriptingCapability : public PdmObjectCapability
{
public:
PdmObjectScriptability( PdmObjectHandle* owner, bool giveOwnership );
PdmObjectScriptingCapability( PdmObjectHandle* owner, bool giveOwnership );
~PdmObjectScriptability() override;
~PdmObjectScriptingCapability() override;
void readFields( QTextStream& inputStream, PdmObjectFactory* objectFactory, PdmScriptIOMessages* errorMessageContainer );
void writeFields( QTextStream& outputStream ) const;
@@ -33,22 +33,22 @@
// for more details.
//
//##################################################################################################
#include "cafPdmObjectScriptabilityRegister.h"
#include "cafPdmObjectScriptingCapabilityRegister.h"
#include "cafPdmObject.h"
using namespace caf;
std::map<QString, QString> PdmObjectScriptabilityRegister::s_classKeywordToScriptClassName;
std::map<QString, QString> PdmObjectScriptabilityRegister::s_scriptClassNameToClassKeyword;
std::map<QString, QString> PdmObjectScriptabilityRegister::s_scriptClassComments;
std::map<QString, QString> PdmObjectScriptingCapabilityRegister::s_classKeywordToScriptClassName;
std::map<QString, QString> PdmObjectScriptingCapabilityRegister::s_scriptClassNameToClassKeyword;
std::map<QString, QString> PdmObjectScriptingCapabilityRegister::s_scriptClassComments;
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmObjectScriptabilityRegister::registerScriptClassNameAndComment( const QString& classKeyword,
const QString& scriptClassName,
const QString& scriptClassComment )
void PdmObjectScriptingCapabilityRegister::registerScriptClassNameAndComment( const QString& classKeyword,
const QString& scriptClassName,
const QString& scriptClassComment )
{
s_classKeywordToScriptClassName[classKeyword] = scriptClassName;
s_scriptClassNameToClassKeyword[scriptClassName] = classKeyword;
@@ -58,7 +58,7 @@ void PdmObjectScriptabilityRegister::registerScriptClassNameAndComment( const QS
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString PdmObjectScriptabilityRegister::scriptClassNameFromClassKeyword( const QString& classKeyword )
QString PdmObjectScriptingCapabilityRegister::scriptClassNameFromClassKeyword( const QString& classKeyword )
{
auto it = s_classKeywordToScriptClassName.find( classKeyword );
if ( it != s_classKeywordToScriptClassName.end() )
@@ -71,7 +71,7 @@ QString PdmObjectScriptabilityRegister::scriptClassNameFromClassKeyword( const Q
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString PdmObjectScriptabilityRegister::classKeywordFromScriptClassName( const QString& scriptClassName )
QString PdmObjectScriptingCapabilityRegister::classKeywordFromScriptClassName( const QString& scriptClassName )
{
auto it = s_scriptClassNameToClassKeyword.find( scriptClassName );
if ( it != s_scriptClassNameToClassKeyword.end() )
@@ -84,7 +84,7 @@ QString PdmObjectScriptabilityRegister::classKeywordFromScriptClassName( const Q
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString PdmObjectScriptabilityRegister::scriptClassComment( const QString& classKeyword )
QString PdmObjectScriptingCapabilityRegister::scriptClassComment( const QString& classKeyword )
{
auto it = s_scriptClassComments.find( classKeyword );
if ( it != s_scriptClassComments.end() )
@@ -97,7 +97,7 @@ QString PdmObjectScriptabilityRegister::scriptClassComment( const QString& class
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool PdmObjectScriptabilityRegister::isScriptable( const caf::PdmObject* object )
bool PdmObjectScriptingCapabilityRegister::isScriptable( const caf::PdmObject* object )
{
return s_classKeywordToScriptClassName.find( object->classKeyword() ) != s_classKeywordToScriptClassName.end();
}
@@ -46,7 +46,7 @@ class PdmObject;
//==================================================================================================
/// Static register for object scriptability.
//==================================================================================================
class PdmObjectScriptabilityRegister
class PdmObjectScriptingCapabilityRegister
{
public:
static void registerScriptClassNameAndComment( const QString& classKeyword,
@@ -35,16 +35,17 @@
//##################################################################################################
#include "cafPdmPythonGenerator.h"
#include "cafPdmAbstractFieldScriptingCapability.h"
#include "cafPdmChildArrayField.h"
#include "cafPdmChildField.h"
#include "cafPdmFieldScriptability.h"
#include "cafPdmObject.h"
#include "cafPdmObjectFactory.h"
#include "cafPdmObjectMethod.h"
#include "cafPdmObjectScriptabilityRegister.h"
#include "cafPdmObjectScriptingCapabilityRegister.h"
#include "cafPdmProxyValueField.h"
#include "cafPdmXmlFieldHandle.h"
#include <QRegularExpression>
#include <QTextStream>
@@ -74,7 +75,7 @@ QString PdmPythonGenerator::generate( PdmObjectFactory* factory ) const
CAF_ASSERT( object );
std::shared_ptr<PdmObject> sharedObject( object );
if ( PdmObjectScriptabilityRegister::isScriptable( sharedObject.get() ) )
if ( PdmObjectScriptingCapabilityRegister::isScriptable( sharedObject.get() ) )
{
dummyObjects.push_back( sharedObject );
}
@@ -100,8 +101,8 @@ QString PdmPythonGenerator::generate( PdmObjectFactory* factory ) const
for ( auto it = classInheritanceStack.begin(); it != classInheritanceStack.end(); ++it )
{
const QString& classKeyword = *it;
QString scriptClassComment = PdmObjectScriptabilityRegister::scriptClassComment( classKeyword );
const QString& classKeyword = *it;
QString scriptClassComment = PdmObjectScriptingCapabilityRegister::scriptClassComment( classKeyword );
std::map<QString, QString> attributesGenerated;
@@ -113,7 +114,7 @@ QString PdmPythonGenerator::generate( PdmObjectFactory* factory ) const
object->fields( fields );
for ( auto field : fields )
{
auto scriptability = field->template capability<PdmFieldScriptability>();
auto scriptability = field->template capability<PdmAbstractFieldScriptingCapability>();
if ( scriptability != nullptr )
{
QString snake_field_name = camelToSnakeCase( scriptability->scriptFieldName() );
@@ -201,7 +202,7 @@ QString PdmPythonGenerator::generate( PdmObjectFactory* factory ) const
{
QString dataType = PdmPythonGenerator::dataTypeString( field, false );
QString scriptDataType =
PdmObjectScriptabilityRegister::scriptClassNameFromClassKeyword( dataType );
PdmObjectScriptingCapabilityRegister::scriptClassNameFromClassKeyword( dataType );
QString commentDataType = field->xmlCapability()->isVectorField()
? QString( "List of %1" ).arg( scriptDataType )
@@ -262,7 +263,7 @@ QString PdmPythonGenerator::generate( PdmObjectFactory* factory ) const
{
bool isList = field->xmlCapability()->isVectorField();
QString defaultValue = isList ? "[]" : "None";
auto scriptability = field->capability<PdmFieldScriptability>();
auto scriptability = field->capability<PdmAbstractFieldScriptingCapability>();
auto argumentName = camelToSnakeCase( scriptability->scriptFieldName() );
auto dataType = dataTypeString( field, false );
if ( isList ) dataType = "List of " + dataType;
@@ -303,7 +304,7 @@ QString PdmPythonGenerator::generate( PdmObjectFactory* factory ) const
for ( auto it = classInheritanceStack.begin(); it != classInheritanceStack.end(); ++it )
{
const QString& classKeyword = *it;
QString scriptClassName = PdmObjectScriptabilityRegister::scriptClassNameFromClassKeyword( classKeyword );
QString scriptClassName = PdmObjectScriptingCapabilityRegister::scriptClassNameFromClassKeyword( classKeyword );
if ( scriptClassName.isEmpty() ) scriptClassName = classKeyword;
if ( !classesWritten.count( scriptClassName ) )
@@ -42,7 +42,7 @@
#include "cafPdmCodeGenerator.h"
#include "cafPdmDocument.h"
#include "cafPdmField.h"
#include "cafPdmFieldIOScriptability.h"
#include "cafPdmFieldScriptingCapability.h"
#include "cafPdmObject.h"
#include "cafPdmObjectGroup.h"
#include "cafPdmPointer.h"
@@ -51,7 +51,7 @@
#include <QFile>
#include "cafPdmObjectScriptability.h"
#include "cafPdmObjectScriptingCapability.h"
#include <memory>
/// Demo objects to show the usage of the Pdm system
@@ -190,8 +190,8 @@ public:
"ScriptClassName_InheritedDemoObj",
"Script comment test" );
CAF_PDM_InitScriptableFieldWithIONoDefault( &m_texts, "Texts", "Some words", "", "", "" );
CAF_PDM_InitScriptableFieldWithIONoDefault( &m_numbers, "Numbers", "Some words", "", "", "" );
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",