Skip to content

Commit 4f87525

Browse files
committed
[diagram] synchronize enabling UI to match labelling
1 parent 99980be commit 4f87525

File tree

4 files changed

+94
-141
lines changed

4 files changed

+94
-141
lines changed

src/app/qgsdiagramproperties.cpp

+87-88
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,15 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
6565
// get rid of annoying outer focus rect on Mac
6666
mDiagramOptionsListWidget->setAttribute( Qt::WA_MacShowFocusRect, false );
6767

68-
connect( mEnableDiagramsCheckBox, SIGNAL( toggled( bool ) ), mDiagramTypeFrame, SLOT( setEnabled( bool ) ) );
69-
connect( mEnableDiagramsCheckBox, SIGNAL( toggled( bool ) ), mDiagramFrame, SLOT( setEnabled( bool ) ) );
68+
mDiagramTypeComboBox->blockSignals( true );
69+
mDiagramTypeComboBox->addItem( tr( "No diagrams" ), "None" );
70+
QPixmap pix = QgsApplication::getThemePixmap( "pie-chart" );
71+
mDiagramTypeComboBox->addItem( pix, tr( "Pie chart" ), DIAGRAM_NAME_PIE );
72+
pix = QgsApplication::getThemePixmap( "text" );
73+
mDiagramTypeComboBox->addItem( pix, tr( "Text diagram" ), DIAGRAM_NAME_TEXT );
74+
pix = QgsApplication::getThemePixmap( "histogram" );
75+
mDiagramTypeComboBox->addItem( pix, tr( "Histogram" ), DIAGRAM_NAME_HISTOGRAM );
76+
mDiagramTypeComboBox->blockSignals( false );
7077

7178
mScaleRangeWidget->setMapCanvas( QgisApp::instance()->mapCanvas() );
7279
mSizeFieldExpressionWidget->registerGetExpressionContextCallback( &_getExpressionContext, mLayer );
@@ -90,9 +97,7 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
9097
QGis::GeometryType layerType = layer->geometryType();
9198
if ( layerType == QGis::UnknownGeometry || layerType == QGis::NoGeometry )
9299
{
93-
mEnableDiagramsCheckBox->setChecked( false );
94-
mEnableDiagramsCheckBox->setEnabled( false );
95-
mDiagramTypeFrame->setEnabled( false );
100+
mDiagramTypeComboBox->setEnabled( false );
96101
mDiagramFrame->setEnabled( false );
97102
}
98103

@@ -122,15 +127,6 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
122127
}
123128
mPlacementComboBox->blockSignals( false );
124129

125-
mDiagramTypeComboBox->blockSignals( true );
126-
QPixmap pix = QgsApplication::getThemePixmap( "pie-chart" );
127-
mDiagramTypeComboBox->addItem( pix, tr( "Pie chart" ), DIAGRAM_NAME_PIE );
128-
pix = QgsApplication::getThemePixmap( "text" );
129-
mDiagramTypeComboBox->addItem( pix, tr( "Text diagram" ), DIAGRAM_NAME_TEXT );
130-
pix = QgsApplication::getThemePixmap( "histogram" );
131-
mDiagramTypeComboBox->addItem( pix, tr( "Histogram" ), DIAGRAM_NAME_HISTOGRAM );
132-
mDiagramTypeComboBox->blockSignals( false );
133-
134130
mLabelPlacementComboBox->addItem( tr( "Height" ), QgsDiagramSettings::Height );
135131
mLabelPlacementComboBox->addItem( tr( "x-height" ), QgsDiagramSettings::XHeight );
136132

@@ -188,9 +184,9 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
188184
const QgsDiagramRendererV2* dr = layer->diagramRenderer();
189185
if ( !dr ) //no diagram renderer yet, insert reasonable default
190186
{
191-
mEnableDiagramsCheckBox->setChecked( false );
192-
mDiagramTypeFrame->setEnabled( false );
193-
mDiagramFrame->setEnabled( false );
187+
mDiagramTypeComboBox->blockSignals( true );
188+
mDiagramTypeComboBox->setCurrentIndex( 0 );
189+
mDiagramTypeComboBox->blockSignals( false );
194190
mFixedSizeRadio->setChecked( true );
195191
mDiagramUnitComboBox->setUnit( QgsSymbolV2::MM );
196192
mDiagramLineUnitComboBox->setUnit( QgsSymbolV2::MM );
@@ -225,9 +221,6 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
225221
break;
226222
}
227223
mBackgroundColorButton->setColor( QColor( 255, 255, 255, 255 ) );
228-
mDiagramTypeComboBox->blockSignals( true );
229-
mDiagramTypeComboBox->setCurrentIndex( 0 );
230-
mDiagramTypeComboBox->blockSignals( false );
231224
//force a refresh of widget status to match diagram type
232225
on_mDiagramTypeComboBox_currentIndexChanged( mDiagramTypeComboBox->currentIndex() );
233226
}
@@ -249,9 +242,7 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
249242
QList<QgsDiagramSettings> settingList = dr->diagramSettings();
250243
if ( !settingList.isEmpty() )
251244
{
252-
mEnableDiagramsCheckBox->setChecked( settingList.at( 0 ).enabled );
253-
mDiagramTypeFrame->setEnabled( mEnableDiagramsCheckBox->isChecked() );
254-
mDiagramFrame->setEnabled( mEnableDiagramsCheckBox->isChecked() );
245+
mDiagramFrame->setEnabled( settingList.at( 0 ).enabled );
255246
mDiagramFont = settingList.at( 0 ).font;
256247
QSizeF size = settingList.at( 0 ).size;
257248
mBackgroundColorButton->setColor( settingList.at( 0 ).backgroundColor );
@@ -385,16 +376,17 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer* layer, QWidget* pare
385376

386377
if ( dr->diagram() )
387378
{
388-
QString diagramName = dr->diagram()->diagramName();
379+
mDiagramType = dr->diagram()->diagramName();
380+
389381
mDiagramTypeComboBox->blockSignals( true );
390-
mDiagramTypeComboBox->setCurrentIndex( mDiagramTypeComboBox->findData( diagramName ) );
382+
mDiagramTypeComboBox->setCurrentIndex( settingList.at( 0 ).enabled ? mDiagramTypeComboBox->findData( mDiagramType ) : 0 );
391383
mDiagramTypeComboBox->blockSignals( false );
392384
//force a refresh of widget status to match diagram type
393385
on_mDiagramTypeComboBox_currentIndexChanged( mDiagramTypeComboBox->currentIndex() );
394386
if ( mDiagramTypeComboBox->currentIndex() == -1 )
395387
{
396388
QMessageBox::warning( this, tr( "Unknown diagram type." ),
397-
tr( "The diagram type '%1' is unknown. A default type is selected for you." ).arg( diagramName ), QMessageBox::Ok );
389+
tr( "The diagram type '%1' is unknown. A default type is selected for you." ).arg( mDiagramType ), QMessageBox::Ok );
398390
mDiagramTypeComboBox->setCurrentIndex( mDiagramTypeComboBox->findData( DIAGRAM_NAME_PIE ) );
399391
}
400392
}
@@ -414,71 +406,79 @@ QgsDiagramProperties::~QgsDiagramProperties()
414406

415407
void QgsDiagramProperties::on_mDiagramTypeComboBox_currentIndexChanged( int index )
416408
{
417-
QString diagramType = mDiagramTypeComboBox->itemData( index ).toString();
418-
419-
if ( DIAGRAM_NAME_TEXT == diagramType )
409+
if ( index == 0 )
420410
{
421-
mTextOptionsFrame->show();
422-
mBackgroundColorLabel->show();
423-
mBackgroundColorButton->show();
424-
mDiagramFontButton->show();
411+
mDiagramFrame->setEnabled( false );
425412
}
426413
else
427414
{
428-
mTextOptionsFrame->hide();
429-
mBackgroundColorLabel->hide();
430-
mBackgroundColorButton->hide();
431-
mDiagramFontButton->hide();
432-
}
415+
mDiagramFrame->setEnabled( true );
433416

434-
if ( DIAGRAM_NAME_HISTOGRAM == diagramType )
435-
{
436-
mBarWidthLabel->show();
437-
mBarWidthSpinBox->show();
438-
mBarOptionsFrame->show();
439-
mAttributeBasedScalingRadio->setChecked( true );
440-
mFixedSizeRadio->setEnabled( false );
441-
mDiagramSizeSpinBox->setEnabled( false );
442-
mLinearlyScalingLabel->setText( tr( "Bar length: Scale linearly, so that the following value matches the specified bar length:" ) );
443-
mSizeLabel->setText( tr( "Bar length" ) );
444-
mFrameIncreaseSize->setVisible( false );
445-
}
446-
else
447-
{
448-
mBarWidthLabel->hide();
449-
mBarWidthSpinBox->hide();
450-
mBarOptionsFrame->hide();
451-
mLinearlyScalingLabel->setText( tr( "Scale linearly between 0 and the following attribute value / diagram size:" ) );
452-
mSizeLabel->setText( tr( "Size" ) );
453-
mAttributeBasedScalingRadio->setEnabled( true );
454-
mFixedSizeRadio->setEnabled( true );
455-
mDiagramSizeSpinBox->setEnabled( mFixedSizeRadio->isChecked() );
456-
mFrameIncreaseSize->setVisible( true );
457-
}
417+
mDiagramType = mDiagramTypeComboBox->itemData( index ).toString();
458418

459-
if ( DIAGRAM_NAME_TEXT == diagramType || DIAGRAM_NAME_PIE == diagramType )
460-
{
461-
mScaleDependencyComboBox->show();
462-
mScaleDependencyLabel->show();
463-
}
464-
else
465-
{
466-
mScaleDependencyComboBox->hide();
467-
mScaleDependencyLabel->hide();
468-
}
419+
if ( DIAGRAM_NAME_TEXT == mDiagramType )
420+
{
421+
mTextOptionsFrame->show();
422+
mBackgroundColorLabel->show();
423+
mBackgroundColorButton->show();
424+
mDiagramFontButton->show();
425+
}
426+
else
427+
{
428+
mTextOptionsFrame->hide();
429+
mBackgroundColorLabel->hide();
430+
mBackgroundColorButton->hide();
431+
mDiagramFontButton->hide();
432+
}
469433

470-
if ( DIAGRAM_NAME_PIE == diagramType )
471-
{
472-
mAngleOffsetComboBox->show();
473-
mAngleOffsetLabel->show();
474-
}
475-
else
476-
{
477-
mAngleOffsetComboBox->hide();
478-
mAngleOffsetLabel->hide();
434+
if ( DIAGRAM_NAME_HISTOGRAM == mDiagramType )
435+
{
436+
mBarWidthLabel->show();
437+
mBarWidthSpinBox->show();
438+
mBarOptionsFrame->show();
439+
mAttributeBasedScalingRadio->setChecked( true );
440+
mFixedSizeRadio->setEnabled( false );
441+
mDiagramSizeSpinBox->setEnabled( false );
442+
mLinearlyScalingLabel->setText( tr( "Bar length: Scale linearly, so that the following value matches the specified bar length:" ) );
443+
mSizeLabel->setText( tr( "Bar length" ) );
444+
mFrameIncreaseSize->setVisible( false );
445+
}
446+
else
447+
{
448+
mBarWidthLabel->hide();
449+
mBarWidthSpinBox->hide();
450+
mBarOptionsFrame->hide();
451+
mLinearlyScalingLabel->setText( tr( "Scale linearly between 0 and the following attribute value / diagram size:" ) );
452+
mSizeLabel->setText( tr( "Size" ) );
453+
mAttributeBasedScalingRadio->setEnabled( true );
454+
mFixedSizeRadio->setEnabled( true );
455+
mDiagramSizeSpinBox->setEnabled( mFixedSizeRadio->isChecked() );
456+
mFrameIncreaseSize->setVisible( true );
457+
}
458+
459+
if ( DIAGRAM_NAME_TEXT == mDiagramType || DIAGRAM_NAME_PIE == mDiagramType )
460+
{
461+
mScaleDependencyComboBox->show();
462+
mScaleDependencyLabel->show();
463+
}
464+
else
465+
{
466+
mScaleDependencyComboBox->hide();
467+
mScaleDependencyLabel->hide();
468+
}
469+
470+
if ( DIAGRAM_NAME_PIE == mDiagramType )
471+
{
472+
mAngleOffsetComboBox->show();
473+
mAngleOffsetLabel->show();
474+
}
475+
else
476+
{
477+
mAngleOffsetComboBox->hide();
478+
mAngleOffsetLabel->hide();
479+
}
479480
}
480481
}
481-
482482
QString QgsDiagramProperties::guessLegendText( const QString& expression )
483483
{
484484
//trim unwanted characters from expression text for legend
@@ -598,11 +598,10 @@ void QgsDiagramProperties::on_mEngineSettingsButton_clicked()
598598

599599
void QgsDiagramProperties::apply()
600600
{
601-
bool diagramsEnabled = mEnableDiagramsCheckBox->isChecked();
601+
int index = mDiagramTypeComboBox->currentIndex();
602+
bool diagramsEnabled = ( index != 0 );
602603

603604
QgsDiagram* diagram = nullptr;
604-
int index = mDiagramTypeComboBox->currentIndex();
605-
QString diagramType = mDiagramTypeComboBox->itemData( index ).toString();
606605

607606
if ( diagramsEnabled && 0 == mDiagramAttributesTreeWidget->topLevelItemCount() )
608607
{
@@ -661,11 +660,11 @@ void QgsDiagramProperties::apply()
661660
}
662661
#endif
663662

664-
if ( diagramType == DIAGRAM_NAME_TEXT )
663+
if ( mDiagramType == DIAGRAM_NAME_TEXT )
665664
{
666665
diagram = new QgsTextDiagram();
667666
}
668-
else if ( diagramType == DIAGRAM_NAME_PIE )
667+
else if ( mDiagramType == DIAGRAM_NAME_PIE )
669668
{
670669
diagram = new QgsPieDiagram();
671670
}
@@ -675,7 +674,7 @@ void QgsDiagramProperties::apply()
675674
}
676675

677676
QgsDiagramSettings ds;
678-
ds.enabled = mEnableDiagramsCheckBox->isChecked();
677+
ds.enabled = ( mDiagramTypeComboBox->currentIndex() != 0 );
679678
ds.font = mDiagramFont;
680679
ds.transparency = mTransparencySpinBox->value() * 255.0 / 100.0;
681680

src/app/qgsdiagramproperties.h

+2
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ class APP_EXPORT QgsDiagramProperties : public QWidget, private Ui::QgsDiagramPr
5555
QgsVectorLayer* mLayer;
5656

5757
private:
58+
// Keeps track of the diagram type to properly save / restore settings when the diagram type combo box is set to no diagram.
59+
QString mDiagramType;
5860

5961
QString guessLegendText( const QString &expression );
6062

src/core/diagram/qgsdiagram.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,8 @@ QFont QgsDiagram::scaledFont( const QgsDiagramSettings& s, const QgsRenderContex
8989
QFont f = s.font;
9090
if ( s.sizeType == QgsSymbolV2::MapUnit )
9191
{
92-
f.setPixelSize( s.font.pointSizeF() / c.mapToPixel().mapUnitsPerPixel() );
92+
int pixelsize = s.font.pointSizeF() / c.mapToPixel().mapUnitsPerPixel();
93+
f.setPixelSize( pixelsize > 0 ? pixelsize : 1 );
9394
}
9495
else
9596
{

src/ui/qgsdiagrampropertiesbase.ui

+3-52
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<height>491</height>
1111
</rect>
1212
</property>
13-
<layout class="QVBoxLayout" name="verticalLayout_8" stretch="0,0,1">
13+
<layout class="QVBoxLayout" name="verticalLayout_8" stretch="0,1">
1414
<property name="leftMargin">
1515
<number>6</number>
1616
</property>
@@ -39,11 +39,7 @@
3939
<number>0</number>
4040
</property>
4141
<item>
42-
<widget class="QCheckBox" name="mEnableDiagramsCheckBox">
43-
<property name="text">
44-
<string>Show diagrams for this layer</string>
45-
</property>
46-
</widget>
42+
<widget class="QComboBox" name="mDiagramTypeComboBox"/>
4743
</item>
4844
<item>
4945
<spacer name="horizontalSpacer_7">
@@ -97,50 +93,6 @@
9793
</layout>
9894
</widget>
9995
</item>
100-
<item>
101-
<widget class="QFrame" name="mDiagramTypeFrame">
102-
<layout class="QHBoxLayout" name="diagramTypeAndPriorityLayout">
103-
<property name="spacing">
104-
<number>2</number>
105-
</property>
106-
<property name="leftMargin">
107-
<number>0</number>
108-
</property>
109-
<property name="topMargin">
110-
<number>0</number>
111-
</property>
112-
<property name="rightMargin">
113-
<number>0</number>
114-
</property>
115-
<property name="bottomMargin">
116-
<number>0</number>
117-
</property>
118-
<item>
119-
<widget class="QLabel" name="mTypeLabel">
120-
<property name="text">
121-
<string>Diagram type</string>
122-
</property>
123-
</widget>
124-
</item>
125-
<item>
126-
<widget class="QComboBox" name="mDiagramTypeComboBox"/>
127-
</item>
128-
<item>
129-
<spacer name="horizontalSpacer">
130-
<property name="orientation">
131-
<enum>Qt::Horizontal</enum>
132-
</property>
133-
<property name="sizeHint" stdset="0">
134-
<size>
135-
<width>40</width>
136-
<height>20</height>
137-
</size>
138-
</property>
139-
</spacer>
140-
</item>
141-
</layout>
142-
</widget>
143-
</item>
14496
<item>
14597
<widget class="QFrame" name="mDiagramFrame">
14698
<property name="frameShape">
@@ -1877,9 +1829,8 @@
18771829
</customwidget>
18781830
</customwidgets>
18791831
<tabstops>
1880-
<tabstop>mEnableDiagramsCheckBox</tabstop>
1881-
<tabstop>mEngineSettingsButton</tabstop>
18821832
<tabstop>mDiagramTypeComboBox</tabstop>
1833+
<tabstop>mEngineSettingsButton</tabstop>
18831834
<tabstop>mDiagramOptionsListWidget</tabstop>
18841835
<tabstop>scrollArea</tabstop>
18851836
<tabstop>mAttributesTreeWidget</tabstop>

0 commit comments

Comments
 (0)