[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