Skip to content

Commit 609249d

Browse files
committed
Change label maptool is always available and underlying properties are created
1 parent 5b278d7 commit 609249d

File tree

6 files changed

+78
-18
lines changed

6 files changed

+78
-18
lines changed

python/core/qgsauxiliarystorage.sip

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -179,25 +179,25 @@ class QgsAuxiliaryLayer : QgsVectorLayer
179179
:rtype: bool
180180
%End
181181

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

187-
\param p The property to create
187+
\param property The property to create
188188
\param providerId The id of the provider to use
189189
\param vlayer The vector layer
190190

191191
:return: The index of the auxiliary field or -1
192192
:rtype: int
193193
%End
194194

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

200-
\param p The property to create
200+
\param property The property to create
201201
\param providerId The id of the provider to use
202202
\param vlayer The vector layer
203203

src/app/qgslabelpropertydialog.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,12 @@ void QgsLabelPropertyDialog::init( const QString &layerId, const QString &provid
131131
if ( mCurLabelField >= 0 )
132132
{
133133
mLabelTextLineEdit->setText( attributeValues.at( mCurLabelField ).toString() );
134+
135+
if ( vlayer->isEditable() )
136+
mLabelTextLineEdit->setEnabled( true );
137+
else
138+
mLabelTextLineEdit->setEnabled( false );
139+
134140
const QgsFields &layerFields = vlayer->fields();
135141
switch ( layerFields.at( mCurLabelField ).type() )
136142
{

src/app/qgsmaptoolchangelabelproperties.cpp

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,27 @@
2323

2424
QgsMapToolChangeLabelProperties::QgsMapToolChangeLabelProperties( QgsMapCanvas *canvas ): QgsMapToolLabel( canvas )
2525
{
26+
mPalProperties << QgsPalLayerSettings::PositionX;
27+
mPalProperties << QgsPalLayerSettings::PositionY;
28+
mPalProperties << QgsPalLayerSettings::Show;
29+
mPalProperties << QgsPalLayerSettings::LabelRotation;
30+
mPalProperties << QgsPalLayerSettings::Family;
31+
mPalProperties << QgsPalLayerSettings::FontStyle;
32+
mPalProperties << QgsPalLayerSettings::Size;
33+
mPalProperties << QgsPalLayerSettings::Bold;
34+
mPalProperties << QgsPalLayerSettings::Italic;
35+
mPalProperties << QgsPalLayerSettings::Underline;
36+
mPalProperties << QgsPalLayerSettings::Color;
37+
mPalProperties << QgsPalLayerSettings::Strikeout;
38+
mPalProperties << QgsPalLayerSettings::BufferSize;
39+
mPalProperties << QgsPalLayerSettings::BufferColor;
40+
mPalProperties << QgsPalLayerSettings::LabelDistance;
41+
mPalProperties << QgsPalLayerSettings::Hali;
42+
mPalProperties << QgsPalLayerSettings::Vali;
43+
mPalProperties << QgsPalLayerSettings::ScaleVisibility;
44+
mPalProperties << QgsPalLayerSettings::MinScale;
45+
mPalProperties << QgsPalLayerSettings::MaxScale;
46+
mPalProperties << QgsPalLayerSettings::AlwaysShow;
2647
}
2748

2849
void QgsMapToolChangeLabelProperties::canvasPressEvent( QgsMapMouseEvent *e )
@@ -37,11 +58,18 @@ void QgsMapToolChangeLabelProperties::canvasPressEvent( QgsMapMouseEvent *e )
3758
}
3859

3960
mCurrentLabel = LabelDetails( labelPos );
40-
if ( !mCurrentLabel.valid || !mCurrentLabel.layer || !mCurrentLabel.layer->isEditable() )
61+
if ( !mCurrentLabel.valid || !mCurrentLabel.layer )
4162
{
4263
return;
4364
}
4465

66+
if ( !mCurrentLabel.layer->isEditable() )
67+
{
68+
QgsPalIndexes indexes;
69+
if ( createAuxiliaryFields( indexes ) )
70+
return;
71+
}
72+
4573
createRubberBands();
4674
}
4775

src/app/qgsmaptoollabel.cpp

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -770,7 +770,7 @@ bool QgsMapToolLabel::createAuxiliaryFields( LabelDetails &details, QgsPalIndexe
770770
QgsVectorLayer *vlayer = details.layer;
771771
QString providerId = details.pos.providerID;
772772

773-
if ( !vlayer )
773+
if ( !vlayer || !vlayer->labeling() )
774774
return newAuxiliaryLayer;
775775

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

786786
Q_FOREACH ( const QgsPalLayerSettings::Property &p, mPalProperties )
787787
{
788-
indexes[p] = QgsAuxiliaryLayer::createProperty( p, providerId, vlayer );
788+
int index = -1;
789+
790+
// always use the default activated property
791+
QgsProperty prop = details.settings.dataDefinedProperties().property( p );
792+
if ( prop.propertyType() == QgsProperty::FieldBasedProperty && prop.isActive() )
793+
{
794+
index = vlayer->fields().lookupField( prop.field() );
795+
}
796+
else
797+
{
798+
index = QgsAuxiliaryLayer::createProperty( p, providerId, vlayer );
799+
}
800+
801+
indexes[p] = index;
789802
}
790803

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

820833
Q_FOREACH ( const QgsDiagramLayerSettings::Property &p, mDiagramProperties )
821834
{
822-
indexes[p] = QgsAuxiliaryLayer::createProperty( p, vlayer );
835+
int index = -1;
836+
837+
// always use the default activated property
838+
QgsProperty prop = vlayer->diagramLayerSettings()->dataDefinedProperties().property( p );
839+
if ( prop.propertyType() == QgsProperty::FieldBasedProperty && prop.isActive() )
840+
{
841+
index = vlayer->fields().lookupField( prop.field() );
842+
}
843+
else
844+
{
845+
index = QgsAuxiliaryLayer::createProperty( p, vlayer );
846+
}
847+
848+
indexes[p] = index;
823849
}
824850

825851
return newAuxiliaryLayer;

src/core/qgsauxiliarystorage.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -241,13 +241,13 @@ bool QgsAuxiliaryLayer::save()
241241
return rc;
242242
}
243243

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

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

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

259259
QgsPropertyCollection c = settings->dataDefinedProperties();
260-
c.setProperty( p, prop );
260+
c.setProperty( property, prop );
261261
settings->setDataDefinedProperties( c );
262262

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

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

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

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

287287
QgsPropertyCollection c = settings.dataDefinedProperties();
288-
c.setProperty( p, prop );
288+
c.setProperty( property, prop );
289289
settings.setDataDefinedProperties( c );
290290

291291
layer->setDiagramLayerSettings( settings );

src/core/qgsauxiliarystorage.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -203,25 +203,25 @@ class CORE_EXPORT QgsAuxiliaryLayer : public QgsVectorLayer
203203
* Create if necessary a new auxiliary field for a PAL property and
204204
* activate this property in settings.
205205
*
206-
* \param p The property to create
206+
* \param property The property to create
207207
* \param providerId The id of the provider to use
208208
* \param vlayer The vector layer
209209
*
210210
* \returns The index of the auxiliary field or -1
211211
*/
212-
static int createProperty( QgsPalLayerSettings::Property p, const QString &providerId, QgsVectorLayer *vlayer );
212+
static int createProperty( QgsPalLayerSettings::Property property, const QString &providerId, QgsVectorLayer *vlayer );
213213

214214
/**
215215
* Create if necessary a new auxiliary field for a diagram's property and
216216
* activate this this property in settings.
217217
*
218-
* \param p The property to create
218+
* \param property The property to create
219219
* \param providerId The id of the provider to use
220220
* \param vlayer The vector layer
221221
*
222222
* \returns The index of the auxiliary field or -1
223223
*/
224-
static int createProperty( QgsDiagramLayerSettings::Property p, QgsVectorLayer *vlayer );
224+
static int createProperty( QgsDiagramLayerSettings::Property property, QgsVectorLayer *vlayer );
225225

226226
private:
227227
QgsVectorLayerJoinInfo mJoinInfo;

0 commit comments

Comments
 (0)