|
1 | | -// QMap<QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined*> is implemented as a Python dictionary. |
2 | | -%MappedType QMap<QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined*> /DocType="dict-of-QgsPalLayerSettings.DataDefinedProperties-QgsDataDefined*"/ |
3 | | -{ |
4 | | -%TypeHeaderCode |
5 | | -#include <qmap.h> |
6 | | -#include <qgspallabeling.h> |
7 | | -#include <qgsdatadefined.h> |
8 | | -%End |
9 | | -%ConvertFromTypeCode |
10 | | - // Create the dictionary. |
11 | | - PyObject *d = PyDict_New(); |
12 | | - if (!d) |
13 | | - return NULL; |
14 | | - // Set the dictionary elements. |
15 | | - QMap<QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined*>::const_iterator i = sipCpp->constBegin(); |
16 | | - while (i != sipCpp->constEnd()) |
17 | | - { |
18 | | - QgsDataDefined *t = i.value(); |
19 | | - PyObject *kobj = sipConvertFromEnum(i.key(), sipType_QgsPalLayerSettings_DataDefinedProperties); |
20 | | - PyObject *tobj = sipConvertFromType(t, sipType_QgsDataDefined, sipTransferObj); |
21 | | - if (kobj == NULL || tobj == NULL || PyDict_SetItem(d, kobj, tobj) < 0) |
22 | | - { |
23 | | - Py_DECREF(d); |
24 | | - if (kobj) |
25 | | - { |
26 | | - Py_DECREF(kobj); |
27 | | - } |
28 | | - if (tobj) |
29 | | - { |
30 | | - Py_DECREF(tobj); |
31 | | - } |
32 | | - else |
33 | | - { |
34 | | - delete t; |
35 | | - } |
36 | | - return NULL; |
37 | | - } |
38 | | - Py_DECREF(kobj); |
39 | | - Py_DECREF(tobj); |
40 | | - ++i; |
41 | | - } |
42 | | - return d; |
43 | | -%End |
44 | | -%ConvertToTypeCode |
45 | | - PyObject *kobj, *tobj; |
46 | | - SIP_SSIZE_T i = 0; |
47 | | - // Check the type if that is all that is required. |
48 | | - if (sipIsErr == NULL) |
49 | | - { |
50 | | - if (!PyDict_Check(sipPy)) |
51 | | - return 0; |
52 | | - while (PyDict_Next(sipPy, &i, &kobj, &tobj)) |
53 | | - if (!sipCanConvertToType(tobj, sipType_QgsDataDefined, SIP_NOT_NONE)) |
54 | | - return 0; |
55 | | - return 1; |
56 | | - } |
57 | | - QMap<QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined*> *qm = new QMap<QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined*>; |
58 | | - |
59 | | - while (PyDict_Next(sipPy, &i, &kobj, &tobj)) |
60 | | - { |
61 | | - int state, k = SIPLong_AsLong(kobj); |
62 | | - QgsDataDefined *t = reinterpret_cast<QgsDataDefined *>(sipConvertToType(tobj, sipType_QgsDataDefined, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr)); |
63 | | - |
64 | | - if (*sipIsErr) |
65 | | - { |
66 | | - sipReleaseType(t, sipType_QgsDataDefined, state); |
67 | | - delete qm; |
68 | | - return 0; |
69 | | - } |
70 | | - qm->insert(QgsPalLayerSettings::DataDefinedProperties(k), t); |
71 | | - sipReleaseType(t, sipType_QgsDataDefined, state); |
72 | | - } |
73 | | - |
74 | | - *sipCppPtr = qm; |
75 | | - |
76 | | - return sipGetState(sipTransferObj); |
77 | | -%End |
78 | | -}; |
79 | | - |
80 | | - |
81 | 1 | class QgsLabelPosition |
82 | 2 | { |
83 | 3 | %TypeHeaderCode |
@@ -239,7 +159,7 @@ class QgsPalLayerSettings |
239 | 159 | }; |
240 | 160 |
|
241 | 161 | // update mDataDefinedNames QMap in constructor when adding/deleting enum value |
242 | | - enum DataDefinedProperties |
| 162 | + enum Property |
243 | 163 | { |
244 | 164 | // text style |
245 | 165 | Size, |
@@ -507,67 +427,24 @@ class QgsPalLayerSettings |
507 | 427 | */ |
508 | 428 | QDomElement writeXml( QDomDocument& doc ); |
509 | 429 |
|
510 | | - /** Get a data defined property pointer |
511 | | - * @note helpful for Python access |
512 | | - */ |
513 | | - QgsDataDefined* dataDefinedProperty( QgsPalLayerSettings::DataDefinedProperties p ); |
514 | | - |
515 | | - /** Set a property as data defined |
516 | | - * @note helpful for Python access |
517 | | - */ |
518 | | - void setDataDefinedProperty( QgsPalLayerSettings::DataDefinedProperties p, |
519 | | - bool active, bool useExpr, const QString& expr, const QString& field ); |
520 | | - |
521 | | - /** Set a property to static instead data defined */ |
522 | | - void removeDataDefinedProperty( QgsPalLayerSettings::DataDefinedProperties p ); |
523 | | - |
524 | | - /** Clear all data-defined properties |
525 | | - * @note added in QGIS 2.12 |
526 | | - */ |
527 | | - void removeAllDataDefinedProperties(); |
528 | | - |
529 | | - /** Convert old property value to new one as delimited values |
530 | | - * @note not available in python bindings; as temporary solution until refactoring of project settings |
531 | | - */ |
532 | | - QString updateDataDefinedString( const QString& value ); |
533 | | - |
534 | | - /** Get property value as separate values split into Qmap |
535 | | - * @note not available in python bindings |
536 | | - */ |
537 | | - QMap<QString, QString> dataDefinedMap( QgsPalLayerSettings::DataDefinedProperties p ) const; |
538 | | - |
539 | | - /** Get data defined property value from expression string or attribute field name |
540 | | - * @returns value inside QVariant |
541 | | - * @note not available in python bindings |
542 | | - */ |
543 | | - //QVariant dataDefinedValue( QgsPalLayerSettings::DataDefinedProperties p, QgsFeature& f, const QgsFields& fields, |
544 | | - // const QgsExpressionContext* context = 0 ) const; |
545 | | - |
546 | | - /** Get data defined property value from expression string or attribute field name |
547 | | - * @returns true/false whether result is null or invalid |
548 | | - * @note not available in python bindings |
549 | | - */ |
550 | | - //bool dataDefinedEvaluate( QgsPalLayerSettings::DataDefinedProperties p, QVariant& exprVal, const QgsExpressionContext* context = 0 ) const; |
551 | | - |
552 | | - /** Whether data definition is active |
553 | | - */ |
554 | | - bool dataDefinedIsActive( QgsPalLayerSettings::DataDefinedProperties p ) const; |
555 | | - |
556 | | - /** Whether data definition is set to use an expression |
| 430 | + /** Returns a reference to the label's property collection, used for data defined overrides. |
| 431 | + * @note added in QGIS 3.0 |
| 432 | + * @see setProperties() |
557 | 433 | */ |
558 | | - bool dataDefinedUseExpression( QgsPalLayerSettings::DataDefinedProperties p ) const; |
| 434 | + QgsPropertyCollection& properties(); |
559 | 435 |
|
560 | | - /** Map of current data defined properties |
561 | | - * |
562 | | - * Pointers to QgsDataDefined should never be null, the pointers are owned by this class |
| 436 | + /** Returns a reference to the label's property collection, used for data defined overrides. |
| 437 | + * @note added in QGIS 3.0 |
| 438 | + * @see setProperties() |
563 | 439 | */ |
564 | | - QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* > dataDefinedProperties; |
| 440 | + //const QgsPropertyCollection& properties() const { return mProperties; } |
565 | 441 |
|
566 | | - /** Map of data defined enum to names and old-style indecies |
567 | | - * The QPair contains a new string for layer property key, and a reference to old-style numeric key (< QGIS 2.0) |
568 | | - * @note not available in python bindings; |
| 442 | + /** Sets the label's property collection, used for data defined overrides. |
| 443 | + * @param collection property collection. Existing properties will be replaced. |
| 444 | + * @note added in QGIS 3.0 |
| 445 | + * @see properties() |
569 | 446 | */ |
570 | | - // QMap<QgsPalLayerSettings::DataDefinedProperties, QPair<QString, int> > dataDefinedNames() const; |
| 447 | + void setProperties( const QgsPropertyCollection& collection ); |
571 | 448 |
|
572 | 449 | /** Returns the label text formatting settings, e.g., font settings, buffer settings, etc. |
573 | 450 | * @see setFormat() |
@@ -737,23 +614,23 @@ class QgsPalLabeling |
737 | 614 | protected: |
738 | 615 | // update temporary QgsPalLayerSettings with any data defined text style values |
739 | 616 | void dataDefinedTextStyle( QgsPalLayerSettings& tmpLyr, |
740 | | - const QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant >& ddValues ); |
| 617 | + const QMap< QgsPalLayerSettings::Property, QVariant >& ddValues ); |
741 | 618 |
|
742 | 619 | // update temporary QgsPalLayerSettings with any data defined text formatting values |
743 | 620 | void dataDefinedTextFormatting( QgsPalLayerSettings& tmpLyr, |
744 | | - const QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant >& ddValues ); |
| 621 | + const QMap< QgsPalLayerSettings::Property, QVariant >& ddValues ); |
745 | 622 |
|
746 | 623 | // update temporary QgsPalLayerSettings with any data defined text buffer values |
747 | 624 | void dataDefinedTextBuffer( QgsPalLayerSettings& tmpLyr, |
748 | | - const QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant >& ddValues ); |
| 625 | + const QMap< QgsPalLayerSettings::Property, QVariant >& ddValues ); |
749 | 626 |
|
750 | 627 | // update temporary QgsPalLayerSettings with any data defined shape background values |
751 | 628 | void dataDefinedShapeBackground( QgsPalLayerSettings& tmpLyr, |
752 | | - const QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant >& ddValues ); |
| 629 | + const QMap< QgsPalLayerSettings::Property, QVariant >& ddValues ); |
753 | 630 |
|
754 | 631 | // update temporary QgsPalLayerSettings with any data defined drop shadow values |
755 | 632 | void dataDefinedDropShadow( QgsPalLayerSettings& tmpLyr, |
756 | | - const QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant >& ddValues ); |
| 633 | + const QMap< QgsPalLayerSettings::Property, QVariant >& ddValues ); |
757 | 634 |
|
758 | 635 | void deleteTemporaryData(); |
759 | 636 |
|
|
0 commit comments