QgsRasterHistogramWidget::QgsRasterHistogramWidget( QgsRasterLayer* lyr, QWidget *parent ) : QWidget( parent ), mRasterLayer( lyr ), mRendererWidget( 0 ) { setupUi( this ); mSaveAsImageButton->setIcon( QgsApplication::getThemeIcon( "/mActionFileSave.png" ) ); mRendererWidget = 0; mRendererName = "singlebandgray"; mHistoMin = 0; mHistoMax = 0; mHistoPicker = NULL; mHistoZoomer = NULL; mHistoMarkerMin = NULL; mHistoMarkerMax = NULL; QSettings settings; mHistoShowMarkers = settings.value( "/Raster/histogram/showMarkers", false ).toBool(); // mHistoLoadApplyAll = settings.value( "/Raster/histogram/loadApplyAll", false ).toBool(); mHistoZoomToMinMax = settings.value( "/Raster/histogram/zoomToMinMax", false ).toBool(); mHistoUpdateStyleToMinMax = settings.value( "/Raster/histogram/updateStyleToMinMax", true ).toBool(); // mHistoShowBands = (HistoShowBands) settings.value( "/Raster/histogram/showBands", (int) ShowAll ).toInt(); mHistoShowBands = ShowAll; if ( true ) { //band selector int myBandCountInt = mRasterLayer->bandCount(); for ( int myIteratorInt = 1; myIteratorInt <= myBandCountInt; ++myIteratorInt ) { cboHistoBand->addItem( mRasterLayer->bandName( myIteratorInt ) ); } // histo min/max selectors leHistoMin->setValidator( new QDoubleValidator( this ) ); leHistoMax->setValidator( new QDoubleValidator( this ) ); // this might generate many refresh events! test.. // connect( leHistoMin, SIGNAL( textChanged( const QString & ) ), this, SLOT( updateHistoMarkers() ) ); // connect( leHistoMax, SIGNAL( textChanged( const QString & ) ), this, SLOT( updateHistoMarkers() ) ); // connect( leHistoMin, SIGNAL( textChanged( const QString & ) ), this, SLOT( applyHistoMin() ) ); // connect( leHistoMax, SIGNAL( textChanged( const QString & ) ), this, SLOT( applyHistoMax() ) ); connect( leHistoMin, SIGNAL( editingFinished() ), this, SLOT( applyHistoMin() ) ); connect( leHistoMax, SIGNAL( editingFinished() ), this, SLOT( applyHistoMax() ) ); // histo actions QMenu* menu = new QMenu( this ); menu->setSeparatorsCollapsible( false ); btnHistoActions->setMenu( menu ); QActionGroup* group; QAction* action; // min/max options group = new QActionGroup( this ); group->setExclusive( false ); connect( group, SIGNAL( triggered( QAction* ) ), this, SLOT( histoActionTriggered( QAction* ) ) ); action = new QAction( tr( "Min/Max options" ), group ); action->setSeparator( true ); menu->addAction( action ); action = new QAction( tr( "Always show min/max markers" ), group ); action->setData( QVariant( "Show markers" ) ); action->setCheckable( true ); action->setChecked( mHistoShowMarkers ); menu->addAction( action ); action = new QAction( tr( "Zoom to min/max" ), group ); action->setData( QVariant( "Zoom min_max" ) ); action->setCheckable( true ); action->setChecked( mHistoZoomToMinMax ); menu->addAction( action ); action = new QAction( tr( "Update style to min/max" ), group ); action->setData( QVariant( "Update min_max" ) ); action->setCheckable( true ); action->setChecked( mHistoUpdateStyleToMinMax ); menu->addAction( action ); // visibility options group = new QActionGroup( this ); group->setExclusive( false ); connect( group, SIGNAL( triggered( QAction* ) ), this, SLOT( histoActionTriggered( QAction* ) ) ); action = new QAction( tr( "Visibility" ), group ); action->setSeparator( true ); menu->addAction( action ); group = new QActionGroup( this ); group->setExclusive( true ); // these options are exclusive connect( group, SIGNAL( triggered( QAction* ) ), this, SLOT( histoActionTriggered( QAction* ) ) ); action = new QAction( tr( "Show all bands" ), group ); action->setData( QVariant( "Show all" ) ); action->setCheckable( true ); action->setChecked( mHistoShowBands == ShowAll ); menu->addAction( action ); action = new QAction( tr( "Show RGB/Gray band(s)" ), group ); action->setData( QVariant( "Show RGB" ) ); action->setCheckable( true ); action->setChecked( mHistoShowBands == ShowRGB ); menu->addAction( action ); action = new QAction( tr( "Show selected band" ), group ); action->setData( QVariant( "Show selected" ) ); action->setCheckable( true ); action->setChecked( mHistoShowBands == ShowSelected ); menu->addAction( action ); // actions action = new QAction( tr( "Actions" ), group ); action->setSeparator( true ); menu->addAction( action ); // load actions group = new QActionGroup( this ); group->setExclusive( false ); connect( group, SIGNAL( triggered( QAction* ) ), this, SLOT( histoActionTriggered( QAction* ) ) ); action = new QAction( tr( "Reset" ), group ); action->setData( QVariant( "Load reset" ) ); menu->addAction( action ); // these actions have been disabled for api cleanup, restore them eventually #if 0 // Load min/max needs 3 params (method, extent, accuracy), cannot put it in single item action = new QAction( tr( "Load min/max" ), group ); action->setSeparator( true ); menu->addAction( action ); action = new QAction( tr( "Estimate (faster)" ), group ); action->setData( QVariant( "Load estimate" ) ); menu->addAction( action ); action = new QAction( tr( "Actual (slower)" ), group ); action->setData( QVariant( "Load actual" ) ); menu->addAction( action ); action = new QAction( tr( "Current extent" ), group ); action->setData( QVariant( "Load extent" ) ); menu->addAction( action ); action = new QAction( tr( "Use stddev (1.0)" ), group ); action->setData( QVariant( "Load 1 stddev" ) ); menu->addAction( action ); action = new QAction( tr( "Use stddev (custom)" ), group ); action->setData( QVariant( "Load stddev" ) ); menu->addAction( action ); action = new QAction( tr( "Load for each band" ), group ); action->setData( QVariant( "Load apply all" ) ); action->setCheckable( true ); action->setChecked( mHistoLoadApplyAll ); menu->addAction( action ); #endif //others action = new QAction( tr( "Recompute Histogram" ), group ); action->setData( QVariant( "Compute histogram" ) ); menu->addAction( action ); }
QgsRasterHistogramWidget::QgsRasterHistogramWidget( QgsRasterLayer* lyr, QWidget *parent ) : QgsMapLayerConfigWidget( lyr, nullptr, parent ) , mRasterLayer( lyr ) , mRendererWidget( nullptr ) { setupUi( this ); mSaveAsImageButton->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionFileSave.svg" ) ) ); mRendererWidget = nullptr; mRendererName = QStringLiteral( "singlebandgray" ); mHistoMin = 0; mHistoMax = 0; mHistoPicker = nullptr; mHistoZoomer = nullptr; mHistoMarkerMin = nullptr; mHistoMarkerMax = nullptr; QSettings settings; mHistoShowMarkers = settings.value( QStringLiteral( "/Raster/histogram/showMarkers" ), false ).toBool(); // mHistoLoadApplyAll = settings.value( "/Raster/histogram/loadApplyAll", false ).toBool(); mHistoZoomToMinMax = settings.value( QStringLiteral( "/Raster/histogram/zoomToMinMax" ), false ).toBool(); mHistoUpdateStyleToMinMax = settings.value( QStringLiteral( "/Raster/histogram/updateStyleToMinMax" ), true ).toBool(); mHistoDrawLines = settings.value( QStringLiteral( "/Raster/histogram/drawLines" ), true ).toBool(); // mHistoShowBands = (HistoShowBands) settings.value( "/Raster/histogram/showBands", (int) ShowAll ).toInt(); mHistoShowBands = ShowAll; bool isInt = true; if ( true ) { //band selector int myBandCountInt = mRasterLayer->bandCount(); for ( int myIteratorInt = 1; myIteratorInt <= myBandCountInt; ++myIteratorInt ) { cboHistoBand->addItem( mRasterLayer->bandName( myIteratorInt ) ); Qgis::DataType mySrcDataType = mRasterLayer->dataProvider()->sourceDataType( myIteratorInt ); if ( !( mySrcDataType == Qgis::Byte || mySrcDataType == Qgis::Int16 || mySrcDataType == Qgis::Int32 || mySrcDataType == Qgis::UInt16 || mySrcDataType == Qgis::UInt32 ) ) isInt = false; } // histo min/max selectors leHistoMin->setValidator( new QDoubleValidator( this ) ); leHistoMax->setValidator( new QDoubleValidator( this ) ); // this might generate many refresh events! test.. // connect( leHistoMin, SIGNAL( textChanged( const QString & ) ), this, SLOT( updateHistoMarkers() ) ); // connect( leHistoMax, SIGNAL( textChanged( const QString & ) ), this, SLOT( updateHistoMarkers() ) ); // connect( leHistoMin, SIGNAL( textChanged( const QString & ) ), this, SLOT( applyHistoMin() ) ); // connect( leHistoMax, SIGNAL( textChanged( const QString & ) ), this, SLOT( applyHistoMax() ) ); connect( leHistoMin, SIGNAL( editingFinished() ), this, SLOT( applyHistoMin() ) ); connect( leHistoMax, SIGNAL( editingFinished() ), this, SLOT( applyHistoMax() ) ); // histo actions // TODO move/add options to qgis options dialog QMenu* menu = new QMenu( this ); menu->setSeparatorsCollapsible( false ); btnHistoActions->setMenu( menu ); QActionGroup* group; QAction* action; // min/max options group = new QActionGroup( this ); group->setExclusive( false ); connect( group, SIGNAL( triggered( QAction* ) ), this, SLOT( histoActionTriggered( QAction* ) ) ); action = new QAction( tr( "Min/Max options" ), group ); action->setSeparator( true ); menu->addAction( action ); action = new QAction( tr( "Always show min/max markers" ), group ); action->setData( QVariant( "Show markers" ) ); action->setCheckable( true ); action->setChecked( mHistoShowMarkers ); menu->addAction( action ); action = new QAction( tr( "Zoom to min/max" ), group ); action->setData( QVariant( "Zoom min_max" ) ); action->setCheckable( true ); action->setChecked( mHistoZoomToMinMax ); menu->addAction( action ); action = new QAction( tr( "Update style to min/max" ), group ); action->setData( QVariant( "Update min_max" ) ); action->setCheckable( true ); action->setChecked( mHistoUpdateStyleToMinMax ); menu->addAction( action ); // visibility options group = new QActionGroup( this ); group->setExclusive( false ); connect( group, SIGNAL( triggered( QAction* ) ), this, SLOT( histoActionTriggered( QAction* ) ) ); action = new QAction( tr( "Visibility" ), group ); action->setSeparator( true ); menu->addAction( action ); group = new QActionGroup( this ); group->setExclusive( true ); // these options are exclusive connect( group, SIGNAL( triggered( QAction* ) ), this, SLOT( histoActionTriggered( QAction* ) ) ); action = new QAction( tr( "Show all bands" ), group ); action->setData( QVariant( "Show all" ) ); action->setCheckable( true ); action->setChecked( mHistoShowBands == ShowAll ); menu->addAction( action ); action = new QAction( tr( "Show RGB/Gray band(s)" ), group ); action->setData( QVariant( "Show RGB" ) ); action->setCheckable( true ); action->setChecked( mHistoShowBands == ShowRGB ); menu->addAction( action ); action = new QAction( tr( "Show selected band" ), group ); action->setData( QVariant( "Show selected" ) ); action->setCheckable( true ); action->setChecked( mHistoShowBands == ShowSelected ); menu->addAction( action ); // display options group = new QActionGroup( this ); group->setExclusive( false ); connect( group, SIGNAL( triggered( QAction* ) ), this, SLOT( histoActionTriggered( QAction* ) ) ); action = new QAction( tr( "Display" ), group ); action->setSeparator( true ); menu->addAction( action ); // should we plot as histogram instead of line plot? (int data only) action = new QAction( QLatin1String( "" ), group ); action->setData( QVariant( "Draw lines" ) ); if ( isInt ) { action->setText( tr( "Draw as lines" ) ); action->setCheckable( true ); action->setChecked( mHistoDrawLines ); } else { action->setText( tr( "Draw as lines (only int layers)" ) ); action->setEnabled( false ); } menu->addAction( action ); // actions action = new QAction( tr( "Actions" ), group ); action->setSeparator( true ); menu->addAction( action ); // load actions group = new QActionGroup( this ); group->setExclusive( false ); connect( group, SIGNAL( triggered( QAction* ) ), this, SLOT( histoActionTriggered( QAction* ) ) ); action = new QAction( tr( "Reset" ), group ); action->setData( QVariant( "Load reset" ) ); menu->addAction( action ); // these actions have been disabled for api cleanup, restore them eventually // TODO restore these in qgis 2.4 #if 0 // Load min/max needs 3 params (method, extent, accuracy), cannot put it in single item action = new QAction( tr( "Load min/max" ), group ); action->setSeparator( true ); menu->addAction( action ); action = new QAction( tr( "Estimate (faster)" ), group ); action->setData( QVariant( "Load estimate" ) ); menu->addAction( action ); action = new QAction( tr( "Actual (slower)" ), group ); action->setData( QVariant( "Load actual" ) ); menu->addAction( action ); action = new QAction( tr( "Current extent" ), group ); action->setData( QVariant( "Load extent" ) ); menu->addAction( action ); action = new QAction( tr( "Use stddev (1.0)" ), group ); action->setData( QVariant( "Load 1 stddev" ) ); menu->addAction( action ); action = new QAction( tr( "Use stddev (custom)" ), group ); action->setData( QVariant( "Load stddev" ) ); menu->addAction( action ); action = new QAction( tr( "Load for each band" ), group ); action->setData( QVariant( "Load apply all" ) ); action->setCheckable( true ); action->setChecked( mHistoLoadApplyAll ); menu->addAction( action ); #endif //others action = new QAction( tr( "Recompute Histogram" ), group ); action->setData( QVariant( "Compute histogram" ) ); menu->addAction( action ); }