void QgsPalettedRendererWidget::loadFromLayer() { //read default palette settings from layer QgsRasterDataProvider *provider = mRasterLayer->dataProvider(); if ( provider ) { QList<QgsColorRampShader::ColorRampItem> table = provider->colorTable( mBandComboBox->currentBand() ); if ( !table.isEmpty() ) { QgsPalettedRasterRenderer::ClassData classes = QgsPalettedRasterRenderer::colorTableToClassData( provider->colorTable( mBandComboBox->currentBand() ) ); mModel->setClassData( classes ); emit widgetChanged(); } } }
void QgsPalettedRendererWidget::setFromRenderer( const QgsRasterRenderer* r ) { const QgsPalettedRasterRenderer* pr = dynamic_cast<const QgsPalettedRasterRenderer*>( r ); if ( pr ) { //read values and colors and fill into tree widget int nColors = pr->nColors(); QColor* colors = pr->colors(); for ( int i = 0; i < nColors; ++i ) { QTreeWidgetItem* item = new QTreeWidgetItem( mTreeWidget ); item->setText( 0, QString::number( i ) ); item->setBackground( 1, QBrush( colors[i] ) ); item->setText( 2, pr->label( i ) ); } delete[] colors; } else { //read default palette settings from layer QgsRasterDataProvider *provider = mRasterLayer->dataProvider(); if ( provider ) { QList<QgsColorRampShader::ColorRampItem> itemList = provider->colorTable( mBandComboBox->itemData( mBandComboBox->currentIndex() ).toInt() ); QList<QgsColorRampShader::ColorRampItem>::const_iterator itemIt = itemList.constBegin(); int index = 0; for ( ; itemIt != itemList.constEnd(); ++itemIt ) { QTreeWidgetItem* item = new QTreeWidgetItem( mTreeWidget ); item->setText( 0, QString::number( index ) ); item->setBackground( 1, QBrush( itemIt->color ) ); item->setText( 2, itemIt->label ); ++index; } } } }
QgsPalettedRendererWidget::QgsPalettedRendererWidget( QgsRasterLayer *layer, const QgsRectangle &extent ): QgsRasterRendererWidget( layer, extent ) { setupUi( this ); mCalculatingProgressBar->hide(); mCancelButton->hide(); mContextMenu = new QMenu( tr( "Options" ), this ); mContextMenu->addAction( tr( "Change Color…" ), this, SLOT( changeColor() ) ); mContextMenu->addAction( tr( "Change Opacity…" ), this, SLOT( changeOpacity() ) ); mContextMenu->addAction( tr( "Change Label…" ), this, SLOT( changeLabel() ) ); mAdvancedMenu = new QMenu( tr( "Advanced Options" ), this ); QAction *mLoadFromLayerAction = mAdvancedMenu->addAction( tr( "Load Classes from Layer" ) ); connect( mLoadFromLayerAction, &QAction::triggered, this, &QgsPalettedRendererWidget::loadFromLayer ); QAction *loadFromFile = mAdvancedMenu->addAction( tr( "Load Color Map from File…" ) ); connect( loadFromFile, &QAction::triggered, this, &QgsPalettedRendererWidget::loadColorTable ); QAction *exportToFile = mAdvancedMenu->addAction( tr( "Export Color Map to File…" ) ); connect( exportToFile, &QAction::triggered, this, &QgsPalettedRendererWidget::saveColorTable ); mButtonAdvanced->setMenu( mAdvancedMenu ); mModel = new QgsPalettedRendererModel( this ); mTreeView->setSortingEnabled( false ); mTreeView->setModel( mModel ); #ifdef ENABLE_MODELTEST new ModelTest( mModel, this ); #endif mSwatchDelegate = new QgsColorSwatchDelegate( this ); mTreeView->setItemDelegateForColumn( QgsPalettedRendererModel::ColorColumn, mSwatchDelegate ); mTreeView->setColumnWidth( QgsPalettedRendererModel::ColorColumn, Qgis::UI_SCALE_FACTOR * fontMetrics().width( 'X' ) * 6.6 ); mTreeView->setContextMenuPolicy( Qt::CustomContextMenu ); mTreeView->setSelectionMode( QAbstractItemView::ExtendedSelection ); mTreeView->setDragEnabled( true ); mTreeView->setAcceptDrops( true ); mTreeView->setDropIndicatorShown( true ); mTreeView->setDragDropMode( QAbstractItemView::InternalMove ); mTreeView->setSelectionBehavior( QAbstractItemView::SelectRows ); mTreeView->setDefaultDropAction( Qt::MoveAction ); connect( mTreeView, &QTreeView::customContextMenuRequested, this, [ = ]( QPoint ) { mContextMenu->exec( QCursor::pos() ); } ); btnColorRamp->setShowRandomColorRamp( true ); connect( btnColorRamp, &QgsColorRampButton::colorRampChanged, this, &QgsPalettedRendererWidget::applyColorRamp ); mBandComboBox->setLayer( mRasterLayer ); if ( mRasterLayer ) { QgsRasterDataProvider *provider = mRasterLayer->dataProvider(); if ( !provider ) { return; } setFromRenderer( mRasterLayer->renderer() ); } connect( mBandComboBox, &QgsRasterBandComboBox::bandChanged, this, &QgsRasterRendererWidget::widgetChanged ); connect( mModel, &QgsPalettedRendererModel::classesChanged, this, &QgsPalettedRendererWidget::widgetChanged ); connect( mDeleteEntryButton, &QPushButton::clicked, this, &QgsPalettedRendererWidget::deleteEntry ); connect( mButtonDeleteAll, &QPushButton::clicked, mModel, &QgsPalettedRendererModel::deleteAll ); connect( mAddEntryButton, &QPushButton::clicked, this, &QgsPalettedRendererWidget::addEntry ); connect( mClassifyButton, &QPushButton::clicked, this, &QgsPalettedRendererWidget::classify ); QgsRasterDataProvider *provider = mRasterLayer->dataProvider(); if ( provider ) { mLoadFromLayerAction->setEnabled( !provider->colorTable( mBandComboBox->currentBand() ).isEmpty() ); } else { mLoadFromLayerAction->setEnabled( false ); } connect( QgsProject::instance(), static_cast < void ( QgsProject::* )( QgsMapLayer * ) >( &QgsProject::layerWillBeRemoved ), this, &QgsPalettedRendererWidget::layerWillBeRemoved ); connect( mBandComboBox, &QgsRasterBandComboBox::bandChanged, this, &QgsPalettedRendererWidget::bandChanged ); }