Quantum GIS API Documentation  master-693a1fe
src/gui/raster/qgssinglebandgrayrendererwidget.cpp
Go to the documentation of this file.
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 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines