Skip to content

Commit

Permalink
Change label maptool is always available and underlying properties ar…
Browse files Browse the repository at this point in the history
…e created
  • Loading branch information
pblottiere committed Oct 9, 2017
1 parent 5b278d7 commit 609249d
Show file tree
Hide file tree
Showing 6 changed files with 78 additions and 18 deletions.
8 changes: 4 additions & 4 deletions python/core/qgsauxiliarystorage.sip
Expand Up @@ -179,25 +179,25 @@ class QgsAuxiliaryLayer : QgsVectorLayer
:rtype: bool
%End

static int createProperty( QgsPalLayerSettings::Property p, const QString &providerId, QgsVectorLayer *vlayer );
static int createProperty( QgsPalLayerSettings::Property property, const QString &providerId, QgsVectorLayer *vlayer );
%Docstring
Create if necessary a new auxiliary field for a PAL property and
activate this property in settings.

\param p The property to create
\param property The property to create
\param providerId The id of the provider to use
\param vlayer The vector layer

:return: The index of the auxiliary field or -1
:rtype: int
%End

static int createProperty( QgsDiagramLayerSettings::Property p, QgsVectorLayer *vlayer );
static int createProperty( QgsDiagramLayerSettings::Property property, QgsVectorLayer *vlayer );
%Docstring
Create if necessary a new auxiliary field for a diagram's property and
activate this this property in settings.

\param p The property to create
\param property The property to create
\param providerId The id of the provider to use
\param vlayer The vector layer

Expand Down
6 changes: 6 additions & 0 deletions src/app/qgslabelpropertydialog.cpp
Expand Up @@ -131,6 +131,12 @@ void QgsLabelPropertyDialog::init( const QString &layerId, const QString &provid
if ( mCurLabelField >= 0 )
{
mLabelTextLineEdit->setText( attributeValues.at( mCurLabelField ).toString() );

if ( vlayer->isEditable() )
mLabelTextLineEdit->setEnabled( true );
else
mLabelTextLineEdit->setEnabled( false );

const QgsFields &layerFields = vlayer->fields();
switch ( layerFields.at( mCurLabelField ).type() )
{
Expand Down
30 changes: 29 additions & 1 deletion src/app/qgsmaptoolchangelabelproperties.cpp
Expand Up @@ -23,6 +23,27 @@

QgsMapToolChangeLabelProperties::QgsMapToolChangeLabelProperties( QgsMapCanvas *canvas ): QgsMapToolLabel( canvas )
{
mPalProperties << QgsPalLayerSettings::PositionX;
mPalProperties << QgsPalLayerSettings::PositionY;
mPalProperties << QgsPalLayerSettings::Show;
mPalProperties << QgsPalLayerSettings::LabelRotation;
mPalProperties << QgsPalLayerSettings::Family;
mPalProperties << QgsPalLayerSettings::FontStyle;
mPalProperties << QgsPalLayerSettings::Size;
mPalProperties << QgsPalLayerSettings::Bold;
mPalProperties << QgsPalLayerSettings::Italic;
mPalProperties << QgsPalLayerSettings::Underline;
mPalProperties << QgsPalLayerSettings::Color;
mPalProperties << QgsPalLayerSettings::Strikeout;
mPalProperties << QgsPalLayerSettings::BufferSize;
mPalProperties << QgsPalLayerSettings::BufferColor;
mPalProperties << QgsPalLayerSettings::LabelDistance;
mPalProperties << QgsPalLayerSettings::Hali;
mPalProperties << QgsPalLayerSettings::Vali;
mPalProperties << QgsPalLayerSettings::ScaleVisibility;
mPalProperties << QgsPalLayerSettings::MinScale;
mPalProperties << QgsPalLayerSettings::MaxScale;
mPalProperties << QgsPalLayerSettings::AlwaysShow;
}

void QgsMapToolChangeLabelProperties::canvasPressEvent( QgsMapMouseEvent *e )
Expand All @@ -37,11 +58,18 @@ void QgsMapToolChangeLabelProperties::canvasPressEvent( QgsMapMouseEvent *e )
}

mCurrentLabel = LabelDetails( labelPos );
if ( !mCurrentLabel.valid || !mCurrentLabel.layer || !mCurrentLabel.layer->isEditable() )
if ( !mCurrentLabel.valid || !mCurrentLabel.layer )
{
return;
}

if ( !mCurrentLabel.layer->isEditable() )
{
QgsPalIndexes indexes;
if ( createAuxiliaryFields( indexes ) )
return;
}

createRubberBands();
}

Expand Down
32 changes: 29 additions & 3 deletions src/app/qgsmaptoollabel.cpp
Expand Up @@ -770,7 +770,7 @@ bool QgsMapToolLabel::createAuxiliaryFields( LabelDetails &details, QgsPalIndexe
QgsVectorLayer *vlayer = details.layer;
QString providerId = details.pos.providerID;

if ( !vlayer )
if ( !vlayer || !vlayer->labeling() )
return newAuxiliaryLayer;

if ( !vlayer->auxiliaryLayer() )
Expand All @@ -785,7 +785,20 @@ bool QgsMapToolLabel::createAuxiliaryFields( LabelDetails &details, QgsPalIndexe

Q_FOREACH ( const QgsPalLayerSettings::Property &p, mPalProperties )
{
indexes[p] = QgsAuxiliaryLayer::createProperty( p, providerId, vlayer );
int index = -1;

// always use the default activated property
QgsProperty prop = details.settings.dataDefinedProperties().property( p );
if ( prop.propertyType() == QgsProperty::FieldBasedProperty && prop.isActive() )
{
index = vlayer->fields().lookupField( prop.field() );
}
else
{
index = QgsAuxiliaryLayer::createProperty( p, providerId, vlayer );
}

indexes[p] = index;
}

details.settings = vlayer->labeling()->settings( providerId );
Expand Down Expand Up @@ -819,7 +832,20 @@ bool QgsMapToolLabel::createAuxiliaryFields( LabelDetails &details, QgsDiagramIn

Q_FOREACH ( const QgsDiagramLayerSettings::Property &p, mDiagramProperties )
{
indexes[p] = QgsAuxiliaryLayer::createProperty( p, vlayer );
int index = -1;

// always use the default activated property
QgsProperty prop = vlayer->diagramLayerSettings()->dataDefinedProperties().property( p );
if ( prop.propertyType() == QgsProperty::FieldBasedProperty && prop.isActive() )
{
index = vlayer->fields().lookupField( prop.field() );
}
else
{
index = QgsAuxiliaryLayer::createProperty( p, vlayer );
}

indexes[p] = index;
}

return newAuxiliaryLayer;
Expand Down
12 changes: 6 additions & 6 deletions src/core/qgsauxiliarystorage.cpp
Expand Up @@ -241,13 +241,13 @@ bool QgsAuxiliaryLayer::save()
return rc;
}

int QgsAuxiliaryLayer::createProperty( QgsPalLayerSettings::Property p, const QString &providerId, QgsVectorLayer *layer )
int QgsAuxiliaryLayer::createProperty( QgsPalLayerSettings::Property property, const QString &providerId, QgsVectorLayer *layer )
{
int index = -1;

if ( layer && layer->labeling() && layer->auxiliaryLayer() )
{
const QgsPropertyDefinition def = layer->labeling()->settings( providerId ).propertyDefinitions()[p];
const QgsPropertyDefinition def = layer->labeling()->settings( providerId ).propertyDefinitions()[property];
const QString fieldName = QgsAuxiliaryField::nameFromProperty( def, true );

if ( layer->auxiliaryLayer()->addAuxiliaryField( def ) )
Expand All @@ -257,7 +257,7 @@ int QgsAuxiliaryLayer::createProperty( QgsPalLayerSettings::Property p, const QS
QgsPalLayerSettings *settings = new QgsPalLayerSettings( layer->labeling()->settings( providerId ) );

QgsPropertyCollection c = settings->dataDefinedProperties();
c.setProperty( p, prop );
c.setProperty( property, prop );
settings->setDataDefinedProperties( c );

layer->labeling()->setSettings( settings, providerId );
Expand All @@ -269,13 +269,13 @@ int QgsAuxiliaryLayer::createProperty( QgsPalLayerSettings::Property p, const QS
return index;
}

int QgsAuxiliaryLayer::createProperty( QgsDiagramLayerSettings::Property p, QgsVectorLayer *layer )
int QgsAuxiliaryLayer::createProperty( QgsDiagramLayerSettings::Property property, QgsVectorLayer *layer )
{
int index = -1;

if ( layer && layer->diagramLayerSettings() && layer->auxiliaryLayer() )
{
const QgsPropertyDefinition def = layer->diagramLayerSettings()->propertyDefinitions()[p];
const QgsPropertyDefinition def = layer->diagramLayerSettings()->propertyDefinitions()[property];

if ( layer->auxiliaryLayer()->addAuxiliaryField( def ) )
{
Expand All @@ -285,7 +285,7 @@ int QgsAuxiliaryLayer::createProperty( QgsDiagramLayerSettings::Property p, QgsV
QgsDiagramLayerSettings settings( *layer->diagramLayerSettings() );

QgsPropertyCollection c = settings.dataDefinedProperties();
c.setProperty( p, prop );
c.setProperty( property, prop );
settings.setDataDefinedProperties( c );

layer->setDiagramLayerSettings( settings );
Expand Down
8 changes: 4 additions & 4 deletions src/core/qgsauxiliarystorage.h
Expand Up @@ -203,25 +203,25 @@ class CORE_EXPORT QgsAuxiliaryLayer : public QgsVectorLayer
* Create if necessary a new auxiliary field for a PAL property and
* activate this property in settings.
*
* \param p The property to create
* \param property The property to create
* \param providerId The id of the provider to use
* \param vlayer The vector layer
*
* \returns The index of the auxiliary field or -1
*/
static int createProperty( QgsPalLayerSettings::Property p, const QString &providerId, QgsVectorLayer *vlayer );
static int createProperty( QgsPalLayerSettings::Property property, const QString &providerId, QgsVectorLayer *vlayer );

/**
* Create if necessary a new auxiliary field for a diagram's property and
* activate this this property in settings.
*
* \param p The property to create
* \param property The property to create
* \param providerId The id of the provider to use
* \param vlayer The vector layer
*
* \returns The index of the auxiliary field or -1
*/
static int createProperty( QgsDiagramLayerSettings::Property p, QgsVectorLayer *vlayer );
static int createProperty( QgsDiagramLayerSettings::Property property, QgsVectorLayer *vlayer );

private:
QgsVectorLayerJoinInfo mJoinInfo;
Expand Down

0 comments on commit 609249d

Please sign in to comment.