void QgsColorRampComboBox::populate( QgsStyleV2* style ) { if ( count() != 0 ) return; // already populated! mStyle = style; setIconSize( rampIconSize ); QStringList rampNames = mStyle->colorRampNames(); for ( QStringList::iterator it = rampNames.begin(); it != rampNames.end(); ++it ) { QgsVectorColorRampV2* ramp = style->colorRamp( *it ); if ( !mShowGradientOnly || ramp->type() == "gradient" ) { QIcon icon = QgsSymbolLayerV2Utils::colorRampPreviewIcon( ramp, rampIconSize ); addItem( icon, *it ); } delete ramp; } if ( !mShowGradientOnly ) addItem( tr( "Random colors" ) ); addItem( tr( "New color ramp..." ) ); connect( this, SIGNAL( activated( int ) ), SLOT( colorRampChanged( int ) ) ); }
void QgsColorRampComboBox::editSourceRamp() { QgsVectorColorRampV2* currentRamp = currentColorRamp(); if ( !currentRamp ) return; QScopedPointer<QgsVectorColorRampV2> newRamp( currentRamp->clone() ); if ( newRamp->type() == "gradient" ) { QgsVectorGradientColorRampV2* gradRamp = static_cast<QgsVectorGradientColorRampV2*>( newRamp.data() ); QgsVectorGradientColorRampV2Dialog dlg( gradRamp, this ); if ( dlg.exec() && gradRamp ) { setSourceColorRamp( gradRamp ); emit sourceRampEdited(); } } else if ( newRamp->type() == "random" ) { QgsVectorRandomColorRampV2* randRamp = static_cast<QgsVectorRandomColorRampV2*>( newRamp.data() ); QgsVectorRandomColorRampV2Dialog dlg( randRamp, this ); if ( dlg.exec() && randRamp ) { setSourceColorRamp( randRamp ); emit sourceRampEdited(); } } else if ( newRamp->type() == "colorbrewer" ) { QgsVectorColorBrewerColorRampV2* brewerRamp = static_cast<QgsVectorColorBrewerColorRampV2*>( newRamp.data() ); QgsVectorColorBrewerColorRampV2Dialog dlg( brewerRamp, this ); if ( dlg.exec() && brewerRamp ) { setSourceColorRamp( brewerRamp ); emit sourceRampEdited(); } } else if ( newRamp->type() == "cpt-city" ) { QgsCptCityColorRampV2* cptCityRamp = static_cast<QgsCptCityColorRampV2*>( newRamp.data() ); QgsCptCityColorRampV2Dialog dlg( cptCityRamp, this ); if ( dlg.exec() && cptCityRamp ) { setSourceColorRamp( cptCityRamp ); emit sourceRampEdited(); } } }
void QgsSingleBandPseudoColorRendererWidget::on_mColorRampComboBox_currentIndexChanged( int index ) { Q_UNUSED( index ); QSettings settings; settings.setValue( "/Raster/defaultPalette", mColorRampComboBox->currentText() ); QgsVectorColorRampV2* ramp = mColorRampComboBox->currentColorRamp(); if ( !ramp ) return; bool enableContinuous = ( ramp->count() > 0 ); mClassificationModeComboBox->setEnabled( enableContinuous ); if ( !enableContinuous ) { mClassificationModeComboBox->setCurrentIndex( mClassificationModeComboBox->findData( EqualInterval ) ); } }
void QgsCategorizedSymbolRendererV2Widget::addCategories() { QString attrName = cboCategorizedColumn->currentText(); int idx = mLayer->fieldNameIndex( attrName ); QList<QVariant> unique_vals; mLayer->uniqueValues( idx, unique_vals ); //DlgAddCategories dlg(mStyle, createDefaultSymbol(), unique_vals, this); //if (!dlg.exec()) // return; QgsVectorColorRampV2* ramp = cboCategorizedColorRamp->currentColorRamp(); if ( ramp == NULL ) { if ( cboCategorizedColorRamp->count() == 0 ) QMessageBox::critical( this, tr( "Error" ), tr( "There are no available color ramps. You can add them in Style Manager." ) ); else QMessageBox::critical( this, tr( "Error" ), tr( "The selected color ramp is not available." ) ); return; } QgsCategoryList cats; _createCategories( cats, unique_vals, mCategorizedSymbol, ramp ); bool deleteExisting = false; if ( !mOldClassificationAttribute.isEmpty() && attrName != mOldClassificationAttribute && mRenderer->categories().count() > 0 ) { int res = QMessageBox::question( this, tr( "Confirm Delete" ), tr( "The classification field was changed from '%1' to '%2'.\n" "Should the existing classes be deleted before classification?" ) .arg( mOldClassificationAttribute ).arg( attrName ), QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel ); if ( res == QMessageBox::Cancel ) { return; } deleteExisting = ( res == QMessageBox::Yes ); } if ( !deleteExisting ) { QgsCategoryList prevCats = mRenderer->categories(); for ( int i = 0; i < cats.size(); ++i ) { bool contains = false; QVariant value = cats.at( i ).value(); for ( int j = 0; j < prevCats.size() && !contains; ++j ) { if ( prevCats.at( j ).value() == value ) { contains = true; break; } } if ( !contains ) prevCats.append( cats.at( i ) ); } cats = prevCats; } mOldClassificationAttribute = attrName; // TODO: if not all categories are desired, delete some! /* if (not dlg.readAllCats.isChecked()) { cats2 = {} for item in dlg.listCategories.selectedItems(): for k,c in cats.iteritems(): if item.text() == k.toString(): break cats2[k] = c cats = cats2 } */ // recreate renderer delete mRenderer; mRenderer = new QgsCategorizedSymbolRendererV2( attrName, cats ); mRenderer->setSourceSymbol( mCategorizedSymbol->clone() ); mRenderer->setSourceColorRamp( ramp->clone() ); populateCategories(); }
bool QgsStyleV2ManagerDialog::editColorRamp() { QString name = currentItemName(); if ( name.isEmpty() ) return false; QgsVectorColorRampV2* ramp = mStyle->colorRamp( name ); if ( ramp->type() == "gradient" ) { QgsVectorGradientColorRampV2* gradRamp = static_cast<QgsVectorGradientColorRampV2*>( ramp ); QgsVectorGradientColorRampV2Dialog dlg( gradRamp, this ); if ( !dlg.exec() ) { delete ramp; return false; } } else if ( ramp->type() == "random" ) { QgsVectorRandomColorRampV2* randRamp = static_cast<QgsVectorRandomColorRampV2*>( ramp ); QgsVectorRandomColorRampV2Dialog dlg( randRamp, this ); if ( !dlg.exec() ) { delete ramp; return false; } } else if ( ramp->type() == "colorbrewer" ) { QgsVectorColorBrewerColorRampV2* brewerRamp = static_cast<QgsVectorColorBrewerColorRampV2*>( ramp ); QgsVectorColorBrewerColorRampV2Dialog dlg( brewerRamp, this ); if ( !dlg.exec() ) { delete ramp; return false; } } else if ( ramp->type() == "cpt-city" ) { QgsCptCityColorRampV2* cptCityRamp = static_cast<QgsCptCityColorRampV2*>( ramp ); QgsCptCityColorRampV2Dialog dlg( cptCityRamp, this ); if ( !dlg.exec() ) { delete ramp; return false; } if ( dlg.saveAsGradientRamp() ) { ramp = cptCityRamp->cloneGradientRamp(); delete cptCityRamp; } } else { Q_ASSERT( 0 && "invalid ramp type" ); } mStyle->addColorRamp( name, ramp, true ); mModified = true; return true; }
void QgsSingleBandPseudoColorRendererWidget::on_mClassifyButton_clicked() { int bandComboIndex = mBandComboBox->currentIndex(); if ( bandComboIndex == -1 || !mRasterLayer ) { return; } //int bandNr = mBandComboBox->itemData( bandComboIndex ).toInt(); //QgsRasterBandStats myRasterBandStats = mRasterLayer->dataProvider()->bandStatistics( bandNr ); int numberOfEntries = 0; QList<double> entryValues; QList<QColor> entryColors; double min = lineEditValue( mMinLineEdit ); double max = lineEditValue( mMaxLineEdit ); QgsVectorColorRampV2* colorRamp = mColorRampComboBox->currentColorRamp(); if ( mClassificationModeComboBox->itemData( mClassificationModeComboBox->currentIndex() ).toInt() == Continuous ) { if ( colorRamp ) { numberOfEntries = colorRamp->count(); entryValues.reserve( colorRamp->count() ); for ( int i = 0; i < colorRamp->count(); ++i ) { double value = colorRamp->value( i ); entryValues.push_back( min + value * ( max - min ) ); } } } else // EqualInterval { numberOfEntries = mNumberOfEntriesSpinBox->value(); //double currentValue = myRasterBandStats.minimumValue; double currentValue = min; double intervalDiff; if ( numberOfEntries > 1 ) { //because the highest value is also an entry, there are (numberOfEntries - 1) //intervals //intervalDiff = ( myRasterBandStats.maximumValue - myRasterBandStats.minimumValue ) / intervalDiff = ( max - min ) / ( numberOfEntries - 1 ); } else { //intervalDiff = myRasterBandStats.maximumValue - myRasterBandStats.minimumValue; intervalDiff = max - min; } entryValues.reserve( numberOfEntries ); for ( int i = 0; i < numberOfEntries; ++i ) { entryValues.push_back( currentValue ); currentValue += intervalDiff; } } #if 0 //hard code color range from blue -> red for now. Allow choice of ramps in future int colorDiff = 0; if ( numberOfEntries != 0 ) { colorDiff = ( int )( 255 / numberOfEntries ); } for ( int i = 0; i < numberOfEntries; ++i ) { QColor currentColor; currentColor.setRgb( colorDiff*i, 0, 255 - colorDiff * i ); entryColors.push_back( currentColor ); } #endif if ( ! colorRamp ) { //hard code color range from blue -> red (previous default) int colorDiff = 0; if ( numberOfEntries != 0 ) { colorDiff = ( int )( 255 / numberOfEntries ); } entryColors.reserve( numberOfEntries ); for ( int i = 0; i < numberOfEntries; ++i ) { QColor currentColor; int idx = mInvertCheckBox->isChecked() ? numberOfEntries - i - 1 : i; currentColor.setRgb( colorDiff*idx, 0, 255 - colorDiff * idx ); entryColors.push_back( currentColor ); } } else { entryColors.reserve( numberOfEntries ); for ( int i = 0; i < numberOfEntries; ++i ) { int idx = mInvertCheckBox->isChecked() ? numberOfEntries - i - 1 : i; entryColors.push_back( colorRamp->color((( double ) idx ) / ( numberOfEntries - 1 ) ) ); } } mColormapTreeWidget->clear(); QList<double>::const_iterator value_it = entryValues.begin(); QList<QColor>::const_iterator color_it = entryColors.begin(); for ( ; value_it != entryValues.end(); ++value_it, ++color_it ) { QTreeWidgetItem* newItem = new QTreeWidgetItem( mColormapTreeWidget ); newItem->setText( 0, QString::number( *value_it, 'f' ) ); newItem->setBackground( 1, QBrush( *color_it ) ); newItem->setText( 2, QString::number( *value_it, 'f' ) ); newItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable ); } }