bool QgsRendererRangeV2LabelFormat::operator==( const QgsRendererRangeV2LabelFormat &other ) const { return format() == other.format() && precision() == other.precision() && trimTrailingZeroes() == other.trimTrailingZeroes(); }
void QgsGraduatedSymbolRendererV2Widget::updateUiFromRenderer( bool updateCount ) { disconnectUpdateHandlers(); updateGraduatedSymbolIcon(); // update UI from the graduated renderer (update combo boxes, view) if ( mRenderer->mode() < cboGraduatedMode->count() ) cboGraduatedMode->setCurrentIndex( mRenderer->mode() ); // Only update class count if different - otherwise typing value gets very messy int nclasses = mRenderer->ranges().count(); if ( nclasses && updateCount ) spinGraduatedClasses->setValue( mRenderer->ranges().count() ); // set column QString attrName = mRenderer->classAttribute(); mExpressionWidget->setField( attrName ); mHistogramWidget->setSourceFieldExp( attrName ); // set source symbol if ( mRenderer->sourceSymbol() ) { delete mGraduatedSymbol; mGraduatedSymbol = mRenderer->sourceSymbol()->clone(); updateGraduatedSymbolIcon(); } mModel->setRenderer( mRenderer ); viewGraduated->setModel( mModel ); if ( mGraduatedSymbol ) { mSizeUnitWidget->blockSignals( true ); mSizeUnitWidget->setUnit( mGraduatedSymbol->outputUnit() ); mSizeUnitWidget->setMapUnitScale( mGraduatedSymbol->mapUnitScale() ); mSizeUnitWidget->blockSignals( false ); } // set source color ramp methodComboBox->blockSignals( true ); if ( mRenderer->graduatedMethod() == QgsGraduatedSymbolRendererV2::GraduatedColor ) { methodComboBox->setCurrentIndex( 0 ); if ( mRenderer->sourceColorRamp() ) cboGraduatedColorRamp->setSourceColorRamp( mRenderer->sourceColorRamp() ); cbxInvertedColorRamp->setChecked( mRenderer->invertedColorRamp() ); } else { methodComboBox->setCurrentIndex( 1 ); if ( !mRenderer->ranges().isEmpty() ) // avoid overiding default size with zeros { minSizeSpinBox->setValue( mRenderer->minSymbolSize() ); maxSizeSpinBox->setValue( mRenderer->maxSymbolSize() ); } } mMethodStackedWidget->setCurrentIndex( methodComboBox->currentIndex() ); methodComboBox->blockSignals( false ); QgsRendererRangeV2LabelFormat labelFormat = mRenderer->labelFormat(); txtLegendFormat->setText( labelFormat.format() ); spinPrecision->setValue( labelFormat.precision() ); cbxTrimTrailingZeroes->setChecked( labelFormat.trimTrailingZeroes() ); viewGraduated->resizeColumnToContents( 0 ); viewGraduated->resizeColumnToContents( 1 ); viewGraduated->resizeColumnToContents( 2 ); mHistogramWidget->refresh(); connectUpdateHandlers(); emit widgetChanged(); }
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" ); bool render = rangeElem.attribute( "render", "true" ) != "false"; if ( symbolMap.contains( symbolName ) ) { QgsSymbolV2* symbol = symbolMap.take( symbolName ); ranges.append( QgsRendererRangeV2( lowerValue, upperValue, symbol, label, render ) ); } } rangeElem = rangeElem.nextSiblingElement(); } QString attrName = element.attribute( "attr" ); QgsGraduatedSymbolRendererV2* r = new QgsGraduatedSymbolRendererV2( attrName, ranges ); QString attrMethod = element.attribute( "graduatedMethod" ); if ( attrMethod.length() ) { if ( attrMethod == graduatedMethodStr( GraduatedColor ) ) r->setGraduatedMethod( GraduatedColor ); else if ( attrMethod == graduatedMethodStr( GraduatedSize ) ) r->setGraduatedMethod( GraduatedSize ); } // 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() && !rotationElem.attribute( "field" ).isEmpty() ) { for ( QgsRangeList::iterator it = r->mRanges.begin(); it != r->mRanges.end(); ++it ) { convertSymbolRotation( it->symbol(), rotationElem.attribute( "field" ) ); } if ( r->mSourceSymbol.data() ) { convertSymbolRotation( r->mSourceSymbol.data(), rotationElem.attribute( "field" ) ); } } QDomElement sizeScaleElem = element.firstChildElement( "sizescale" ); if ( !sizeScaleElem.isNull() && !sizeScaleElem.attribute( "field" ).isEmpty() ) { for ( QgsRangeList::iterator it = r->mRanges.begin(); it != r->mRanges.end(); ++it ) { convertSymbolSizeScale( it->symbol(), QgsSymbolLayerV2Utils::decodeScaleMethod( sizeScaleElem.attribute( "scalemethod" ) ), sizeScaleElem.attribute( "field" ) ); } if ( r->mSourceSymbol.data() && r->mSourceSymbol->type() == QgsSymbolV2::Marker ) { convertSymbolSizeScale( r->mSourceSymbol.data(), QgsSymbolLayerV2Utils::decodeScaleMethod( sizeScaleElem.attribute( "scalemethod" ) ), sizeScaleElem.attribute( "field" ) ); } } QDomElement labelFormatElem = element.firstChildElement( "labelformat" ); if ( ! labelFormatElem.isNull() ) { QgsRendererRangeV2LabelFormat labelFormat; labelFormat.setFromDomElement( labelFormatElem ); r->setLabelFormat( labelFormat ); } // TODO: symbol levels return r; }