void QgsGraduatedSymbolRendererV2Widget::classifyGraduated() { QString attrName = mExpressionWidget->currentField(); int classes = spinGraduatedClasses->value(); QgsVectorColorRampV2* ramp = cboGraduatedColorRamp->currentColorRamp(); if ( ramp == NULL ) { if ( cboGraduatedColorRamp->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; } QgsGraduatedSymbolRendererV2::Mode mode; if ( cboGraduatedMode->currentIndex() == 0 ) mode = QgsGraduatedSymbolRendererV2::EqualInterval; else if ( cboGraduatedMode->currentIndex() == 2 ) mode = QgsGraduatedSymbolRendererV2::Jenks; else if ( cboGraduatedMode->currentIndex() == 3 ) mode = QgsGraduatedSymbolRendererV2::StdDev; else if ( cboGraduatedMode->currentIndex() == 4 ) mode = QgsGraduatedSymbolRendererV2::Pretty; else // default should be quantile for now mode = QgsGraduatedSymbolRendererV2::Quantile; // Jenks is n^2 complexity, warn for big dataset (more than 50k records) // and give the user the chance to cancel if ( QgsGraduatedSymbolRendererV2::Jenks == mode && mLayer->featureCount() > 50000 ) { if ( QMessageBox::Cancel == QMessageBox::question( this, tr( "Warning" ), tr( "Natural break classification (Jenks) is O(n2) complexity, your classification may take a long time.\nPress cancel to abort breaks calculation or OK to continue." ), QMessageBox::Cancel, QMessageBox::Ok ) ) return; } // create and set new renderer QApplication::setOverrideCursor( Qt::WaitCursor ); QgsGraduatedSymbolRendererV2* r = QgsGraduatedSymbolRendererV2::createRenderer( mLayer, attrName, classes, mode, mGraduatedSymbol, ramp, cbxInvertedColorRamp->isChecked() ); QApplication::restoreOverrideCursor(); if ( !r ) { QMessageBox::critical( this, tr( "Error" ), tr( "Renderer creation has failed." ) ); return; } r->setSizeScaleField( mRenderer->sizeScaleField() ); r->setRotationField( mRenderer->rotationField() ); r->setScaleMethod( mRenderer->scaleMethod() ); if ( mModel ) { mModel->setRenderer( r ); } delete mRenderer; mRenderer = r; }
QgsFeatureRendererV2* QgsGraduatedSymbolRendererV2::clone() { QgsGraduatedSymbolRendererV2* r = new QgsGraduatedSymbolRendererV2( mAttrName, mRanges ); r->setMode( mMode ); if ( mSourceSymbol ) r->setSourceSymbol( mSourceSymbol->clone() ); if ( mSourceColorRamp ) r->setSourceColorRamp( mSourceColorRamp->clone() ); r->setUsingSymbolLevels( usingSymbolLevels() ); r->setRotationField( rotationField() ); r->setSizeScaleField( sizeScaleField() ); return r; }
void QgsGraduatedSymbolRendererV2Widget::classifyGraduated() { QString attrName = cboGraduatedColumn->currentText(); int classes = spinGraduatedClasses->value(); QgsVectorColorRampV2* ramp = cboGraduatedColorRamp->currentColorRamp(); if ( ramp == NULL ) { if ( cboGraduatedColorRamp->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; } QgsGraduatedSymbolRendererV2::Mode mode; if ( cboGraduatedMode->currentIndex() == 0 ) mode = QgsGraduatedSymbolRendererV2::EqualInterval; else if ( cboGraduatedMode->currentIndex() == 2 ) mode = QgsGraduatedSymbolRendererV2::Jenks; else if ( cboGraduatedMode->currentIndex() == 3 ) mode = QgsGraduatedSymbolRendererV2::StdDev; else if ( cboGraduatedMode->currentIndex() == 4 ) mode = QgsGraduatedSymbolRendererV2::Pretty; else // default should be quantile for now mode = QgsGraduatedSymbolRendererV2::Quantile; // create and set new renderer QApplication::setOverrideCursor( Qt::WaitCursor ); QgsGraduatedSymbolRendererV2* r = QgsGraduatedSymbolRendererV2::createRenderer( mLayer, attrName, classes, mode, mGraduatedSymbol, ramp ); QApplication::restoreOverrideCursor(); if ( !r ) { QMessageBox::critical( this, tr( "Error" ), tr( "Renderer creation has failed." ) ); return; } r->setSizeScaleField( mRenderer->sizeScaleField() ); r->setRotationField( mRenderer->rotationField() ); r->setScaleMethod( mRenderer->scaleMethod() ); delete mRenderer; mRenderer = r; populateRanges(); }
QgsFeatureRendererV2* QgsGraduatedSymbolRendererV2::clone() const { QgsGraduatedSymbolRendererV2* r = new QgsGraduatedSymbolRendererV2( mAttrName, mRanges ); r->setMode( mMode ); if ( mSourceSymbol.data() ) r->setSourceSymbol( mSourceSymbol->clone() ); if ( mSourceColorRamp.data() ) { r->setSourceColorRamp( mSourceColorRamp->clone() ); r->setInvertedColorRamp( mInvertedColorRamp ); } r->setUsingSymbolLevels( usingSymbolLevels() ); r->setRotationField( rotationField() ); r->setSizeScaleField( sizeScaleField() ); r->setScaleMethod( scaleMethod() ); r->setLabelFormat( labelFormat() ); return r; }
QgsFeatureRendererV2* QgsGraduatedSymbolRendererV2::create( QDomElement& element ) { QDomElement symbolsElem = element.firstChildElement( "symbols" ); if ( symbolsElem.isNull() ) return NULL; QDomElement rangesElem = element.firstChildElement( "ranges" ); if ( rangesElem.isNull() ) return NULL; QgsSymbolV2Map symbolMap = QgsSymbolLayerV2Utils::loadSymbols( symbolsElem ); QgsRangeList ranges; QDomElement rangeElem = rangesElem.firstChildElement(); while ( !rangeElem.isNull() ) { if ( rangeElem.tagName() == "range" ) { double lowerValue = rangeElem.attribute( "lower" ).toDouble(); double upperValue = rangeElem.attribute( "upper" ).toDouble(); QString symbolName = rangeElem.attribute( "symbol" ); QString label = rangeElem.attribute( "label" ); if ( symbolMap.contains( symbolName ) ) { QgsSymbolV2* symbol = symbolMap.take( symbolName ); ranges.append( QgsRendererRangeV2( lowerValue, upperValue, symbol, label ) ); } } rangeElem = rangeElem.nextSiblingElement(); } QString attrName = element.attribute( "attr" ); QgsGraduatedSymbolRendererV2* r = new QgsGraduatedSymbolRendererV2( attrName, ranges ); // delete symbols if there are any more QgsSymbolLayerV2Utils::clearSymbolMap( symbolMap ); // try to load source symbol (optional) QDomElement sourceSymbolElem = element.firstChildElement( "source-symbol" ); if ( !sourceSymbolElem.isNull() ) { QgsSymbolV2Map sourceSymbolMap = QgsSymbolLayerV2Utils::loadSymbols( sourceSymbolElem ); if ( sourceSymbolMap.contains( "0" ) ) { r->setSourceSymbol( sourceSymbolMap.take( "0" ) ); } QgsSymbolLayerV2Utils::clearSymbolMap( sourceSymbolMap ); } // try to load color ramp (optional) QDomElement sourceColorRampElem = element.firstChildElement( "colorramp" ); if ( !sourceColorRampElem.isNull() && sourceColorRampElem.attribute( "name" ) == "[source]" ) { r->setSourceColorRamp( QgsSymbolLayerV2Utils::loadColorRamp( sourceColorRampElem ) ); QDomElement invertedColorRampElem = element.firstChildElement( "invertedcolorramp" ); if ( !invertedColorRampElem.isNull() ) r->setInvertedColorRamp( invertedColorRampElem.attribute( "value" ) == "1" ); } // try to load mode QDomElement modeElem = element.firstChildElement( "mode" ); if ( !modeElem.isNull() ) { QString modeString = modeElem.attribute( "name" ); if ( modeString == "equal" ) r->setMode( EqualInterval ); else if ( modeString == "quantile" ) r->setMode( Quantile ); else if ( modeString == "jenks" ) r->setMode( Jenks ); else if ( modeString == "stddev" ) r->setMode( StdDev ); else if ( modeString == "pretty" ) r->setMode( Pretty ); } QDomElement rotationElem = element.firstChildElement( "rotation" ); if ( !rotationElem.isNull() ) r->setRotationField( rotationElem.attribute( "field" ) ); QDomElement sizeScaleElem = element.firstChildElement( "sizescale" ); if ( !sizeScaleElem.isNull() ) r->setSizeScaleField( sizeScaleElem.attribute( "field" ) ); r->setScaleMethod( QgsSymbolLayerV2Utils::decodeScaleMethod( sizeScaleElem.attribute( "scalemethod" ) ) ); // TODO: symbol levels return r; }