Skip to content

Commit d6b419a

Browse files
committedAug 17, 2016
Simplify handling of composer data defined buttons
1 parent eb5cc0c commit d6b419a

8 files changed

+76
-297
lines changed
 

‎src/app/composer/qgscomposerhtmlwidget.cpp

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,6 @@ QgsComposerHtmlWidget::QgsComposerHtmlWidget( QgsComposerHtml* html, QgsComposer
5353
if ( mHtml )
5454
{
5555
QObject::connect( mHtml, SIGNAL( changed() ), this, SLOT( setGuiElementValues() ) );
56-
57-
QgsAtlasComposition* atlas = atlasComposition();
58-
if ( atlas )
59-
{
60-
// repopulate data defined buttons if atlas layer changes
61-
connect( atlas, SIGNAL( coverageLayerChanged( QgsVectorLayer* ) ),
62-
this, SLOT( populateDataDefinedButtons() ) );
63-
connect( atlas, SIGNAL( toggled( bool ) ), this, SLOT( populateDataDefinedButtons() ) );
64-
}
6556
}
6657

6758
//embed widget for general options
@@ -73,10 +64,7 @@ QgsComposerHtmlWidget::QgsComposerHtmlWidget( QgsComposerHtml* html, QgsComposer
7364
}
7465

7566
//connections for data defined buttons
76-
connect( mUrlDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) );
77-
connect( mUrlDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) );
7867
connect( mUrlDDBtn, SIGNAL( dataDefinedActivated( bool ) ), mUrlLineEdit, SLOT( setDisabled( bool ) ) );
79-
8068
}
8169

8270
QgsComposerHtmlWidget::QgsComposerHtmlWidget()
@@ -473,31 +461,11 @@ void QgsComposerHtmlWidget::setGuiElementValues()
473461
blockSignals( false );
474462
}
475463

476-
QgsComposerItem::DataDefinedProperty QgsComposerHtmlWidget::ddPropertyForWidget( QgsDataDefinedButton *widget )
477-
{
478-
if ( widget == mUrlDDBtn )
479-
{
480-
return QgsComposerItem::SourceUrl;
481-
}
482-
return QgsComposerItem::NoProperty;
483-
}
484-
485464
void QgsComposerHtmlWidget::populateDataDefinedButtons()
486465
{
487-
QgsVectorLayer* vl = atlasCoverageLayer();
488-
489-
//block signals from data defined buttons
490-
mUrlDDBtn->blockSignals( true );
491-
492-
mUrlDDBtn->registerExpressionContextGenerator( mHtml );
493-
494-
//initialise buttons to use atlas coverage layer
495-
mUrlDDBtn->init( vl, mHtml->dataDefinedProperty( QgsComposerItem::SourceUrl ),
496-
QgsDataDefinedButton::AnyType, tr( "url string" ) );
466+
registerDataDefinedButton( mUrlDDBtn, QgsComposerObject::SourceUrl,
467+
QgsDataDefinedButton::AnyType, tr( "url string" ) );
497468

498469
//initial state of controls - disable related controls when dd buttons are active
499470
mUrlLineEdit->setEnabled( !mUrlDDBtn->isActive() );
500-
501-
//unblock signals from data defined buttons
502-
mUrlDDBtn->blockSignals( false );
503471
}

‎src/app/composer/qgscomposerhtmlwidget.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,6 @@ class QgsComposerHtmlWidget: public QgsComposerItemBaseWidget, private Ui::QgsCo
5353
/** Sets the GUI elements to the values of mHtmlItem*/
5454
void setGuiElementValues();
5555

56-
protected:
57-
58-
QgsComposerItem::DataDefinedProperty ddPropertyForWidget( QgsDataDefinedButton *widget ) override;
59-
6056
protected slots:
6157
/** Initializes data defined buttons to current atlas coverage layer*/
6258
void populateDataDefinedButtons();

‎src/app/composer/qgscomposeritemwidget.cpp

Lines changed: 42 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,13 @@
3232

3333
QgsComposerItemBaseWidget::QgsComposerItemBaseWidget( QWidget* parent, QgsComposerObject *composerObject ): QWidget( parent ), mComposerObject( composerObject )
3434
{
35-
35+
connect( atlasComposition(), SIGNAL( coverageLayerChanged( QgsVectorLayer* ) ),
36+
this, SLOT( updateDataDefinedButtons() ) );
37+
connect( atlasComposition(), SIGNAL( toggled( bool ) ), this, SLOT( updateDataDefinedButtons() ) );
3638
}
3739

3840
QgsComposerItemBaseWidget::~QgsComposerItemBaseWidget()
3941
{
40-
4142
}
4243

4344
void QgsComposerItemBaseWidget::updateDataDefinedProperty()
@@ -48,7 +49,11 @@ void QgsComposerItemBaseWidget::updateDataDefinedProperty()
4849
{
4950
return;
5051
}
51-
QgsComposerObject::DataDefinedProperty property = ddPropertyForWidget( ddButton );
52+
QgsComposerObject::DataDefinedProperty property = QgsComposerObject::NoProperty;
53+
54+
if ( ddButton->property( "property" ).isValid() )
55+
property = static_cast< QgsComposerObject::DataDefinedProperty >( ddButton->property( "property" ).toInt() );
56+
5257
if ( property == QgsComposerObject::NoProperty )
5358
{
5459
return;
@@ -59,6 +64,14 @@ void QgsComposerItemBaseWidget::updateDataDefinedProperty()
5964
mComposerObject->refreshDataDefinedProperty( property );
6065
}
6166

67+
void QgsComposerItemBaseWidget::updateDataDefinedButtons()
68+
{
69+
Q_FOREACH ( QgsDataDefinedButton* button, findChildren< QgsDataDefinedButton* >() )
70+
{
71+
button->setVectorLayer( atlasCoverageLayer() );
72+
}
73+
}
74+
6275
void QgsComposerItemBaseWidget::setDataDefinedProperty( const QgsDataDefinedButton *ddBtn, QgsComposerObject::DataDefinedProperty p )
6376
{
6477
if ( !mComposerObject )
@@ -70,12 +83,19 @@ void QgsComposerItemBaseWidget::setDataDefinedProperty( const QgsDataDefinedButt
7083
mComposerObject->setDataDefinedProperty( p, map.value( "active" ).toInt(), map.value( "useexpr" ).toInt(), map.value( "expression" ), map.value( "field" ) );
7184
}
7285

73-
QgsComposerObject::DataDefinedProperty QgsComposerItemBaseWidget::ddPropertyForWidget( QgsDataDefinedButton *widget )
86+
void QgsComposerItemBaseWidget::registerDataDefinedButton( QgsDataDefinedButton* button, QgsComposerObject::DataDefinedProperty property,
87+
QgsDataDefinedButton::DataType type, const QString& description )
7488
{
75-
Q_UNUSED( widget );
89+
button->blockSignals( true );
90+
QgsDataDefined* dd = mComposerObject->dataDefinedProperty( property );
91+
button->init( atlasCoverageLayer(), dd, type, description );
92+
button->setProperty( "property", property );
7693

77-
//base implementation, return no property
78-
return QgsComposerObject::NoProperty;
94+
connect( button, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) );
95+
connect( button, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) );
96+
97+
button->registerExpressionContextGenerator( mComposerObject );
98+
button->blockSignals( false );
7999
}
80100

81101
QgsAtlasComposition* QgsComposerItemBaseWidget::atlasComposition() const
@@ -162,41 +182,6 @@ QgsComposerItemWidget::QgsComposerItemWidget( QWidget* parent, QgsComposerItem*
162182
connect( QgsProject::instance(), SIGNAL( variablesChanged() ), this, SLOT( updateVariables() ) );
163183
if ( mItem->composition() )
164184
connect( mItem->composition(), SIGNAL( variablesChanged() ), this, SLOT( updateVariables() ) );
165-
166-
//connect atlas signals to data defined buttons
167-
QgsAtlasComposition* atlas = atlasComposition();
168-
if ( atlas )
169-
{
170-
//repopulate data defined buttons if atlas layer changes
171-
connect( atlas, SIGNAL( coverageLayerChanged( QgsVectorLayer* ) ),
172-
this, SLOT( populateDataDefinedButtons() ) );
173-
connect( atlas, SIGNAL( toggled( bool ) ), this, SLOT( populateDataDefinedButtons() ) );
174-
}
175-
176-
//connect data defined buttons
177-
connect( mXPositionDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) );
178-
connect( mXPositionDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) );
179-
180-
connect( mYPositionDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) );
181-
connect( mYPositionDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) );
182-
183-
connect( mWidthDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) );
184-
connect( mWidthDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) );
185-
186-
connect( mHeightDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) );
187-
connect( mHeightDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) );
188-
189-
connect( mItemRotationDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) );
190-
connect( mItemRotationDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) );
191-
192-
connect( mTransparencyDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) );
193-
connect( mTransparencyDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) );
194-
195-
connect( mBlendModeDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) );
196-
connect( mBlendModeDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) );
197-
198-
connect( mExcludePrintsDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) );
199-
connect( mExcludePrintsDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) );
200185
}
201186

202187
QgsComposerItemWidget::QgsComposerItemWidget()
@@ -567,75 +552,22 @@ void QgsComposerItemWidget::setValuesForGuiNonPositionElements()
567552

568553
void QgsComposerItemWidget::populateDataDefinedButtons()
569554
{
570-
QgsVectorLayer* vl = atlasCoverageLayer();
571-
572-
Q_FOREACH ( QgsDataDefinedButton* button, findChildren< QgsDataDefinedButton* >() )
573-
{
574-
button->blockSignals( true );
575-
button->registerExpressionContextGenerator( mItem );
576-
}
577-
578-
//initialise buttons to use atlas coverage layer
579-
mXPositionDDBtn->init( vl, mItem->dataDefinedProperty( QgsComposerObject::PositionX ),
580-
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
581-
mYPositionDDBtn->init( vl, mItem->dataDefinedProperty( QgsComposerObject::PositionY ),
582-
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
583-
mWidthDDBtn->init( vl, mItem->dataDefinedProperty( QgsComposerObject::ItemWidth ),
584-
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
585-
mHeightDDBtn->init( vl, mItem->dataDefinedProperty( QgsComposerObject::ItemHeight ),
586-
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
587-
mItemRotationDDBtn->init( vl, mItem->dataDefinedProperty( QgsComposerObject::ItemRotation ),
588-
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::double180RotDesc() );
589-
mTransparencyDDBtn->init( vl, mItem->dataDefinedProperty( QgsComposerObject::Transparency ),
590-
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::intTranspDesc() );
591-
mBlendModeDDBtn->init( vl, mItem->dataDefinedProperty( QgsComposerObject::BlendMode ),
592-
QgsDataDefinedButton::String, QgsDataDefinedButton::blendModesDesc() );
593-
mExcludePrintsDDBtn->init( vl, mItem->dataDefinedProperty( QgsComposerObject::ExcludeFromExports ),
555+
registerDataDefinedButton( mXPositionDDBtn, QgsComposerObject::PositionX,
556+
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
557+
registerDataDefinedButton( mYPositionDDBtn, QgsComposerObject::PositionY,
558+
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
559+
registerDataDefinedButton( mWidthDDBtn, QgsComposerObject::ItemWidth,
560+
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
561+
registerDataDefinedButton( mHeightDDBtn, QgsComposerObject::ItemHeight,
562+
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
563+
registerDataDefinedButton( mItemRotationDDBtn, QgsComposerObject::ItemRotation,
564+
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::double180RotDesc() );
565+
registerDataDefinedButton( mTransparencyDDBtn, QgsComposerObject::Transparency,
566+
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::intTranspDesc() );
567+
registerDataDefinedButton( mBlendModeDDBtn, QgsComposerObject::BlendMode,
568+
QgsDataDefinedButton::String, QgsDataDefinedButton::blendModesDesc() );
569+
registerDataDefinedButton( mExcludePrintsDDBtn, QgsComposerObject::ExcludeFromExports,
594570
QgsDataDefinedButton::String, QgsDataDefinedButton::boolDesc() );
595-
596-
//unblock signals from data defined buttons
597-
Q_FOREACH ( QgsDataDefinedButton* button, findChildren< QgsDataDefinedButton* >() )
598-
{
599-
button->blockSignals( false );
600-
}
601-
}
602-
603-
QgsComposerObject::DataDefinedProperty QgsComposerItemWidget::ddPropertyForWidget( QgsDataDefinedButton* widget )
604-
{
605-
if ( widget == mXPositionDDBtn )
606-
{
607-
return QgsComposerObject::PositionX;
608-
}
609-
else if ( widget == mYPositionDDBtn )
610-
{
611-
return QgsComposerObject::PositionY;
612-
}
613-
else if ( widget == mWidthDDBtn )
614-
{
615-
return QgsComposerObject::ItemWidth;
616-
}
617-
else if ( widget == mHeightDDBtn )
618-
{
619-
return QgsComposerObject::ItemHeight;
620-
}
621-
else if ( widget == mItemRotationDDBtn )
622-
{
623-
return QgsComposerObject::ItemRotation;
624-
}
625-
else if ( widget == mTransparencyDDBtn )
626-
{
627-
return QgsComposerObject::Transparency;
628-
}
629-
else if ( widget == mBlendModeDDBtn )
630-
{
631-
return QgsComposerObject::BlendMode;
632-
}
633-
else if ( widget == mExcludePrintsDDBtn )
634-
{
635-
return QgsComposerObject::ExcludeFromExports;
636-
}
637-
638-
return QgsComposerObject::NoProperty;
639571
}
640572

641573
void QgsComposerItemWidget::setValuesForGuiElements()

‎src/app/composer/qgscomposeritemwidget.h

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,21 @@ class QgsComposerItemBaseWidget: public QWidget
3939
/** Must be called when a data defined button changes*/
4040
void updateDataDefinedProperty();
4141

42+
//! Updates data defined buttons to reflect current state of atlas (eg coverage layer)
43+
void updateDataDefinedButtons();
44+
4245
protected:
4346
/** Sets a data defined property for the item from its current data defined button settings*/
4447
void setDataDefinedProperty( const QgsDataDefinedButton *ddBtn, QgsComposerObject::DataDefinedProperty p );
4548

46-
/** Returns the data defined property corresponding to a data defined button widget*/
47-
virtual QgsComposerObject::DataDefinedProperty ddPropertyForWidget( QgsDataDefinedButton* widget );
49+
/** Registers a data defined button, setting up its initial value, connections and description.
50+
* @param button button to register
51+
* @param property correponding data defined property
52+
* @param type valid data types for button
53+
* @param description user visible description for data defined property
54+
*/
55+
void registerDataDefinedButton( QgsDataDefinedButton* button, QgsComposerObject::DataDefinedProperty property,
56+
QgsDataDefinedButton::DataType type, const QString& description );
4857

4958
/** Returns the current atlas coverage layer (if set)*/
5059
QgsVectorLayer* atlasCoverageLayer() const;
@@ -118,9 +127,6 @@ class QgsComposerItemWidget: public QgsComposerItemBaseWidget, private Ui::QgsCo
118127
//sets the values for all non-position related elements
119128
void setValuesForGuiNonPositionElements();
120129

121-
protected:
122-
QgsComposerObject::DataDefinedProperty ddPropertyForWidget( QgsDataDefinedButton *widget ) override;
123-
124130
protected slots:
125131
/** Initializes data defined buttons to current atlas coverage layer*/
126132
void populateDataDefinedButtons();

‎src/app/composer/qgscomposermapwidget.cpp

Lines changed: 19 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -152,11 +152,6 @@ QgsComposerMapWidget::QgsComposerMapWidget( QgsComposerMap* composerMap )
152152
this, SLOT( atlasLayerChanged( QgsVectorLayer* ) ) );
153153
connect( atlas, SIGNAL( toggled( bool ) ), this, SLOT( compositionAtlasToggled( bool ) ) );
154154

155-
// repopulate data defined buttons if atlas layer changes
156-
connect( atlas, SIGNAL( coverageLayerChanged( QgsVectorLayer* ) ),
157-
this, SLOT( populateDataDefinedButtons() ) );
158-
connect( atlas, SIGNAL( toggled( bool ) ), this, SLOT( populateDataDefinedButtons() ) );
159-
160155
compositionAtlasToggled( atlas->enabled() );
161156
}
162157

@@ -166,37 +161,10 @@ QgsComposerMapWidget::QgsComposerMapWidget( QgsComposerMap* composerMap )
166161
connect( mOverviewFrameMapComboBox, SIGNAL( itemChanged( QgsComposerItem* ) ), this, SLOT( overviewMapChanged( QgsComposerItem* ) ) );
167162
}
168163

169-
//connections for data defined buttons
170-
connect( mScaleDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) );
171-
connect( mScaleDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) );
172-
173-
connect( mMapRotationDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) );
174-
connect( mMapRotationDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) );
175-
176-
connect( mXMinDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) );
177-
connect( mXMinDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) );
178-
179-
connect( mYMinDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) );
180-
connect( mYMinDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) );
181-
182-
connect( mXMaxDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) );
183-
connect( mXMaxDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) );
184-
185-
connect( mYMaxDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) );
186-
connect( mYMaxDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) );
187-
188-
connect( mAtlasMarginDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) );
189-
connect( mAtlasMarginDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) );
190-
191-
connect( mLayersDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) );
192-
connect( mLayersDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) );
193-
194-
connect( mStylePresetsDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) );
195-
connect( mStylePresetsDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) );
196-
197164
updateGuiElements();
198165
loadGridEntries();
199166
loadOverviewEntries();
167+
populateDataDefinedButtons();
200168
blockAllSignals( false );
201169
}
202170

@@ -206,79 +174,24 @@ QgsComposerMapWidget::~QgsComposerMapWidget()
206174

207175
void QgsComposerMapWidget::populateDataDefinedButtons()
208176
{
209-
QgsVectorLayer* vl = atlasCoverageLayer();
210-
211-
Q_FOREACH ( QgsDataDefinedButton* button, findChildren< QgsDataDefinedButton* >() )
212-
{
213-
button->blockSignals( true );
214-
button->registerExpressionContextGenerator( mComposerMap );
215-
}
216-
217-
//initialise buttons to use atlas coverage layer
218-
mScaleDDBtn->init( vl, mComposerMap->dataDefinedProperty( QgsComposerObject::MapScale ),
219-
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
220-
mMapRotationDDBtn->init( vl, mComposerMap->dataDefinedProperty( QgsComposerObject::MapRotation ),
221-
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
222-
mXMinDDBtn->init( vl, mComposerMap->dataDefinedProperty( QgsComposerObject::MapXMin ),
223-
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
224-
mYMinDDBtn->init( vl, mComposerMap->dataDefinedProperty( QgsComposerObject::MapYMin ),
225-
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
226-
mXMaxDDBtn->init( vl, mComposerMap->dataDefinedProperty( QgsComposerObject::MapXMax ),
227-
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
228-
mYMaxDDBtn->init( vl, mComposerMap->dataDefinedProperty( QgsComposerObject::MapYMax ),
229-
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
230-
mAtlasMarginDDBtn->init( vl, mComposerMap->dataDefinedProperty( QgsComposerObject::MapAtlasMargin ),
231-
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
232-
mStylePresetsDDBtn->init( vl, mComposerMap->dataDefinedProperty( QgsComposerObject::MapStylePreset ),
233-
QgsDataDefinedButton::String, tr( "string matching a style preset name" ) );
234-
mLayersDDBtn->init( vl, mComposerMap->dataDefinedProperty( QgsComposerObject::MapLayers ),
235-
QgsDataDefinedButton::String, tr( "list of map layer names separated by | characters" ) );
236-
237-
Q_FOREACH ( QgsDataDefinedButton* button, findChildren< QgsDataDefinedButton* >() )
238-
{
239-
button->blockSignals( false );
240-
}
241-
}
242-
243-
QgsComposerObject::DataDefinedProperty QgsComposerMapWidget::ddPropertyForWidget( QgsDataDefinedButton* widget )
244-
{
245-
if ( widget == mScaleDDBtn )
246-
{
247-
return QgsComposerObject::MapScale;
248-
}
249-
else if ( widget == mMapRotationDDBtn )
250-
{
251-
return QgsComposerObject::MapRotation;
252-
}
253-
else if ( widget == mXMinDDBtn )
254-
{
255-
return QgsComposerObject::MapXMin;
256-
}
257-
else if ( widget == mYMinDDBtn )
258-
{
259-
return QgsComposerObject::MapYMin;
260-
}
261-
else if ( widget == mXMaxDDBtn )
262-
{
263-
return QgsComposerObject::MapXMax;
264-
}
265-
else if ( widget == mYMaxDDBtn )
266-
{
267-
return QgsComposerObject::MapYMax;
268-
}
269-
else if ( widget == mAtlasMarginDDBtn )
270-
{
271-
return QgsComposerObject::MapAtlasMargin;
272-
}
273-
else if ( widget == mStylePresetsDDBtn )
274-
{
275-
return QgsComposerObject::MapStylePreset;
276-
}
277-
else if ( widget == mLayersDDBtn )
278-
{
279-
return QgsComposerObject::MapLayers;
280-
}
281-
return QgsComposerObject::NoProperty;
177+
registerDataDefinedButton( mScaleDDBtn, QgsComposerObject::MapScale,
178+
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
179+
registerDataDefinedButton( mMapRotationDDBtn, QgsComposerObject::MapRotation,
180+
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
181+
registerDataDefinedButton( mXMinDDBtn, QgsComposerObject::MapXMin,
182+
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
183+
registerDataDefinedButton( mYMinDDBtn, QgsComposerObject::MapYMin,
184+
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
185+
registerDataDefinedButton( mXMaxDDBtn, QgsComposerObject::MapXMax,
186+
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
187+
registerDataDefinedButton( mYMaxDDBtn, QgsComposerObject::MapYMax,
188+
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
189+
registerDataDefinedButton( mAtlasMarginDDBtn, QgsComposerObject::MapAtlasMargin,
190+
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::doubleDesc() );
191+
registerDataDefinedButton( mStylePresetsDDBtn, QgsComposerObject::MapStylePreset,
192+
QgsDataDefinedButton::String, tr( "string matching a style preset name" ) );
193+
registerDataDefinedButton( mLayersDDBtn, QgsComposerObject::MapLayers,
194+
QgsDataDefinedButton::String, tr( "list of map layer names separated by | characters" ) );
282195
}
283196

284197
void QgsComposerMapWidget::compositionAtlasToggled( bool atlasEnabled )

‎src/app/composer/qgscomposermapwidget.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,6 @@ class QgsComposerMapWidget: public QgsComposerItemBaseWidget, private Ui::QgsCom
152152
/** Sets the current composer map values to the GUI elements*/
153153
virtual void updateGuiElements();
154154

155-
QgsComposerObject::DataDefinedProperty ddPropertyForWidget( QgsDataDefinedButton *widget ) override;
156-
157155
protected slots:
158156
/** Initializes data defined buttons to current atlas coverage layer*/
159157
void populateDataDefinedButtons();

‎src/app/composer/qgscomposerpicturewidget.cpp

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -68,18 +68,7 @@ QgsComposerPictureWidget::QgsComposerPictureWidget( QgsComposerPicture* picture
6868
connect( mPicture, SIGNAL( itemChanged() ), this, SLOT( setGuiElementValues() ) );
6969
connect( mPicture, SIGNAL( pictureRotationChanged( double ) ), this, SLOT( setPicRotationSpinValue( double ) ) );
7070

71-
QgsAtlasComposition* atlas = atlasComposition();
72-
if ( atlas )
73-
{
74-
// repopulate data defined buttons if atlas layer changes
75-
connect( atlas, SIGNAL( coverageLayerChanged( QgsVectorLayer* ) ),
76-
this, SLOT( populateDataDefinedButtons() ) );
77-
connect( atlas, SIGNAL( toggled( bool ) ), this, SLOT( populateDataDefinedButtons() ) );
78-
}
79-
8071
//connections for data defined buttons
81-
connect( mSourceDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) );
82-
connect( mSourceDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) );
8372
connect( mSourceDDBtn, SIGNAL( dataDefinedActivated( bool ) ), mPictureLineEdit, SLOT( setDisabled( bool ) ) );
8473
}
8574

@@ -671,33 +660,12 @@ void QgsComposerPictureWidget::resizeEvent( QResizeEvent * event )
671660
mSearchDirectoriesComboBox->setMinimumWidth( mPreviewListWidget->sizeHint().width() );
672661
}
673662

674-
QgsComposerObject::DataDefinedProperty QgsComposerPictureWidget::ddPropertyForWidget( QgsDataDefinedButton *widget )
675-
{
676-
if ( widget == mSourceDDBtn )
677-
{
678-
return QgsComposerObject::PictureSource;
679-
}
680-
681-
return QgsComposerObject::NoProperty;
682-
}
683-
684663
void QgsComposerPictureWidget::populateDataDefinedButtons()
685664
{
686-
QgsVectorLayer* vl = atlasCoverageLayer();
687-
688-
//block signals from data defined buttons
689-
mSourceDDBtn->blockSignals( true );
690-
691-
mSourceDDBtn->registerExpressionContextGenerator( mPicture );
692-
693-
//initialise buttons to use atlas coverage layer
694-
mSourceDDBtn->init( vl, mPicture->dataDefinedProperty( QgsComposerObject::PictureSource ),
695-
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::anyStringDesc() );
665+
registerDataDefinedButton( mSourceDDBtn, QgsComposerObject::PictureSource,
666+
QgsDataDefinedButton::AnyType, QgsDataDefinedButton::anyStringDesc() );
696667

697668
//initial state of controls - disable related controls when dd buttons are active
698669
mPictureLineEdit->setEnabled( !mSourceDDBtn->isActive() );
699-
700-
//unblock signals from data defined buttons
701-
mSourceDDBtn->blockSignals( false );
702670
}
703671

‎src/app/composer/qgscomposerpicturewidget.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,6 @@ class QgsComposerPictureWidget: public QgsComposerItemBaseWidget, private Ui::Qg
5252
protected:
5353
void resizeEvent( QResizeEvent * event ) override;
5454

55-
QgsComposerObject::DataDefinedProperty ddPropertyForWidget( QgsDataDefinedButton *widget ) override;
56-
5755
protected slots:
5856
/** Initializes data defined buttons to current atlas coverage layer*/
5957
void populateDataDefinedButtons();

0 commit comments

Comments
 (0)
Please sign in to comment.