@@ -85,7 +85,33 @@ QgsCompositionWidget::QgsCompositionWidget( QWidget* parent, QgsComposition* c )
85
85
mGridResolutionSpinBox ->setValue ( mComposition ->snapGridResolution () );
86
86
mOffsetXSpinBox ->setValue ( mComposition ->snapGridOffsetX () );
87
87
mOffsetYSpinBox ->setValue ( mComposition ->snapGridOffsetY () );
88
+
89
+ QgsAtlasComposition* atlas = &mComposition ->atlasComposition ();
90
+ if ( atlas )
91
+ {
92
+ // repopulate data defined buttons if atlas layer changes
93
+ connect ( atlas, SIGNAL ( coverageLayerChanged ( QgsVectorLayer* ) ),
94
+ this , SLOT ( populateDataDefinedButtons () ) );
95
+ connect ( atlas, SIGNAL ( toggled ( bool ) ), this , SLOT ( populateDataDefinedButtons () ) );
96
+ }
88
97
}
98
+
99
+ connect ( mPaperSizeDDBtn , SIGNAL ( dataDefinedChanged ( const QString& ) ), this , SLOT ( updateDataDefinedProperty ( ) ) );
100
+ connect ( mPaperSizeDDBtn , SIGNAL ( dataDefinedActivated ( bool ) ), this , SLOT ( updateDataDefinedProperty ( ) ) );
101
+ connect ( mPaperSizeDDBtn , SIGNAL ( dataDefinedActivated ( bool ) ), mPaperSizeComboBox , SLOT ( setDisabled ( bool ) ) );
102
+ connect ( mPaperWidthDDBtn , SIGNAL ( dataDefinedChanged ( const QString& ) ), this , SLOT ( updateDataDefinedProperty ( ) ) );
103
+ connect ( mPaperWidthDDBtn , SIGNAL ( dataDefinedActivated ( bool ) ), this , SLOT ( updateDataDefinedProperty ( ) ) );
104
+ connect ( mPaperWidthDDBtn , SIGNAL ( dataDefinedActivated ( bool ) ), mPaperWidthDoubleSpinBox , SLOT ( setDisabled ( bool ) ) );
105
+ connect ( mPaperHeightDDBtn , SIGNAL ( dataDefinedChanged ( const QString& ) ), this , SLOT ( updateDataDefinedProperty ( ) ) );
106
+ connect ( mPaperHeightDDBtn , SIGNAL ( dataDefinedActivated ( bool ) ), this , SLOT ( updateDataDefinedProperty ( ) ) );
107
+ connect ( mPaperHeightDDBtn , SIGNAL ( dataDefinedActivated ( bool ) ), mPaperHeightDoubleSpinBox , SLOT ( setDisabled ( bool ) ) );
108
+ connect ( mNumPagesDDBtn , SIGNAL ( dataDefinedChanged ( const QString& ) ), this , SLOT ( updateDataDefinedProperty ( ) ) );
109
+ connect ( mNumPagesDDBtn , SIGNAL ( dataDefinedActivated ( bool ) ), this , SLOT ( updateDataDefinedProperty ( ) ) );
110
+ connect ( mNumPagesDDBtn , SIGNAL ( dataDefinedActivated ( bool ) ), mNumPagesSpinBox , SLOT ( setDisabled ( bool ) ) );
111
+ connect ( mPaperOrientationDDBtn , SIGNAL ( dataDefinedChanged ( const QString& ) ), this , SLOT ( updateDataDefinedProperty ( ) ) );
112
+ connect ( mPaperOrientationDDBtn , SIGNAL ( dataDefinedActivated ( bool ) ), this , SLOT ( updateDataDefinedProperty ( ) ) );
113
+ connect ( mPaperOrientationDDBtn , SIGNAL ( dataDefinedActivated ( bool ) ), mPaperOrientationComboBox , SLOT ( setDisabled ( bool ) ) );
114
+
89
115
blockSignals ( false );
90
116
}
91
117
@@ -99,6 +125,103 @@ QgsCompositionWidget::~QgsCompositionWidget()
99
125
100
126
}
101
127
128
+ void QgsCompositionWidget::populateDataDefinedButtons ()
129
+ {
130
+ if ( !mComposition )
131
+ {
132
+ return ;
133
+ }
134
+
135
+ QgsVectorLayer* vl = 0 ;
136
+ QgsAtlasComposition* atlas = &mComposition ->atlasComposition ();
137
+
138
+ if ( atlas && atlas->enabled () )
139
+ {
140
+ vl = atlas->coverageLayer ();
141
+ }
142
+
143
+ mPaperSizeDDBtn ->blockSignals ( true );
144
+ mPaperWidthDDBtn ->blockSignals ( true );
145
+ mPaperHeightDDBtn ->blockSignals ( true );
146
+ mNumPagesDDBtn ->blockSignals ( true );
147
+ mPaperOrientationDDBtn ->blockSignals ( true );
148
+
149
+ mPaperSizeDDBtn ->init ( vl, mComposition ->dataDefinedProperty ( QgsComposerItem::PresetPaperSize ),
150
+ QgsDataDefinedButton::String, QgsDataDefinedButton::paperSizeDesc () );
151
+ mPaperWidthDDBtn ->init ( vl, mComposition ->dataDefinedProperty ( QgsComposerItem::PaperWidth ),
152
+ QgsDataDefinedButton::Double, QgsDataDefinedButton::doublePosDesc () );
153
+ mPaperHeightDDBtn ->init ( vl, mComposition ->dataDefinedProperty ( QgsComposerItem::PaperHeight ),
154
+ QgsDataDefinedButton::Double, QgsDataDefinedButton::doublePosDesc () );
155
+ mNumPagesDDBtn ->init ( vl, mComposition ->dataDefinedProperty ( QgsComposerItem::NumPages ),
156
+ QgsDataDefinedButton::Int, QgsDataDefinedButton::intPosOneDesc () );
157
+ mPaperOrientationDDBtn ->init ( vl, mComposition ->dataDefinedProperty ( QgsComposerItem::PaperOrientation ),
158
+ QgsDataDefinedButton::String, QgsDataDefinedButton::paperOrientationDesc () );
159
+
160
+ // initial state of controls - disable related controls when dd buttons are active
161
+ mPaperSizeComboBox ->setEnabled ( !mPaperSizeDDBtn ->isActive () );
162
+
163
+ mPaperSizeDDBtn ->blockSignals ( false );
164
+ mPaperWidthDDBtn ->blockSignals ( false );
165
+ mPaperHeightDDBtn ->blockSignals ( false );
166
+ mNumPagesDDBtn ->blockSignals ( false );
167
+ mPaperOrientationDDBtn ->blockSignals ( false );
168
+ }
169
+
170
+ void QgsCompositionWidget::setDataDefinedProperty ( const QgsDataDefinedButton* ddBtn, QgsComposerItem::DataDefinedProperty property )
171
+ {
172
+ if ( !mComposition )
173
+ {
174
+ return ;
175
+ }
176
+
177
+ const QMap< QString, QString >& map = ddBtn->definedProperty ();
178
+ mComposition ->setDataDefinedProperty ( property, map.value ( " active" ).toInt (), map.value ( " useexpr" ).toInt (), map.value ( " expression" ), map.value ( " field" ) );
179
+ }
180
+
181
+ QgsComposerItem::DataDefinedProperty QgsCompositionWidget::ddPropertyForWidget ( QgsDataDefinedButton *widget )
182
+ {
183
+ if ( widget == mPaperSizeDDBtn )
184
+ {
185
+ return QgsComposerItem::PresetPaperSize;
186
+ }
187
+ else if ( widget == mPaperWidthDDBtn )
188
+ {
189
+ return QgsComposerItem::PaperWidth;
190
+ }
191
+ else if ( widget == mPaperHeightDDBtn )
192
+ {
193
+ return QgsComposerItem::PaperHeight;
194
+ }
195
+ else if ( widget == mNumPagesDDBtn )
196
+ {
197
+ return QgsComposerItem::NumPages;
198
+ }
199
+ else if ( widget == mPaperOrientationDDBtn )
200
+ {
201
+ return QgsComposerItem::PaperOrientation;
202
+ }
203
+
204
+ return QgsComposerItem::NoProperty;
205
+ }
206
+
207
+ void QgsCompositionWidget::updateDataDefinedProperty ()
208
+ {
209
+ QgsDataDefinedButton* ddButton = dynamic_cast <QgsDataDefinedButton*>( sender () );
210
+ if ( !ddButton || !mComposition )
211
+ {
212
+ return ;
213
+ }
214
+
215
+ QgsComposerItem::DataDefinedProperty property = ddPropertyForWidget ( ddButton );
216
+ if ( property == QgsComposerItem::NoProperty )
217
+ {
218
+ return ;
219
+ }
220
+
221
+ setDataDefinedProperty ( ddButton, property );
222
+ mComposition ->refreshDataDefinedProperty ( property );
223
+ }
224
+
102
225
void QgsCompositionWidget::createPaperEntries ()
103
226
{
104
227
QList<QgsCompositionPaper> formats;
0 commit comments