mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-15 00:04:00 -04:00
Port labeling to properties framework
This commit is contained in:
parent
1e0c62bc3a
commit
43bbf68943
@ -1,83 +1,3 @@
|
||||
// QMap<QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined*> is implemented as a Python dictionary.
|
||||
%MappedType QMap<QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined*> /DocType="dict-of-QgsPalLayerSettings.DataDefinedProperties-QgsDataDefined*"/
|
||||
{
|
||||
%TypeHeaderCode
|
||||
#include <qmap.h>
|
||||
#include <qgspallabeling.h>
|
||||
#include <qgsdatadefined.h>
|
||||
%End
|
||||
%ConvertFromTypeCode
|
||||
// Create the dictionary.
|
||||
PyObject *d = PyDict_New();
|
||||
if (!d)
|
||||
return NULL;
|
||||
// Set the dictionary elements.
|
||||
QMap<QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined*>::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<QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined*> *qm = new QMap<QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined*>;
|
||||
|
||||
while (PyDict_Next(sipPy, &i, &kobj, &tobj))
|
||||
{
|
||||
int state, k = SIPLong_AsLong(kobj);
|
||||
QgsDataDefined *t = reinterpret_cast<QgsDataDefined *>(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 QgsLabelPosition
|
||||
{
|
||||
%TypeHeaderCode
|
||||
@ -239,7 +159,7 @@ class QgsPalLayerSettings
|
||||
};
|
||||
|
||||
// update mDataDefinedNames QMap in constructor when adding/deleting enum value
|
||||
enum DataDefinedProperties
|
||||
enum Property
|
||||
{
|
||||
// text style
|
||||
Size,
|
||||
@ -507,67 +427,24 @@ class QgsPalLayerSettings
|
||||
*/
|
||||
QDomElement writeXml( QDomDocument& doc );
|
||||
|
||||
/** Get a data defined property pointer
|
||||
* @note helpful for Python access
|
||||
/** Returns a reference to the label's property collection, used for data defined overrides.
|
||||
* @note added in QGIS 3.0
|
||||
* @see setProperties()
|
||||
*/
|
||||
QgsDataDefined* dataDefinedProperty( QgsPalLayerSettings::DataDefinedProperties p );
|
||||
QgsPropertyCollection& properties();
|
||||
|
||||
/** Set a property as data defined
|
||||
* @note helpful for Python access
|
||||
/** Returns a reference to the label's property collection, used for data defined overrides.
|
||||
* @note added in QGIS 3.0
|
||||
* @see setProperties()
|
||||
*/
|
||||
void setDataDefinedProperty( QgsPalLayerSettings::DataDefinedProperties p,
|
||||
bool active, bool useExpr, const QString& expr, const QString& field );
|
||||
//const QgsPropertyCollection& properties() const { return mProperties; }
|
||||
|
||||
/** Set a property to static instead data defined */
|
||||
void removeDataDefinedProperty( QgsPalLayerSettings::DataDefinedProperties p );
|
||||
|
||||
/** Clear all data-defined properties
|
||||
* @note added in QGIS 2.12
|
||||
/** Sets the label's property collection, used for data defined overrides.
|
||||
* @param collection property collection. Existing properties will be replaced.
|
||||
* @note added in QGIS 3.0
|
||||
* @see properties()
|
||||
*/
|
||||
void removeAllDataDefinedProperties();
|
||||
|
||||
/** Convert old property value to new one as delimited values
|
||||
* @note not available in python bindings; as temporary solution until refactoring of project settings
|
||||
*/
|
||||
QString updateDataDefinedString( const QString& value );
|
||||
|
||||
/** Get property value as separate values split into Qmap
|
||||
* @note not available in python bindings
|
||||
*/
|
||||
QMap<QString, QString> dataDefinedMap( QgsPalLayerSettings::DataDefinedProperties p ) const;
|
||||
|
||||
/** Get data defined property value from expression string or attribute field name
|
||||
* @returns value inside QVariant
|
||||
* @note not available in python bindings
|
||||
*/
|
||||
//QVariant dataDefinedValue( QgsPalLayerSettings::DataDefinedProperties p, QgsFeature& f, const QgsFields& fields,
|
||||
// const QgsExpressionContext* context = 0 ) const;
|
||||
|
||||
/** Get data defined property value from expression string or attribute field name
|
||||
* @returns true/false whether result is null or invalid
|
||||
* @note not available in python bindings
|
||||
*/
|
||||
//bool dataDefinedEvaluate( QgsPalLayerSettings::DataDefinedProperties p, QVariant& exprVal, const QgsExpressionContext* context = 0 ) const;
|
||||
|
||||
/** Whether data definition is active
|
||||
*/
|
||||
bool dataDefinedIsActive( QgsPalLayerSettings::DataDefinedProperties p ) const;
|
||||
|
||||
/** Whether data definition is set to use an expression
|
||||
*/
|
||||
bool dataDefinedUseExpression( QgsPalLayerSettings::DataDefinedProperties p ) const;
|
||||
|
||||
/** Map of current data defined properties
|
||||
*
|
||||
* Pointers to QgsDataDefined should never be null, the pointers are owned by this class
|
||||
*/
|
||||
QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* > dataDefinedProperties;
|
||||
|
||||
/** Map of data defined enum to names and old-style indecies
|
||||
* The QPair contains a new string for layer property key, and a reference to old-style numeric key (< QGIS 2.0)
|
||||
* @note not available in python bindings;
|
||||
*/
|
||||
// QMap<QgsPalLayerSettings::DataDefinedProperties, QPair<QString, int> > dataDefinedNames() const;
|
||||
void setProperties( const QgsPropertyCollection& collection );
|
||||
|
||||
/** Returns the label text formatting settings, e.g., font settings, buffer settings, etc.
|
||||
* @see setFormat()
|
||||
@ -737,23 +614,23 @@ class QgsPalLabeling
|
||||
protected:
|
||||
// update temporary QgsPalLayerSettings with any data defined text style values
|
||||
void dataDefinedTextStyle( QgsPalLayerSettings& tmpLyr,
|
||||
const QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant >& ddValues );
|
||||
const QMap< QgsPalLayerSettings::Property, QVariant >& ddValues );
|
||||
|
||||
// update temporary QgsPalLayerSettings with any data defined text formatting values
|
||||
void dataDefinedTextFormatting( QgsPalLayerSettings& tmpLyr,
|
||||
const QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant >& ddValues );
|
||||
const QMap< QgsPalLayerSettings::Property, QVariant >& ddValues );
|
||||
|
||||
// update temporary QgsPalLayerSettings with any data defined text buffer values
|
||||
void dataDefinedTextBuffer( QgsPalLayerSettings& tmpLyr,
|
||||
const QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant >& ddValues );
|
||||
const QMap< QgsPalLayerSettings::Property, QVariant >& ddValues );
|
||||
|
||||
// update temporary QgsPalLayerSettings with any data defined shape background values
|
||||
void dataDefinedShapeBackground( QgsPalLayerSettings& tmpLyr,
|
||||
const QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant >& ddValues );
|
||||
const QMap< QgsPalLayerSettings::Property, QVariant >& ddValues );
|
||||
|
||||
// update temporary QgsPalLayerSettings with any data defined drop shadow values
|
||||
void dataDefinedDropShadow( QgsPalLayerSettings& tmpLyr,
|
||||
const QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant >& ddValues );
|
||||
const QMap< QgsPalLayerSettings::Property, QVariant >& ddValues );
|
||||
|
||||
void deleteTemporaryData();
|
||||
|
||||
|
@ -123,6 +123,17 @@ class QgsAbstractProperty
|
||||
*/
|
||||
int valueAsInt( const QgsExpressionContext& context, int defaultValue = 0 ) const;
|
||||
|
||||
/**
|
||||
* Calculates the current value of the property and interprets it as an boolean.
|
||||
* @param context QgsExpressionContext to evaluate the property for.
|
||||
* @param defaultValue default boolean to return if the property cannot be calculated as an boolean
|
||||
* @returns value parsed to boolean
|
||||
* @see value()
|
||||
* @see valueAsDouble()
|
||||
* @see valueAsColor()
|
||||
*/
|
||||
bool valueAsBool( const QgsExpressionContext& context, bool defaultValue = false ) const;
|
||||
|
||||
/** Writes the current state of the property into an XML element
|
||||
* @param propertyElem destination element for the property's state
|
||||
* @param doc DOM document
|
||||
|
@ -1,3 +1,5 @@
|
||||
typedef QMap< int, QString > QgsPropertyDefinition;
|
||||
|
||||
/**
|
||||
* \ingroup core
|
||||
* \class QgsAbstractPropertyCollection
|
||||
@ -126,6 +128,20 @@ class QgsAbstractPropertyCollection
|
||||
*/
|
||||
int valueAsInt( int key, const QgsExpressionContext& context, int defaultValue = 0 ) const;
|
||||
|
||||
/**
|
||||
* Calculates the current value of the property with the specified key and interprets it as an boolean.
|
||||
* @param key integer key for property to return. The intended use case is that a context specific enum is cast to
|
||||
* int and used for the key value.
|
||||
* @param context QgsExpressionContext to evaluate the property for.
|
||||
* @param defaultValue default boolean to return if the property cannot be calculated as a boolean
|
||||
* @returns value parsed to bool
|
||||
* @see value()
|
||||
* @see valueAsDouble()
|
||||
* @see valueAsColor()
|
||||
*/
|
||||
bool valueAsBool( int key, const QgsExpressionContext& context, bool defaultValue = false ) const;
|
||||
|
||||
|
||||
/**
|
||||
* Prepares the collection against a specified expression context. Calling prepare before evaluating the
|
||||
* collection's properties multiple times allows precalculation of expensive setup tasks such as parsing expressions.
|
||||
@ -168,7 +184,7 @@ class QgsAbstractPropertyCollection
|
||||
* to avoid writing the raw integer key values to XML, for readability and future-proofness.
|
||||
* @see readXML()
|
||||
*/
|
||||
virtual bool writeXml( QDomElement& collectionElem, QDomDocument& doc, const QMap< int, QString >& propertyNameMap ) const = 0;
|
||||
virtual bool writeXml( QDomElement& collectionElem, QDomDocument& doc, const QgsPropertyDefinition& propertyNameMap ) const = 0;
|
||||
|
||||
/**
|
||||
* Reads property collection state from an XML element.
|
||||
@ -178,7 +194,7 @@ class QgsAbstractPropertyCollection
|
||||
* the propertyNameMap specified when writeXML() was called.
|
||||
* @see writeXML()
|
||||
*/
|
||||
virtual bool readXml( const QDomElement& collectionElem, const QDomDocument& doc, const QMap<int, QString> &propertyNameMap ) = 0;
|
||||
virtual bool readXml( const QDomElement& collectionElem, const QDomDocument& doc, const QgsPropertyDefinition &propertyNameMap ) = 0;
|
||||
|
||||
};
|
||||
|
||||
@ -227,8 +243,8 @@ class QgsPropertyCollection : QgsAbstractPropertyCollection
|
||||
bool isActive( int key ) const;
|
||||
bool hasActiveProperties() const;
|
||||
bool hasActiveDynamicProperties() const;
|
||||
bool writeXml( QDomElement& collectionElem, QDomDocument& doc, const QMap< int, QString >& propertyNameMap ) const;
|
||||
bool readXml( const QDomElement& collectionElem, const QDomDocument& doc, const QMap<int, QString> &propertyNameMap );
|
||||
bool writeXml( QDomElement& collectionElem, QDomDocument& doc, const QgsPropertyDefinition& propertyNameMap ) const;
|
||||
bool readXml( const QDomElement& collectionElem, const QDomDocument& doc, const QgsPropertyDefinition& propertyNameMap );
|
||||
|
||||
/** Adds a property to the collection and takes ownership of it.
|
||||
* @param key integer key for property. Any existing property with the same key will be deleted
|
||||
@ -353,7 +369,7 @@ class QgsPropertyCollectionStack : QgsAbstractPropertyCollection
|
||||
|
||||
QSet<int> propertyKeys() const;
|
||||
bool hasProperty( int key ) const;
|
||||
bool writeXml( QDomElement& collectionElem, QDomDocument& doc, const QMap< int, QString >& propertyNameMap ) const;
|
||||
bool readXml( const QDomElement& collectionElem, const QDomDocument& doc, const QMap<int, QString> &propertyNameMap );
|
||||
bool writeXml( QDomElement& collectionElem, QDomDocument& doc, const QgsPropertyDefinition& propertyNameMap ) const;
|
||||
bool readXml( const QDomElement& collectionElem, const QDomDocument& doc, const QgsPropertyDefinition &propertyNameMap );
|
||||
};
|
||||
|
||||
|
@ -42,6 +42,7 @@
|
||||
#include "qgsgenericprojectionselector.h"
|
||||
#include "qgsmessagelog.h"
|
||||
#include "qgslogger.h"
|
||||
#include "qgsproperty.h"
|
||||
|
||||
|
||||
struct CursorOverride
|
||||
@ -358,14 +359,13 @@ void QgsDwgImportDialog::createGroup( QgsLayerTreeGroup *group, QString name, QS
|
||||
pls.drawLabels = true;
|
||||
pls.fieldName = "text";
|
||||
pls.wrapChar = "\\P";
|
||||
pls.setDataDefinedProperty( QgsPalLayerSettings::Size, true, false, "", "height" );
|
||||
pls.setDataDefinedProperty( QgsPalLayerSettings::Color, true, false, "", "color" );
|
||||
pls.setDataDefinedProperty( QgsPalLayerSettings::MultiLineHeight, true, true, "CASE WHEN interlin<0 THEN 1 ELSE interlin*1.5 END", "" );
|
||||
pls.placement = QgsPalLayerSettings::OrderedPositionsAroundPoint;
|
||||
pls.setDataDefinedProperty( QgsPalLayerSettings::PositionX, true, true, "$x", "" );
|
||||
pls.setDataDefinedProperty( QgsPalLayerSettings::PositionY, true, true, "$y", "" );
|
||||
pls.setDataDefinedProperty( QgsPalLayerSettings::Hali, true, true, QString(
|
||||
"CASE"
|
||||
|
||||
pls.properties().setProperty( QgsPalLayerSettings::Size, new QgsFieldBasedProperty( QStringLiteral( "height" ) ) );
|
||||
pls.properties().setProperty( QgsPalLayerSettings::Color, new QgsFieldBasedProperty( QStringLiteral( "color" ) ) );
|
||||
pls.properties().setProperty( QgsPalLayerSettings::MultiLineHeight, new QgsExpressionBasedProperty( QStringLiteral( "CASE WHEN interlin<0 THEN 1 ELSE interlin*1.5 END" ) ) );
|
||||
pls.properties().setProperty( QgsPalLayerSettings::PositionX, new QgsExpressionBasedProperty( QStringLiteral( "$x" ) ) );
|
||||
pls.properties().setProperty( QgsPalLayerSettings::PositionY, new QgsExpressionBasedProperty( QStringLiteral( "$y" ) ) );
|
||||
pls.properties().setProperty( QgsPalLayerSettings::Hali, new QgsExpressionBasedProperty( QStringLiteral( "CASE"
|
||||
" WHEN etype=%1 THEN"
|
||||
" CASE"
|
||||
" WHEN alignv IN (1,4,7) THEN 'Left'"
|
||||
@ -380,10 +380,8 @@ void QgsDwgImportDialog::createGroup( QgsLayerTreeGroup *group, QString name, QS
|
||||
" WHEN alignh=3 THEN 'Left'"
|
||||
" WHEN alignh=4 THEN 'Left'"
|
||||
" END "
|
||||
" END" ).arg( DRW::MTEXT ), "" );
|
||||
|
||||
pls.setDataDefinedProperty( QgsPalLayerSettings::Vali, true, true, QString(
|
||||
"CASE"
|
||||
" END" ).arg( DRW::MTEXT ) ) );
|
||||
pls.properties().setProperty( QgsPalLayerSettings::Vali, new QgsExpressionBasedProperty( QStringLiteral( "CASE"
|
||||
" WHEN etype=%1 THEN"
|
||||
" CASE"
|
||||
" WHEN alignv < 4 THEN 'Top'"
|
||||
@ -397,10 +395,10 @@ void QgsDwgImportDialog::createGroup( QgsLayerTreeGroup *group, QString name, QS
|
||||
" WHEN alignv=2 THEN 'Half'"
|
||||
" WHEN alignv=3 THEN 'Top'"
|
||||
" END"
|
||||
" END" ).arg( DRW::MTEXT ), "" );
|
||||
|
||||
pls.setDataDefinedProperty( QgsPalLayerSettings::Rotation, true, true, "angle*180.0/pi()", "" );
|
||||
" END" ).arg( DRW::MTEXT ) ) );
|
||||
pls.properties().setProperty( QgsPalLayerSettings::Rotation, new QgsExpressionBasedProperty( QStringLiteral( "angle*180.0/pi()" ) ) );
|
||||
|
||||
pls.placement = QgsPalLayerSettings::OrderedPositionsAroundPoint;
|
||||
pls.writeToLayer( l );
|
||||
}
|
||||
|
||||
|
@ -42,6 +42,22 @@ QgsExpressionContext QgsLabelingGui::createExpressionContext() const
|
||||
return expContext;
|
||||
}
|
||||
|
||||
void QgsLabelingGui::registerDataDefinedButton( QgsDataDefinedButtonV2* button, QgsPalLayerSettings::Property key,
|
||||
QgsDataDefinedButtonV2::DataType type, const QString& description )
|
||||
{
|
||||
button->init( mLayer, mProperties.property( key ), type, description );
|
||||
button->setProperty( "propertyKey", key );
|
||||
connect( button, &QgsDataDefinedButtonV2::changed, this, &QgsLabelingGui::updateProperty );
|
||||
button->registerExpressionContextGenerator( this );
|
||||
}
|
||||
|
||||
void QgsLabelingGui::updateProperty()
|
||||
{
|
||||
QgsDataDefinedButtonV2* button = qobject_cast<QgsDataDefinedButtonV2*>( sender() );
|
||||
QgsPalLayerSettings::Property key = static_cast< QgsPalLayerSettings::Property >( button->property( "propertyKey" ).toInt() );
|
||||
mProperties.setProperty( key, button->toProperty() );
|
||||
}
|
||||
|
||||
QgsLabelingGui::QgsLabelingGui( QgsVectorLayer* layer, QgsMapCanvas* mapCanvas, const QgsPalLayerSettings* layerSettings, QWidget* parent )
|
||||
: QgsTextFormatWidget( mapCanvas, parent, QgsTextFormatWidget::Labeling )
|
||||
, mLayer( layer )
|
||||
@ -250,6 +266,8 @@ void QgsLabelingGui::setLayer( QgsMapLayer* mapLayer )
|
||||
|
||||
mZIndexSpinBox->setValue( lyr.zIndex );
|
||||
|
||||
mProperties = lyr.properties();
|
||||
|
||||
updatePlacementWidgets();
|
||||
updateLinePlacementOptions();
|
||||
|
||||
@ -258,7 +276,7 @@ void QgsLabelingGui::setLayer( QgsMapLayer* mapLayer )
|
||||
|
||||
// set up data defined toolbuttons
|
||||
// do this after other widgets are configured, so they can be enabled/disabled
|
||||
populateDataDefinedButtons( lyr );
|
||||
populateDataDefinedButtons();
|
||||
|
||||
enableDataDefinedAlignment( mCoordXDDBtn->isActive() && mCoordYDDBtn->isActive() );
|
||||
updateUi(); // should come after data defined button setup
|
||||
@ -436,403 +454,281 @@ QgsPalLayerSettings QgsLabelingGui::layerSettings()
|
||||
|
||||
lyr.zIndex = mZIndexSpinBox->value();
|
||||
|
||||
// data defined labeling
|
||||
// text style
|
||||
setDataDefinedProperty( mFontDDBtn, QgsPalLayerSettings::Family, lyr );
|
||||
setDataDefinedProperty( mFontStyleDDBtn, QgsPalLayerSettings::FontStyle, lyr );
|
||||
setDataDefinedProperty( mFontUnderlineDDBtn, QgsPalLayerSettings::Underline, lyr );
|
||||
setDataDefinedProperty( mFontStrikeoutDDBtn, QgsPalLayerSettings::Strikeout, lyr );
|
||||
setDataDefinedProperty( mFontBoldDDBtn, QgsPalLayerSettings::Bold, lyr );
|
||||
setDataDefinedProperty( mFontItalicDDBtn, QgsPalLayerSettings::Italic, lyr );
|
||||
setDataDefinedProperty( mFontSizeDDBtn, QgsPalLayerSettings::Size, lyr );
|
||||
setDataDefinedProperty( mFontUnitsDDBtn, QgsPalLayerSettings::FontSizeUnit, lyr );
|
||||
setDataDefinedProperty( mFontColorDDBtn, QgsPalLayerSettings::Color, lyr );
|
||||
setDataDefinedProperty( mFontTranspDDBtn, QgsPalLayerSettings::FontTransp, lyr );
|
||||
setDataDefinedProperty( mFontCaseDDBtn, QgsPalLayerSettings::FontCase, lyr );
|
||||
setDataDefinedProperty( mFontLetterSpacingDDBtn, QgsPalLayerSettings::FontLetterSpacing, lyr );
|
||||
setDataDefinedProperty( mFontWordSpacingDDBtn, QgsPalLayerSettings::FontWordSpacing, lyr );
|
||||
setDataDefinedProperty( mFontBlendModeDDBtn, QgsPalLayerSettings::FontBlendMode, lyr );
|
||||
|
||||
// text formatting
|
||||
setDataDefinedProperty( mWrapCharDDBtn, QgsPalLayerSettings::MultiLineWrapChar, lyr );
|
||||
setDataDefinedProperty( mFontLineHeightDDBtn, QgsPalLayerSettings::MultiLineHeight, lyr );
|
||||
setDataDefinedProperty( mFontMultiLineAlignDDBtn, QgsPalLayerSettings::MultiLineAlignment, lyr );
|
||||
setDataDefinedProperty( mDirectSymbDDBtn, QgsPalLayerSettings::DirSymbDraw, lyr );
|
||||
setDataDefinedProperty( mDirectSymbLeftDDBtn, QgsPalLayerSettings::DirSymbLeft, lyr );
|
||||
setDataDefinedProperty( mDirectSymbRightDDBtn, QgsPalLayerSettings::DirSymbRight, lyr );
|
||||
setDataDefinedProperty( mDirectSymbPlacementDDBtn, QgsPalLayerSettings::DirSymbPlacement, lyr );
|
||||
setDataDefinedProperty( mDirectSymbRevDDBtn, QgsPalLayerSettings::DirSymbReverse, lyr );
|
||||
setDataDefinedProperty( mFormatNumDDBtn, QgsPalLayerSettings::NumFormat, lyr );
|
||||
setDataDefinedProperty( mFormatNumDecimalsDDBtn, QgsPalLayerSettings::NumDecimals, lyr );
|
||||
setDataDefinedProperty( mFormatNumPlusSignDDBtn, QgsPalLayerSettings::NumPlusSign, lyr );
|
||||
|
||||
// text buffer
|
||||
setDataDefinedProperty( mBufferDrawDDBtn, QgsPalLayerSettings::BufferDraw, lyr );
|
||||
setDataDefinedProperty( mBufferSizeDDBtn, QgsPalLayerSettings::BufferSize, lyr );
|
||||
setDataDefinedProperty( mBufferUnitsDDBtn, QgsPalLayerSettings::BufferUnit, lyr );
|
||||
setDataDefinedProperty( mBufferColorDDBtn, QgsPalLayerSettings::BufferColor, lyr );
|
||||
setDataDefinedProperty( mBufferTranspDDBtn, QgsPalLayerSettings::BufferTransp, lyr );
|
||||
setDataDefinedProperty( mBufferJoinStyleDDBtn, QgsPalLayerSettings::BufferJoinStyle, lyr );
|
||||
setDataDefinedProperty( mBufferBlendModeDDBtn, QgsPalLayerSettings::BufferBlendMode, lyr );
|
||||
|
||||
// background
|
||||
setDataDefinedProperty( mShapeDrawDDBtn, QgsPalLayerSettings::ShapeDraw, lyr );
|
||||
setDataDefinedProperty( mShapeTypeDDBtn, QgsPalLayerSettings::ShapeKind, lyr );
|
||||
setDataDefinedProperty( mShapeSVGPathDDBtn, QgsPalLayerSettings::ShapeSVGFile, lyr );
|
||||
setDataDefinedProperty( mShapeSizeTypeDDBtn, QgsPalLayerSettings::ShapeSizeType, lyr );
|
||||
setDataDefinedProperty( mShapeSizeXDDBtn, QgsPalLayerSettings::ShapeSizeX, lyr );
|
||||
setDataDefinedProperty( mShapeSizeYDDBtn, QgsPalLayerSettings::ShapeSizeY, lyr );
|
||||
setDataDefinedProperty( mShapeSizeUnitsDDBtn, QgsPalLayerSettings::ShapeSizeUnits, lyr );
|
||||
setDataDefinedProperty( mShapeRotationTypeDDBtn, QgsPalLayerSettings::ShapeRotationType, lyr );
|
||||
setDataDefinedProperty( mShapeRotationDDBtn, QgsPalLayerSettings::ShapeRotation, lyr );
|
||||
setDataDefinedProperty( mShapeOffsetDDBtn, QgsPalLayerSettings::ShapeOffset, lyr );
|
||||
setDataDefinedProperty( mShapeOffsetUnitsDDBtn, QgsPalLayerSettings::ShapeOffsetUnits, lyr );
|
||||
setDataDefinedProperty( mShapeRadiusDDBtn, QgsPalLayerSettings::ShapeRadii, lyr );
|
||||
setDataDefinedProperty( mShapeRadiusUnitsDDBtn, QgsPalLayerSettings::ShapeRadiiUnits, lyr );
|
||||
setDataDefinedProperty( mShapeTranspDDBtn, QgsPalLayerSettings::ShapeTransparency, lyr );
|
||||
setDataDefinedProperty( mShapeBlendModeDDBtn, QgsPalLayerSettings::ShapeBlendMode, lyr );
|
||||
setDataDefinedProperty( mShapeFillColorDDBtn, QgsPalLayerSettings::ShapeFillColor, lyr );
|
||||
setDataDefinedProperty( mShapeBorderColorDDBtn, QgsPalLayerSettings::ShapeBorderColor, lyr );
|
||||
setDataDefinedProperty( mShapeBorderWidthDDBtn, QgsPalLayerSettings::ShapeBorderWidth, lyr );
|
||||
setDataDefinedProperty( mShapeBorderUnitsDDBtn, QgsPalLayerSettings::ShapeBorderWidthUnits, lyr );
|
||||
setDataDefinedProperty( mShapePenStyleDDBtn, QgsPalLayerSettings::ShapeJoinStyle, lyr );
|
||||
|
||||
// drop shadow
|
||||
setDataDefinedProperty( mShadowDrawDDBtn, QgsPalLayerSettings::ShadowDraw, lyr );
|
||||
setDataDefinedProperty( mShadowUnderDDBtn, QgsPalLayerSettings::ShadowUnder, lyr );
|
||||
setDataDefinedProperty( mShadowOffsetAngleDDBtn, QgsPalLayerSettings::ShadowOffsetAngle, lyr );
|
||||
setDataDefinedProperty( mShadowOffsetDDBtn, QgsPalLayerSettings::ShadowOffsetDist, lyr );
|
||||
setDataDefinedProperty( mShadowOffsetUnitsDDBtn, QgsPalLayerSettings::ShadowOffsetUnits, lyr );
|
||||
setDataDefinedProperty( mShadowRadiusDDBtn, QgsPalLayerSettings::ShadowRadius, lyr );
|
||||
setDataDefinedProperty( mShadowRadiusUnitsDDBtn, QgsPalLayerSettings::ShadowRadiusUnits, lyr );
|
||||
setDataDefinedProperty( mShadowTranspDDBtn, QgsPalLayerSettings::ShadowTransparency, lyr );
|
||||
setDataDefinedProperty( mShadowScaleDDBtn, QgsPalLayerSettings::ShadowScale, lyr );
|
||||
setDataDefinedProperty( mShadowColorDDBtn, QgsPalLayerSettings::ShadowColor, lyr );
|
||||
setDataDefinedProperty( mShadowBlendDDBtn, QgsPalLayerSettings::ShadowBlendMode, lyr );
|
||||
|
||||
// placement
|
||||
setDataDefinedProperty( mCentroidDDBtn, QgsPalLayerSettings::CentroidWhole, lyr );
|
||||
setDataDefinedProperty( mPointQuadOffsetDDBtn, QgsPalLayerSettings::OffsetQuad, lyr );
|
||||
setDataDefinedProperty( mPointPositionOrderDDBtn, QgsPalLayerSettings::PredefinedPositionOrder, lyr );
|
||||
setDataDefinedProperty( mPointOffsetDDBtn, QgsPalLayerSettings::OffsetXY, lyr );
|
||||
setDataDefinedProperty( mPointOffsetUnitsDDBtn, QgsPalLayerSettings::OffsetUnits, lyr );
|
||||
setDataDefinedProperty( mLineDistanceDDBtn, QgsPalLayerSettings::LabelDistance, lyr );
|
||||
setDataDefinedProperty( mLineDistanceUnitDDBtn, QgsPalLayerSettings::DistanceUnits, lyr );
|
||||
// TODO: is this necessary? maybe just use the data defined-only rotation?
|
||||
//setDataDefinedProperty( mPointAngleDDBtn, QgsPalLayerSettings::OffsetRotation, lyr );
|
||||
setDataDefinedProperty( mMaxCharAngleDDBtn, QgsPalLayerSettings::CurvedCharAngleInOut, lyr );
|
||||
setDataDefinedProperty( mRepeatDistanceDDBtn, QgsPalLayerSettings::RepeatDistance, lyr );
|
||||
setDataDefinedProperty( mRepeatDistanceUnitDDBtn, QgsPalLayerSettings::RepeatDistanceUnit, lyr );
|
||||
setDataDefinedProperty( mPriorityDDBtn, QgsPalLayerSettings::Priority, lyr );
|
||||
|
||||
// data defined-only
|
||||
setDataDefinedProperty( mCoordXDDBtn, QgsPalLayerSettings::PositionX, lyr );
|
||||
setDataDefinedProperty( mCoordYDDBtn, QgsPalLayerSettings::PositionY, lyr );
|
||||
setDataDefinedProperty( mCoordAlignmentHDDBtn, QgsPalLayerSettings::Hali, lyr );
|
||||
setDataDefinedProperty( mCoordAlignmentVDDBtn, QgsPalLayerSettings::Vali, lyr );
|
||||
setDataDefinedProperty( mCoordRotationDDBtn, QgsPalLayerSettings::Rotation, lyr );
|
||||
|
||||
// rendering
|
||||
setDataDefinedProperty( mScaleBasedVisibilityDDBtn, QgsPalLayerSettings::ScaleVisibility, lyr );
|
||||
setDataDefinedProperty( mScaleBasedVisibilityMinDDBtn, QgsPalLayerSettings::MinScale, lyr );
|
||||
setDataDefinedProperty( mScaleBasedVisibilityMaxDDBtn, QgsPalLayerSettings::MaxScale, lyr );
|
||||
setDataDefinedProperty( mFontLimitPixelDDBtn, QgsPalLayerSettings::FontLimitPixel, lyr );
|
||||
setDataDefinedProperty( mFontMinPixelDDBtn, QgsPalLayerSettings::FontMinPixel, lyr );
|
||||
setDataDefinedProperty( mFontMaxPixelDDBtn, QgsPalLayerSettings::FontMaxPixel, lyr );
|
||||
setDataDefinedProperty( mShowLabelDDBtn, QgsPalLayerSettings::Show, lyr );
|
||||
setDataDefinedProperty( mAlwaysShowDDBtn, QgsPalLayerSettings::AlwaysShow, lyr );
|
||||
setDataDefinedProperty( mIsObstacleDDBtn, QgsPalLayerSettings::IsObstacle, lyr );
|
||||
setDataDefinedProperty( mObstacleFactorDDBtn, QgsPalLayerSettings::ObstacleFactor, lyr );
|
||||
setDataDefinedProperty( mZIndexDDBtn, QgsPalLayerSettings::ZIndex, lyr );
|
||||
lyr.setProperties( mProperties );
|
||||
|
||||
return lyr;
|
||||
}
|
||||
|
||||
void QgsLabelingGui::setDataDefinedProperty( const QgsDataDefinedButton* ddBtn, QgsPalLayerSettings::DataDefinedProperties p, QgsPalLayerSettings& lyr )
|
||||
void QgsLabelingGui::populateDataDefinedButtons()
|
||||
{
|
||||
const QMap< QString, QString >& map = ddBtn->definedProperty();
|
||||
lyr.setDataDefinedProperty( p, map.value( QStringLiteral( "active" ) ).toInt(), map.value( QStringLiteral( "useexpr" ) ).toInt(), map.value( QStringLiteral( "expression" ) ), map.value( QStringLiteral( "field" ) ) );
|
||||
}
|
||||
|
||||
void QgsLabelingGui::populateDataDefinedButtons( QgsPalLayerSettings& s )
|
||||
{
|
||||
Q_FOREACH ( QgsDataDefinedButton* button, findChildren< QgsDataDefinedButton* >() )
|
||||
{
|
||||
button->registerExpressionContextGenerator( this );
|
||||
}
|
||||
|
||||
// don't register enable/disable siblings, since visual feedback from data defined buttons should be enough,
|
||||
// and ability to edit layer-level setting should remain enabled regardless
|
||||
|
||||
QString trString = tr( "string " );
|
||||
|
||||
// text style
|
||||
registerDataDefinedButton( mFontDDBtn, QgsPalLayerSettings::Family,
|
||||
QgsDataDefinedButtonV2::String,
|
||||
trString + tr( "[<b>family</b>|<b>family[foundry]</b>],<br>"
|
||||
"e.g. Helvetica or Helvetica [Cronyx]" ) );
|
||||
|
||||
mFontDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::Family ),
|
||||
QgsDataDefinedButton::String,
|
||||
trString + tr( "[<b>family</b>|<b>family[foundry]</b>],<br>"
|
||||
"e.g. Helvetica or Helvetica [Cronyx]" ) );
|
||||
registerDataDefinedButton( mFontStyleDDBtn, QgsPalLayerSettings::FontStyle,
|
||||
QgsDataDefinedButtonV2::String,
|
||||
trString + tr( "[<b>font style name</b>|<b>Ignore</b>],<br>"
|
||||
"e.g. Bold Condensed or Light Italic" ) );
|
||||
|
||||
mFontStyleDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::FontStyle ),
|
||||
QgsDataDefinedButton::String,
|
||||
trString + tr( "[<b>font style name</b>|<b>Ignore</b>],<br>"
|
||||
"e.g. Bold Condensed or Light Italic" ) );
|
||||
registerDataDefinedButton( mFontUnderlineDDBtn, QgsPalLayerSettings::Underline,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::boolDesc() );
|
||||
|
||||
mFontUnderlineDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::Underline ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::boolDesc() );
|
||||
registerDataDefinedButton( mFontStrikeoutDDBtn, QgsPalLayerSettings::Strikeout,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::boolDesc() );
|
||||
|
||||
mFontStrikeoutDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::Strikeout ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::boolDesc() );
|
||||
registerDataDefinedButton( mFontBoldDDBtn, QgsPalLayerSettings::Bold,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::boolDesc() );
|
||||
|
||||
mFontBoldDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::Bold ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::boolDesc() );
|
||||
registerDataDefinedButton( mFontItalicDDBtn, QgsPalLayerSettings::Italic,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::boolDesc() );
|
||||
|
||||
mFontItalicDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::Italic ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::boolDesc() );
|
||||
registerDataDefinedButton( mFontSizeDDBtn, QgsPalLayerSettings::Size,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::doublePosDesc() );
|
||||
|
||||
mFontSizeDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::Size ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doublePosDesc() );
|
||||
registerDataDefinedButton( mFontUnitsDDBtn, QgsPalLayerSettings::FontSizeUnit,
|
||||
QgsDataDefinedButtonV2::String, trString + "[<b>Points</b>|<b>MapUnit</b>]" );
|
||||
|
||||
mFontUnitsDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::FontSizeUnit ),
|
||||
QgsDataDefinedButton::String, trString + "[<b>Points</b>|<b>MapUnit</b>]" );
|
||||
registerDataDefinedButton( mFontColorDDBtn, QgsPalLayerSettings::Color,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::colorNoAlphaDesc() );
|
||||
|
||||
mFontColorDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::Color ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::colorNoAlphaDesc() );
|
||||
registerDataDefinedButton( mFontTranspDDBtn, QgsPalLayerSettings::FontTransp,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::intTranspDesc() );
|
||||
|
||||
mFontTranspDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::FontTransp ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::intTranspDesc() );
|
||||
registerDataDefinedButton( mFontCaseDDBtn, QgsPalLayerSettings::FontCase,
|
||||
QgsDataDefinedButtonV2::String,
|
||||
trString + QStringLiteral( "[<b>NoChange</b>|<b>Upper</b>|<br>"
|
||||
"<b>Lower</b>|<b>Capitalize</b>]" ) );
|
||||
|
||||
mFontCaseDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::FontCase ),
|
||||
QgsDataDefinedButton::String,
|
||||
trString + QStringLiteral( "[<b>NoChange</b>|<b>Upper</b>|<br>"
|
||||
"<b>Lower</b>|<b>Capitalize</b>]" ) );
|
||||
registerDataDefinedButton( mFontLetterSpacingDDBtn, QgsPalLayerSettings::FontLetterSpacing,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::doubleDesc() );
|
||||
registerDataDefinedButton( mFontWordSpacingDDBtn, QgsPalLayerSettings::FontWordSpacing,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::doubleDesc() );
|
||||
|
||||
mFontLetterSpacingDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::FontLetterSpacing ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
|
||||
mFontWordSpacingDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::FontWordSpacing ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
|
||||
|
||||
mFontBlendModeDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::FontBlendMode ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::blendModesDesc() );
|
||||
registerDataDefinedButton( mFontBlendModeDDBtn, QgsPalLayerSettings::FontBlendMode,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::blendModesDesc() );
|
||||
|
||||
// text formatting
|
||||
mWrapCharDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::MultiLineWrapChar ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::anyStringDesc() );
|
||||
mFontLineHeightDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::MultiLineHeight ),
|
||||
QgsDataDefinedButton::AnyType, tr( "double [0.0-10.0]" ) );
|
||||
mFontMultiLineAlignDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::MultiLineAlignment ),
|
||||
QgsDataDefinedButton::String, trString + "[<b>Left</b>|<b>Center</b>|<b>Right</b>|<b>Follow</b>]" );
|
||||
registerDataDefinedButton( mWrapCharDDBtn, QgsPalLayerSettings::MultiLineWrapChar,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::anyStringDesc() );
|
||||
registerDataDefinedButton( mFontLineHeightDDBtn, QgsPalLayerSettings::MultiLineHeight,
|
||||
QgsDataDefinedButtonV2::AnyType, tr( "double [0.0-10.0]" ) );
|
||||
registerDataDefinedButton( mFontMultiLineAlignDDBtn, QgsPalLayerSettings::MultiLineAlignment,
|
||||
QgsDataDefinedButtonV2::String, trString + "[<b>Left</b>|<b>Center</b>|<b>Right</b>|<b>Follow</b>]" );
|
||||
|
||||
mDirectSymbDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::DirSymbDraw ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::boolDesc() );
|
||||
registerDataDefinedButton( mDirectSymbDDBtn, QgsPalLayerSettings::DirSymbDraw,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::boolDesc() );
|
||||
mDirectSymbDDBtn->registerCheckedWidget( mDirectSymbChkBx );
|
||||
mDirectSymbLeftDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::DirSymbLeft ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::anyStringDesc() );
|
||||
mDirectSymbRightDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::DirSymbRight ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::anyStringDesc() );
|
||||
registerDataDefinedButton( mDirectSymbLeftDDBtn, QgsPalLayerSettings::DirSymbLeft,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::anyStringDesc() );
|
||||
registerDataDefinedButton( mDirectSymbRightDDBtn, QgsPalLayerSettings::DirSymbRight,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::anyStringDesc() );
|
||||
|
||||
mDirectSymbPlacementDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::DirSymbPlacement ),
|
||||
QgsDataDefinedButton::String,
|
||||
trString + "[<b>LeftRight</b>|<b>Above</b>|<b>Below</b>]" );
|
||||
mDirectSymbRevDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::DirSymbReverse ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::boolDesc() );
|
||||
registerDataDefinedButton( mDirectSymbPlacementDDBtn, QgsPalLayerSettings::DirSymbPlacement,
|
||||
QgsDataDefinedButtonV2::String,
|
||||
trString + "[<b>LeftRight</b>|<b>Above</b>|<b>Below</b>]" );
|
||||
registerDataDefinedButton( mDirectSymbRevDDBtn, QgsPalLayerSettings::DirSymbReverse,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::boolDesc() );
|
||||
|
||||
mFormatNumDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::NumFormat ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::boolDesc() );
|
||||
registerDataDefinedButton( mFormatNumDDBtn, QgsPalLayerSettings::NumFormat,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::boolDesc() );
|
||||
mFormatNumDDBtn->registerCheckedWidget( mFormatNumChkBx );
|
||||
mFormatNumDecimalsDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::NumDecimals ),
|
||||
QgsDataDefinedButton::AnyType, tr( "int [0-20]" ) );
|
||||
mFormatNumPlusSignDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::NumPlusSign ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::boolDesc() );
|
||||
registerDataDefinedButton( mFormatNumDecimalsDDBtn, QgsPalLayerSettings::NumDecimals,
|
||||
QgsDataDefinedButtonV2::AnyType, tr( "int [0-20]" ) );
|
||||
registerDataDefinedButton( mFormatNumPlusSignDDBtn, QgsPalLayerSettings::NumPlusSign,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::boolDesc() );
|
||||
|
||||
// text buffer
|
||||
mBufferDrawDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::BufferDraw ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::boolDesc() );
|
||||
registerDataDefinedButton( mBufferDrawDDBtn, QgsPalLayerSettings::BufferDraw,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::boolDesc() );
|
||||
mBufferDrawDDBtn->registerCheckedWidget( mBufferDrawChkBx );
|
||||
mBufferSizeDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::BufferSize ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doublePosDesc() );
|
||||
mBufferUnitsDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::BufferUnit ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::unitsMmMuDesc() );
|
||||
mBufferColorDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::BufferColor ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::colorNoAlphaDesc() );
|
||||
mBufferTranspDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::BufferTransp ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::intTranspDesc() );
|
||||
mBufferJoinStyleDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::BufferJoinStyle ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::penJoinStyleDesc() );
|
||||
mBufferBlendModeDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::BufferBlendMode ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::blendModesDesc() );
|
||||
registerDataDefinedButton( mBufferSizeDDBtn, QgsPalLayerSettings::BufferSize,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::doublePosDesc() );
|
||||
registerDataDefinedButton( mBufferUnitsDDBtn, QgsPalLayerSettings::BufferUnit,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::unitsMmMuDesc() );
|
||||
registerDataDefinedButton( mBufferColorDDBtn, QgsPalLayerSettings::BufferColor,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::colorNoAlphaDesc() );
|
||||
registerDataDefinedButton( mBufferTranspDDBtn, QgsPalLayerSettings::BufferTransp,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::intTranspDesc() );
|
||||
registerDataDefinedButton( mBufferJoinStyleDDBtn, QgsPalLayerSettings::BufferJoinStyle,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::penJoinStyleDesc() );
|
||||
registerDataDefinedButton( mBufferBlendModeDDBtn, QgsPalLayerSettings::BufferBlendMode,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::blendModesDesc() );
|
||||
|
||||
// background
|
||||
mShapeDrawDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShapeDraw ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::boolDesc() );
|
||||
registerDataDefinedButton( mShapeDrawDDBtn, QgsPalLayerSettings::ShapeDraw,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::boolDesc() );
|
||||
mShapeDrawDDBtn->registerCheckedWidget( mShapeDrawChkBx );
|
||||
mShapeTypeDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShapeKind ),
|
||||
QgsDataDefinedButton::String,
|
||||
trString + QStringLiteral( "[<b>Rectangle</b>|<b>Square</b>|<br>"
|
||||
"<b>Ellipse</b>|<b>Circle</b>|<b>SVG</b>]" ) );
|
||||
mShapeSVGPathDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShapeSVGFile ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::svgPathDesc() );
|
||||
mShapeSizeTypeDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShapeSizeType ),
|
||||
QgsDataDefinedButton::String,
|
||||
registerDataDefinedButton( mShapeTypeDDBtn, QgsPalLayerSettings::ShapeKind,
|
||||
QgsDataDefinedButtonV2::String,
|
||||
trString + QStringLiteral( "[<b>Rectangle</b>|<b>Square</b>|<br>"
|
||||
"<b>Ellipse</b>|<b>Circle</b>|<b>SVG</b>]" ) );
|
||||
registerDataDefinedButton( mShapeSVGPathDDBtn, QgsPalLayerSettings::ShapeSVGFile,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::svgPathDesc() );
|
||||
registerDataDefinedButton( mShapeSizeTypeDDBtn, QgsPalLayerSettings::ShapeSizeType,
|
||||
QgsDataDefinedButtonV2::String,
|
||||
trString + "[<b>Buffer</b>|<b>Fixed</b>]" );
|
||||
mShapeSizeXDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShapeSizeX ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
|
||||
mShapeSizeYDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShapeSizeY ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
|
||||
mShapeSizeUnitsDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShapeSizeUnits ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::unitsMmMuDesc() );
|
||||
mShapeRotationTypeDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShapeRotationType ),
|
||||
QgsDataDefinedButton::String,
|
||||
trString + "[<b>Sync</b>|<b>Offset</b>|<b>Fixed</b>]" );
|
||||
mShapeRotationDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShapeRotation ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::double180RotDesc() );
|
||||
mShapeOffsetDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShapeOffset ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleXYDesc() );
|
||||
mShapeOffsetUnitsDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShapeOffsetUnits ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::unitsMmMuDesc() );
|
||||
mShapeRadiusDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShapeRadii ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleXYDesc() );
|
||||
mShapeRadiusUnitsDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShapeRadiiUnits ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::unitsMmMuPercentDesc() );
|
||||
mShapeTranspDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShapeTransparency ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::intTranspDesc() );
|
||||
mShapeBlendModeDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShapeBlendMode ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::blendModesDesc() );
|
||||
mShapeFillColorDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShapeFillColor ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::colorAlphaDesc() );
|
||||
mShapeBorderColorDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShapeBorderColor ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::colorAlphaDesc() );
|
||||
mShapeBorderWidthDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShapeBorderWidth ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doublePosDesc() );
|
||||
mShapeBorderUnitsDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShapeBorderWidthUnits ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::unitsMmMuDesc() );
|
||||
mShapePenStyleDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShapeJoinStyle ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::penJoinStyleDesc() );
|
||||
registerDataDefinedButton( mShapeSizeXDDBtn, QgsPalLayerSettings::ShapeSizeX,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::doubleDesc() );
|
||||
registerDataDefinedButton( mShapeSizeYDDBtn, QgsPalLayerSettings::ShapeSizeY,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::doubleDesc() );
|
||||
registerDataDefinedButton( mShapeSizeUnitsDDBtn, QgsPalLayerSettings::ShapeSizeUnits,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::unitsMmMuDesc() );
|
||||
registerDataDefinedButton( mShapeRotationTypeDDBtn, QgsPalLayerSettings::ShapeRotationType,
|
||||
QgsDataDefinedButtonV2::String,
|
||||
trString + "[<b>Sync</b>|<b>Offset</b>|<b>Fixed</b>]" );
|
||||
registerDataDefinedButton( mShapeRotationDDBtn, QgsPalLayerSettings::ShapeRotation,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::double180RotDesc() );
|
||||
registerDataDefinedButton( mShapeOffsetDDBtn, QgsPalLayerSettings::ShapeOffset,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::doubleXYDesc() );
|
||||
registerDataDefinedButton( mShapeOffsetUnitsDDBtn, QgsPalLayerSettings::ShapeOffsetUnits,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::unitsMmMuDesc() );
|
||||
registerDataDefinedButton( mShapeRadiusDDBtn, QgsPalLayerSettings::ShapeRadii,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::doubleXYDesc() );
|
||||
registerDataDefinedButton( mShapeRadiusUnitsDDBtn, QgsPalLayerSettings::ShapeRadiiUnits,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::unitsMmMuPercentDesc() );
|
||||
registerDataDefinedButton( mShapeTranspDDBtn, QgsPalLayerSettings::ShapeTransparency,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::intTranspDesc() );
|
||||
registerDataDefinedButton( mShapeBlendModeDDBtn, QgsPalLayerSettings::ShapeBlendMode,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::blendModesDesc() );
|
||||
registerDataDefinedButton( mShapeFillColorDDBtn, QgsPalLayerSettings::ShapeFillColor,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::colorAlphaDesc() );
|
||||
registerDataDefinedButton( mShapeBorderColorDDBtn, QgsPalLayerSettings::ShapeBorderColor,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::colorAlphaDesc() );
|
||||
registerDataDefinedButton( mShapeBorderWidthDDBtn, QgsPalLayerSettings::ShapeBorderWidth,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::doublePosDesc() );
|
||||
registerDataDefinedButton( mShapeBorderUnitsDDBtn, QgsPalLayerSettings::ShapeBorderWidthUnits,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::unitsMmMuDesc() );
|
||||
registerDataDefinedButton( mShapePenStyleDDBtn, QgsPalLayerSettings::ShapeJoinStyle,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::penJoinStyleDesc() );
|
||||
|
||||
// drop shadows
|
||||
mShadowDrawDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShadowDraw ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::boolDesc() );
|
||||
registerDataDefinedButton( mShadowDrawDDBtn, QgsPalLayerSettings::ShadowDraw,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::boolDesc() );
|
||||
mShadowDrawDDBtn->registerCheckedWidget( mShadowDrawChkBx );
|
||||
mShadowUnderDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShadowUnder ),
|
||||
QgsDataDefinedButton::String,
|
||||
trString + QStringLiteral( "[<b>Lowest</b>|<b>Text</b>|<br>"
|
||||
"<b>Buffer</b>|<b>Background</b>]" ) );
|
||||
mShadowOffsetAngleDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShadowOffsetAngle ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::double180RotDesc() );
|
||||
mShadowOffsetDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShadowOffsetDist ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doublePosDesc() );
|
||||
mShadowOffsetUnitsDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShadowOffsetUnits ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::unitsMmMuDesc() );
|
||||
mShadowRadiusDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShadowRadius ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doublePosDesc() );
|
||||
mShadowRadiusUnitsDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShadowRadiusUnits ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::unitsMmMuDesc() );
|
||||
mShadowTranspDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShadowTransparency ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::intTranspDesc() );
|
||||
mShadowScaleDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShadowScale ),
|
||||
QgsDataDefinedButton::AnyType, tr( "int [0-2000]" ) );
|
||||
mShadowColorDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShadowColor ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::colorNoAlphaDesc() );
|
||||
mShadowBlendDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ShadowBlendMode ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::blendModesDesc() );
|
||||
registerDataDefinedButton( mShadowUnderDDBtn, QgsPalLayerSettings::ShadowUnder,
|
||||
QgsDataDefinedButtonV2::String,
|
||||
trString + QStringLiteral( "[<b>Lowest</b>|<b>Text</b>|<br>"
|
||||
"<b>Buffer</b>|<b>Background</b>]" ) );
|
||||
registerDataDefinedButton( mShadowOffsetAngleDDBtn, QgsPalLayerSettings::ShadowOffsetAngle,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::double180RotDesc() );
|
||||
registerDataDefinedButton( mShadowOffsetDDBtn, QgsPalLayerSettings::ShadowOffsetDist,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::doublePosDesc() );
|
||||
registerDataDefinedButton( mShadowOffsetUnitsDDBtn, QgsPalLayerSettings::ShadowOffsetUnits,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::unitsMmMuDesc() );
|
||||
registerDataDefinedButton( mShadowRadiusDDBtn, QgsPalLayerSettings::ShadowRadius,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::doublePosDesc() );
|
||||
registerDataDefinedButton( mShadowRadiusUnitsDDBtn, QgsPalLayerSettings::ShadowRadiusUnits,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::unitsMmMuDesc() );
|
||||
registerDataDefinedButton( mShadowTranspDDBtn, QgsPalLayerSettings::ShadowTransparency,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::intTranspDesc() );
|
||||
registerDataDefinedButton( mShadowScaleDDBtn, QgsPalLayerSettings::ShadowScale,
|
||||
QgsDataDefinedButtonV2::AnyType, tr( "int [0-2000]" ) );
|
||||
registerDataDefinedButton( mShadowColorDDBtn, QgsPalLayerSettings::ShadowColor,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::colorNoAlphaDesc() );
|
||||
registerDataDefinedButton( mShadowBlendDDBtn, QgsPalLayerSettings::ShadowBlendMode,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::blendModesDesc() );
|
||||
|
||||
// placement
|
||||
mCentroidDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::CentroidWhole ),
|
||||
QgsDataDefinedButton::String,
|
||||
trString + "[<b>Visible</b>|<b>Whole</b>]" );
|
||||
mPointQuadOffsetDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::OffsetQuad ),
|
||||
QgsDataDefinedButton::AnyType,
|
||||
tr( "int<br>" ) + QStringLiteral( "[<b>0</b>=Above Left|<b>1</b>=Above|<b>2</b>=Above Right|<br>"
|
||||
"<b>3</b>=Left|<b>4</b>=Over|<b>5</b>=Right|<br>"
|
||||
"<b>6</b>=Below Left|<b>7</b>=Below|<b>8</b>=Below Right]" ) );
|
||||
mPointPositionOrderDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::PredefinedPositionOrder ),
|
||||
QgsDataDefinedButton::String,
|
||||
tr( "Comma separated list of placements in order of priority<br>" )
|
||||
+ QStringLiteral( "[<b>TL</b>=Top left|<b>TSL</b>=Top, slightly left|<b>T</b>=Top middle|<br>"
|
||||
"<b>TSR</b>=Top, slightly right|<b>TR</b>=Top right|<br>"
|
||||
"<b>L</b>=Left|<b>R</b>=Right|<br>"
|
||||
"<b>BL</b>=Bottom left|<b>BSL</b>=Bottom, slightly left|<b>B</b>=Bottom middle|<br>"
|
||||
"<b>BSR</b>=Bottom, slightly right|<b>BR</b>=Bottom right]" ) );
|
||||
mPointOffsetDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::OffsetXY ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleXYDesc() );
|
||||
mPointOffsetUnitsDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::OffsetUnits ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::unitsMmMuDesc() );
|
||||
mLineDistanceDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::LabelDistance ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doublePosDesc() );
|
||||
mLineDistanceUnitDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::DistanceUnits ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::unitsMmMuDesc() );
|
||||
mPriorityDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::Priority ),
|
||||
QgsDataDefinedButton::AnyType, tr( "double [0.0-10.0]" ) );
|
||||
registerDataDefinedButton( mCentroidDDBtn, QgsPalLayerSettings::CentroidWhole,
|
||||
QgsDataDefinedButtonV2::String,
|
||||
trString + "[<b>Visible</b>|<b>Whole</b>]" );
|
||||
registerDataDefinedButton( mPointQuadOffsetDDBtn, QgsPalLayerSettings::OffsetQuad,
|
||||
QgsDataDefinedButtonV2::AnyType,
|
||||
tr( "int<br>" ) + QStringLiteral( "[<b>0</b>=Above Left|<b>1</b>=Above|<b>2</b>=Above Right|<br>"
|
||||
"<b>3</b>=Left|<b>4</b>=Over|<b>5</b>=Right|<br>"
|
||||
"<b>6</b>=Below Left|<b>7</b>=Below|<b>8</b>=Below Right]" ) );
|
||||
registerDataDefinedButton( mPointPositionOrderDDBtn, QgsPalLayerSettings::PredefinedPositionOrder,
|
||||
QgsDataDefinedButtonV2::String,
|
||||
tr( "Comma separated list of placements in order of priority<br>" )
|
||||
+ QStringLiteral( "[<b>TL</b>=Top left|<b>TSL</b>=Top, slightly left|<b>T</b>=Top middle|<br>"
|
||||
"<b>TSR</b>=Top, slightly right|<b>TR</b>=Top right|<br>"
|
||||
"<b>L</b>=Left|<b>R</b>=Right|<br>"
|
||||
"<b>BL</b>=Bottom left|<b>BSL</b>=Bottom, slightly left|<b>B</b>=Bottom middle|<br>"
|
||||
"<b>BSR</b>=Bottom, slightly right|<b>BR</b>=Bottom right]" ) );
|
||||
registerDataDefinedButton( mPointOffsetDDBtn, QgsPalLayerSettings::OffsetXY,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::doubleXYDesc() );
|
||||
registerDataDefinedButton( mPointOffsetUnitsDDBtn, QgsPalLayerSettings::OffsetUnits,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::unitsMmMuDesc() );
|
||||
registerDataDefinedButton( mLineDistanceDDBtn, QgsPalLayerSettings::LabelDistance,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::doublePosDesc() );
|
||||
registerDataDefinedButton( mLineDistanceUnitDDBtn, QgsPalLayerSettings::DistanceUnits,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::unitsMmMuDesc() );
|
||||
registerDataDefinedButton( mPriorityDDBtn, QgsPalLayerSettings::Priority,
|
||||
QgsDataDefinedButtonV2::AnyType, tr( "double [0.0-10.0]" ) );
|
||||
|
||||
// TODO: is this necessary? maybe just use the data defined-only rotation?
|
||||
//mPointAngleDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::OffsetRotation ),
|
||||
// QgsDataDefinedButton::AnyType, QgsDataDefinedButton::double180RotDesc() );
|
||||
mMaxCharAngleDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::CurvedCharAngleInOut ),
|
||||
QgsDataDefinedButton::AnyType, tr( "double coord [<b>in,out</b> as 20.0-60.0,20.0-95.0]" ) );
|
||||
mRepeatDistanceDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::RepeatDistance ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doublePosDesc() );
|
||||
mRepeatDistanceUnitDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::RepeatDistanceUnit ),
|
||||
QgsDataDefinedButton::String, QgsDataDefinedButton::unitsMmMuDesc() );
|
||||
//mPointAngleDDBtn, QgsPalLayerSettings::OffsetRotation,
|
||||
// QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::double180RotDesc() );
|
||||
registerDataDefinedButton( mMaxCharAngleDDBtn, QgsPalLayerSettings::CurvedCharAngleInOut,
|
||||
QgsDataDefinedButtonV2::AnyType, tr( "double coord [<b>in,out</b> as 20.0-60.0,20.0-95.0]" ) );
|
||||
registerDataDefinedButton( mRepeatDistanceDDBtn, QgsPalLayerSettings::RepeatDistance,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::doublePosDesc() );
|
||||
registerDataDefinedButton( mRepeatDistanceUnitDDBtn, QgsPalLayerSettings::RepeatDistanceUnit,
|
||||
QgsDataDefinedButtonV2::String, QgsDataDefinedButtonV2::unitsMmMuDesc() );
|
||||
|
||||
// data defined-only
|
||||
QString ddPlaceInfo = tr( "In edit mode, layer's relevant labeling map tool is:<br>"
|
||||
" Defined attribute field -> <i>enabled</i><br>"
|
||||
" Defined expression -> <i>disabled</i>" );
|
||||
mCoordXDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::PositionX ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
|
||||
registerDataDefinedButton( mCoordXDDBtn, QgsPalLayerSettings::PositionX,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::doubleDesc() );
|
||||
mCoordXDDBtn->setUsageInfo( ddPlaceInfo );
|
||||
mCoordYDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::PositionY ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
|
||||
registerDataDefinedButton( mCoordYDDBtn, QgsPalLayerSettings::PositionY,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::doubleDesc() );
|
||||
mCoordYDDBtn->setUsageInfo( ddPlaceInfo );
|
||||
mCoordAlignmentHDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::Hali ),
|
||||
QgsDataDefinedButton::String,
|
||||
trString + "[<b>Left</b>|<b>Center</b>|<b>Right</b>]" );
|
||||
registerDataDefinedButton( mCoordAlignmentHDDBtn, QgsPalLayerSettings::Hali,
|
||||
QgsDataDefinedButtonV2::String,
|
||||
trString + "[<b>Left</b>|<b>Center</b>|<b>Right</b>]" );
|
||||
mCoordAlignmentHDDBtn->setUsageInfo( ddPlaceInfo );
|
||||
mCoordAlignmentVDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::Vali ),
|
||||
QgsDataDefinedButton::String,
|
||||
trString + QStringLiteral( "[<b>Bottom</b>|<b>Base</b>|<br>"
|
||||
"<b>Half</b>|<b>Cap</b>|<b>Top</b>]" ) );
|
||||
registerDataDefinedButton( mCoordAlignmentVDDBtn, QgsPalLayerSettings::Vali,
|
||||
QgsDataDefinedButtonV2::String,
|
||||
trString + QStringLiteral( "[<b>Bottom</b>|<b>Base</b>|<br>"
|
||||
"<b>Half</b>|<b>Cap</b>|<b>Top</b>]" ) );
|
||||
mCoordAlignmentVDDBtn->setUsageInfo( ddPlaceInfo );
|
||||
mCoordRotationDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::Rotation ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::double180RotDesc() );
|
||||
registerDataDefinedButton( mCoordRotationDDBtn, QgsPalLayerSettings::Rotation,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::double180RotDesc() );
|
||||
mCoordRotationDDBtn->setUsageInfo( ddPlaceInfo );
|
||||
|
||||
// rendering
|
||||
QString ddScaleVisInfo = tr( "Value < 0 represents a scale closer than 1:1, e.g. -10 = 10:1<br>"
|
||||
"Value of 0 disables the specific limit." );
|
||||
mScaleBasedVisibilityDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ScaleVisibility ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::boolDesc() );
|
||||
registerDataDefinedButton( mScaleBasedVisibilityDDBtn, QgsPalLayerSettings::ScaleVisibility,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::boolDesc() );
|
||||
mScaleBasedVisibilityDDBtn->registerCheckedWidget( mScaleBasedVisibilityChkBx );
|
||||
mScaleBasedVisibilityMinDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::MinScale ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::intDesc() );
|
||||
registerDataDefinedButton( mScaleBasedVisibilityMinDDBtn, QgsPalLayerSettings::MinScale,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::intDesc() );
|
||||
mScaleBasedVisibilityMinDDBtn->setUsageInfo( ddScaleVisInfo );
|
||||
mScaleBasedVisibilityMaxDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::MaxScale ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::intDesc() );
|
||||
registerDataDefinedButton( mScaleBasedVisibilityMaxDDBtn, QgsPalLayerSettings::MaxScale,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::intDesc() );
|
||||
mScaleBasedVisibilityMaxDDBtn->setUsageInfo( ddScaleVisInfo );
|
||||
|
||||
mFontLimitPixelDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::FontLimitPixel ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::boolDesc() );
|
||||
registerDataDefinedButton( mFontLimitPixelDDBtn, QgsPalLayerSettings::FontLimitPixel,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::boolDesc() );
|
||||
mFontLimitPixelDDBtn->registerCheckedWidget( mFontLimitPixelChkBox );
|
||||
mFontMinPixelDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::FontMinPixel ),
|
||||
QgsDataDefinedButton::AnyType, tr( "int [1-1000]" ) );
|
||||
mFontMaxPixelDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::FontMaxPixel ),
|
||||
QgsDataDefinedButton::AnyType, tr( "int [1-10000]" ) );
|
||||
registerDataDefinedButton( mFontMinPixelDDBtn, QgsPalLayerSettings::FontMinPixel,
|
||||
QgsDataDefinedButtonV2::AnyType, tr( "int [1-1000]" ) );
|
||||
registerDataDefinedButton( mFontMaxPixelDDBtn, QgsPalLayerSettings::FontMaxPixel,
|
||||
QgsDataDefinedButtonV2::AnyType, tr( "int [1-10000]" ) );
|
||||
|
||||
mShowLabelDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::Show ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::boolDesc() );
|
||||
registerDataDefinedButton( mShowLabelDDBtn, QgsPalLayerSettings::Show,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::boolDesc() );
|
||||
|
||||
mAlwaysShowDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::AlwaysShow ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::boolDesc() );
|
||||
registerDataDefinedButton( mAlwaysShowDDBtn, QgsPalLayerSettings::AlwaysShow,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::boolDesc() );
|
||||
|
||||
mIsObstacleDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::IsObstacle ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::boolDesc() );
|
||||
mObstacleFactorDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ObstacleFactor ),
|
||||
QgsDataDefinedButton::AnyType, tr( "double [0.0-10.0]" ) );
|
||||
mZIndexDDBtn->init( mLayer, s.dataDefinedProperty( QgsPalLayerSettings::ZIndex ),
|
||||
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
|
||||
registerDataDefinedButton( mIsObstacleDDBtn, QgsPalLayerSettings::IsObstacle,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::boolDesc() );
|
||||
registerDataDefinedButton( mObstacleFactorDDBtn, QgsPalLayerSettings::ObstacleFactor,
|
||||
QgsDataDefinedButtonV2::AnyType, tr( "double [0.0-10.0]" ) );
|
||||
registerDataDefinedButton( mZIndexDDBtn, QgsPalLayerSettings::ZIndex,
|
||||
QgsDataDefinedButtonV2::AnyType, QgsDataDefinedButtonV2::doubleDesc() );
|
||||
}
|
||||
|
||||
void QgsLabelingGui::syncDefinedCheckboxFrame( QgsDataDefinedButton* ddBtn, QCheckBox* chkBx, QFrame* f )
|
||||
void QgsLabelingGui::syncDefinedCheckboxFrame( QgsDataDefinedButtonV2* ddBtn, QCheckBox* chkBx, QFrame* f )
|
||||
{
|
||||
if ( ddBtn->isActive() && !chkBx->isChecked() )
|
||||
{
|
||||
|
@ -20,6 +20,7 @@
|
||||
|
||||
#include "qgspallabeling.h"
|
||||
#include "qgstextformatwidget.h"
|
||||
#include "qgsdatadefinedbuttonv2.h"
|
||||
#include "qgis_app.h"
|
||||
|
||||
class APP_EXPORT QgsLabelingGui : public QgsTextFormatWidget, private QgsExpressionContextGenerator
|
||||
@ -51,18 +52,23 @@ class APP_EXPORT QgsLabelingGui : public QgsTextFormatWidget, private QgsExpress
|
||||
|
||||
protected:
|
||||
void blockInitSignals( bool block );
|
||||
void syncDefinedCheckboxFrame( QgsDataDefinedButton* ddBtn, QCheckBox* chkBx, QFrame* f );
|
||||
void populateDataDefinedButtons( QgsPalLayerSettings& s );
|
||||
//! Sets data defined property attribute to map
|
||||
void setDataDefinedProperty( const QgsDataDefinedButton* ddBtn, QgsPalLayerSettings::DataDefinedProperties p, QgsPalLayerSettings& lyr );
|
||||
void syncDefinedCheckboxFrame( QgsDataDefinedButtonV2* ddBtn, QCheckBox* chkBx, QFrame* f );
|
||||
|
||||
private:
|
||||
QgsVectorLayer* mLayer;
|
||||
const QgsPalLayerSettings* mSettings;
|
||||
QgsPropertyCollection mProperties;
|
||||
LabelMode mMode;
|
||||
|
||||
QgsExpressionContext createExpressionContext() const override;
|
||||
|
||||
void populateDataDefinedButtons();
|
||||
void registerDataDefinedButton( QgsDataDefinedButtonV2 *button, QgsPalLayerSettings::Property key, QgsDataDefinedButtonV2::DataType type, const QString &description );
|
||||
|
||||
private slots:
|
||||
|
||||
void updateProperty();
|
||||
|
||||
};
|
||||
|
||||
#endif // QGSLABELINGGUI_H
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include "qgisapp.h"
|
||||
#include "qgsmapcanvas.h"
|
||||
#include "qgsvectorlayerlabeling.h"
|
||||
|
||||
#include "qgsproperty.h"
|
||||
#include <QColorDialog>
|
||||
#include <QFontDatabase>
|
||||
#include <QSettings>
|
||||
@ -49,8 +49,6 @@ QgsLabelPropertyDialog::~QgsLabelPropertyDialog()
|
||||
{
|
||||
QSettings settings;
|
||||
settings.setValue( QStringLiteral( "/Windows/ChangeLabelProps/geometry" ), saveGeometry() );
|
||||
|
||||
qDeleteAll( mDataDefinedProperties );
|
||||
}
|
||||
|
||||
void QgsLabelPropertyDialog::on_buttonBox_clicked( QAbstractButton *button )
|
||||
@ -153,14 +151,10 @@ void QgsLabelPropertyDialog::init( const QString& layerId, const QString& provid
|
||||
|
||||
disableGuiElements();
|
||||
|
||||
QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* >::const_iterator it = layerSettings.dataDefinedProperties.constBegin();
|
||||
for ( ; it != layerSettings.dataDefinedProperties.constEnd(); ++it )
|
||||
{
|
||||
mDataDefinedProperties.insert( it.key(), it.value() ? new QgsDataDefined( *it.value() ) : nullptr );
|
||||
}
|
||||
mDataDefinedProperties = layerSettings.properties();
|
||||
|
||||
//set widget values from data defined results
|
||||
setDataDefinedValues( layerSettings, vlayer );
|
||||
setDataDefinedValues( vlayer );
|
||||
//enable widgets connected to data defined fields
|
||||
enableDataDefinedWidgets( vlayer );
|
||||
|
||||
@ -215,7 +209,7 @@ void QgsLabelPropertyDialog::blockElementSignals( bool block )
|
||||
mRotationSpinBox->blockSignals( block );
|
||||
}
|
||||
|
||||
void QgsLabelPropertyDialog::setDataDefinedValues( const QgsPalLayerSettings &layerSettings, QgsVectorLayer* vlayer )
|
||||
void QgsLabelPropertyDialog::setDataDefinedValues( QgsVectorLayer* vlayer )
|
||||
{
|
||||
//loop through data defined properties and set all the GUI widget values. We can do this
|
||||
//even if the data defined property is set to an expression, as it's useful to show
|
||||
@ -229,22 +223,13 @@ void QgsLabelPropertyDialog::setDataDefinedValues( const QgsPalLayerSettings &la
|
||||
<< QgsExpressionContextUtils::layerScope( vlayer );
|
||||
context.setFeature( mCurLabelFeat );
|
||||
|
||||
QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* >::const_iterator propIt = mDataDefinedProperties.constBegin();
|
||||
for ( ; propIt != mDataDefinedProperties.constEnd(); ++propIt )
|
||||
Q_FOREACH ( int key, mDataDefinedProperties.propertyKeys() )
|
||||
{
|
||||
QgsDataDefined* dd = propIt.value();
|
||||
if ( !dd || !dd->isActive() )
|
||||
{
|
||||
if ( !mDataDefinedProperties.isActive( key ) )
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( !dd->expressionIsPrepared() )
|
||||
{
|
||||
dd->prepareExpression( context );
|
||||
}
|
||||
|
||||
//TODO - pass expression context
|
||||
QVariant result = layerSettings.dataDefinedValue( propIt.key(), mCurLabelFeat, vlayer->fields(), &context );
|
||||
QVariant result = mDataDefinedProperties.value( key, context );
|
||||
if ( !result.isValid() || result.isNull() )
|
||||
{
|
||||
//could not evaluate data defined value
|
||||
@ -252,7 +237,7 @@ void QgsLabelPropertyDialog::setDataDefinedValues( const QgsPalLayerSettings &la
|
||||
}
|
||||
|
||||
bool ok = false;
|
||||
switch ( propIt.key() )
|
||||
switch ( key )
|
||||
{
|
||||
case QgsPalLayerSettings::Show:
|
||||
{
|
||||
@ -362,20 +347,20 @@ void QgsLabelPropertyDialog::enableDataDefinedWidgets( QgsVectorLayer* vlayer )
|
||||
{
|
||||
//loop through data defined properties, this time setting whether or not the widgets are enabled
|
||||
//this can only be done for properties which are assigned to fields
|
||||
QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* >::const_iterator propIt = mDataDefinedProperties.constBegin();
|
||||
for ( ; propIt != mDataDefinedProperties.constEnd(); ++propIt )
|
||||
Q_FOREACH ( int key, mDataDefinedProperties.propertyKeys() )
|
||||
{
|
||||
QgsDataDefined* dd = propIt.value();
|
||||
if ( !dd )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
QString ddField = dd->field();
|
||||
if ( !dd->isActive() || dd->useExpression() || ddField.isEmpty() )
|
||||
QgsAbstractProperty* prop = mDataDefinedProperties.property( key );
|
||||
if ( !prop || !prop->isActive() || prop->propertyType() != QgsAbstractProperty::FieldBasedProperty )
|
||||
{
|
||||
continue; // can only modify attributes with an active data definition of a mapped field
|
||||
}
|
||||
|
||||
QString ddField = static_cast< QgsFieldBasedProperty*>( prop )->field();
|
||||
if ( ddField.isEmpty() )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
int ddIndx = vlayer->fields().lookupField( ddField );
|
||||
if ( ddIndx == -1 )
|
||||
{
|
||||
@ -384,7 +369,7 @@ void QgsLabelPropertyDialog::enableDataDefinedWidgets( QgsVectorLayer* vlayer )
|
||||
|
||||
QgsDebugMsg( QString( "ddField: %1" ).arg( ddField ) );
|
||||
|
||||
switch ( propIt.key() )
|
||||
switch ( key )
|
||||
{
|
||||
case QgsPalLayerSettings::Show:
|
||||
mShowLabelChkbx->setEnabled( true );
|
||||
@ -664,16 +649,14 @@ void QgsLabelPropertyDialog::on_mLabelTextLineEdit_textChanged( const QString& t
|
||||
}
|
||||
}
|
||||
|
||||
void QgsLabelPropertyDialog::insertChangedValue( QgsPalLayerSettings::DataDefinedProperties p, const QVariant& value )
|
||||
void QgsLabelPropertyDialog::insertChangedValue( QgsPalLayerSettings::Property p, const QVariant& value )
|
||||
{
|
||||
QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* >::const_iterator ddIt = mDataDefinedProperties.constFind( p );
|
||||
if ( ddIt != mDataDefinedProperties.constEnd() )
|
||||
if ( mDataDefinedProperties.isActive( p ) )
|
||||
{
|
||||
QgsDataDefined* dd = ddIt.value();
|
||||
|
||||
if ( dd && dd->isActive() && !dd->useExpression() && !dd->field().isEmpty() )
|
||||
QgsAbstractProperty* prop = mDataDefinedProperties.property( p );
|
||||
if ( prop->propertyType() == QgsAbstractProperty::FieldBasedProperty )
|
||||
{
|
||||
mChangedProperties.insert( mCurLabelFeat.fieldNameIndex( dd->field() ), value );
|
||||
mChangedProperties.insert( mCurLabelFeat.fieldNameIndex( static_cast< QgsFieldBasedProperty* >( prop )->field() ), value );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -74,7 +74,7 @@ class APP_EXPORT QgsLabelPropertyDialog: public QDialog, private Ui::QgsLabelPro
|
||||
//! Block / unblock all input element signals
|
||||
void blockElementSignals( bool block );
|
||||
|
||||
void setDataDefinedValues( const QgsPalLayerSettings &layerSettings, QgsVectorLayer* vlayer );
|
||||
void setDataDefinedValues( QgsVectorLayer* vlayer );
|
||||
void enableDataDefinedWidgets( QgsVectorLayer* vlayer );
|
||||
|
||||
//! Updates font when family or style is updated
|
||||
@ -87,10 +87,10 @@ class APP_EXPORT QgsLabelPropertyDialog: public QDialog, private Ui::QgsLabelPro
|
||||
void fillValiComboBox();
|
||||
|
||||
//! Insert changed value into mChangedProperties
|
||||
void insertChangedValue( QgsPalLayerSettings::DataDefinedProperties p, const QVariant& value );
|
||||
void insertChangedValue( QgsPalLayerSettings::Property p, const QVariant& value );
|
||||
|
||||
QgsAttributeMap mChangedProperties;
|
||||
QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* > mDataDefinedProperties;
|
||||
QgsPropertyCollection mDataDefinedProperties;
|
||||
QFont mLabelFont;
|
||||
|
||||
QFontDatabase mFontDB;
|
||||
|
@ -409,23 +409,19 @@ bool QgsMapToolLabel::hasDataDefinedColumn( QgsPalLayerSettings::DataDefinedProp
|
||||
}
|
||||
#endif
|
||||
|
||||
QString QgsMapToolLabel::dataDefinedColumnName( QgsPalLayerSettings::DataDefinedProperties p, const QgsPalLayerSettings& labelSettings ) const
|
||||
QString QgsMapToolLabel::dataDefinedColumnName( QgsPalLayerSettings::Property p, const QgsPalLayerSettings& labelSettings ) const
|
||||
{
|
||||
//QgsDebugMsg( QString( "dataDefinedProperties count:%1" ).arg( labelSettings.dataDefinedProperties.size() ) );
|
||||
if ( !labelSettings.properties().isActive( p ) )
|
||||
return QString();
|
||||
|
||||
QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* >::const_iterator dIt = labelSettings.dataDefinedProperties.constFind( p );
|
||||
if ( dIt != labelSettings.dataDefinedProperties.constEnd() )
|
||||
{
|
||||
QgsDataDefined* dd = dIt.value();
|
||||
const QgsAbstractProperty* prop = labelSettings.properties().property( p );
|
||||
if ( prop->propertyType() != QgsAbstractProperty::FieldBasedProperty )
|
||||
return QString();
|
||||
|
||||
// can only modify attributes that are data defined with a mapped field
|
||||
if ( dd->isActive() && !dd->useExpression() && !dd->field().isEmpty() )
|
||||
return dd->field();
|
||||
}
|
||||
return QString();
|
||||
return static_cast< const QgsFieldBasedProperty* >( prop )->field();
|
||||
}
|
||||
|
||||
int QgsMapToolLabel::dataDefinedColumnIndex( QgsPalLayerSettings::DataDefinedProperties p, const QgsPalLayerSettings& labelSettings, const QgsVectorLayer* vlayer ) const
|
||||
int QgsMapToolLabel::dataDefinedColumnIndex( QgsPalLayerSettings::Property p, const QgsPalLayerSettings& labelSettings, const QgsVectorLayer* vlayer ) const
|
||||
{
|
||||
QString fieldname = dataDefinedColumnName( p, labelSettings );
|
||||
if ( !fieldname.isEmpty() )
|
||||
|
@ -117,11 +117,11 @@ class APP_EXPORT QgsMapToolLabel: public QgsMapTool
|
||||
QFont currentLabelFont();
|
||||
|
||||
//! Returns a data defined attribute column name for particular property or empty string if not defined
|
||||
QString dataDefinedColumnName( QgsPalLayerSettings::DataDefinedProperties p, const QgsPalLayerSettings& labelSettings ) const;
|
||||
QString dataDefinedColumnName( QgsPalLayerSettings::Property p, const QgsPalLayerSettings& labelSettings ) const;
|
||||
|
||||
/** Returns a data defined attribute column index
|
||||
@return -1 if column does not exist or an expression is used instead */
|
||||
int dataDefinedColumnIndex( QgsPalLayerSettings::DataDefinedProperties p, const QgsPalLayerSettings& labelSettings, const QgsVectorLayer* vlayer ) const;
|
||||
int dataDefinedColumnIndex( QgsPalLayerSettings::Property p, const QgsPalLayerSettings& labelSettings, const QgsVectorLayer* vlayer ) const;
|
||||
|
||||
//! Returns whether to preserve predefined rotation data during label pin/unpin operations
|
||||
bool currentLabelPreserveRotation();
|
||||
|
@ -4259,7 +4259,7 @@ void QgsDxfExport::drawLabel( const QString& layerId, QgsRenderContext& context,
|
||||
QgsPalLayerSettings tmpLyr( settings );
|
||||
|
||||
// apply any previously applied data defined settings for the label
|
||||
const QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant >& ddValues = lf->dataDefinedValues();
|
||||
const QMap< QgsPalLayerSettings::Property, QVariant >& ddValues = lf->dataDefinedValues();
|
||||
|
||||
//font
|
||||
QFont dFont = lf->definedFont();
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include <QDomElement>
|
||||
#include <QPainter>
|
||||
|
||||
const QMap< int, QString > QgsDiagramLayerSettings::sPropertyNameMap
|
||||
const QgsPropertyDefinition QgsDiagramLayerSettings::sPropertyNameMap
|
||||
{
|
||||
{ QgsDiagramLayerSettings::BackgroundColor, "backgroundColor" },
|
||||
{ QgsDiagramLayerSettings::OutlineColor, "outlineColor" },
|
||||
|
@ -308,7 +308,7 @@ class CORE_EXPORT QgsDiagramLayerSettings
|
||||
//! Property collection for data defined diagram settings
|
||||
QgsPropertyCollection mProperties;
|
||||
|
||||
static const QMap< int, QString > sPropertyNameMap;
|
||||
static const QgsPropertyDefinition sPropertyNameMap;
|
||||
};
|
||||
|
||||
/** \ingroup core
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -38,6 +38,7 @@
|
||||
#include "qgsmapunitscale.h"
|
||||
#include "qgsstringutils.h"
|
||||
#include "qgstextrenderer.h"
|
||||
#include "qgspropertycollection.h"
|
||||
|
||||
namespace pal
|
||||
{
|
||||
@ -261,7 +262,7 @@ class CORE_EXPORT QgsPalLayerSettings
|
||||
|
||||
//! Data definable properties.
|
||||
// update sPropertyNameMap QMap in constructor when adding/deleting enum value
|
||||
enum DataDefinedProperties
|
||||
enum Property
|
||||
{
|
||||
// text style
|
||||
Size = 0, //!< Label size
|
||||
@ -529,61 +530,24 @@ class CORE_EXPORT QgsPalLayerSettings
|
||||
*/
|
||||
QDomElement writeXml( QDomDocument& doc );
|
||||
|
||||
/** Get a data defined property pointer
|
||||
* @note helpful for Python access
|
||||
/** Returns a reference to the label's property collection, used for data defined overrides.
|
||||
* @note added in QGIS 3.0
|
||||
* @see setProperties()
|
||||
*/
|
||||
QgsDataDefined* dataDefinedProperty( QgsPalLayerSettings::DataDefinedProperties p );
|
||||
QgsPropertyCollection& properties() { return mProperties; }
|
||||
|
||||
/** Set a property as data defined
|
||||
* @note helpful for Python access
|
||||
/** Returns a reference to the label's property collection, used for data defined overrides.
|
||||
* @note added in QGIS 3.0
|
||||
* @see setProperties()
|
||||
*/
|
||||
void setDataDefinedProperty( QgsPalLayerSettings::DataDefinedProperties p,
|
||||
bool active, bool useExpr, const QString& expr, const QString& field );
|
||||
const QgsPropertyCollection& properties() const { return mProperties; }
|
||||
|
||||
//! Set a property to static instead data defined
|
||||
void removeDataDefinedProperty( QgsPalLayerSettings::DataDefinedProperties p );
|
||||
|
||||
/** Clear all data-defined properties
|
||||
* @note added in QGIS 2.12
|
||||
/** Sets the label's property collection, used for data defined overrides.
|
||||
* @param collection property collection. Existing properties will be replaced.
|
||||
* @note added in QGIS 3.0
|
||||
* @see properties()
|
||||
*/
|
||||
void removeAllDataDefinedProperties();
|
||||
|
||||
/** Convert old property value to new one as delimited values
|
||||
* @note not available in python bindings; as temporary solution until refactoring of project settings
|
||||
*/
|
||||
QString updateDataDefinedString( const QString& value );
|
||||
|
||||
/** Get property value as separate values split into Qmap
|
||||
* @note not available in python bindings
|
||||
*/
|
||||
QMap<QString, QString> dataDefinedMap( QgsPalLayerSettings::DataDefinedProperties p ) const;
|
||||
|
||||
/** Get data defined property value from expression string or attribute field name
|
||||
* @returns value inside QVariant
|
||||
* @note not available in python bindings
|
||||
*/
|
||||
QVariant dataDefinedValue( QgsPalLayerSettings::DataDefinedProperties p, QgsFeature& f, const QgsFields& fields,
|
||||
const QgsExpressionContext* context = nullptr ) const;
|
||||
|
||||
/** Get data defined property value from expression string or attribute field name
|
||||
* @returns true/false whether result is null or invalid
|
||||
* @note not available in python bindings
|
||||
*/
|
||||
bool dataDefinedEvaluate( QgsPalLayerSettings::DataDefinedProperties p, QVariant& exprVal, QgsExpressionContext* context = nullptr, const QVariant& originalValue = QVariant() ) const;
|
||||
|
||||
/** Whether data definition is active
|
||||
*/
|
||||
bool dataDefinedIsActive( QgsPalLayerSettings::DataDefinedProperties p ) const;
|
||||
|
||||
/** Whether data definition is set to use an expression
|
||||
*/
|
||||
bool dataDefinedUseExpression( QgsPalLayerSettings::DataDefinedProperties p ) const;
|
||||
|
||||
/** Map of current data defined properties
|
||||
*
|
||||
* Pointers to QgsDataDefined should never be null, the pointers are owned by this class
|
||||
*/
|
||||
QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* > dataDefinedProperties;
|
||||
void setProperties( const QgsPropertyCollection& collection ) { mProperties = collection; }
|
||||
|
||||
/** Returns the label text formatting settings, e.g., font settings, buffer settings, etc.
|
||||
* @see setFormat()
|
||||
@ -614,16 +578,15 @@ class CORE_EXPORT QgsPalLayerSettings
|
||||
|
||||
private:
|
||||
|
||||
void readDataDefinedPropertyMap( QgsVectorLayer* layer, QDomElement* parentElem,
|
||||
QMap < QgsPalLayerSettings::DataDefinedProperties,
|
||||
QgsDataDefined* > & propertyMap );
|
||||
void writeDataDefinedPropertyMap( QgsVectorLayer* layer, QDomElement* parentElem,
|
||||
const QMap < QgsPalLayerSettings::DataDefinedProperties,
|
||||
QgsDataDefined* > & propertyMap );
|
||||
void readDataDefinedProperty( QgsVectorLayer* layer,
|
||||
QgsPalLayerSettings::DataDefinedProperties p,
|
||||
QMap < QgsPalLayerSettings::DataDefinedProperties,
|
||||
QgsDataDefined* > & propertyMap );
|
||||
/**
|
||||
* Reads data defined properties from a QGIS 2.x project.
|
||||
*/
|
||||
void readOldDataDefinedPropertyMap( QgsVectorLayer* layer, QDomElement* parentElem );
|
||||
|
||||
/**
|
||||
* Reads a data defined property from a QGIS 2.x project.
|
||||
*/
|
||||
void readOldDataDefinedProperty( QgsVectorLayer* layer, QgsPalLayerSettings::Property p );
|
||||
|
||||
enum DataDefinedValueType
|
||||
{
|
||||
@ -644,7 +607,7 @@ class CORE_EXPORT QgsPalLayerSettings
|
||||
|
||||
// convenience data defined evaluation function
|
||||
bool dataDefinedValEval( DataDefinedValueType valType,
|
||||
QgsPalLayerSettings::DataDefinedProperties p,
|
||||
QgsPalLayerSettings::Property p,
|
||||
QVariant& exprVal, QgsExpressionContext &context, const QVariant& originalValue = QVariant() );
|
||||
|
||||
void parseTextStyle( QFont& labelFont,
|
||||
@ -667,14 +630,18 @@ class CORE_EXPORT QgsPalLayerSettings
|
||||
*/
|
||||
void registerObstacleFeature( QgsFeature &f, QgsRenderContext &context, QgsLabelFeature** obstacleFeature, QgsGeometry* obstacleGeometry = nullptr );
|
||||
|
||||
QMap<DataDefinedProperties, QVariant> dataDefinedValues;
|
||||
QMap<Property, QVariant> dataDefinedValues;
|
||||
|
||||
//! Property collection for data defined label settings
|
||||
QgsPropertyCollection mProperties;
|
||||
|
||||
QgsExpression* expression;
|
||||
|
||||
QFontDatabase mFontDB;
|
||||
|
||||
QgsTextFormat mFormat;
|
||||
|
||||
static const QMap< int, QString > sPropertyNameMap;
|
||||
static const QgsPropertyDefinition sPropertyNameMap;
|
||||
static const QVector< PredefinedPointPosition > DEFAULT_PLACEMENT_ORDER;
|
||||
};
|
||||
|
||||
@ -821,23 +788,23 @@ class CORE_EXPORT QgsPalLabeling
|
||||
protected:
|
||||
// update temporary QgsPalLayerSettings with any data defined text style values
|
||||
static void dataDefinedTextStyle( QgsPalLayerSettings& tmpLyr,
|
||||
const QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant >& ddValues );
|
||||
const QMap< QgsPalLayerSettings::Property, QVariant >& ddValues );
|
||||
|
||||
// update temporary QgsPalLayerSettings with any data defined text formatting values
|
||||
static void dataDefinedTextFormatting( QgsPalLayerSettings& tmpLyr,
|
||||
const QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant >& ddValues );
|
||||
const QMap< QgsPalLayerSettings::Property, QVariant >& ddValues );
|
||||
|
||||
// update temporary QgsPalLayerSettings with any data defined text buffer values
|
||||
static void dataDefinedTextBuffer( QgsPalLayerSettings& tmpLyr,
|
||||
const QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant >& ddValues );
|
||||
const QMap< QgsPalLayerSettings::Property, QVariant >& ddValues );
|
||||
|
||||
// update temporary QgsPalLayerSettings with any data defined shape background values
|
||||
static void dataDefinedShapeBackground( QgsPalLayerSettings& tmpLyr,
|
||||
const QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant >& ddValues );
|
||||
const QMap< QgsPalLayerSettings::Property, QVariant >& ddValues );
|
||||
|
||||
// update temporary QgsPalLayerSettings with any data defined drop shadow values
|
||||
static void dataDefinedDropShadow( QgsPalLayerSettings& tmpLyr,
|
||||
const QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant >& ddValues );
|
||||
const QMap< QgsPalLayerSettings::Property, QVariant >& ddValues );
|
||||
|
||||
friend class QgsVectorLayerLabelProvider; // to allow calling the static methods above
|
||||
friend class QgsDxfExport; // to allow calling the static methods above
|
||||
|
@ -140,6 +140,16 @@ int QgsAbstractProperty::valueAsInt( const QgsExpressionContext &context, int de
|
||||
return integer;
|
||||
}
|
||||
|
||||
bool QgsAbstractProperty::valueAsBool( const QgsExpressionContext& context, bool defaultValue ) const
|
||||
{
|
||||
QVariant val = value( context, defaultValue );
|
||||
|
||||
if ( !val.isValid() )
|
||||
return defaultValue;
|
||||
|
||||
return val.toBool();
|
||||
}
|
||||
|
||||
bool QgsAbstractProperty::writeXml( QDomElement &propertyElem, QDomDocument &doc ) const
|
||||
{
|
||||
Q_UNUSED( doc );
|
||||
|
@ -152,6 +152,17 @@ class CORE_EXPORT QgsAbstractProperty
|
||||
*/
|
||||
int valueAsInt( const QgsExpressionContext& context, int defaultValue = 0 ) const;
|
||||
|
||||
/**
|
||||
* Calculates the current value of the property and interprets it as an boolean.
|
||||
* @param context QgsExpressionContext to evaluate the property for.
|
||||
* @param defaultValue default boolean to return if the property cannot be calculated as an boolean
|
||||
* @returns value parsed to boolean
|
||||
* @see value()
|
||||
* @see valueAsDouble()
|
||||
* @see valueAsColor()
|
||||
*/
|
||||
bool valueAsBool( const QgsExpressionContext& context, bool defaultValue = false ) const;
|
||||
|
||||
/**
|
||||
* Writes the current state of the property into an XML element
|
||||
* @param propertyElem destination element for the property's state
|
||||
|
@ -53,6 +53,15 @@ int QgsAbstractPropertyCollection::valueAsInt( int key, const QgsExpressionConte
|
||||
return prop->valueAsInt( context, defaultValue );
|
||||
}
|
||||
|
||||
bool QgsAbstractPropertyCollection::valueAsBool( int key, const QgsExpressionContext& context, bool defaultValue ) const
|
||||
{
|
||||
const QgsAbstractProperty* prop = property( key );
|
||||
if ( !prop || !prop->isActive() )
|
||||
return defaultValue;
|
||||
|
||||
return prop->valueAsBool( context, defaultValue );
|
||||
}
|
||||
|
||||
|
||||
|
||||
//
|
||||
@ -148,22 +157,34 @@ void QgsPropertyCollection::setProperty( int key, const QVariant& value )
|
||||
|
||||
bool QgsPropertyCollection::hasProperty( int key ) const
|
||||
{
|
||||
if ( mProperties.isEmpty() )
|
||||
return false;
|
||||
|
||||
return mProperties.contains( key );
|
||||
}
|
||||
|
||||
QgsAbstractProperty* QgsPropertyCollection::property( int key )
|
||||
{
|
||||
if ( mProperties.isEmpty() )
|
||||
return nullptr;
|
||||
|
||||
mDirty = true;
|
||||
return mProperties.value( key, nullptr );
|
||||
}
|
||||
|
||||
const QgsAbstractProperty *QgsPropertyCollection::property( int key ) const
|
||||
{
|
||||
if ( mProperties.isEmpty() )
|
||||
return nullptr;
|
||||
|
||||
return mProperties.value( key, nullptr );
|
||||
}
|
||||
|
||||
QVariant QgsPropertyCollection::value( int key, const QgsExpressionContext& context, const QVariant& defaultValue ) const
|
||||
{
|
||||
if ( mProperties.isEmpty() )
|
||||
return defaultValue;
|
||||
|
||||
QgsAbstractProperty* prop = mProperties.value( key, nullptr );
|
||||
if ( !prop || !prop->isActive() )
|
||||
return defaultValue;
|
||||
@ -201,6 +222,9 @@ QSet< QString > QgsPropertyCollection::referencedFields( const QgsExpressionCont
|
||||
|
||||
bool QgsPropertyCollection::isActive( int key ) const
|
||||
{
|
||||
if ( mProperties.isEmpty() )
|
||||
return false;
|
||||
|
||||
QgsAbstractProperty* prop = mProperties.value( key, nullptr );
|
||||
return prop && prop->isActive();
|
||||
}
|
||||
|
@ -25,6 +25,9 @@ class QgsAbstractProperty;
|
||||
class QDomElement;
|
||||
class QDomDocument;
|
||||
|
||||
//! Definition of available properties
|
||||
typedef QMap< int, QString > QgsPropertyDefinition;
|
||||
|
||||
/**
|
||||
* \ingroup core
|
||||
* \class QgsAbstractPropertyCollection
|
||||
@ -141,6 +144,19 @@ class CORE_EXPORT QgsAbstractPropertyCollection
|
||||
*/
|
||||
int valueAsInt( int key, const QgsExpressionContext& context, int defaultValue = 0 ) const;
|
||||
|
||||
/**
|
||||
* Calculates the current value of the property with the specified key and interprets it as an boolean.
|
||||
* @param key integer key for property to return. The intended use case is that a context specific enum is cast to
|
||||
* int and used for the key value.
|
||||
* @param context QgsExpressionContext to evaluate the property for.
|
||||
* @param defaultValue default boolean to return if the property cannot be calculated as a boolean
|
||||
* @returns value parsed to bool
|
||||
* @see value()
|
||||
* @see valueAsDouble()
|
||||
* @see valueAsColor()
|
||||
*/
|
||||
bool valueAsBool( int key, const QgsExpressionContext& context, bool defaultValue = false ) const;
|
||||
|
||||
/**
|
||||
* Prepares the collection against a specified expression context. Calling prepare before evaluating the
|
||||
* collection's properties multiple times allows precalculation of expensive setup tasks such as parsing expressions.
|
||||
@ -183,7 +199,7 @@ class CORE_EXPORT QgsAbstractPropertyCollection
|
||||
* to avoid writing the raw integer key values to XML, for readability and future-proofness.
|
||||
* @see readXml()
|
||||
*/
|
||||
virtual bool writeXml( QDomElement& collectionElem, QDomDocument& doc, const QMap< int, QString >& propertyNameMap ) const = 0;
|
||||
virtual bool writeXml( QDomElement& collectionElem, QDomDocument& doc, const QgsPropertyDefinition& propertyNameMap ) const = 0;
|
||||
|
||||
/**
|
||||
* Reads property collection state from an XML element.
|
||||
@ -244,7 +260,7 @@ class CORE_EXPORT QgsPropertyCollection : public QgsAbstractPropertyCollection
|
||||
bool isActive( int key ) const override;
|
||||
bool hasActiveProperties() const override;
|
||||
bool hasActiveDynamicProperties() const override;
|
||||
bool writeXml( QDomElement& collectionElem, QDomDocument& doc, const QMap< int, QString >& propertyNameMap ) const override;
|
||||
bool writeXml( QDomElement& collectionElem, QDomDocument& doc, const QgsPropertyDefinition& propertyNameMap ) const override;
|
||||
bool readXml( const QDomElement& collectionElem, const QDomDocument& doc, const QMap<int, QString> &propertyNameMap ) override;
|
||||
|
||||
/**
|
||||
@ -399,7 +415,7 @@ class CORE_EXPORT QgsPropertyCollectionStack : public QgsAbstractPropertyCollect
|
||||
|
||||
QSet<int> propertyKeys() const override;
|
||||
bool hasProperty( int key ) const override;
|
||||
bool writeXml( QDomElement& collectionElem, QDomDocument& doc, const QMap< int, QString >& propertyNameMap ) const override;
|
||||
bool writeXml( QDomElement& collectionElem, QDomDocument& doc, const QgsPropertyDefinition& propertyNameMap ) const override;
|
||||
bool readXml( const QDomElement& collectionElem, const QDomDocument& doc, const QMap<int, QString> &propertyNameMap ) override;
|
||||
|
||||
private:
|
||||
|
@ -42,9 +42,9 @@ class QgsTextLabelFeature : public QgsLabelFeature
|
||||
void calculateInfo( bool curvedLabeling, QFontMetricsF* fm, const QgsMapToPixel* xform, double maxinangle, double maxoutangle );
|
||||
|
||||
//! Get data-defined values
|
||||
const QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant >& dataDefinedValues() const { return mDataDefinedValues; }
|
||||
const QMap< QgsPalLayerSettings::Property, QVariant >& dataDefinedValues() const { return mDataDefinedValues; }
|
||||
//! Set data-defined values
|
||||
void setDataDefinedValues( const QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant >& values ) { mDataDefinedValues = values; }
|
||||
void setDataDefinedValues( const QMap< QgsPalLayerSettings::Property, QVariant >& values ) { mDataDefinedValues = values; }
|
||||
|
||||
//! Set font to be used for rendering
|
||||
void setDefinedFont( const QFont& f ) { mDefinedFont = f; }
|
||||
@ -62,7 +62,7 @@ class QgsTextLabelFeature : public QgsLabelFeature
|
||||
//! Metrics of the font for rendering
|
||||
QFontMetricsF* mFontMetrics;
|
||||
//! Stores attribute values for data defined properties
|
||||
QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant > mDataDefinedValues;
|
||||
QMap< QgsPalLayerSettings::Property, QVariant > mDataDefinedValues;
|
||||
|
||||
};
|
||||
|
||||
|
@ -220,21 +220,11 @@ QgsLabelFeature* QgsVectorLayerDiagramProvider::registerDiagram( QgsFeature& fea
|
||||
}
|
||||
|
||||
// data defined show diagram? check this before doing any other processing
|
||||
if ( mSettings.properties().hasProperty( QgsDiagramLayerSettings::Show )
|
||||
&& mSettings.properties().property( QgsDiagramLayerSettings::Show )->isActive() )
|
||||
{
|
||||
bool show = mSettings.properties().valueAsInt( QgsDiagramLayerSettings::Show, context.expressionContext(), true );
|
||||
if ( !show )
|
||||
return nullptr;
|
||||
}
|
||||
if ( !mSettings.properties().valueAsBool( QgsDiagramLayerSettings::Show, context.expressionContext(), true ) )
|
||||
return nullptr;
|
||||
|
||||
// data defined obstacle?
|
||||
bool isObstacle = mSettings.isObstacle();
|
||||
if ( mSettings.properties().hasProperty( QgsDiagramLayerSettings::IsObstacle )
|
||||
&& mSettings.properties().property( QgsDiagramLayerSettings::IsObstacle )->isActive() )
|
||||
{
|
||||
isObstacle = mSettings.properties().valueAsInt( QgsDiagramLayerSettings::IsObstacle, context.expressionContext(), isObstacle );
|
||||
}
|
||||
bool isObstacle = mSettings.properties().valueAsBool( QgsDiagramLayerSettings::IsObstacle, context.expressionContext(), mSettings.isObstacle() );
|
||||
|
||||
//convert geom to geos
|
||||
QgsGeometry geom = feat.geometry();
|
||||
@ -289,12 +279,8 @@ QgsLabelFeature* QgsVectorLayerDiagramProvider::registerDiagram( QgsFeature& fea
|
||||
|
||||
// feature to the layer
|
||||
bool alwaysShow = mSettings.showAllDiagrams();
|
||||
if ( mSettings.properties().hasProperty( QgsDiagramLayerSettings::AlwaysShow )
|
||||
&& mSettings.properties().property( QgsDiagramLayerSettings::AlwaysShow )->isActive() )
|
||||
{
|
||||
context.expressionContext().setOriginalValueVariable( alwaysShow );
|
||||
alwaysShow = mSettings.properties().valueAsInt( QgsDiagramLayerSettings::AlwaysShow, context.expressionContext(), alwaysShow );
|
||||
}
|
||||
context.expressionContext().setOriginalValueVariable( alwaysShow );
|
||||
alwaysShow = mSettings.properties().valueAsBool( QgsDiagramLayerSettings::AlwaysShow, context.expressionContext(), alwaysShow );
|
||||
|
||||
// new style data defined position
|
||||
bool ddPos = false;
|
||||
|
@ -177,26 +177,9 @@ bool QgsVectorLayerLabelProvider::prepare( const QgsRenderContext& context, QSet
|
||||
attributeNames.insert( lyr.fieldName );
|
||||
}
|
||||
|
||||
lyr.properties().prepare( context.expressionContext() );
|
||||
// add field indices of data defined expression or field
|
||||
QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* >::const_iterator dIt = lyr.dataDefinedProperties.constBegin();
|
||||
for ( ; dIt != lyr.dataDefinedProperties.constEnd(); ++dIt )
|
||||
{
|
||||
QgsDataDefined* dd = dIt.value();
|
||||
if ( !dd->isActive() )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// this will return columns for expressions or field name, depending upon what is set to be used
|
||||
// this also prepares any expressions, too
|
||||
QSet<QString> cols = dd->referencedColumns( context.expressionContext() );
|
||||
|
||||
//QgsDebugMsgLevel( QString( "Data defined referenced columns:" ) + cols.join( "," ), 4 );
|
||||
Q_FOREACH ( const QString& name, cols )
|
||||
{
|
||||
attributeNames.insert( name );
|
||||
}
|
||||
}
|
||||
attributeNames.unite( lyr.properties().referencedFields( context.expressionContext() ) );
|
||||
}
|
||||
|
||||
// NOW INITIALIZE QgsPalLayerSettings
|
||||
@ -389,7 +372,7 @@ void QgsVectorLayerLabelProvider::drawLabel( QgsRenderContext& context, pal::Lab
|
||||
QgsPalLayerSettings tmpLyr( mSettings );
|
||||
|
||||
// apply any previously applied data defined settings for the label
|
||||
const QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant >& ddValues = lf->dataDefinedValues();
|
||||
const QMap< QgsPalLayerSettings::Property, QVariant >& ddValues = lf->dataDefinedValues();
|
||||
|
||||
//font
|
||||
QFont dFont = lf->definedFont();
|
||||
|
@ -180,6 +180,11 @@ QgsAbstractProperty* QgsDataDefinedButtonV2::toProperty()
|
||||
return p;
|
||||
}
|
||||
|
||||
void QgsDataDefinedButtonV2::registerCheckedWidget( QWidget* widget )
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
|
||||
void QgsDataDefinedButtonV2::mouseReleaseEvent( QMouseEvent *event )
|
||||
{
|
||||
// Ctrl-click to toggle activated state
|
||||
|
@ -39,6 +39,7 @@ class GUI_EXPORT QgsDataDefinedButtonV2: public QToolButton
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY( QString usageInfo READ usageInfo WRITE setUsageInfo )
|
||||
Q_PROPERTY( bool active READ isActive WRITE setActive )
|
||||
|
||||
public:
|
||||
|
||||
@ -82,6 +83,11 @@ class GUI_EXPORT QgsDataDefinedButtonV2: public QToolButton
|
||||
|
||||
QgsAbstractProperty* toProperty();
|
||||
|
||||
/**
|
||||
* Returns true if the button has an active property.
|
||||
*/
|
||||
bool isActive() const { return mActive; }
|
||||
|
||||
/**
|
||||
* The valid data types that will work for the definition (QVariant-coercible to expected type)
|
||||
* Compared against the variant type of the QgsField from data source and expression result
|
||||
@ -103,6 +109,11 @@ class GUI_EXPORT QgsDataDefinedButtonV2: public QToolButton
|
||||
*/
|
||||
void setUsageInfo( const QString& info ) { mUsageInfo = info; updateGui(); }
|
||||
|
||||
/**
|
||||
* Register a sibling widget that get checked when data definition or expression is active
|
||||
*/
|
||||
void registerCheckedWidget( QWidget* widget );
|
||||
|
||||
//! Callback function for retrieving the expression context for the button
|
||||
typedef QgsExpressionContext( *ExpressionContextCallback )( const void* context );
|
||||
|
||||
|
@ -518,7 +518,7 @@ void QgsTextFormatWidget::setWidgetMode( QgsTextFormatWidget::Mode mode )
|
||||
|
||||
void QgsTextFormatWidget::toggleDDButtons( bool visible )
|
||||
{
|
||||
Q_FOREACH ( QgsDataDefinedButton* button, findChildren< QgsDataDefinedButton* >() )
|
||||
Q_FOREACH ( QgsDataDefinedButtonV2* button, findChildren< QgsDataDefinedButtonV2* >() )
|
||||
{
|
||||
button->setVisible( visible );
|
||||
}
|
||||
@ -544,10 +544,9 @@ void QgsTextFormatWidget::connectValueChanged( const QList<QWidget *>& widgets,
|
||||
{
|
||||
Q_FOREACH ( QWidget* widget, widgets )
|
||||
{
|
||||
if ( QgsDataDefinedButton* w = qobject_cast<QgsDataDefinedButton*>( widget ) )
|
||||
if ( QgsDataDefinedButtonV2* w = qobject_cast<QgsDataDefinedButtonV2*>( widget ) )
|
||||
{
|
||||
connect( w, SIGNAL( dataDefinedActivated( bool ) ), this, slot );
|
||||
connect( w, SIGNAL( dataDefinedChanged( QString ) ), this, slot );
|
||||
connect( w, SIGNAL( changed() ), this, slot );
|
||||
}
|
||||
else if ( QgsFieldExpressionWidget* w = qobject_cast< QgsFieldExpressionWidget*>( widget ) )
|
||||
{
|
||||
|
@ -810,7 +810,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QgsDataDefinedButton" name="mFontUnderlineDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFontUnderlineDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -851,7 +851,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QgsDataDefinedButton" name="mFontStrikeoutDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFontStrikeoutDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -905,7 +905,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QgsDataDefinedButton" name="mFontBoldDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFontBoldDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -1034,42 +1034,42 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mFontStyleDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFontStyleDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mFontSizeDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFontSizeDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="13" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mFontBlendModeDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFontBlendModeDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mFontItalicDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFontItalicDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mFontColorDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFontColorDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="11" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mFontLetterSpacingDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFontLetterSpacingDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -1083,7 +1083,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mFontCaseDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFontCaseDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -1097,7 +1097,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mFontUnitsDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFontUnitsDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -1133,7 +1133,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mFontDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFontDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -1153,7 +1153,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mFontTranspDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFontTranspDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -1241,7 +1241,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="12" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mFontWordSpacingDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFontWordSpacingDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -1491,7 +1491,7 @@ font-style: italic;</string>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mWrapCharDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mWrapCharDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -1508,7 +1508,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mFontLineHeightDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFontLineHeightDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -1613,7 +1613,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mFontMultiLineAlignDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFontMultiLineAlignDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -1656,7 +1656,7 @@ font-style: italic;</string>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QgsDataDefinedButton" name="mDirectSymbDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mDirectSymbDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -1747,14 +1747,14 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mDirectSymbPlacementDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mDirectSymbPlacementDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mDirectSymbLeftDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mDirectSymbLeftDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -1801,7 +1801,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mDirectSymbRightDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mDirectSymbRightDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -1858,7 +1858,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mDirectSymbRevDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mDirectSymbRevDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -1956,7 +1956,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QgsDataDefinedButton" name="mFormatNumDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFormatNumDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -2004,7 +2004,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mFormatNumDecimalsDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFormatNumDecimalsDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -2021,7 +2021,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mFormatNumPlusSignDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFormatNumPlusSignDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -2098,7 +2098,7 @@ font-style: italic;</string>
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout_36">
|
||||
<item row="1" column="1">
|
||||
<widget class="QgsDataDefinedButton" name="mBufferDrawDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mBufferDrawDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -2146,14 +2146,14 @@ font-style: italic;</string>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="1" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mBufferUnitsDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mBufferUnitsDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mBufferBlendModeDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mBufferBlendModeDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -2309,14 +2309,14 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mBufferTranspDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mBufferTranspDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mBufferJoinStyleDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mBufferJoinStyleDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -2348,14 +2348,14 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mBufferSizeDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mBufferSizeDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mBufferColorDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mBufferColorDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -2510,7 +2510,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QgsDataDefinedButton" name="mShapeDrawDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShapeDrawDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -2591,7 +2591,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="17" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShapeFillColorDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShapeFillColorDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -2620,21 +2620,21 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShapeSizeUnitsDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShapeSizeUnitsDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="19" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShapeBorderWidthDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShapeBorderWidthDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="18" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShapeBorderColorDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShapeBorderColorDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -2660,7 +2660,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="15" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShapeBlendModeDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShapeBlendModeDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -2713,7 +2713,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="21" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShapePenStyleDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShapePenStyleDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -2772,7 +2772,7 @@ font-style: italic;</string>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="13" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShapeRadiusUnitsDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShapeRadiusUnitsDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -2789,7 +2789,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShapeTypeDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShapeTypeDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -2844,7 +2844,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="11" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShapeOffsetUnitsDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShapeOffsetUnitsDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -2864,7 +2864,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShapeSizeYDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShapeSizeYDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -2907,7 +2907,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShapeSizeXDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShapeSizeXDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -2928,7 +2928,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShapeSizeTypeDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShapeSizeTypeDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -2989,7 +2989,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShapeRotationTypeDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShapeRotationTypeDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -3021,7 +3021,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QgsDataDefinedButton" name="mShapeSVGPathDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShapeSVGPathDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -3031,7 +3031,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="14" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShapeTranspDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShapeTranspDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -3081,14 +3081,14 @@ font-style: italic;</string>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="20" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShapeBorderUnitsDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShapeBorderUnitsDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShapeRotationDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShapeRotationDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -3147,7 +3147,7 @@ font-style: italic;</string>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="12" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShapeRadiusDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShapeRadiusDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -3215,7 +3215,7 @@ font-style: italic;</string>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="9" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShapeOffsetDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShapeOffsetDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -3346,7 +3346,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QgsDataDefinedButton" name="mShadowDrawDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShadowDrawDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -3651,70 +3651,70 @@ font-style: italic;</string>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShadowUnderDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShadowUnderDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShadowOffsetAngleDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShadowOffsetAngleDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShadowOffsetDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShadowOffsetDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShadowOffsetUnitsDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShadowOffsetUnitsDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShadowRadiusDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShadowRadiusDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShadowRadiusUnitsDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShadowRadiusUnitsDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShadowTranspDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShadowTranspDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShadowScaleDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShadowScaleDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShadowColorDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShadowColorDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="11" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShadowBlendDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShadowBlendDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -4225,7 +4225,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="3">
|
||||
<widget class="QgsDataDefinedButton" name="mCentroidDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mCentroidDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -4301,14 +4301,14 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mLineDistanceDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mLineDistanceDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mLineDistanceUnitDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mLineDistanceUnitDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -4392,7 +4392,7 @@ font-style: italic;</string>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mPointQuadOffsetDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mPointQuadOffsetDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -4679,7 +4679,7 @@ font-style: italic;</string>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mPointPositionOrderDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mPointPositionOrderDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -4794,14 +4794,14 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="3">
|
||||
<widget class="QgsDataDefinedButton" name="mPointOffsetDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mPointOffsetDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="3">
|
||||
<widget class="QgsDataDefinedButton" name="mPointOffsetUnitsDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mPointOffsetUnitsDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -4924,7 +4924,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mPointAngleDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mPointAngleDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -4984,7 +4984,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mRepeatDistanceDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mRepeatDistanceDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -4998,7 +4998,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mRepeatDistanceUnitDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mRepeatDistanceUnitDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -5071,7 +5071,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="5">
|
||||
<widget class="QgsDataDefinedButton" name="mMaxCharAngleDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mMaxCharAngleDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -5169,7 +5169,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QgsDataDefinedButton" name="mCoordXDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mCoordXDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -5189,7 +5189,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QgsDataDefinedButton" name="mCoordYDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mCoordYDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -5234,7 +5234,7 @@ font-style: italic;</string>
|
||||
<item row="2" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_25">
|
||||
<item>
|
||||
<widget class="QgsDataDefinedButton" name="mCoordRotationDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mCoordRotationDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -5287,7 +5287,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QgsDataDefinedButton" name="mCoordAlignmentHDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mCoordAlignmentHDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -5307,7 +5307,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QgsDataDefinedButton" name="mCoordAlignmentVDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mCoordAlignmentVDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -5381,7 +5381,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QgsDataDefinedButton" name="mPriorityDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mPriorityDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -5491,7 +5491,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QgsDataDefinedButton" name="mScaleBasedVisibilityDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mScaleBasedVisibilityDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -5557,7 +5557,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QgsDataDefinedButton" name="mScaleBasedVisibilityMinDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mScaleBasedVisibilityMinDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -5592,7 +5592,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QgsDataDefinedButton" name="mScaleBasedVisibilityMaxDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mScaleBasedVisibilityMaxDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -5622,7 +5622,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QgsDataDefinedButton" name="mFontLimitPixelDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFontLimitPixelDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -5694,7 +5694,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QgsDataDefinedButton" name="mFontMinPixelDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFontMinPixelDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -5732,7 +5732,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QgsDataDefinedButton" name="mFontMaxPixelDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mFontMaxPixelDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -5773,7 +5773,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QgsDataDefinedButton" name="mZIndexDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mZIndexDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -5839,14 +5839,14 @@ font-style: italic;</string>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QgsDataDefinedButton" name="mShowLabelDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mShowLabelDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="5">
|
||||
<widget class="QgsDataDefinedButton" name="mAlwaysShowDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mAlwaysShowDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -6209,7 +6209,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QgsDataDefinedButton" name="mIsObstacleDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mIsObstacleDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -6285,7 +6285,7 @@ font-style: italic;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QgsDataDefinedButton" name="mObstacleFactorDDBtn">
|
||||
<widget class="QgsDataDefinedButtonV2" name="mObstacleFactorDDBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
@ -6440,9 +6440,9 @@ font-style: italic;</string>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>QgsDataDefinedButton</class>
|
||||
<class>QgsDataDefinedButtonV2</class>
|
||||
<extends>QToolButton</extends>
|
||||
<header>qgsdatadefinedbutton.h</header>
|
||||
<header>qgsdatadefinedbuttonv2.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>QgsDoubleSpinBox</class>
|
||||
|
@ -237,7 +237,8 @@ void TestQgsLabelingEngine::testRuleBased()
|
||||
s2.placement = QgsPalLayerSettings::OverPoint;
|
||||
s2.quadOffset = QgsPalLayerSettings::QuadrantBelowRight;
|
||||
s2.displayAll = true;
|
||||
s2.setDataDefinedProperty( QgsPalLayerSettings::Size, true, true, QStringLiteral( "18" ), QString() );
|
||||
|
||||
s2.properties().setProperty( QgsPalLayerSettings::Size, new QgsStaticProperty( QStringLiteral( "18" ) ) );
|
||||
|
||||
root->appendChild( new QgsRuleBasedLabeling::Rule( new QgsPalLayerSettings( s2 ), 0, 0, QStringLiteral( "Class = 'Jet'" ) ) );
|
||||
|
||||
@ -311,8 +312,8 @@ void TestQgsLabelingEngine::zOrder()
|
||||
pls1.setFormat( format );
|
||||
|
||||
//use data defined coloring and font size so that stacking order of labels can be determined
|
||||
pls1.setDataDefinedProperty( QgsPalLayerSettings::Color, true, true, QStringLiteral( "case when \"Class\"='Jet' then '#ff5500' when \"Class\"='B52' then '#00ffff' else '#ff00ff' end" ), QString() );
|
||||
pls1.setDataDefinedProperty( QgsPalLayerSettings::Size, true, true, QStringLiteral( "case when \"Class\"='Jet' then 100 when \"Class\"='B52' then 30 else 50 end" ), QString() );
|
||||
pls1.properties().setProperty( QgsPalLayerSettings::Color, new QgsExpressionBasedProperty( QStringLiteral( "case when \"Class\"='Jet' then '#ff5500' when \"Class\"='B52' then '#00ffff' else '#ff00ff' end" ) ) );
|
||||
pls1.properties().setProperty( QgsPalLayerSettings::Size, new QgsExpressionBasedProperty( QStringLiteral( "case when \"Class\"='Jet' then 100 when \"Class\"='B52' then 30 else 50 end" ) ) );
|
||||
|
||||
QgsVectorLayerLabelProvider* provider1 = new QgsVectorLayerLabelProvider( vl, QString(), true, &pls1 );
|
||||
QgsLabelingEngine engine;
|
||||
@ -329,7 +330,7 @@ void TestQgsLabelingEngine::zOrder()
|
||||
img = job.renderedImage();
|
||||
|
||||
//test data defined z-index
|
||||
pls1.setDataDefinedProperty( QgsPalLayerSettings::ZIndex, true, true, QStringLiteral( "case when \"Class\"='Jet' then 3 when \"Class\"='B52' then 1 else 2 end" ), QString() );
|
||||
pls1.properties().setProperty( QgsPalLayerSettings::ZIndex, new QgsExpressionBasedProperty( QStringLiteral( "case when \"Class\"='Jet' then 3 when \"Class\"='B52' then 1 else 2 end" ) ) );
|
||||
provider1 = new QgsVectorLayerLabelProvider( vl, QString(), true, &pls1 );
|
||||
engine.addProvider( provider1 );
|
||||
p.begin( &img );
|
||||
@ -341,7 +342,7 @@ void TestQgsLabelingEngine::zOrder()
|
||||
QVERIFY( imageCheck( "label_order_zindex", img, 20 ) );
|
||||
img = job.renderedImage();
|
||||
|
||||
pls1.removeAllDataDefinedProperties();
|
||||
pls1.properties().clear();
|
||||
format = pls1.format();
|
||||
format.setColor( QColor( 255, 50, 100 ) );
|
||||
format.setSize( 30 );
|
||||
@ -386,7 +387,7 @@ void TestQgsLabelingEngine::zOrder()
|
||||
|
||||
//try mixing layer order and z-index
|
||||
engine.removeProvider( provider1 );
|
||||
pls1.setDataDefinedProperty( QgsPalLayerSettings::ZIndex, true, true, QStringLiteral( "if(\"Class\"='Jet',3,0)" ), QString() );
|
||||
pls1.properties().setProperty( QgsPalLayerSettings::ZIndex, new QgsExpressionBasedProperty( QStringLiteral( "if(\"Class\"='Jet',3,0)" ) ) );
|
||||
provider1 = new QgsVectorLayerLabelProvider( vl, QString(), true, &pls1 );
|
||||
engine.addProvider( provider1 );
|
||||
|
||||
|
@ -190,6 +190,44 @@ void TestQgsProperty::conversions()
|
||||
i1->setStaticValue( "i am not a int" ); //not a int, should return default value
|
||||
QCOMPARE( i1->valueAsInt( context, -11 ), -11 );
|
||||
QCOMPARE( collection.valueAsInt( 2, context, -11 ), -11 );
|
||||
|
||||
// test boolean conversions
|
||||
QgsStaticProperty* b1 = new QgsStaticProperty( QVariant(), true );
|
||||
collection.setProperty( 3, b1 );
|
||||
QCOMPARE( b1->valueAsBool( context , false ), false );
|
||||
QCOMPARE( b1->valueAsBool( context , true ), true );
|
||||
QCOMPARE( collection.valueAsBool( 3, context , false ), false );
|
||||
QCOMPARE( collection.valueAsBool( 3, context , true ), true );
|
||||
b1->setStaticValue( true );
|
||||
QCOMPARE( b1->valueAsBool( context , false ), true );
|
||||
QCOMPARE( b1->valueAsBool( context , true ), true );
|
||||
QCOMPARE( collection.valueAsBool( 3, context , false ), true );
|
||||
QCOMPARE( collection.valueAsBool( 3, context , true ), true );
|
||||
b1->setStaticValue( false );
|
||||
QCOMPARE( b1->valueAsBool( context , false ), false );
|
||||
QCOMPARE( b1->valueAsBool( context , true ), false );
|
||||
QCOMPARE( collection.valueAsBool( 3, context , false ), false );
|
||||
QCOMPARE( collection.valueAsBool( 3, context , true ), false );
|
||||
b1->setStaticValue( 1 );
|
||||
QCOMPARE( b1->valueAsBool( context , false ), true );
|
||||
QCOMPARE( b1->valueAsBool( context , true ), true );
|
||||
QCOMPARE( collection.valueAsBool( 3, context , false ), true );
|
||||
QCOMPARE( collection.valueAsBool( 3, context , true ), true );
|
||||
b1->setStaticValue( 0 );
|
||||
QCOMPARE( b1->valueAsBool( context , false ), false );
|
||||
QCOMPARE( b1->valueAsBool( context , true ), false );
|
||||
QCOMPARE( collection.valueAsBool( 3, context , false ), false );
|
||||
QCOMPARE( collection.valueAsBool( 3, context , true ), false );
|
||||
b1->setStaticValue( "true" );
|
||||
QCOMPARE( b1->valueAsBool( context , false ), true );
|
||||
QCOMPARE( b1->valueAsBool( context , true ), true );
|
||||
QCOMPARE( collection.valueAsBool( 3, context , false ), true );
|
||||
QCOMPARE( collection.valueAsBool( 3, context , true ), true );
|
||||
b1->setStaticValue( "" );
|
||||
QCOMPARE( b1->valueAsBool( context , false ), false );
|
||||
QCOMPARE( b1->valueAsBool( context , true ), false );
|
||||
QCOMPARE( collection.valueAsBool( 3, context , false ), false );
|
||||
QCOMPARE( collection.valueAsBool( 3, context , true ), false );
|
||||
}
|
||||
|
||||
void TestQgsProperty::staticProperty()
|
||||
|
Loading…
x
Reference in New Issue
Block a user