@@ -49,9 +49,11 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
49
49
50
50
setupUi ( this );
51
51
52
- int tabIdx = QSettings ().value ( " /Windows/VectorLayerProperties/diagram/tab" , 0 ).toInt ();
52
+ // get rid of annoying outer focus rect on Mac
53
+ mDiagramOptionsListWidget ->setAttribute ( Qt::WA_MacShowFocusRect, false );
53
54
54
- mDiagramPropertiesTabWidget ->setCurrentIndex ( tabIdx );
55
+ connect ( mEnableDiagramsCheckBox , SIGNAL ( toggled ( bool ) ), mDiagramTypeFrame , SLOT ( setEnabled ( bool ) ) );
56
+ connect ( mEnableDiagramsCheckBox , SIGNAL ( toggled ( bool ) ), mDiagramFrame , SLOT ( setEnabled ( bool ) ) );
55
57
56
58
mBackgroundColorButton ->setColorDialogTitle ( tr ( " Select background color" ) );
57
59
mBackgroundColorButton ->setAllowAlpha ( true );
@@ -74,12 +76,14 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
74
76
QGis::GeometryType layerType = layer->geometryType ();
75
77
if ( layerType == QGis::UnknownGeometry || layerType == QGis::NoGeometry )
76
78
{
77
- mDisplayDiagramsGroupBox ->setChecked ( false );
78
- mDisplayDiagramsGroupBox ->setEnabled ( false );
79
+ mEnableDiagramsCheckBox ->setChecked ( false );
80
+ mEnableDiagramsCheckBox ->setEnabled ( false );
81
+ mDiagramTypeFrame ->setEnabled ( false );
82
+ mDiagramFrame ->setEnabled ( false );
79
83
}
80
84
81
85
// insert placement options
82
-
86
+ mPlacementComboBox -> blockSignals ( true );
83
87
if ( layerType == QGis::Point || layerType == QGis::Polygon )
84
88
{
85
89
mPlacementComboBox ->addItem ( tr ( " Around Point" ), QgsDiagramLayerSettings::AroundPoint );
@@ -96,6 +100,7 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
96
100
{
97
101
mPlacementComboBox ->addItem ( tr ( " Free" ), QgsDiagramLayerSettings::Free );
98
102
}
103
+ mPlacementComboBox ->blockSignals ( false );
99
104
100
105
if ( layerType == QGis::Line )
101
106
{
@@ -110,12 +115,14 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
110
115
mLineOptionsLabel ->setVisible ( false );
111
116
}
112
117
118
+ mDiagramTypeComboBox ->blockSignals ( true );
113
119
QPixmap pix = QgsApplication::getThemePixmap ( " pie-chart" );
114
120
mDiagramTypeComboBox ->addItem ( pix, tr ( " Pie chart" ), DIAGRAM_NAME_PIE );
115
121
pix = QgsApplication::getThemePixmap ( " text" );
116
122
mDiagramTypeComboBox ->addItem ( pix, tr ( " Text diagram" ), DIAGRAM_NAME_TEXT );
117
123
pix = QgsApplication::getThemePixmap ( " histogram" );
118
124
mDiagramTypeComboBox ->addItem ( pix, tr ( " Histogram" ), DIAGRAM_NAME_HISTOGRAM );
125
+ mDiagramTypeComboBox ->blockSignals ( false );
119
126
120
127
mLabelPlacementComboBox ->addItem ( tr ( " Height" ), QgsDiagramSettings::Height );
121
128
mLabelPlacementComboBox ->addItem ( tr ( " x-height" ), QgsDiagramSettings::XHeight );
@@ -131,6 +138,25 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
131
138
mAngleOffsetComboBox ->addItem ( tr ( " Bottom" ), 270 * 16 );
132
139
mAngleOffsetComboBox ->addItem ( tr ( " Left" ), 180 * 16 );
133
140
141
+ QSettings settings;
142
+
143
+ // reset horiz strech of left side of options splitter (set to 1 for previewing in Qt Designer)
144
+ QSizePolicy policy ( mDiagramOptionsListFrame ->sizePolicy () );
145
+ policy.setHorizontalStretch ( 0 );
146
+ mDiagramOptionsListFrame ->setSizePolicy ( policy );
147
+ if ( !settings.contains ( QString ( " /Windows/Diagrams/OptionsSplitState" ) ) )
148
+ {
149
+ // set left list widget width on intial showing
150
+ QList<int > splitsizes;
151
+ splitsizes << 115 ;
152
+ mDiagramOptionsSplitter ->setSizes ( splitsizes );
153
+ }
154
+
155
+ // restore dialog, splitters and current tab
156
+ mDiagramOptionsSplitter ->restoreState ( settings.value ( QString ( " /Windows/Diagrams/OptionsSplitState" ) ).toByteArray () );
157
+ mDiagramOptionsListWidget ->setCurrentRow ( settings.value ( QString ( " /Windows/Diagrams/Tab" ), 0 ).toInt () );
158
+
159
+
134
160
// insert all attributes into the combo boxes
135
161
const QgsFields& layerFields = layer->pendingFields ();
136
162
for ( int idx = 0 ; idx < layerFields.count (); ++idx )
@@ -153,11 +179,17 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
153
179
const QgsDiagramRendererV2* dr = layer->diagramRenderer ();
154
180
if ( !dr ) // no diagram renderer yet, insert reasonable default
155
181
{
156
- mDisplayDiagramsGroupBox ->setChecked ( false );
157
- mFixedSizeCheckBox ->setChecked ( true );
182
+ mEnableDiagramsCheckBox ->setChecked ( false );
183
+ mDiagramTypeFrame ->setEnabled ( false );
184
+ mDiagramFrame ->setEnabled ( false );
185
+ mFixedSizeRadio ->setChecked ( true );
158
186
mDiagramUnitComboBox ->setCurrentIndex ( mDiagramUnitComboBox ->findText ( tr ( " mm" ) ) );
159
187
mLabelPlacementComboBox ->setCurrentIndex ( mLabelPlacementComboBox ->findText ( tr ( " x-height" ) ) );
188
+ mDiagramSizeSpinBox ->setEnabled ( true );
160
189
mDiagramSizeSpinBox ->setValue ( 30 );
190
+ mLinearScaleFrame ->setEnabled ( false );
191
+ mIncreaseMinimumSizeSpinBox ->setEnabled ( false );
192
+ mIncreaseMinimumSizeLabel ->setEnabled ( false );
161
193
mBarWidthSpinBox ->setValue ( 5 );
162
194
mVisibilityGroupBox ->setChecked ( layer->hasScaleBasedVisibility () );
163
195
mShowAllCheckBox ->setChecked ( true );
@@ -181,17 +213,33 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
181
213
break ;
182
214
}
183
215
mBackgroundColorButton ->setColor ( QColor ( 255 , 255 , 255 , 255 ) );
216
+ mDiagramTypeComboBox ->blockSignals ( true );
217
+ mDiagramTypeComboBox ->setCurrentIndex ( 0 );
218
+ mDiagramTypeComboBox ->blockSignals ( false );
219
+ // force a refresh of widget status to match diagram type
220
+ on_mDiagramTypeComboBox_currentIndexChanged ( mDiagramTypeComboBox ->currentIndex () );
184
221
}
185
222
else // already a diagram renderer present
186
223
{
187
224
// single category renderer or interpolated one?
188
- mFixedSizeCheckBox ->setChecked ( dr->rendererName () == " SingleCategory" );
225
+ if ( dr->rendererName () == " SingleCategory" )
226
+ {
227
+ mFixedSizeRadio ->setChecked ( true );
228
+ }
229
+ else
230
+ {
231
+ mAttributeBasedScalingRadio ->setChecked ( true );
232
+ }
233
+ mDiagramSizeSpinBox ->setEnabled ( mFixedSizeRadio ->isChecked () );
234
+ mLinearScaleFrame ->setEnabled ( mAttributeBasedScalingRadio ->isChecked () );
189
235
190
236
// assume single category or linearly interpolated diagram renderer for now
191
237
QList<QgsDiagramSettings> settingList = dr->diagramSettings ();
192
238
if ( settingList.size () > 0 )
193
239
{
194
- mDisplayDiagramsGroupBox ->setChecked ( settingList.at ( 0 ).enabled );
240
+ mEnableDiagramsCheckBox ->setChecked ( settingList.at ( 0 ).enabled );
241
+ mDiagramTypeFrame ->setEnabled ( mEnableDiagramsCheckBox ->isChecked () );
242
+ mDiagramFrame ->setEnabled ( mEnableDiagramsCheckBox ->isChecked () );
195
243
mDiagramFont = settingList.at ( 0 ).font ;
196
244
QSizeF size = settingList.at ( 0 ).size ;
197
245
mBackgroundColorButton ->setColor ( settingList.at ( 0 ).backgroundColor );
@@ -248,7 +296,10 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
248
296
249
297
mBarWidthSpinBox ->setValue ( settingList.at ( 0 ).barWidth );
250
298
251
- mIncreaseSmallDiagramsGroupBox ->setChecked ( settingList.at ( 0 ).minimumSize != 0 );
299
+ mIncreaseSmallDiagramsCheck ->setChecked ( settingList.at ( 0 ).minimumSize != 0 );
300
+ mIncreaseMinimumSizeSpinBox ->setEnabled ( mIncreaseSmallDiagramsCheck ->isChecked () );
301
+ mIncreaseMinimumSizeLabel ->setEnabled ( mIncreaseSmallDiagramsCheck ->isChecked () );
302
+
252
303
mIncreaseMinimumSizeSpinBox ->setValue ( settingList.at ( 0 ).minimumSize );
253
304
254
305
if ( settingList.at ( 0 ).scaleByArea )
@@ -282,6 +333,7 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
282
333
if ( lidr )
283
334
{
284
335
mDiagramSizeSpinBox ->setEnabled ( false );
336
+ mLinearScaleFrame ->setEnabled ( true );
285
337
mValueLineEdit ->setText ( QString::number ( lidr->upperValue (), ' f' ) );
286
338
mSizeSpinBox ->setValue (( lidr->upperSize ().width () + lidr->upperSize ().height () ) / 2 );
287
339
if ( lidr->classificationAttributeIsExpression () )
@@ -315,7 +367,11 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
315
367
if ( dr->diagram () )
316
368
{
317
369
QString diagramName = dr->diagram ()->diagramName ();
370
+ mDiagramTypeComboBox ->blockSignals ( true );
318
371
mDiagramTypeComboBox ->setCurrentIndex ( mDiagramTypeComboBox ->findData ( diagramName ) );
372
+ mDiagramTypeComboBox ->blockSignals ( false );
373
+ // force a refresh of widget status to match diagram type
374
+ on_mDiagramTypeComboBox_currentIndexChanged ( mDiagramTypeComboBox ->currentIndex () );
319
375
if ( mDiagramTypeComboBox ->currentIndex () == -1 )
320
376
{
321
377
QMessageBox::warning ( this , tr ( " Unknown diagram type." ),
@@ -325,29 +381,31 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
325
381
}
326
382
} // if ( !dr )
327
383
328
- // Trigger a clicked event, so all the items get properly enabled and disabled
329
- on_mDisplayDiagramsGroupBox_toggled ( mDisplayDiagramsGroupBox ->isChecked () );
330
-
331
384
connect ( mSizeAttributeExpression , SIGNAL ( clicked () ), this , SLOT ( showSizeAttributeExpressionDialog () ) );
332
385
connect ( mAddAttributeExpression , SIGNAL ( clicked () ), this , SLOT ( showAddAttributeExpressionDialog () ) );
333
386
}
334
387
388
+ QgsDiagramProperties::~QgsDiagramProperties ()
389
+ {
390
+ QSettings settings;
391
+ settings.setValue ( QString ( " /Windows/Diagrams/OptionsSplitState" ), mDiagramOptionsSplitter ->saveState () );
392
+ settings.setValue ( QString ( " /Windows/Diagrams/Tab" ), mDiagramOptionsListWidget ->currentRow () );
393
+ }
394
+
335
395
void QgsDiagramProperties::on_mDiagramTypeComboBox_currentIndexChanged ( int index )
336
396
{
337
397
QString diagramType = mDiagramTypeComboBox ->itemData ( index ).toString ();
338
398
339
399
if ( DIAGRAM_NAME_TEXT == diagramType )
340
400
{
341
- mLabelPlacementComboBox ->show ();
342
- mLabelPlacementLabel ->show ();
401
+ mTextOptionsFrame ->show ();
343
402
mBackgroundColorLabel ->show ();
344
403
mBackgroundColorButton ->show ();
345
404
mDiagramFontButton ->show ();
346
405
}
347
406
else
348
407
{
349
- mLabelPlacementComboBox ->hide ();
350
- mLabelPlacementLabel ->hide ();
408
+ mTextOptionsFrame ->hide ();
351
409
mBackgroundColorLabel ->hide ();
352
410
mBackgroundColorButton ->hide ();
353
411
mDiagramFontButton ->hide ();
@@ -357,30 +415,21 @@ void QgsDiagramProperties::on_mDiagramTypeComboBox_currentIndexChanged( int inde
357
415
{
358
416
mBarWidthLabel ->show ();
359
417
mBarWidthSpinBox ->show ();
360
- mOrientationFrame ->show ();
361
- mFixedSizeCheckBox ->setChecked ( false );
362
- mFixedSizeCheckBox -> setVisible ( false );
363
- mDiagramSizeSpinBox ->setVisible ( false );
418
+ mBarOptionsFrame ->show ();
419
+ mAttributeBasedScalingRadio ->setChecked ( true );
420
+ mFixedSizeRadio -> setEnabled ( false );
421
+ mDiagramSizeSpinBox ->setEnabled ( false );
364
422
mLinearlyScalingLabel ->setText ( tr ( " Bar length: Scale linearly, such as the following value matches the specified size." ) );
365
423
}
366
424
else
367
425
{
368
426
mBarWidthLabel ->hide ();
369
427
mBarWidthSpinBox ->hide ();
370
- mOrientationFrame ->hide ();
428
+ mBarOptionsFrame ->hide ();
371
429
mLinearlyScalingLabel ->setText ( tr ( " Scale linearly between 0 and the following attribute value / diagram size:" ) );
372
- mAttributeBasedScalingOptions ->show ();
373
- mFixedSizeCheckBox ->setVisible ( true );
374
- mDiagramSizeSpinBox ->setVisible ( true );
375
- }
376
-
377
- if ( DIAGRAM_NAME_HISTOGRAM == diagramType || DIAGRAM_NAME_TEXT == diagramType )
378
- {
379
- mDiagramPropertiesTabWidget ->setTabEnabled ( 3 , true );
380
- }
381
- else
382
- {
383
- mDiagramPropertiesTabWidget ->setTabEnabled ( 3 , false );
430
+ mAttributeBasedScalingRadio ->setEnabled ( true );
431
+ mFixedSizeRadio ->setEnabled ( true );
432
+ mDiagramSizeSpinBox ->setEnabled ( mFixedSizeRadio ->isChecked () );
384
433
}
385
434
386
435
if ( DIAGRAM_NAME_TEXT == diagramType || DIAGRAM_NAME_PIE == diagramType )
@@ -481,16 +530,6 @@ void QgsDiagramProperties::on_mFindMaximumValueButton_clicked()
481
530
mValueLineEdit ->setText ( QString ( " %1" ).arg ( maxValue ) );
482
531
}
483
532
484
- void QgsDiagramProperties::on_mDisplayDiagramsGroupBox_toggled ( bool checked )
485
- {
486
- // if enabled show diagram specific options
487
- if ( checked )
488
- {
489
- on_mDiagramTypeComboBox_currentIndexChanged ( mDiagramTypeComboBox ->currentIndex () );
490
- // Update enabled/disabled state
491
- }
492
- }
493
-
494
533
void QgsDiagramProperties::on_mDiagramFontButton_clicked ()
495
534
{
496
535
bool ok;
@@ -518,10 +557,7 @@ void QgsDiagramProperties::on_mEngineSettingsButton_clicked()
518
557
519
558
void QgsDiagramProperties::apply ()
520
559
{
521
- QSettings ().setValue ( " /Windows/VectorLayerProperties/diagram/tab" ,
522
- mDiagramPropertiesTabWidget ->currentIndex () );
523
-
524
- bool diagramsEnabled = mDisplayDiagramsGroupBox ->isChecked ();
560
+ bool diagramsEnabled = mEnableDiagramsCheckBox ->isChecked ();
525
561
526
562
QgsDiagram* diagram = 0 ;
527
563
int index = mDiagramTypeComboBox ->currentIndex ();
@@ -539,7 +575,7 @@ void QgsDiagramProperties::apply()
539
575
// Check if a (usable) scale attribute value is inserted
540
576
mValueLineEdit ->text ().toDouble ( &scaleAttributeValueOk );
541
577
542
- if ( !mFixedSizeCheckBox ->isChecked () && !scaleAttributeValueOk )
578
+ if ( !mFixedSizeRadio ->isChecked () && !scaleAttributeValueOk )
543
579
{
544
580
double maxVal = DBL_MIN;
545
581
QgsVectorDataProvider* provider = mLayer ->dataProvider ();
@@ -596,7 +632,7 @@ void QgsDiagramProperties::apply()
596
632
}
597
633
598
634
QgsDiagramSettings ds;
599
- ds.enabled = mDisplayDiagramsGroupBox ->isChecked ();
635
+ ds.enabled = mEnableDiagramsCheckBox ->isChecked ();
600
636
ds.font = mDiagramFont ;
601
637
ds.transparency = mTransparencySlider ->value ();
602
638
@@ -616,7 +652,7 @@ void QgsDiagramProperties::apply()
616
652
ds.labelPlacementMethod = static_cast <QgsDiagramSettings::LabelPlacementMethod>( mLabelPlacementComboBox ->itemData ( mLabelPlacementComboBox ->currentIndex () ).toInt () );
617
653
ds.scaleByArea = mScaleDependencyComboBox ->itemData ( mScaleDependencyComboBox ->currentIndex () ).toBool ();
618
654
619
- if ( mIncreaseSmallDiagramsGroupBox ->isChecked () )
655
+ if ( mIncreaseSmallDiagramsCheck ->isChecked () )
620
656
{
621
657
ds.minimumSize = mIncreaseMinimumSizeSpinBox ->value ();
622
658
}
@@ -647,7 +683,7 @@ void QgsDiagramProperties::apply()
647
683
648
684
ds.barWidth = mBarWidthSpinBox ->value ();
649
685
650
- if ( mFixedSizeCheckBox ->isChecked () )
686
+ if ( mFixedSizeRadio ->isChecked () )
651
687
{
652
688
QgsSingleCategoryDiagramRenderer* dr = new QgsSingleCategoryDiagramRenderer ();
653
689
dr->setDiagram ( diagram );
@@ -768,3 +804,25 @@ void QgsDiagramProperties::showAddAttributeExpressionDialog()
768
804
}
769
805
activateWindow (); // set focus back parent
770
806
}
807
+
808
+ void QgsDiagramProperties::on_mDiagramStackedWidget_currentChanged ( int index )
809
+ {
810
+ mDiagramOptionsListWidget ->blockSignals ( true );
811
+ mDiagramOptionsListWidget ->setCurrentRow ( index );
812
+ mDiagramOptionsListWidget ->blockSignals ( false );
813
+ }
814
+
815
+ void QgsDiagramProperties::on_mPlacementComboBox_currentIndexChanged ( int index )
816
+ {
817
+ QgsDiagramLayerSettings::Placement currentPlacement = ( QgsDiagramLayerSettings::Placement )mPlacementComboBox ->itemData ( index ).toInt ();
818
+ if ( currentPlacement == QgsDiagramLayerSettings::OverPoint )
819
+ {
820
+ mDiagramDistanceLabel ->setEnabled ( false );
821
+ mDiagramDistanceSpinBox ->setEnabled ( false );
822
+ }
823
+ else
824
+ {
825
+ mDiagramDistanceLabel ->setEnabled ( true );
826
+ mDiagramDistanceSpinBox ->setEnabled ( true );
827
+ }
828
+ }
0 commit comments