32
32
33
33
QgsComposerItemBaseWidget::QgsComposerItemBaseWidget ( QWidget* parent, QgsComposerObject *composerObject ): QWidget( parent ), mComposerObject( composerObject )
34
34
{
35
-
35
+ connect ( atlasComposition (), SIGNAL ( coverageLayerChanged ( QgsVectorLayer* ) ),
36
+ this , SLOT ( updateDataDefinedButtons () ) );
37
+ connect ( atlasComposition (), SIGNAL ( toggled ( bool ) ), this , SLOT ( updateDataDefinedButtons () ) );
36
38
}
37
39
38
40
QgsComposerItemBaseWidget::~QgsComposerItemBaseWidget ()
39
41
{
40
-
41
42
}
42
43
43
44
void QgsComposerItemBaseWidget::updateDataDefinedProperty ()
@@ -48,7 +49,11 @@ void QgsComposerItemBaseWidget::updateDataDefinedProperty()
48
49
{
49
50
return ;
50
51
}
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
+
52
57
if ( property == QgsComposerObject::NoProperty )
53
58
{
54
59
return ;
@@ -59,6 +64,14 @@ void QgsComposerItemBaseWidget::updateDataDefinedProperty()
59
64
mComposerObject ->refreshDataDefinedProperty ( property );
60
65
}
61
66
67
+ void QgsComposerItemBaseWidget::updateDataDefinedButtons ()
68
+ {
69
+ Q_FOREACH ( QgsDataDefinedButton* button, findChildren< QgsDataDefinedButton* >() )
70
+ {
71
+ button->setVectorLayer ( atlasCoverageLayer () );
72
+ }
73
+ }
74
+
62
75
void QgsComposerItemBaseWidget::setDataDefinedProperty ( const QgsDataDefinedButton *ddBtn, QgsComposerObject::DataDefinedProperty p )
63
76
{
64
77
if ( !mComposerObject )
@@ -70,12 +83,19 @@ void QgsComposerItemBaseWidget::setDataDefinedProperty( const QgsDataDefinedButt
70
83
mComposerObject ->setDataDefinedProperty ( p, map.value ( " active" ).toInt (), map.value ( " useexpr" ).toInt (), map.value ( " expression" ), map.value ( " field" ) );
71
84
}
72
85
73
- QgsComposerObject::DataDefinedProperty QgsComposerItemBaseWidget::ddPropertyForWidget ( QgsDataDefinedButton *widget )
86
+ void QgsComposerItemBaseWidget::registerDataDefinedButton ( QgsDataDefinedButton* button, QgsComposerObject::DataDefinedProperty property,
87
+ QgsDataDefinedButton::DataType type, const QString& description )
74
88
{
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 );
76
93
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 );
79
99
}
80
100
81
101
QgsAtlasComposition* QgsComposerItemBaseWidget::atlasComposition () const
@@ -162,41 +182,6 @@ QgsComposerItemWidget::QgsComposerItemWidget( QWidget* parent, QgsComposerItem*
162
182
connect ( QgsProject::instance (), SIGNAL ( variablesChanged () ), this , SLOT ( updateVariables () ) );
163
183
if ( mItem ->composition () )
164
184
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 () ) );
200
185
}
201
186
202
187
QgsComposerItemWidget::QgsComposerItemWidget ()
@@ -567,75 +552,22 @@ void QgsComposerItemWidget::setValuesForGuiNonPositionElements()
567
552
568
553
void QgsComposerItemWidget::populateDataDefinedButtons ()
569
554
{
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,
594
570
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;
639
571
}
640
572
641
573
void QgsComposerItemWidget::setValuesForGuiElements ()
0 commit comments