diff --git a/python/core/qgspallabeling.sip b/python/core/qgspallabeling.sip index 253ce75198dc..d6316d7583f8 100644 --- a/python/core/qgspallabeling.sip +++ b/python/core/qgspallabeling.sip @@ -1,3 +1,83 @@ +// QMap is implemented as a Python dictionary. +%MappedType QMap /DocType="dict-of-QgsPalLayerSettings.DataDefinedProperties-QgsDataDefined*"/ +{ +%TypeHeaderCode +#include +#include +#include +%End +%ConvertFromTypeCode + // Create the dictionary. + PyObject *d = PyDict_New(); + if (!d) + return NULL; + // Set the dictionary elements. + QMap::const_iterator i = sipCpp->constBegin(); + while (i != sipCpp->constEnd()) + { + QgsDataDefined *t = i.value(); + PyObject *kobj = sipConvertFromEnum(i.key(), sipType_QgsPalLayerSettings_DataDefinedProperties); + PyObject *tobj = sipConvertFromType(t, sipType_QgsDataDefined, sipTransferObj); + if (kobj == NULL || tobj == NULL || PyDict_SetItem(d, kobj, tobj) < 0) + { + Py_DECREF(d); + if (kobj) + { + Py_DECREF(kobj); + } + if (tobj) + { + Py_DECREF(tobj); + } + else + { + delete t; + } + return NULL; + } + Py_DECREF(kobj); + Py_DECREF(tobj); + ++i; + } + return d; +%End +%ConvertToTypeCode + PyObject *kobj, *tobj; + SIP_SSIZE_T i = 0; + // Check the type if that is all that is required. + if (sipIsErr == NULL) + { + if (!PyDict_Check(sipPy)) + return 0; + while (PyDict_Next(sipPy, &i, &kobj, &tobj)) + if (!sipCanConvertToType(tobj, sipType_QgsDataDefined, SIP_NOT_NONE)) + return 0; + return 1; + } + QMap *qm = new QMap; + + while (PyDict_Next(sipPy, &i, &kobj, &tobj)) + { + int state, k = SIPLong_AsLong(kobj); + QgsDataDefined *t = reinterpret_cast(sipConvertToType(tobj, sipType_QgsDataDefined, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr)); + + if (*sipIsErr) + { + sipReleaseType(t, sipType_QgsDataDefined, state); + delete qm; + return 0; + } + qm->insert(QgsPalLayerSettings::DataDefinedProperties(k), t); + sipReleaseType(t, sipType_QgsDataDefined, state); + } + + *sipCppPtr = qm; + + return sipGetState(sipTransferObj); +%End +}; + + class QgsPalLayerSettings { %TypeHeaderCode @@ -361,12 +441,7 @@ class QgsPalLayerSettings /** Get a data defined property pointer * @note added in 1.9, helpful for Python access */ - QgsDataDefined* dataDefinedProperty( DataDefinedProperties p ); - - /** Get current data defined properties - * @note added in 1.9, helpful for Python access - */ - QList dataDefinedPropertyList(); + QgsDataDefined* dataDefinedProperty( QgsPalLayerSettings::DataDefinedProperties p ); /** Set a property as data defined * @note added in 1.9, helpful for Python access @@ -407,9 +482,9 @@ class QgsPalLayerSettings */ bool dataDefinedUseExpression( QgsPalLayerSettings::DataDefinedProperties p ) const; - /**Stores field names for data defined layer properties*/ - //! @note not available in python bindings - //QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* > dataDefinedProperties; + /** Map of current data defined properties + */ + QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* > dataDefinedProperties; /** Calculates pixel size (considering output size should be in pixel or map units, scale factors and optionally oversampling) diff --git a/src/core/qgspallabeling.cpp b/src/core/qgspallabeling.cpp index ef8a27a917e4..3a45fcae1d18 100644 --- a/src/core/qgspallabeling.cpp +++ b/src/core/qgspallabeling.cpp @@ -1170,11 +1170,6 @@ QgsDataDefined* QgsPalLayerSettings::dataDefinedProperty( DataDefinedProperties return 0; } -QList QgsPalLayerSettings::dataDefinedPropertyList() -{ - return dataDefinedProperties.keys(); -} - QMap QgsPalLayerSettings::dataDefinedMap( DataDefinedProperties p ) const { QMap map; diff --git a/src/core/qgspallabeling.h b/src/core/qgspallabeling.h index 8549ecc7aafc..16a142ef4b18 100644 --- a/src/core/qgspallabeling.h +++ b/src/core/qgspallabeling.h @@ -415,12 +415,7 @@ class CORE_EXPORT QgsPalLayerSettings /** Get a data defined property pointer * @note added in 1.9, helpful for Python access */ - QgsDataDefined* dataDefinedProperty( DataDefinedProperties p ); - - /** Get current data defined properties - * @note added in 1.9, helpful for Python access - */ - QList dataDefinedPropertyList(); + QgsDataDefined* dataDefinedProperty( QgsPalLayerSettings::DataDefinedProperties p ); /** Set a property as data defined * @note added in 1.9, helpful for Python access @@ -461,8 +456,8 @@ class CORE_EXPORT QgsPalLayerSettings */ bool dataDefinedUseExpression( QgsPalLayerSettings::DataDefinedProperties p ) const; - /**Stores field names for data defined layer properties*/ - //! @note not available in python bindings + /** Map of current data defined properties + */ QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* > dataDefinedProperties;