|
Quantum GIS API Documentation
master-693a1fe
|
00001 /*************************************************************************** 00002 qgssinglebandgrayrendererwidget.h 00003 --------------------------------- 00004 begin : March 2012 00005 copyright : (C) 2012 by Marco Hugentobler 00006 email : marco at sourcepole dot ch 00007 ***************************************************************************/ 00008 00009 /*************************************************************************** 00010 * * 00011 * This program is free software; you can redistribute it and/or modify * 00012 * it under the terms of the GNU General Public License as published by * 00013 * the Free Software Foundation; either version 2 of the License, or * 00014 * (at your option) any later version. * 00015 * * 00016 ***************************************************************************/ 00017 00018 #include "qgssinglebandgrayrendererwidget.h" 00019 #include "qgssinglebandgrayrenderer.h" 00020 #include "qgsrasterlayer.h" 00021 00022 QgsSingleBandGrayRendererWidget::QgsSingleBandGrayRendererWidget( QgsRasterLayer* layer, const QgsRectangle &extent ): QgsRasterRendererWidget( layer, extent ) 00023 { 00024 setupUi( this ); 00025 00026 mGradientComboBox->insertItem( 0, tr( "Black to white" ), QgsSingleBandGrayRenderer::BlackToWhite ); 00027 mGradientComboBox->insertItem( 1, tr( "White to black" ), QgsSingleBandGrayRenderer::WhiteToBlack ); 00028 00029 mMinLineEdit->setValidator( new QDoubleValidator( mMinLineEdit ) ); 00030 mMaxLineEdit->setValidator( new QDoubleValidator( mMaxLineEdit ) ); 00031 00032 if ( mRasterLayer ) 00033 { 00034 QgsRasterDataProvider* provider = mRasterLayer->dataProvider(); 00035 if ( !provider ) 00036 { 00037 return; 00038 } 00039 00040 mMinMaxWidget = new QgsRasterMinMaxWidget( layer, this ); 00041 mMinMaxWidget->setExtent( extent ); 00042 00043 QHBoxLayout *layout = new QHBoxLayout(); 00044 layout->setContentsMargins( 0, 0, 0, 0 ); 00045 mMinMaxContainerWidget->setLayout( layout ); 00046 layout->addWidget( mMinMaxWidget ); 00047 00048 connect( mMinMaxWidget, SIGNAL( load( int, double, double, int ) ), 00049 this, SLOT( loadMinMax( int, double, double, int ) ) ); 00050 00051 //fill available bands into combo box 00052 int nBands = provider->bandCount(); 00053 for ( int i = 1; i <= nBands; ++i ) //band numbering seem to start at 1 00054 { 00055 mGrayBandComboBox->addItem( displayBandName( i ), i ); 00056 } 00057 00058 //contrast enhancement algorithms 00059 mContrastEnhancementComboBox->addItem( tr( "No enhancement" ), 0 ); 00060 mContrastEnhancementComboBox->addItem( tr( "Stretch to MinMax" ), 1 ); 00061 mContrastEnhancementComboBox->addItem( tr( "Stretch and clip to MinMax" ), 2 ); 00062 mContrastEnhancementComboBox->addItem( tr( "Clip to MinMax" ), 3 ); 00063 00064 setFromRenderer( layer->renderer() ); 00065 } 00066 } 00067 00068 QgsSingleBandGrayRendererWidget::~QgsSingleBandGrayRendererWidget() 00069 { 00070 } 00071 00072 QgsRasterRenderer* QgsSingleBandGrayRendererWidget::renderer() 00073 { 00074 if ( !mRasterLayer ) 00075 { 00076 return 0; 00077 } 00078 QgsRasterDataProvider* provider = mRasterLayer->dataProvider(); 00079 if ( !provider ) 00080 { 00081 return 0; 00082 } 00083 int band = mGrayBandComboBox->itemData( mGrayBandComboBox->currentIndex() ).toInt(); 00084 00085 QgsContrastEnhancement* e = new QgsContrastEnhancement(( QGis::DataType )( 00086 provider->dataType( band ) ) ); 00087 e->setMinimumValue( mMinLineEdit->text().toDouble() ); 00088 e->setMaximumValue( mMaxLineEdit->text().toDouble() ); 00089 e->setContrastEnhancementAlgorithm(( QgsContrastEnhancement::ContrastEnhancementAlgorithm )( mContrastEnhancementComboBox->itemData( 00090 mContrastEnhancementComboBox->currentIndex() ).toInt() ) ); 00091 00092 00093 QgsSingleBandGrayRenderer* renderer = new QgsSingleBandGrayRenderer( provider, band ); 00094 renderer->setContrastEnhancement( e ); 00095 00096 renderer->setGradient(( QgsSingleBandGrayRenderer::Gradient ) mGradientComboBox->itemData( mGradientComboBox->currentIndex() ).toInt() ); 00097 00098 return renderer; 00099 } 00100 00101 void QgsSingleBandGrayRendererWidget::loadMinMax( int theBandNo, double theMin, double theMax, int theOrigin ) 00102 { 00103 Q_UNUSED( theBandNo ); 00104 Q_UNUSED( theOrigin ); 00105 QgsDebugMsg( QString( "theBandNo = %1 theMin = %2 theMax = %3" ).arg( theBandNo ).arg( theMin ).arg( theMax ) ); 00106 00107 if ( qIsNaN( theMin ) ) 00108 { 00109 mMinLineEdit->clear(); 00110 } 00111 else 00112 { 00113 mMinLineEdit->setText( QString::number( theMin ) ); 00114 } 00115 00116 if ( qIsNaN( theMax ) ) 00117 { 00118 mMaxLineEdit->clear(); 00119 } 00120 else 00121 { 00122 mMaxLineEdit->setText( QString::number( theMax ) ); 00123 } 00124 } 00125 00126 void QgsSingleBandGrayRendererWidget::on_mGrayBandComboBox_currentIndexChanged( int index ) 00127 { 00128 QList<int> myBands; 00129 myBands.append( mGrayBandComboBox->itemData( index ).toInt() ); 00130 mMinMaxWidget->setBands( myBands ); 00131 } 00132 00133 void QgsSingleBandGrayRendererWidget::setFromRenderer( const QgsRasterRenderer* r ) 00134 { 00135 const QgsSingleBandGrayRenderer* gr = dynamic_cast<const QgsSingleBandGrayRenderer*>( r ); 00136 if ( gr ) 00137 { 00138 //band 00139 mGrayBandComboBox->setCurrentIndex( mGrayBandComboBox->findData( gr->grayBand() ) ); 00140 const QgsContrastEnhancement* ce = gr->contrastEnhancement(); 00141 00142 mGradientComboBox->setCurrentIndex( mGradientComboBox->findData( gr->gradient() ) ); 00143 //minmax 00144 mMinLineEdit->setText( QString::number( ce->minimumValue() ) ); 00145 mMaxLineEdit->setText( QString::number( ce->maximumValue() ) ); 00146 //contrast enhancement algorithm 00147 mContrastEnhancementComboBox->setCurrentIndex( 00148 mContrastEnhancementComboBox->findData(( int )( ce->contrastEnhancementAlgorithm() ) ) ); 00149 } 00150 }