QgsHeatmapRendererWidget::QgsHeatmapRendererWidget( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer ) : QgsRendererV2Widget( layer, style ) , mRenderer( nullptr ) { if ( !layer ) { return; } // the renderer only applies to point vector layers if ( layer->geometryType() != QGis::Point ) { //setup blank dialog mRenderer = nullptr; QGridLayout* layout = new QGridLayout( this ); QLabel* label = new QLabel( tr( "The heatmap renderer only applies to point and multipoint layers. \n" "'%1' is not a point layer and cannot be rendered as a heatmap." ) .arg( layer->name() ), this ); layout->addWidget( label ); return; } setupUi( this ); mRadiusUnitWidget->setUnits( QgsSymbolV2::OutputUnitList() << QgsSymbolV2::MM << QgsSymbolV2::Pixel << QgsSymbolV2::MapUnit ); mWeightExpressionWidget->registerGetExpressionContextCallback( &_getExpressionContext, this ); if ( renderer ) { mRenderer = QgsHeatmapRenderer::convertFromRenderer( renderer ); } if ( !mRenderer ) { mRenderer = new QgsHeatmapRenderer(); } mRampComboBox->setShowGradientOnly( true ); mRampComboBox->populate( QgsStyleV2::defaultStyle() ); connect( mRampComboBox, SIGNAL( currentIndexChanged( int ) ), this, SLOT( applyColorRamp() ) ); connect( mRampComboBox, SIGNAL( sourceRampEdited() ), this, SLOT( applyColorRamp() ) ); connect( mButtonEditRamp, SIGNAL( clicked() ), mRampComboBox, SLOT( editSourceRamp() ) ); if ( mRenderer->colorRamp() ) { mRampComboBox->blockSignals( true ); mRampComboBox->setSourceColorRamp( mRenderer->colorRamp() ); mRampComboBox->blockSignals( false ); } mRadiusSpinBox->blockSignals( true ); mRadiusSpinBox->setValue( mRenderer->radius() ); mRadiusSpinBox->blockSignals( false ); mRadiusUnitWidget->blockSignals( true ); mRadiusUnitWidget->setUnit( mRenderer->radiusUnit() ); mRadiusUnitWidget->setMapUnitScale( mRenderer->radiusMapUnitScale() ); mRadiusUnitWidget->blockSignals( false ); mMaxSpinBox->blockSignals( true ); mMaxSpinBox->setValue( mRenderer->maximumValue() ); mMaxSpinBox->blockSignals( false ); mQualitySlider->blockSignals( true ); mQualitySlider->setValue( mRenderer->renderQuality() ); mQualitySlider->blockSignals( false ); mInvertCheckBox->blockSignals( true ); mInvertCheckBox->setChecked( mRenderer->invertRamp() ); mInvertCheckBox->blockSignals( false ); mWeightExpressionWidget->setLayer( layer ); mWeightExpressionWidget->setField( mRenderer->weightExpression() ); connect( mWeightExpressionWidget, SIGNAL( fieldChanged( QString ) ), this, SLOT( weightExpressionChanged( QString ) ) ); }
QgsHeatmapRendererWidget::QgsHeatmapRendererWidget( QgsVectorLayer* layer, QgsStyle* style, QgsFeatureRenderer* renderer ) : QgsRendererWidget( layer, style ) , mRenderer( nullptr ) { if ( !layer ) { return; } // the renderer only applies to point vector layers if ( layer->geometryType() != QgsWkbTypes::PointGeometry ) { //setup blank dialog mRenderer = nullptr; QLabel* label = new QLabel( tr( "The heatmap renderer only applies to point and multipoint layers. \n" "'%1' is not a point layer and cannot be rendered as a heatmap." ) .arg( layer->name() ), this ); layout()->addWidget( label ); return; } setupUi( this ); this->layout()->setContentsMargins( 0, 0, 0, 0 ); mRadiusUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderPixels << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches ); mWeightExpressionWidget->registerExpressionContextGenerator( this ); if ( renderer ) { mRenderer = QgsHeatmapRenderer::convertFromRenderer( renderer ); } if ( !mRenderer ) { mRenderer = new QgsHeatmapRenderer(); } btnColorRamp->setShowGradientOnly( true ); connect( btnColorRamp, &QgsColorRampButton::colorRampChanged, this, &QgsHeatmapRendererWidget::applyColorRamp ); if ( mRenderer->colorRamp() ) { btnColorRamp->blockSignals( true ); btnColorRamp->setColorRamp( mRenderer->colorRamp() ); btnColorRamp->blockSignals( false ); } mRadiusSpinBox->blockSignals( true ); mRadiusSpinBox->setValue( mRenderer->radius() ); mRadiusSpinBox->blockSignals( false ); mRadiusUnitWidget->blockSignals( true ); mRadiusUnitWidget->setUnit( mRenderer->radiusUnit() ); mRadiusUnitWidget->setMapUnitScale( mRenderer->radiusMapUnitScale() ); mRadiusUnitWidget->blockSignals( false ); mMaxSpinBox->blockSignals( true ); mMaxSpinBox->setValue( mRenderer->maximumValue() ); mMaxSpinBox->blockSignals( false ); mQualitySlider->blockSignals( true ); mQualitySlider->setValue( mRenderer->renderQuality() ); mQualitySlider->blockSignals( false ); mWeightExpressionWidget->setLayer( layer ); mWeightExpressionWidget->setField( mRenderer->weightExpression() ); connect( mWeightExpressionWidget, SIGNAL( fieldChanged( QString ) ), this, SLOT( weightExpressionChanged( QString ) ) ); }