Skip to content

Commit 7216670

Browse files
committed
Fix some syncing issues relating to graduated histogram widget
1 parent 824a395 commit 7216670

File tree

5 files changed

+38
-10
lines changed

5 files changed

+38
-10
lines changed

python/gui/qgshistogramwidget.sip

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ class QgsHistogramWidget : QWidget
8585
*/
8686
void refreshHistogram();
8787

88+
/** Triggers a refresh and immediate redraw of the histogram.
89+
*/
90+
void refreshAndRedraw();
91+
8892
/** Sets the vector layer associated with the histogram.
8993
* @param layer source vector layer
9094
* @see setSourceFieldExp

src/gui/qgshistogramwidget.cpp

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ QgsHistogramWidget::QgsHistogramWidget( QWidget *parent, QgsVectorLayer* layer,
6565
mMeanCheckBox->setChecked( settings.value( "/HistogramWidget/showMean", false ).toBool() );
6666
mStdevCheckBox->setChecked( settings.value( "/HistogramWidget/showStdev", false ).toBool() );
6767

68-
connect( mBinsSpinBox, SIGNAL( valueChanged( int ) ), this, SLOT( refreshHistogram() ) );
69-
connect( mMeanCheckBox, SIGNAL( toggled( bool ) ), this, SLOT( refreshHistogram() ) );
70-
connect( mStdevCheckBox, SIGNAL( toggled( bool ) ), this, SLOT( refreshHistogram() ) );
68+
connect( mBinsSpinBox, SIGNAL( valueChanged( int ) ), this, SLOT( refreshAndRedraw() ) );
69+
connect( mMeanCheckBox, SIGNAL( toggled( bool ) ), this, SLOT( refreshAndRedraw() ) );
70+
connect( mStdevCheckBox, SIGNAL( toggled( bool ) ), this, SLOT( refreshAndRedraw() ) );
7171

7272
mGridPen = QPen( QColor( 0, 0, 0, 40 ) );
7373
mMeanPen = QPen( QColor( 10, 10, 10, 220 ) );
@@ -88,6 +88,17 @@ QgsHistogramWidget::~QgsHistogramWidget()
8888
settings.setValue( "/HistogramWidget/showStdev", mStdevCheckBox->isChecked() );
8989
}
9090

91+
static bool _rangesByLower( const QgsRendererRangeV2& a, const QgsRendererRangeV2& b )
92+
{
93+
return a.lowerValue() < b.lowerValue() ? -1 : 0;
94+
}
95+
96+
void QgsHistogramWidget::setGraduatedRanges( const QgsRangeList &ranges )
97+
{
98+
mRanges = ranges;
99+
qSort( mRanges.begin(), mRanges.end(), _rangesByLower );
100+
}
101+
91102
void QgsHistogramWidget::setLayer( QgsVectorLayer *layer )
92103
{
93104
if ( layer == mVectorLayer )
@@ -103,6 +114,12 @@ void QgsHistogramWidget::refreshHistogram()
103114
mRedrawRequired = true;
104115
}
105116

117+
void QgsHistogramWidget::refreshAndRedraw()
118+
{
119+
refreshHistogram();
120+
drawHistogram();
121+
}
122+
106123
void QgsHistogramWidget::setSourceFieldExp( const QString &fieldOrExp )
107124
{
108125
if ( fieldOrExp == mSourceFieldExp )

src/gui/qgshistogramwidget.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ class GUI_EXPORT QgsHistogramWidget : public QWidget, private Ui::QgsHistogramWi
109109
* @param ranges graduated range list
110110
* @see graduatedRanges
111111
*/
112-
void setGraduatedRanges( const QgsRangeList& ranges ) { mRanges = ranges; }
112+
void setGraduatedRanges( const QgsRangeList& ranges );
113113

114114
/** Returns the graduated ranges associated with the histogram. If set, the ranges will be used to colour the histogram
115115
* bars and for showing vertical dividers at the histogram breaks.
@@ -124,6 +124,10 @@ class GUI_EXPORT QgsHistogramWidget : public QWidget, private Ui::QgsHistogramWi
124124
*/
125125
void refreshHistogram();
126126

127+
/** Triggers a refresh and immediate redraw of the histogram.
128+
*/
129+
void refreshAndRedraw();
130+
127131
/** Sets the vector layer associated with the histogram.
128132
* @param layer source vector layer
129133
* @see setSourceFieldExp

src/gui/symbology-ng/qgsgraduatedhistogramwidget.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ void QgsGraduatedHistogramWidget::drawHistogram()
8282
if ( !mRenderer )
8383
return;
8484

85-
mRanges = mRenderer->ranges();
85+
setGraduatedRanges( mRenderer->ranges() );
8686
QgsHistogramWidget::drawHistogram();
8787

8888
// histo picker
@@ -123,7 +123,7 @@ void QgsGraduatedHistogramWidget::mouseRelease( double value )
123123
if ( value <= mRenderer->ranges().at( closestRangeIndex ).lowerValue() ||
124124
value >= mRenderer->ranges().at( closestRangeIndex + 1 ).upperValue() )
125125
{
126-
refreshHistogram();
126+
refreshAndRedraw();
127127
return;
128128
}
129129

@@ -138,7 +138,7 @@ void QgsGraduatedHistogramWidget::mouseRelease( double value )
138138
emit rangesModified( true );
139139
}
140140

141-
drawHistogram();
141+
refreshAndRedraw();
142142
}
143143

144144
void QgsGraduatedHistogramWidget::findClosestRange( double value, int &closestRangeIndex, int& pixelDistance ) const

src/gui/symbology-ng/qgsgraduatedsymbolrendererv2widget.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,6 @@ void QgsGraduatedSymbolRendererV2Widget::connectUpdateHandlers()
514514
connect( minSizeSpinBox, SIGNAL( valueChanged( double ) ), this, SLOT( reapplySizes() ) );
515515
connect( maxSizeSpinBox, SIGNAL( valueChanged( double ) ), this, SLOT( reapplySizes() ) );
516516

517-
518517
connect( mModel, SIGNAL( rowsMoved() ), this, SLOT( rowsMoved() ) );
519518
connect( mModel, SIGNAL( dataChanged( QModelIndex, QModelIndex ) ), this, SLOT( modelDataChanged() ) );
520519
}
@@ -606,7 +605,7 @@ void QgsGraduatedSymbolRendererV2Widget::updateUiFromRenderer( bool updateCount
606605
viewGraduated->resizeColumnToContents( 1 );
607606
viewGraduated->resizeColumnToContents( 2 );
608607

609-
mHistogramWidget->refreshHistogram();
608+
mHistogramWidget->refreshAndRedraw();
610609

611610
connectUpdateHandlers();
612611
}
@@ -874,6 +873,7 @@ void QgsGraduatedSymbolRendererV2Widget::changeRangeSymbol( int rangeIdx )
874873
}
875874

876875
mRenderer->updateRangeSymbol( rangeIdx, newSymbol );
876+
mHistogramWidget->refreshHistogram();
877877
}
878878

879879
void QgsGraduatedSymbolRendererV2Widget::changeRange( int rangeIdx )
@@ -909,22 +909,26 @@ void QgsGraduatedSymbolRendererV2Widget::changeRange( int rangeIdx )
909909
}
910910
}
911911
}
912+
mHistogramWidget->refreshHistogram();
912913
}
913914

914915
void QgsGraduatedSymbolRendererV2Widget::addClass()
915916
{
916917
mModel->addClass( mGraduatedSymbol );
918+
mHistogramWidget->refreshHistogram();
917919
}
918920

919921
void QgsGraduatedSymbolRendererV2Widget::deleteClasses()
920922
{
921923
QList<int> classIndexes = selectedClasses();
922924
mModel->deleteRows( classIndexes );
925+
mHistogramWidget->refreshHistogram();
923926
}
924927

925928
void QgsGraduatedSymbolRendererV2Widget::deleteAllClasses()
926929
{
927930
mModel->removeAllRows();
931+
mHistogramWidget->refreshHistogram();
928932
}
929933

930934
bool QgsGraduatedSymbolRendererV2Widget::rowsOrdered()
@@ -1075,7 +1079,6 @@ void QgsGraduatedSymbolRendererV2Widget::rowsMoved()
10751079

10761080
void QgsGraduatedSymbolRendererV2Widget::modelDataChanged()
10771081
{
1078-
mHistogramWidget->refreshHistogram();
10791082
}
10801083

10811084
void QgsGraduatedSymbolRendererV2Widget::keyPressEvent( QKeyEvent* event )

0 commit comments

Comments
 (0)