@@ -606,53 +606,65 @@ void QgsRasterHistogramWidget::refreshHistogram()
606606 QgsDebugMsg ( QString ( " computed histo min = %1 max = %2" ).arg ( mHistoMin ).arg ( mHistoMax ) );
607607 myFirstIteration = false ;
608608 }
609- // for x axis use band pixel values rather than gdal hist. bin values
610- // subtract -0.5 to prevent rounding errors
611- // see http://www.gdal.org/classGDALRasterBand.html#3f8889607d3b2294f7e0f11181c201c8
612- // fix x range for non-Byte data
613- mpPlot->setAxisScale ( QwtPlot::xBottom,
614- mHistoMin - myBinXStep / 2 ,
615- mHistoMax + myBinXStep / 2 );
616609
617- mpPlot->replot ();
610+ if ( mHistoMin < mHistoMax )
611+ {
612+ // for x axis use band pixel values rather than gdal hist. bin values
613+ // subtract -0.5 to prevent rounding errors
614+ // see http://www.gdal.org/classGDALRasterBand.html#3f8889607d3b2294f7e0f11181c201c8
615+ // fix x range for non-Byte data
616+ mpPlot->setAxisScale ( QwtPlot::xBottom,
617+ mHistoMin - myBinXStep / 2 ,
618+ mHistoMax + myBinXStep / 2 );
619+ mpPlot->setEnabled ( true );
620+ mpPlot->replot ();
618621
619- // histo plot markers
620- // memory leak?
621- mHistoMarkerMin = new QwtPlotMarker ();
622- mHistoMarkerMin ->attach ( mpPlot );
623- mHistoMarkerMax = new QwtPlotMarker ();
624- mHistoMarkerMax ->attach ( mpPlot );
625- updateHistoMarkers ();
622+ // histo plot markers
623+ // memory leak?
624+ mHistoMarkerMin = new QwtPlotMarker ();
625+ mHistoMarkerMin ->attach ( mpPlot );
626+ mHistoMarkerMax = new QwtPlotMarker ();
627+ mHistoMarkerMax ->attach ( mpPlot );
628+ updateHistoMarkers ();
626629
627- // histo picker
628- if ( ! mHistoPicker )
629- {
630- mHistoPicker = new QwtPlotPicker ( mpPlot->canvas () );
631- // mHistoPicker->setTrackerMode( QwtPicker::ActiveOnly );
632- mHistoPicker ->setTrackerMode ( QwtPicker::AlwaysOff );
633- mHistoPicker ->setRubberBand ( QwtPicker::VLineRubberBand );
634- mHistoPicker ->setEnabled ( false );
630+ // histo picker
631+ if ( !mHistoPicker )
632+ {
633+ mHistoPicker = new QwtPlotPicker ( mpPlot->canvas () );
634+ // mHistoPicker->setTrackerMode( QwtPicker::ActiveOnly );
635+ mHistoPicker ->setTrackerMode ( QwtPicker::AlwaysOff );
636+ mHistoPicker ->setRubberBand ( QwtPicker::VLineRubberBand );
635637#if defined(QWT_VERSION) && QWT_VERSION>=0x060000
636- mHistoPicker ->setStateMachine ( new QwtPickerDragPointMachine );
637- connect ( mHistoPicker , SIGNAL ( selected ( const QPointF & ) ), this , SLOT ( histoPickerSelected ( const QPointF & ) ) );
638+ mHistoPicker ->setStateMachine ( new QwtPickerDragPointMachine );
639+ connect ( mHistoPicker , SIGNAL ( selected ( const QPointF & ) ), this , SLOT ( histoPickerSelected ( const QPointF & ) ) );
638640#else
639- mHistoPicker ->setSelectionFlags ( QwtPicker::PointSelection | QwtPicker::DragSelection );
640- connect ( mHistoPicker , SIGNAL ( selected ( const QwtDoublePoint & ) ), this , SLOT ( histoPickerSelectedQwt5 ( const QwtDoublePoint & ) ) );
641+ mHistoPicker ->setSelectionFlags ( QwtPicker::PointSelection | QwtPicker::DragSelection );
642+ connect ( mHistoPicker , SIGNAL ( selected ( const QwtDoublePoint & ) ), this , SLOT ( histoPickerSelectedQwt5 ( const QwtDoublePoint & ) ) );
641643#endif
642- }
644+ }
645+ mHistoPicker ->setEnabled ( false );
643646
644- // plot zoomer
645- if ( ! mHistoZoomer )
646- {
647- mHistoZoomer = new QwtPlotZoomer ( mpPlot->canvas () );
647+ // plot zoomer
648+ if ( !mHistoZoomer )
649+ {
650+ mHistoZoomer = new QwtPlotZoomer ( mpPlot->canvas () );
648651#if defined(QWT_VERSION) && QWT_VERSION>=0x060000
649- mHistoZoomer ->setStateMachine ( new QwtPickerDragRectMachine );
652+ mHistoZoomer ->setStateMachine ( new QwtPickerDragRectMachine );
650653#else
651- mHistoZoomer ->setSelectionFlags ( QwtPicker::RectSelection | QwtPicker::DragSelection );
654+ mHistoZoomer ->setSelectionFlags ( QwtPicker::RectSelection | QwtPicker::DragSelection );
652655#endif
653- mHistoZoomer ->setTrackerMode ( QwtPicker::AlwaysOff );
656+ mHistoZoomer ->setTrackerMode ( QwtPicker::AlwaysOff );
657+ }
654658 mHistoZoomer ->setEnabled ( true );
655659 }
660+ else
661+ {
662+ mpPlot->setDisabled ( true );
663+ if ( mHistoPicker )
664+ mHistoPicker ->setEnabled ( false );
665+ if ( mHistoZoomer )
666+ mHistoZoomer ->setEnabled ( false );
667+ }
656668
657669 disconnect ( mRasterLayer , SIGNAL ( progressUpdate ( int ) ), mHistogramProgress , SLOT ( setValue ( int ) ) );
658670 stackedWidget2->setCurrentIndex ( 0 );
0 commit comments