QGIS API Documentation  master-6227475
src/gui/raster/qgspalettedrendererwidget.cpp
Go to the documentation of this file.
00001 /***************************************************************************
00002                          qgspalettedrendererwidget.cpp
00003                          -----------------------------
00004     begin                : February 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 "qgspalettedrendererwidget.h"
00019 #include "qgspalettedrasterrenderer.h"
00020 #include "qgsrasterlayer.h"
00021 #include <QColorDialog>
00022 
00023 QgsPalettedRendererWidget::QgsPalettedRendererWidget( QgsRasterLayer* layer, const QgsRectangle &extent ): QgsRasterRendererWidget( layer, extent )
00024 {
00025   setupUi( this );
00026 
00027   if ( mRasterLayer )
00028   {
00029     QgsRasterDataProvider* provider = mRasterLayer->dataProvider();
00030     if ( !provider )
00031     {
00032       return;
00033     }
00034 
00035     //fill available bands into combo box
00036     int nBands = provider->bandCount();
00037     for ( int i = 1; i <= nBands; ++i ) //band numbering seem to start at 1
00038     {
00039       mBandComboBox->addItem( displayBandName( i ), i );
00040     }
00041 
00042     setFromRenderer( mRasterLayer->renderer() );
00043   }
00044 }
00045 
00046 QgsPalettedRendererWidget::~QgsPalettedRendererWidget()
00047 {
00048 
00049 }
00050 
00051 QgsRasterRenderer* QgsPalettedRendererWidget::renderer()
00052 {
00053   int nColors = mTreeWidget->topLevelItemCount();
00054   QColor* colorArray = new QColor[nColors];
00055   for ( int i = 0; i < nColors; ++i )
00056   {
00057     colorArray[i] = mTreeWidget->topLevelItem( i )->background( 1 ).color();
00058   }
00059   int bandNumber = mBandComboBox->itemData( mBandComboBox->currentIndex() ).toInt();
00060   return new QgsPalettedRasterRenderer( mRasterLayer->dataProvider(), bandNumber, colorArray, nColors );
00061 }
00062 
00063 void QgsPalettedRendererWidget::on_mTreeWidget_itemDoubleClicked( QTreeWidgetItem * item, int column )
00064 {
00065   if ( column == 1 && item ) //change item color
00066   {
00067     QColor c = QColorDialog::getColor( item->background( column ).color() );
00068     if ( c.isValid() )
00069     {
00070       item->setBackground( column, QBrush( c ) );
00071     }
00072   }
00073 }
00074 
00075 void QgsPalettedRendererWidget::setFromRenderer( const QgsRasterRenderer* r )
00076 {
00077   const QgsPalettedRasterRenderer* pr = dynamic_cast<const QgsPalettedRasterRenderer*>( r );
00078   if ( pr )
00079   {
00080     //read values and colors and fill into tree widget
00081     int nColors = pr->nColors();
00082     QColor* colors = pr->colors();
00083     for ( int i = 0; i < nColors; ++i )
00084     {
00085       QTreeWidgetItem* item = new QTreeWidgetItem( mTreeWidget );
00086       item->setText( 0, QString::number( i ) );
00087       item->setBackground( 1, QBrush( colors[i] ) );
00088     }
00089     delete[] colors;
00090   }
00091   else
00092   {
00093     //read default palette settings from layer
00094     QgsRasterDataProvider *provider = mRasterLayer->dataProvider();
00095     if ( provider )
00096     {
00097       QList<QgsColorRampShader::ColorRampItem> itemList = provider->colorTable( mBandComboBox->itemData( mBandComboBox->currentIndex() ).toInt() );
00098       QList<QgsColorRampShader::ColorRampItem>::const_iterator itemIt = itemList.constBegin();
00099       int index = 0;
00100       for ( ; itemIt != itemList.constEnd(); ++itemIt )
00101       {
00102         QTreeWidgetItem* item = new QTreeWidgetItem( mTreeWidget );
00103         item->setText( 0, QString::number( index ) );
00104         item->setBackground( 1, QBrush( itemIt->color ) );
00105         ++index;
00106       }
00107     }
00108   }
00109 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines