[QGIS Commit] r13998 - in trunk/qgis: python/core src/app src/core
src/ui
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Mon Aug 2 11:09:17 EDT 2010
Author: mhugent
Date: 2010-08-02 15:09:17 +0000 (Mon, 02 Aug 2010)
New Revision: 13998
Modified:
trunk/qgis/python/core/qgsmaprenderer.sip
trunk/qgis/src/app/qgslabelinggui.cpp
trunk/qgis/src/app/qgslabelinggui.h
trunk/qgis/src/core/qgsmaprenderer.h
trunk/qgis/src/core/qgspallabeling.cpp
trunk/qgis/src/core/qgspallabeling.h
trunk/qgis/src/core/qgsvectorlayer.cpp
trunk/qgis/src/ui/qgslabelingguibase.ui
Log:
[FEATURE]: data defined font and buffer settings for labeling-ng
Modified: trunk/qgis/python/core/qgsmaprenderer.sip
===================================================================
--- trunk/qgis/python/core/qgsmaprenderer.sip 2010-08-02 14:38:01 UTC (rev 13997)
+++ trunk/qgis/python/core/qgsmaprenderer.sip 2010-08-02 15:09:17 UTC (rev 13998)
@@ -17,7 +17,8 @@
//! called to find out whether the layer is used for labeling
virtual bool willUseLayer( QgsVectorLayer* layer ) = 0;
//! called when starting rendering of a layer
- virtual int prepareLayer(QgsVectorLayer* layer, int& attrIndex, QgsRenderContext& ctx ) = 0;
+ //! @note: this method was added in version 1.6
+ virtual int prepareLayer( QgsVectorLayer* layer, QSet<int>& attrIndices, QgsRenderContext& ctx ) = 0;
//! called for every feature
virtual void registerFeature( QgsVectorLayer* layer, QgsFeature& feat, const QgsRenderContext& context = QgsRenderContext() ) = 0;
//! called when the map is drawn and labels should be placed
Modified: trunk/qgis/src/app/qgslabelinggui.cpp
===================================================================
--- trunk/qgis/src/app/qgslabelinggui.cpp 2010-08-02 14:38:01 UTC (rev 13997)
+++ trunk/qgis/src/app/qgslabelinggui.cpp 2010-08-02 15:09:17 UTC (rev 13998)
@@ -70,6 +70,8 @@
QgsPalLayerSettings lyr;
lyr.readFromLayer( layer );
+ populateDataDefinedCombos( lyr );
+
// placement
switch ( lyr.placement )
{
@@ -237,6 +239,18 @@
lyr.bufferSize = 0;
}
lyr.minFeatureSize = mMinSizeSpinBox->value();
+
+ //data defined labeling
+ setDataDefinedProperty( mSizeAttributeComboBox, QgsPalLayerSettings::Size, lyr );
+ setDataDefinedProperty( mColorAttributeComboBox, QgsPalLayerSettings::Color, lyr );
+ setDataDefinedProperty( mBoldAttributeComboBox, QgsPalLayerSettings::Bold, lyr );
+ setDataDefinedProperty( mItalicAttributeComboBox, QgsPalLayerSettings::Italic, lyr );
+ setDataDefinedProperty( mUnderlineAttributeComboBox, QgsPalLayerSettings::Underline, lyr );
+ setDataDefinedProperty( mStrikeoutAttributeComboBox, QgsPalLayerSettings::Strikeout, lyr );
+ setDataDefinedProperty( mFontFamilyAttributeComboBox, QgsPalLayerSettings::Family, lyr );
+ setDataDefinedProperty( mBufferSizeAttributeComboBox, QgsPalLayerSettings:: BufferSize, lyr );
+ setDataDefinedProperty( mBufferColorAttributeComboBox, QgsPalLayerSettings::BufferColor, lyr );
+
return lyr;
}
@@ -250,6 +264,79 @@
}
}
+void QgsLabelingGui::setDataDefinedProperty( const QComboBox* c, QgsPalLayerSettings::DataDefinedProperties p, QgsPalLayerSettings& lyr )
+{
+ if ( !c )
+ {
+ return;
+ }
+
+ QVariant propertyField = c->itemData( c->currentIndex() );
+ if ( propertyField.isValid() )
+ {
+ lyr.setDataDefinedProperty( p, propertyField.toInt() );
+ }
+}
+
+void QgsLabelingGui::setCurrentComboValue( QComboBox* c, const QgsPalLayerSettings& s, QgsPalLayerSettings::DataDefinedProperties p )
+{
+ if ( !c )
+ {
+ return;
+ }
+
+ QMap< QgsPalLayerSettings::DataDefinedProperties, int >::const_iterator it = s.dataDefinedProperties.find( p );
+ if ( it == s.dataDefinedProperties.constEnd() )
+ {
+ c->setCurrentIndex( 0 );
+ }
+ else
+ {
+ c->setCurrentIndex( c->findData( it.value() ) );
+ }
+}
+
+void QgsLabelingGui::populateDataDefinedCombos( QgsPalLayerSettings& s )
+{
+ QList<QComboBox*> comboList;
+ comboList << mSizeAttributeComboBox;
+ comboList << mColorAttributeComboBox;
+ comboList << mBoldAttributeComboBox;
+ comboList << mItalicAttributeComboBox;
+ comboList << mUnderlineAttributeComboBox;
+ comboList << mStrikeoutAttributeComboBox;
+ comboList << mFontFamilyAttributeComboBox;
+ comboList << mBufferSizeAttributeComboBox;
+ comboList << mBufferColorAttributeComboBox;
+
+ QList<QComboBox*>::iterator comboIt = comboList.begin();
+ for ( ; comboIt != comboList.end(); ++comboIt )
+ {
+ ( *comboIt )->addItem( "", QVariant() );
+ }
+
+ const QgsFieldMap& fields = mLayer->dataProvider()->fields();
+ for ( QgsFieldMap::const_iterator it = fields.constBegin(); it != fields.constEnd(); it++ )
+ {
+ for ( comboIt = comboList.begin(); comboIt != comboList.end(); ++comboIt )
+ {
+ ( *comboIt )->addItem( it.value().name(), it.key() );
+ }
+
+ }
+
+ //set current combo boxes to already existing indices
+ setCurrentComboValue( mSizeAttributeComboBox, s, QgsPalLayerSettings::Size );
+ setCurrentComboValue( mColorAttributeComboBox, s, QgsPalLayerSettings::Color );
+ setCurrentComboValue( mBoldAttributeComboBox, s, QgsPalLayerSettings::Bold );
+ setCurrentComboValue( mItalicAttributeComboBox, s, QgsPalLayerSettings::Italic );
+ setCurrentComboValue( mUnderlineAttributeComboBox, s, QgsPalLayerSettings::Underline );
+ setCurrentComboValue( mStrikeoutAttributeComboBox, s, QgsPalLayerSettings::Strikeout );
+ setCurrentComboValue( mFontFamilyAttributeComboBox, s, QgsPalLayerSettings::Family );
+ setCurrentComboValue( mBufferSizeAttributeComboBox, s , QgsPalLayerSettings::BufferSize );
+ setCurrentComboValue( mBufferColorAttributeComboBox, s, QgsPalLayerSettings::BufferColor );
+}
+
void QgsLabelingGui::changeTextColor()
{
QColor color = QColorDialog::getColor( btnTextColor->color(), this );
Modified: trunk/qgis/src/app/qgslabelinggui.h
===================================================================
--- trunk/qgis/src/app/qgslabelinggui.h 2010-08-02 14:38:01 UTC (rev 13997)
+++ trunk/qgis/src/app/qgslabelinggui.h 2010-08-02 15:09:17 UTC (rev 13998)
@@ -48,6 +48,10 @@
protected:
void populatePlacementMethods();
void populateFieldNames();
+ void populateDataDefinedCombos( QgsPalLayerSettings& s );
+ /**Sets data defined property attribute to map (if selected in combo box)*/
+ void setDataDefinedProperty( const QComboBox* c, QgsPalLayerSettings::DataDefinedProperties p, QgsPalLayerSettings& lyr );
+ void setCurrentComboValue( QComboBox* c, const QgsPalLayerSettings& s, QgsPalLayerSettings::DataDefinedProperties p );
void updateFont( QFont font );
private:
Modified: trunk/qgis/src/core/qgsmaprenderer.h
===================================================================
--- trunk/qgis/src/core/qgsmaprenderer.h 2010-08-02 14:38:01 UTC (rev 13997)
+++ trunk/qgis/src/core/qgsmaprenderer.h 2010-08-02 15:09:17 UTC (rev 13998)
@@ -51,7 +51,8 @@
//! called to find out whether the layer is used for labeling
virtual bool willUseLayer( QgsVectorLayer* layer ) = 0;
//! called when starting rendering of a layer
- virtual int prepareLayer( QgsVectorLayer* layer, int& attrIndex, QgsRenderContext& ctx ) = 0;
+ //! @note: this method was added in version 1.6
+ virtual int prepareLayer( QgsVectorLayer* layer, QSet<int>& attrIndices, QgsRenderContext& ctx ) = 0;
//! called for every feature
virtual void registerFeature( QgsVectorLayer* layer, QgsFeature& feat, const QgsRenderContext& context = QgsRenderContext() ) = 0;
//! called when the map is drawn and labels should be placed
Modified: trunk/qgis/src/core/qgspallabeling.cpp
===================================================================
--- trunk/qgis/src/core/qgspallabeling.cpp 2010-08-02 14:38:01 UTC (rev 13997)
+++ trunk/qgis/src/core/qgspallabeling.cpp 2010-08-02 15:09:17 UTC (rev 13998)
@@ -95,12 +95,17 @@
return mInfo;
}
+ const QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant >& dataDefinedValues() const { return mDataDefinedValues; }
+ void addDataDefinedValue( QgsPalLayerSettings::DataDefinedProperties p, QVariant v ) { mDataDefinedValues.insert( p, v ); }
+
protected:
GEOSGeometry* mG;
QString mText;
QByteArray mStrId;
int mId;
LabelInfo* mInfo;
+ /**Stores attribute values for data defined properties*/
+ QMap< QgsPalLayerSettings::DataDefinedProperties, QVariant > mDataDefinedValues;
};
// -------------
@@ -151,6 +156,7 @@
vectorScaleFactor = s.vectorScaleFactor;
rasterCompressFactor = s.rasterCompressFactor;
+ dataDefinedProperties = s.dataDefinedProperties;
fontMetrics = NULL;
ct = NULL;
}
@@ -179,6 +185,64 @@
layer->setCustomProperty( property + "B", color.blue() );
}
+static void _writeDataDefinedPropertyMap( QgsVectorLayer* layer, const QMap< QgsPalLayerSettings::DataDefinedProperties, int >& propertyMap )
+{
+ if ( !layer )
+ {
+ return;
+ }
+
+ for ( int i = 0; i < 9; ++i )
+ {
+ QMap< QgsPalLayerSettings::DataDefinedProperties, int >::const_iterator it = propertyMap.find(( QgsPalLayerSettings::DataDefinedProperties )i );
+ QVariant propertyValue;
+ if ( it == propertyMap.constEnd() )
+ {
+ propertyValue = QVariant(); //we cannot delete properties, so we just insert an invalid variant
+ }
+ else
+ {
+ propertyValue = *it;
+ }
+ layer->setCustomProperty( "labeling/dataDefinedProperty" + QString::number( i ), propertyValue );
+ }
+}
+
+static void _readDataDefinedProperty( QgsVectorLayer* layer, QgsPalLayerSettings::DataDefinedProperties p, \
+ QMap< QgsPalLayerSettings::DataDefinedProperties, int >& propertyMap )
+{
+ QVariant propertyField = layer->customProperty( "labeling/dataDefinedProperty" + QString::number( p ) );
+ bool conversionOk;
+ int fieldIndex;
+
+ if ( propertyField.isValid() )
+ {
+ fieldIndex = propertyField.toInt( &conversionOk );
+ if ( conversionOk )
+ {
+ propertyMap.insert( p, fieldIndex );
+ }
+ }
+}
+
+static void _readDataDefinedPropertyMap( QgsVectorLayer* layer, QMap< QgsPalLayerSettings::DataDefinedProperties, int >& propertyMap )
+{
+ if ( !layer )
+ {
+ return;
+ }
+
+ _readDataDefinedProperty( layer, QgsPalLayerSettings::Size, propertyMap );
+ _readDataDefinedProperty( layer, QgsPalLayerSettings::Color, propertyMap );
+ _readDataDefinedProperty( layer, QgsPalLayerSettings::Bold, propertyMap );
+ _readDataDefinedProperty( layer, QgsPalLayerSettings::Italic, propertyMap );
+ _readDataDefinedProperty( layer, QgsPalLayerSettings::Underline, propertyMap );
+ _readDataDefinedProperty( layer, QgsPalLayerSettings::Strikeout, propertyMap );
+ _readDataDefinedProperty( layer, QgsPalLayerSettings::Family, propertyMap );
+ _readDataDefinedProperty( layer, QgsPalLayerSettings::BufferSize, propertyMap );
+ _readDataDefinedProperty( layer, QgsPalLayerSettings::BufferColor, propertyMap );
+}
+
void QgsPalLayerSettings::readFromLayer( QgsVectorLayer* layer )
{
if ( layer->customProperty( "labeling" ).toString() != QString( "pal" ) )
@@ -205,6 +269,7 @@
mergeLines = layer->customProperty( "labeling/mergeLines" ).toBool();
multiLineLabels = layer->customProperty( "labeling/multiLineLabels" ).toBool();
minFeatureSize = layer->customProperty( "labeling/minFeatureSize" ).toDouble();
+ _readDataDefinedPropertyMap( layer, dataDefinedProperties );
}
void QgsPalLayerSettings::writeToLayer( QgsVectorLayer* layer )
@@ -234,8 +299,19 @@
layer->setCustomProperty( "labeling/mergeLines", mergeLines );
layer->setCustomProperty( "labeling/multiLineLabels", multiLineLabels );
layer->setCustomProperty( "labeling/minFeatureSize", minFeatureSize );
+ _writeDataDefinedPropertyMap( layer, dataDefinedProperties );
}
+void QgsPalLayerSettings::setDataDefinedProperty( DataDefinedProperties p, int attributeIndex )
+{
+ dataDefinedProperties.insert( p, attributeIndex );
+}
+
+void QgsPalLayerSettings::removeDataDefinedProperty( DataDefinedProperties p )
+{
+ dataDefinedProperties.remove( p );
+}
+
bool QgsPalLayerSettings::checkMinimumSizeMM( const QgsRenderContext& ct, QgsGeometry* geom, double minSize ) const
{
if ( minSize <= 0 )
@@ -274,9 +350,14 @@
return true; //should never be reached. Return true in this case to label such geometries anyway.
}
-void QgsPalLayerSettings::calculateLabelSize( QString text, double& labelX, double& labelY )
+void QgsPalLayerSettings::calculateLabelSize( const QFontMetrics* fm, QString text, double& labelX, double& labelY )
{
- QRectF labelRect = fontMetrics->boundingRect( text );
+ if ( !fm )
+ {
+ return;
+ }
+
+ QRectF labelRect = fm->boundingRect( text );
double w, h;
if ( !multiLineLabels )
{
@@ -286,11 +367,11 @@
else
{
QStringList multiLineSplit = text.split( "\n" );
- h = fontMetrics->height() * multiLineSplit.size() / rasterCompressFactor;
+ h = fm->height() * multiLineSplit.size() / rasterCompressFactor;
w = 0;
for ( int i = 0; i < multiLineSplit.size(); ++i )
{
- double width = fontMetrics->width( multiLineSplit.at( i ) );
+ double width = fm->width( multiLineSplit.at( i ) );
if ( width > w )
{
w = width;
@@ -309,8 +390,31 @@
{
QString labelText = f.attributeMap()[fieldIndex].toString();
double labelX, labelY; // will receive label size
- calculateLabelSize( labelText, labelX, labelY );
+ //data defined label size?
+ QMap< DataDefinedProperties, int >::const_iterator it = dataDefinedProperties.find( QgsPalLayerSettings::Size );
+ if ( it != dataDefinedProperties.constEnd() )
+ {
+ QFont labelFont = textFont;
+ //find out size
+ QVariant size = f.attributeMap().value( *it );
+ if ( size.isValid() )
+ {
+ double sizeDouble = size.toDouble();
+ if ( sizeDouble <= 0 )
+ {
+ return;
+ }
+ labelFont.setPointSize( sizeToPixel( sizeDouble, context ) );
+ }
+ QFontMetrics labelFontMetrics( labelFont );
+ calculateLabelSize( &labelFontMetrics, labelText, labelX, labelY );
+ }
+ else
+ {
+ calculateLabelSize( fontMetrics, labelText, labelX, labelY );
+ }
+
QgsGeometry* geom = f.geometry();
if ( ct != NULL ) // reproject the geometry if necessary
geom->transform( *ct );
@@ -344,9 +448,23 @@
// TODO: allow layer-wide feature dist in PAL...?
if ( dist != 0 )
feat->setDistLabel( fabs( ptOne.x() - ptZero.x() )* dist * vectorScaleFactor );
+
+ //add parameters for data defined labeling to QgsPalGeometry
+ QMap< DataDefinedProperties, int >::const_iterator dIt = dataDefinedProperties.constBegin();
+ for ( ; dIt != dataDefinedProperties.constEnd(); ++dIt )
+ {
+ lbl->addDataDefinedValue( dIt.key(), f.attributeMap()[dIt.value()] );
+ }
}
+int QgsPalLayerSettings::sizeToPixel( double size, const QgsRenderContext& c ) const
+{
+ // set font size from points to output size
+ double pixelSize = 0.3527 * size * c.scaleFactor() * c.rasterScaleFactor() + 0.5;
+ return ( int )pixelSize;
+}
+
// -------------
QgsPalLabeling::QgsPalLabeling()
@@ -387,8 +505,7 @@
return lyrTmp.enabled;
}
-
-int QgsPalLabeling::prepareLayer( QgsVectorLayer* layer, int& attrIndex, QgsRenderContext& ctx )
+int QgsPalLabeling::prepareLayer( QgsVectorLayer* layer, QSet<int>& attrIndices, QgsRenderContext& ctx )
{
Q_ASSERT( mMapRenderer != NULL );
@@ -403,8 +520,15 @@
int fldIndex = layer->fieldNameIndex( lyrTmp.fieldName );
if ( fldIndex == -1 )
return 0;
- attrIndex = fldIndex;
+ attrIndices.insert( fldIndex );
+ //add indices of data defined fields
+ QMap< QgsPalLayerSettings::DataDefinedProperties, int >::const_iterator dIt = lyrTmp.dataDefinedProperties.constBegin();
+ for ( ; dIt != lyrTmp.dataDefinedProperties.constEnd(); ++dIt )
+ {
+ attrIndices.insert( dIt.value() );
+ }
+
// add layer settings to the pallabeling hashtable: <QgsVectorLayer*, QgsPalLayerSettings>
mActiveLayers.insert( layer, lyrTmp );
// start using the reference to the layer in hashtable instead of local instance
@@ -445,10 +569,7 @@
// set whether adjacent lines should be merged
l->setMergeConnectedLines( lyr.mergeLines );
- // set font size from points to output size
- double size = 0.3527 * lyr.textFont.pointSizeF() * ctx.scaleFactor();
- // request larger font and then scale down painter (to avoid Qt font scale bug)
- lyr.textFont.setPixelSize(( int )( size*ctx.rasterScaleFactor() + 0.5 ) );
+ lyr.textFont.setPixelSize( lyr.sizeToPixel( lyr.textFont.pointSizeF(), ctx ) );
//raster and vector scale factors
lyr.vectorScaleFactor = ctx.scaleFactor();
@@ -587,11 +708,86 @@
for ( ; it != labels->end(); ++it )
{
const QgsPalLayerSettings& lyr = layer(( *it )->getLayerName() );
+ QFont fontForLabel = lyr.textFont;
+ QColor fontColor = lyr.textColor;
+ double bufferSize = lyr.bufferSize;
+ QColor bufferColor = lyr.bufferColor;
+ QgsPalGeometry* palGeometry = dynamic_cast< QgsPalGeometry* >(( *it )->getFeaturePart()->getUserGeometry() );
+ if ( !palGeometry )
+ {
+ continue;
+ }
+
+ //apply data defined settings for the label
+ //font size
+ QVariant dataDefinedSize = palGeometry->dataDefinedValues().value( QgsPalLayerSettings::Size );
+ if ( dataDefinedSize.isValid() )
+ {
+ fontForLabel.setPointSize( lyr.sizeToPixel( dataDefinedSize.toDouble(), context ) );
+ }
+ //font color
+ QVariant dataDefinedColor = palGeometry->dataDefinedValues().value( QgsPalLayerSettings::Color );
+ if ( dataDefinedColor.isValid() )
+ {
+ fontColor.setNamedColor( dataDefinedColor.toString() );
+ if ( !fontColor.isValid() )
+ {
+ fontColor = lyr.textColor;
+ }
+ }
+ //font bold
+ QVariant dataDefinedBold = palGeometry->dataDefinedValues().value( QgsPalLayerSettings::Bold );
+ if ( dataDefinedBold.isValid() )
+ {
+ fontForLabel.setBold(( bool )dataDefinedBold.toInt() );
+ }
+ //font italic
+ QVariant dataDefinedItalic = palGeometry->dataDefinedValues().value( QgsPalLayerSettings::Italic );
+ if ( dataDefinedItalic.isValid() )
+ {
+ fontForLabel.setItalic(( bool ) dataDefinedItalic.toInt() );
+ }
+ //font underline
+ QVariant dataDefinedUnderline = palGeometry->dataDefinedValues().value( QgsPalLayerSettings::Underline );
+ if ( dataDefinedUnderline.isValid() )
+ {
+ fontForLabel.setUnderline(( bool ) dataDefinedUnderline.toInt() );
+ }
+ //font strikeout
+ QVariant dataDefinedStrikeout = palGeometry->dataDefinedValues().value( QgsPalLayerSettings::Strikeout );
+ if ( dataDefinedStrikeout.isValid() )
+ {
+ fontForLabel.setStrikeOut(( bool ) dataDefinedStrikeout.toInt() );
+ }
+ //font family
+ QVariant dataDefinedFontFamily = palGeometry->dataDefinedValues().value( QgsPalLayerSettings::Family );
+ if ( dataDefinedFontFamily.isValid() )
+ {
+ fontForLabel.setFamily( dataDefinedFontFamily.toString() );
+ }
+ //buffer size
+ QVariant dataDefinedBufferSize = palGeometry->dataDefinedValues().value( QgsPalLayerSettings::BufferSize );
+ if ( dataDefinedBufferSize.isValid() )
+ {
+ bufferSize = dataDefinedBufferSize.toDouble();
+ }
+
+ //buffer color
+ QVariant dataDefinedBufferColor = palGeometry->dataDefinedValues().value( QgsPalLayerSettings::BufferColor );
+ if ( dataDefinedBufferColor.isValid() )
+ {
+ bufferColor.setNamedColor( dataDefinedBufferColor.toString() );
+ if ( !bufferColor.isValid() )
+ {
+ bufferColor = lyr.bufferColor;
+ }
+ }
+
if ( lyr.bufferSize != 0 )
- drawLabel( *it, painter, xform, true );
+ drawLabel( *it, painter, fontForLabel, fontColor, xform, bufferSize, bufferColor, true );
- drawLabel( *it, painter, xform );
+ drawLabel( *it, painter, fontForLabel, fontColor, xform );
}
QgsDebugMsg( QString( "LABELING draw: %1 ms" ).arg( t.elapsed() ) );
@@ -660,7 +856,8 @@
#include "qgslogger.h"
-void QgsPalLabeling::drawLabel( pal::LabelPosition* label, QPainter* painter, const QgsMapToPixel* xform, bool drawBuffer )
+void QgsPalLabeling::drawLabel( pal::LabelPosition* label, QPainter* painter, const QFont& f, const QColor& c, const QgsMapToPixel* xform, double bufferSize, \
+ const QColor& bufferColor, bool drawBuffer )
{
QgsPoint outPt = xform->transform( label->getX(), label->getY() );
@@ -698,21 +895,21 @@
if ( drawBuffer )
{
// we're drawing buffer
- drawLabelBuffer( painter, multiLineList.at( i ), lyr.textFont, lyr.bufferSize * lyr.vectorScaleFactor * lyr.rasterCompressFactor , lyr.bufferColor );
+ drawLabelBuffer( painter, multiLineList.at( i ), f, bufferSize * lyr.vectorScaleFactor * lyr.rasterCompressFactor , bufferColor );
}
else
{
// we're drawing real label
QPainterPath path;
- path.addText( 0, 0, lyr.textFont, multiLineList.at( i ) );
+ path.addText( 0, 0, f, multiLineList.at( i ) );
painter->setPen( Qt::NoPen );
- painter->setBrush( lyr.textColor );
+ painter->setBrush( c );
painter->drawPath( path );
}
painter->restore();
if ( label->getNextPart() )
- drawLabel( label->getNextPart(), painter, xform, drawBuffer );
+ drawLabel( label->getNextPart(), painter, f, c, xform, drawBuffer );
}
}
Modified: trunk/qgis/src/core/qgspallabeling.h
===================================================================
--- trunk/qgis/src/core/qgspallabeling.h 2010-08-02 14:38:01 UTC (rev 13997)
+++ trunk/qgis/src/core/qgspallabeling.h 2010-08-02 15:09:17 UTC (rev 13998)
@@ -72,6 +72,19 @@
MapOrientation = 8
};
+ enum DataDefinedProperties
+ {
+ Size = 0,
+ Bold,
+ Italic,
+ Underline,
+ Color,
+ Strikeout,
+ Family,
+ BufferSize,
+ BufferColor,
+ };
+
QString fieldName;
Placement placement;
unsigned int placementFlags;
@@ -92,7 +105,7 @@
double minFeatureSize; // minimum feature size to be labelled (in mm)
// called from register feature hook
- void calculateLabelSize( QString text, double& labelX, double& labelY );
+ void calculateLabelSize( const QFontMetrics* fm, QString text, double& labelX, double& labelY );
// implementation of register feature hook
void registerFeature( QgsFeature& f, const QgsRenderContext& context );
@@ -100,6 +113,11 @@
void readFromLayer( QgsVectorLayer* layer );
void writeToLayer( QgsVectorLayer* layer );
+ /**Set a property as data defined*/
+ void setDataDefinedProperty( DataDefinedProperties p, int attributeIndex );
+ /**Set a property to static instead data defined*/
+ void removeDataDefinedProperty( DataDefinedProperties p );
+
// temporary stuff: set when layer gets prepared
pal::Layer* palLayer;
int fieldIndex;
@@ -109,6 +127,15 @@
QgsPoint ptZero, ptOne;
QList<QgsPalGeometry*> geometries;
+ /**Stores field indices for data defined layer properties*/
+ QMap< DataDefinedProperties, int > dataDefinedProperties;
+
+ /**Calculates pixel size (considering scale factors and oversampling)
+ @param label size (pixels, possibily map units in future)
+ @param c rendercontext
+ @return font pixel size*/
+ int sizeToPixel( double size, const QgsRenderContext& c ) const;
+
private:
/**Checks if a feature is larger than a minimum size (in mm)
@return true if above size, false if below*/
@@ -154,7 +181,7 @@
//! called to find out whether the layer is used for labeling
virtual bool willUseLayer( QgsVectorLayer* layer );
//! hook called when drawing layer before issuing select()
- virtual int prepareLayer( QgsVectorLayer* layer, int& attrIndex, QgsRenderContext& ctx );
+ virtual int prepareLayer( QgsVectorLayer* layer, QSet<int>& attrIndices, QgsRenderContext& ctx );
//! hook called when drawing for every feature in a layer
virtual void registerFeature( QgsVectorLayer* layer, QgsFeature& feat, const QgsRenderContext& context = QgsRenderContext() );
//! called when the map is drawn and labels should be placed
@@ -166,14 +193,15 @@
virtual QgsLabelingEngineInterface* clone();
void drawLabelCandidateRect( pal::LabelPosition* lp, QPainter* painter, const QgsMapToPixel* xform );
- void drawLabel( pal::LabelPosition* label, QPainter* painter, const QgsMapToPixel* xform, bool drawBuffer = false );
+ //!drawLabel
+ void drawLabel( pal::LabelPosition* label, QPainter* painter, const QFont& f, const QColor& c, const QgsMapToPixel* xform, double bufferSize = -1, \
+ const QColor& bufferColor = QColor( 255, 255, 255 ), bool drawBuffer = false );
static void drawLabelBuffer( QPainter* p, QString text, const QFont& font, double size, QColor color );
protected:
void initPal();
-
protected:
// temporary hashtable of layer settings, being filled during labeling, cleared once labeling's done
QHash<QgsVectorLayer*, QgsPalLayerSettings> mActiveLayers;
Modified: trunk/qgis/src/core/qgsvectorlayer.cpp
===================================================================
--- trunk/qgis/src/core/qgsvectorlayer.cpp 2010-08-02 14:38:01 UTC (rev 13997)
+++ trunk/qgis/src/core/qgsvectorlayer.cpp 2010-08-02 15:09:17 UTC (rev 13998)
@@ -922,11 +922,17 @@
bool labeling = false;
if ( rendererContext.labelingEngine() )
{
- int attrIndex;
+ QSet<int> attrIndex;
if ( rendererContext.labelingEngine()->prepareLayer( this, attrIndex, rendererContext ) )
{
- if ( !attributes.contains( attrIndex ) )
- attributes << attrIndex;
+ QSet<int>::const_iterator attIt = attrIndex.constBegin();
+ for ( ; attIt != attrIndex.constEnd(); ++attIt )
+ {
+ if ( !attributes.contains( *attIt ) )
+ {
+ attributes << *attIt;
+ }
+ }
labeling = true;
}
}
@@ -978,11 +984,17 @@
bool labeling = false;
if ( rendererContext.labelingEngine() )
{
- int attrIndex;
+ QSet<int> attrIndex;
if ( rendererContext.labelingEngine()->prepareLayer( this, attrIndex, rendererContext ) )
{
- if ( !attributes.contains( attrIndex ) )
- attributes << attrIndex;
+ QSet<int>::const_iterator attIt = attrIndex.constBegin();
+ for ( ; attIt != attrIndex.constEnd(); ++attIt )
+ {
+ if ( !attributes.contains( *attIt ) )
+ {
+ attributes << *attIt;
+ }
+ }
labeling = true;
}
}
Modified: trunk/qgis/src/ui/qgslabelingguibase.ui
===================================================================
--- trunk/qgis/src/ui/qgslabelingguibase.ui 2010-08-02 14:38:01 UTC (rev 13997)
+++ trunk/qgis/src/ui/qgslabelingguibase.ui 2010-08-02 15:09:17 UTC (rev 13998)
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>482</width>
- <height>610</height>
+ <width>496</width>
+ <height>659</height>
</rect>
</property>
<property name="windowTitle">
@@ -17,719 +17,869 @@
<iconset>
<normaloff>../../../../.designer/backup</normaloff>../../../../.designer/backup</iconset>
</property>
- <layout class="QGridLayout" name="gridLayout_5">
+ <layout class="QGridLayout" name="gridLayout_13">
<item row="0" column="0">
- <widget class="QCheckBox" name="chkEnableLabeling">
- <property name="text">
- <string>Label this layer</string>
+ <widget class="QTabWidget" name="mTabWidget">
+ <property name="currentIndex">
+ <number>0</number>
</property>
- </widget>
- </item>
- <item row="1" column="0">
- <layout class="QHBoxLayout" name="horizontalLayout_9">
- <item>
- <widget class="QLabel" name="label_6">
- <property name="text">
- <string>Field with labels</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QComboBox" name="cboFieldName"/>
- </item>
- <item>
- <spacer name="horizontalSpacer_4">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item row="2" column="0">
- <widget class="QGroupBox" name="groupBox_4">
- <property name="title">
- <string>Placement</string>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout_8">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>4</number>
- </property>
- <item>
- <widget class="QStackedWidget" name="stackedPlacement">
- <property name="currentIndex">
- <number>0</number>
- </property>
- <widget class="QWidget" name="pagePoint">
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <item>
- <widget class="QRadioButton" name="radAroundPoint">
- <property name="text">
- <string>around point</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QRadioButton" name="radOverPoint">
- <property name="text">
- <string>over point</string>
- </property>
- </widget>
- </item>
- </layout>
+ <widget class="QWidget" name="tab_3">
+ <attribute name="title">
+ <string>Label settings</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout_6">
+ <item row="0" column="0">
+ <widget class="QCheckBox" name="chkEnableLabeling">
+ <property name="text">
+ <string>Label this layer</string>
+ </property>
</widget>
- <widget class="QWidget" name="pageLine">
- <layout class="QVBoxLayout" name="verticalLayout_3">
+ </item>
+ <item row="1" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout_11">
+ <item>
+ <widget class="QLabel" name="label_20">
+ <property name="text">
+ <string>Field with labels</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QComboBox" name="cboFieldName"/>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_5">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item row="2" column="0">
+ <widget class="QGroupBox" name="groupBox_5">
+ <property name="title">
+ <string>Placement</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_12">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>4</number>
+ </property>
<item>
- <widget class="QRadioButton" name="radLineParallel">
- <property name="text">
- <string>parallel</string>
+ <widget class="QStackedWidget" name="stackedPlacement">
+ <property name="currentIndex">
+ <number>2</number>
</property>
- <property name="checked">
- <bool>true</bool>
- </property>
+ <widget class="QWidget" name="pagePoint">
+ <layout class="QVBoxLayout" name="verticalLayout_6">
+ <item>
+ <widget class="QRadioButton" name="radAroundPoint">
+ <property name="text">
+ <string>around point</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="radOverPoint">
+ <property name="text">
+ <string>over point</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="pageLine">
+ <layout class="QVBoxLayout" name="verticalLayout_7">
+ <item>
+ <widget class="QRadioButton" name="radLineParallel">
+ <property name="text">
+ <string>parallel</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="radLineCurved">
+ <property name="text">
+ <string>curved</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="radLineHorizontal">
+ <property name="text">
+ <string>horizontal</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="pagePolygon">
+ <layout class="QVBoxLayout" name="verticalLayout_8">
+ <item>
+ <widget class="QRadioButton" name="radOverCentroid">
+ <property name="text">
+ <string>over centroid</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="radAroundCentroid">
+ <property name="text">
+ <string>around centroid</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="radPolygonHorizontal">
+ <property name="text">
+ <string>horizontal (slow)</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="radPolygonFree">
+ <property name="text">
+ <string>free (slow)</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="radPolygonPerimeter">
+ <property name="text">
+ <string>using perimeter</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
</widget>
</item>
<item>
- <widget class="QRadioButton" name="radLineCurved">
- <property name="text">
- <string>curved</string>
+ <widget class="Line" name="line_3">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
- <widget class="QRadioButton" name="radLineHorizontal">
- <property name="text">
- <string>horizontal</string>
+ <widget class="QStackedWidget" name="stackedOptions">
+ <property name="currentIndex">
+ <number>1</number>
</property>
+ <widget class="QWidget" name="pageOptionsPoint">
+ <layout class="QGridLayout" name="gridLayout_7">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_21">
+ <property name="text">
+ <string>Label distance</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QDoubleSpinBox" name="spinDistPoint">
+ <property name="decimals">
+ <number>2</number>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QLabel" name="label_22">
+ <property name="text">
+ <string>mm</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_23">
+ <property name="text">
+ <string>Rotation</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QSpinBox" name="spinAngle">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QLabel" name="label_24">
+ <property name="text">
+ <string>degrees</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="pageOptionsLine">
+ <layout class="QVBoxLayout" name="verticalLayout_9">
+ <item>
+ <widget class="QCheckBox" name="chkLineAbove">
+ <property name="text">
+ <string>above line</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="chkLineOn">
+ <property name="text">
+ <string>on line</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="chkLineBelow">
+ <property name="text">
+ <string>below line</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_13">
+ <item>
+ <widget class="QLabel" name="label_25">
+ <property name="text">
+ <string>Orientation</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="radOrientationMap">
+ <property name="text">
+ <string>map</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="radOrientationLine">
+ <property name="text">
+ <string>line</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_14">
+ <item>
+ <widget class="QLabel" name="label_26">
+ <property name="text">
+ <string>Label distance</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDoubleSpinBox" name="spinDistLine">
+ <property name="decimals">
+ <number>2</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_27">
+ <property name="text">
+ <string>mm</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="pageOptionsEmpty"/>
</widget>
</item>
</layout>
</widget>
- <widget class="QWidget" name="pagePolygon">
- <layout class="QVBoxLayout" name="verticalLayout_4">
- <item>
- <widget class="QRadioButton" name="radOverCentroid">
- <property name="text">
- <string>over centroid</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QRadioButton" name="radAroundCentroid">
- <property name="text">
- <string>around centroid</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QRadioButton" name="radPolygonHorizontal">
- <property name="text">
- <string>horizontal (slow)</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QRadioButton" name="radPolygonFree">
- <property name="text">
- <string>free (slow)</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QRadioButton" name="radPolygonPerimeter">
- <property name="text">
- <string>using perimeter</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- <item>
- <widget class="Line" name="line_2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QStackedWidget" name="stackedOptions">
- <property name="currentIndex">
- <number>0</number>
- </property>
- <widget class="QWidget" name="pageOptionsPoint">
- <layout class="QGridLayout" name="gridLayout_2">
- <item row="0" column="0">
- <widget class="QLabel" name="label_8">
- <property name="text">
- <string>Label distance</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QDoubleSpinBox" name="spinDistPoint">
- <property name="decimals">
- <number>2</number>
- </property>
- </widget>
- </item>
- <item row="0" column="2">
- <widget class="QLabel" name="label_9">
- <property name="text">
- <string>mm</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_17">
- <property name="text">
- <string>Rotation</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QSpinBox" name="spinAngle">
- <property name="enabled">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="1" column="2">
- <widget class="QLabel" name="label_18">
- <property name="text">
- <string>degrees</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="pageOptionsLine">
- <layout class="QVBoxLayout" name="verticalLayout_5">
- <item>
- <widget class="QCheckBox" name="chkLineAbove">
- <property name="text">
- <string>above line</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="chkLineOn">
- <property name="text">
- <string>on line</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="chkLineBelow">
- <property name="text">
- <string>below line</string>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_7">
- <item>
- <widget class="QLabel" name="label">
+ </item>
+ <item row="3" column="0">
+ <layout class="QGridLayout" name="gridLayout_8">
+ <item row="0" column="0" rowspan="2">
+ <widget class="QGroupBox" name="groupBox_6">
+ <property name="title">
+ <string>Text style</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_9">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_28">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
<property name="text">
- <string>Orientation</string>
+ <string>Font</string>
</property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
</widget>
</item>
+ <item row="0" column="1">
+ <layout class="QHBoxLayout" name="horizontalLayout_15">
+ <item>
+ <widget class="QLabel" name="lblFontName">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_6">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QToolButton" name="btnChangeFont">
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_29">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Color</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <layout class="QHBoxLayout" name="horizontalLayout_16">
+ <item>
+ <widget class="QgsColorButton" name="btnTextColor">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_7">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Preferred</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>142</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_30">
+ <property name="text">
+ <string>Buffer</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <layout class="QHBoxLayout" name="horizontalLayout_17">
+ <item>
+ <widget class="QCheckBox" name="chkBuffer">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_31">
+ <property name="text">
+ <string>Size</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDoubleSpinBox" name="spinBufferSize">
+ <property name="suffix">
+ <string> mm</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_32">
+ <property name="text">
+ <string>Color</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QgsColorButton" name="btnBufferColor">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="label_33">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Sample</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QgsLabelPreview" name="lblFontPreview">
+ <property name="minimumSize">
+ <size>
+ <width>30</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Lorem Ipsum</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0" colspan="2">
+ <widget class="Line" name="line_4">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QGroupBox" name="groupBox_7">
+ <property name="title">
+ <string>Priority</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_18">
<item>
- <widget class="QRadioButton" name="radOrientationMap">
+ <widget class="QLabel" name="label_34">
<property name="text">
- <string>map</string>
+ <string>Low</string>
</property>
- <property name="checked">
- <bool>true</bool>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSlider" name="sliderPriority">
+ <property name="maximum">
+ <number>10</number>
</property>
+ <property name="value">
+ <number>5</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="tickPosition">
+ <enum>QSlider::TicksBelow</enum>
+ </property>
+ <property name="tickInterval">
+ <number>1</number>
+ </property>
</widget>
</item>
<item>
- <widget class="QRadioButton" name="radOrientationLine">
+ <widget class="QLabel" name="label_35">
<property name="text">
- <string>line</string>
+ <string>High</string>
</property>
</widget>
</item>
</layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_3">
- <item>
- <widget class="QLabel" name="label_16">
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QGroupBox" name="groupBox_8">
+ <property name="title">
+ <string>Scale-based visibility</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_10">
+ <item row="0" column="0" colspan="2">
+ <widget class="QCheckBox" name="chkScaleBasedVisibility">
<property name="text">
- <string>Label distance</string>
+ <string>Enabled</string>
</property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_36">
+ <property name="text">
+ <string>Minimum</string>
+ </property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
- <item>
- <widget class="QDoubleSpinBox" name="spinDistLine">
- <property name="decimals">
- <number>2</number>
+ <item row="1" column="1">
+ <widget class="QSpinBox" name="spinScaleMin">
+ <property name="minimum">
+ <number>1</number>
</property>
+ <property name="maximum">
+ <number>10000000</number>
+ </property>
</widget>
</item>
- <item>
- <widget class="QLabel" name="label_15">
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_37">
<property name="text">
- <string>mm</string>
+ <string>Maximum</string>
</property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
</widget>
</item>
+ <item row="2" column="1">
+ <widget class="QSpinBox" name="spinScaleMax">
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>10000000</number>
+ </property>
+ <property name="value">
+ <number>10000000</number>
+ </property>
+ </widget>
+ </item>
</layout>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="4" column="0">
+ <widget class="QCheckBox" name="chkLabelPerFeaturePart">
+ <property name="text">
+ <string>label every part of multi-part features</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="0">
+ <widget class="QCheckBox" name="chkMergeLines">
+ <property name="text">
+ <string>merge connected lines to avoid duplicate labels</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="0">
+ <widget class="QCheckBox" name="chkMultiLine">
+ <property name="text">
+ <string>multiline labels</string>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout_19">
+ <item>
+ <widget class="QLabel" name="label_19">
+ <property name="text">
+ <string>Suppress labeling of features smaller than</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDoubleSpinBox" name="mMinSizeSpinBox">
+ <property name="suffix">
+ <string> mm</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="8" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout_20">
+ <item>
+ <widget class="QCheckBox" name="chkNoObstacle">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>features don't act as obstacles for labels</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_8">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnEngineSettings">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Engine settings</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="tab_4">
+ <attribute name="title">
+ <string>Data defined settings</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout_4">
+ <item row="0" column="0">
+ <widget class="QGroupBox" name="mFontAttributePropertiesGroupBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Font properties</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <layout class="QGridLayout" name="gridLayout_11">
+ <item row="0" column="0">
+ <widget class="QLabel" name="mSizeLabel">
+ <property name="text">
+ <string>Size</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="mSizeAttributeComboBox"/>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="mBoldLabel">
+ <property name="text">
+ <string>Bold</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QComboBox" name="mBoldAttributeComboBox"/>
+ </item>
+ <item row="1" column="1">
+ <widget class="QComboBox" name="mColorAttributeComboBox"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="mColorLabel">
+ <property name="text">
+ <string>Color</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QComboBox" name="mItalicAttributeComboBox"/>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="mItalicLabel">
+ <property name="text">
+ <string>Italic</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QComboBox" name="mUnderlineAttributeComboBox"/>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="mUnderlineLabel">
+ <property name="text">
+ <string>Underline</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="1">
+ <widget class="QComboBox" name="mFontFamilyAttributeComboBox"/>
+ </item>
+ <item row="6" column="0">
+ <widget class="QLabel" name="mFontFamilyLabel">
+ <property name="text">
+ <string>Font family</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="1">
+ <widget class="QComboBox" name="mStrikeoutAttributeComboBox"/>
+ </item>
+ <item row="5" column="0">
+ <widget class="QLabel" name="mStrikeoutLabel">
+ <property name="text">
+ <string>Strikeout</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
</item>
</layout>
</widget>
- <widget class="QWidget" name="pageOptionsEmpty"/>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="3" column="0">
- <layout class="QGridLayout" name="gridLayout_4">
- <item row="0" column="0" rowspan="2">
- <widget class="QGroupBox" name="groupBox">
- <property name="title">
- <string>Text style</string>
- </property>
- <layout class="QGridLayout" name="gridLayout">
- <item row="0" column="0">
- <widget class="QLabel" name="label_4">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Font</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout_5">
- <item>
- <widget class="QLabel" name="lblFontName">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
- <horstretch>1</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>TextLabel</string>
- </property>
- </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QGroupBox" name="mBufferAttributesPropertiesGroupBox">
+ <property name="title">
+ <string>Buffer properties</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="0" column="0">
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="0">
+ <widget class="QLabel" name="mBufferSizeLabel">
+ <property name="text">
+ <string>Buffer size</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="mBufferSizeAttributeComboBox"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="mBufferColorLabel">
+ <property name="text">
+ <string>Buffer color</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QComboBox" name="mBufferColorAttributeComboBox"/>
+ </item>
+ </layout>
</item>
- <item>
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QToolButton" name="btnChangeFont">
- <property name="text">
- <string>...</string>
- </property>
- </widget>
- </item>
</layout>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_3">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Color</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout_6">
- <item>
- <widget class="QgsColorButton" name="btnTextColor">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Preferred</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>142</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_10">
- <property name="text">
- <string>Buffer</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout_4">
- <item>
- <widget class="QCheckBox" name="chkBuffer">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_11">
- <property name="text">
- <string>Size</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QDoubleSpinBox" name="spinBufferSize">
- <property name="suffix">
- <string> mm</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_12">
- <property name="text">
- <string>Color</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QgsColorButton" name="btnBufferColor">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>...</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="4" column="0">
- <widget class="QLabel" name="label_7">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Sample</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item row="4" column="1">
- <widget class="QgsLabelPreview" name="lblFontPreview">
- <property name="minimumSize">
- <size>
- <width>30</width>
- <height>30</height>
- </size>
- </property>
- <property name="text">
- <string>Lorem Ipsum</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item row="3" column="0" colspan="2">
- <widget class="Line" name="line">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QGroupBox" name="groupBox_2">
- <property name="title">
- <string>Priority</string>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QLabel" name="label_2">
- <property name="text">
- <string>Low</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSlider" name="sliderPriority">
- <property name="maximum">
- <number>10</number>
- </property>
- <property name="value">
- <number>5</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="tickPosition">
- <enum>QSlider::TicksBelow</enum>
- </property>
- <property name="tickInterval">
- <number>1</number>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_5">
- <property name="text">
- <string>High</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QGroupBox" name="groupBox_3">
- <property name="title">
- <string>Scale-based visibility</string>
- </property>
- <layout class="QGridLayout" name="gridLayout_3">
- <item row="0" column="0" colspan="2">
- <widget class="QCheckBox" name="chkScaleBasedVisibility">
- <property name="text">
- <string>Enabled</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_13">
- <property name="text">
- <string>Minimum</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QSpinBox" name="spinScaleMin">
- <property name="minimum">
- <number>1</number>
- </property>
- <property name="maximum">
- <number>10000000</number>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_14">
- <property name="text">
- <string>Maximum</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QSpinBox" name="spinScaleMax">
- <property name="minimum">
- <number>1</number>
- </property>
- <property name="maximum">
- <number>10000000</number>
- </property>
- <property name="value">
- <number>10000000</number>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- </layout>
- </item>
- <item row="4" column="0">
- <widget class="QCheckBox" name="chkLabelPerFeaturePart">
- <property name="text">
- <string>label every part of multi-part features</string>
- </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>521</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
</widget>
</item>
- <item row="5" column="0">
- <widget class="QCheckBox" name="chkMergeLines">
- <property name="text">
- <string>merge connected lines to avoid duplicate labels</string>
- </property>
- </widget>
- </item>
- <item row="7" column="0">
- <layout class="QHBoxLayout" name="horizontalLayout_10">
- <item>
- <widget class="QLabel" name="label_19">
- <property name="text">
- <string>Suppress labeling of features smaller than</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QDoubleSpinBox" name="mMinSizeSpinBox">
- <property name="suffix">
- <string> mm</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="8" column="0">
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <widget class="QCheckBox" name="chkNoObstacle">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="text">
- <string>features don't act as obstacles for labels</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_3">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="btnEngineSettings">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="text">
- <string>Engine settings</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="9" column="0">
- <spacer name="verticalSpacer_2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="10" column="0">
+ <item row="1" column="0">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
@@ -739,13 +889,6 @@
</property>
</widget>
</item>
- <item row="6" column="0">
- <widget class="QCheckBox" name="chkMultiLine">
- <property name="text">
- <string>multiline labels</string>
- </property>
- </widget>
- </item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
@@ -762,28 +905,6 @@
</customwidget>
</customwidgets>
<tabstops>
- <tabstop>chkEnableLabeling</tabstop>
- <tabstop>cboFieldName</tabstop>
- <tabstop>radAroundPoint</tabstop>
- <tabstop>radOverPoint</tabstop>
- <tabstop>radLineParallel</tabstop>
- <tabstop>radLineHorizontal</tabstop>
- <tabstop>radAroundCentroid</tabstop>
- <tabstop>radPolygonHorizontal</tabstop>
- <tabstop>radPolygonFree</tabstop>
- <tabstop>spinDistPoint</tabstop>
- <tabstop>spinAngle</tabstop>
- <tabstop>spinDistLine</tabstop>
- <tabstop>btnChangeFont</tabstop>
- <tabstop>btnTextColor</tabstop>
- <tabstop>chkBuffer</tabstop>
- <tabstop>btnBufferColor</tabstop>
- <tabstop>sliderPriority</tabstop>
- <tabstop>chkScaleBasedVisibility</tabstop>
- <tabstop>spinScaleMin</tabstop>
- <tabstop>spinScaleMax</tabstop>
- <tabstop>chkNoObstacle</tabstop>
- <tabstop>btnEngineSettings</tabstop>
<tabstop>buttonBox</tabstop>
</tabstops>
<resources/>
More information about the QGIS-commit
mailing list