|
Quantum GIS API Documentation
master-693a1fe
|
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 }