From b4d7a30d4474c07c520f0a3ad2fe1f44bf20d26f Mon Sep 17 00:00:00 2001 From: Marco Hugentobler Date: Sat, 14 Apr 2012 15:20:27 +0200 Subject: [PATCH] Add code for add/delete/sort buttons in singleband pseudocolor widget --- ...qgssinglebandpseudocolorrendererwidget.cpp | 70 +++++++++++++++++++ .../qgssinglebandpseudocolorrendererwidget.h | 3 + 2 files changed, 73 insertions(+) diff --git a/src/gui/raster/qgssinglebandpseudocolorrendererwidget.cpp b/src/gui/raster/qgssinglebandpseudocolorrendererwidget.cpp index d09282aa6bce..562aa47cf2bb 100644 --- a/src/gui/raster/qgssinglebandpseudocolorrendererwidget.cpp +++ b/src/gui/raster/qgssinglebandpseudocolorrendererwidget.cpp @@ -138,6 +138,76 @@ QgsRasterRenderer* QgsSingleBandPseudoColorRendererWidget::renderer() return new QgsSingleBandPseudoColorRenderer( mRasterLayer->dataProvider(), bandNumber, rasterShader ); } +void QgsSingleBandPseudoColorRendererWidget::on_mAddEntryButton_clicked() +{ + QTreeWidgetItem* newItem = new QTreeWidgetItem( mColormapTreeWidget ); + newItem->setText( 0, "0.0" ); + newItem->setBackground( 1, QBrush( QColor( Qt::magenta ) ) ); + newItem->setText( 2, tr( "Custom color map entry" ) ); +} + +void QgsSingleBandPseudoColorRendererWidget::on_mDeleteEntryButton_clicked() +{ + QTreeWidgetItem* currentItem = mColormapTreeWidget->currentItem(); + if ( currentItem ) + { + delete currentItem; + } +} + +void QgsSingleBandPseudoColorRendererWidget::on_mSortButton_clicked() +{ + bool inserted = false; + int myCurrentIndex = 0; + int myTopLevelItemCount = mColormapTreeWidget->topLevelItemCount(); + QTreeWidgetItem* myCurrentItem; + QList myColorRampItems; + for ( int i = 0; i < myTopLevelItemCount; ++i ) + { + myCurrentItem = mColormapTreeWidget->topLevelItem( i ); + //If the item is null or does not have a pixel values set, skip + if ( !myCurrentItem || myCurrentItem->text( 0 ) == "" ) + { + continue; + } + + //Create a copy of the new Color ramp Item + QgsColorRampShader::ColorRampItem myNewColorRampItem; + myNewColorRampItem.value = myCurrentItem->text( 0 ).toDouble(); + myNewColorRampItem.color = myCurrentItem->background( 1 ).color(); + myNewColorRampItem.label = myCurrentItem->text( 2 ); + + //Simple insertion sort - speed is not a huge factor here + inserted = false; + myCurrentIndex = 0; + while ( !inserted ) + { + if ( 0 == myColorRampItems.size() || myCurrentIndex == myColorRampItems.size() ) + { + myColorRampItems.push_back( myNewColorRampItem ); + inserted = true; + } + else if ( myColorRampItems[myCurrentIndex].value > myNewColorRampItem.value ) + { + myColorRampItems.insert( myCurrentIndex, myNewColorRampItem ); + inserted = true; + } + else if ( myColorRampItems[myCurrentIndex].value <= myNewColorRampItem.value && myCurrentIndex == myColorRampItems.size() - 1 ) + { + myColorRampItems.push_back( myNewColorRampItem ); + inserted = true; + } + else if ( myColorRampItems[myCurrentIndex].value <= myNewColorRampItem.value && myColorRampItems[myCurrentIndex+1].value > myNewColorRampItem.value ) + { + myColorRampItems.insert( myCurrentIndex + 1, myNewColorRampItem ); + inserted = true; + } + myCurrentIndex++; + } + } + populateColormapTreeWidget( myColorRampItems ); +} + void QgsSingleBandPseudoColorRendererWidget::on_mClassifyButton_clicked() { int bandComboIndex = mBandComboBox->currentIndex(); diff --git a/src/gui/raster/qgssinglebandpseudocolorrendererwidget.h b/src/gui/raster/qgssinglebandpseudocolorrendererwidget.h index 4cbc2ff2324e..202d5e9aff06 100644 --- a/src/gui/raster/qgssinglebandpseudocolorrendererwidget.h +++ b/src/gui/raster/qgssinglebandpseudocolorrendererwidget.h @@ -37,6 +37,9 @@ class QgsSingleBandPseudoColorRendererWidget: public QgsRasterRendererWidget, void populateColormapTreeWidget( const QList& colorRampItems ); private slots: + void on_mAddEntryButton_clicked(); + void on_mDeleteEntryButton_clicked(); + void on_mSortButton_clicked(); void on_mClassifyButton_clicked(); void on_mLoadFromBandButton_clicked(); void on_mLoadFromFileButton_clicked();