mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-14 00:07:35 -04:00
GUI for configuration of size-based legend for diagrams
This commit is contained in:
parent
ea8a2c2bf9
commit
517fefe02a
@ -987,7 +987,8 @@ QgsDiagramRenderer {#qgis_api_break_3_0_QgsDiagramRenderer}
|
||||
- renderDiagram() now takes an optional data defined overrides collection argument.
|
||||
- readXml(), _readXml(), writeXml(), _writeXml() do not take QgsVectorLayer as an argument anymore.
|
||||
- readXml(), _readXml(), writeXml(), _writeXml() require a new argument: a reference to QgsReadWriteContext
|
||||
|
||||
- sizeLegend() and setSizeLegend() have been replaced by dataDefinedSizeLegend() and setDataDefinedSizeLegend() methods.
|
||||
- sizeLegendSymbol() and setSizeLegendSymbol() have been moved to QgsLinearlyInterpolatedDiagramRenderer subclass.
|
||||
|
||||
|
||||
QgsDiagramLayerSettings {#qgis_api_break_3_0_QgsDiagramLayerSettings}
|
||||
|
@ -545,44 +545,6 @@ Returns list with all diagram settings in the renderer
|
||||
.. versionadded:: 2.16
|
||||
.. seealso:: attributeLegend()
|
||||
.. seealso:: setSizeLegend()
|
||||
%End
|
||||
|
||||
bool sizeLegend() const;
|
||||
%Docstring
|
||||
Returns true if renderer will show legend items for diagram sizes.
|
||||
.. versionadded:: 2.16
|
||||
.. seealso:: setSizeLegend()
|
||||
.. seealso:: attributeLegend()
|
||||
.. seealso:: sizeLegendSymbol()
|
||||
:rtype: bool
|
||||
%End
|
||||
|
||||
void setSizeLegend( bool enabled );
|
||||
%Docstring
|
||||
Sets whether the renderer will show legend items for diagram sizes.
|
||||
\param enabled set to true to show diagram size legend
|
||||
.. versionadded:: 2.16
|
||||
.. seealso:: sizeLegend()
|
||||
.. seealso:: setAttributeLegend()
|
||||
.. seealso:: setSizeLegendSymbol()
|
||||
%End
|
||||
|
||||
QgsMarkerSymbol *sizeLegendSymbol() const;
|
||||
%Docstring
|
||||
Returns the marker symbol used for rendering the diagram size legend.
|
||||
.. versionadded:: 2.16
|
||||
.. seealso:: setSizeLegendSymbol()
|
||||
.. seealso:: sizeLegend()
|
||||
:rtype: QgsMarkerSymbol
|
||||
%End
|
||||
|
||||
void setSizeLegendSymbol( QgsMarkerSymbol *symbol /Transfer/ );
|
||||
%Docstring
|
||||
Sets the marker symbol used for rendering the diagram size legend.
|
||||
\param symbol marker symbol, ownership is transferred to the renderer.
|
||||
.. versionadded:: 2.16
|
||||
.. seealso:: sizeLegendSymbol()
|
||||
.. seealso:: setSizeLegend()
|
||||
%End
|
||||
|
||||
protected:
|
||||
@ -628,8 +590,6 @@ Returns the paint device dpi (or -1 in case of error
|
||||
%End
|
||||
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
class QgsSingleCategoryDiagramRenderer : QgsDiagramRenderer
|
||||
@ -760,6 +720,24 @@ Returns list with all diagram settings in the renderer
|
||||
virtual QList< QgsLayerTreeModelLegendNode * > legendItems( QgsLayerTreeLayer *nodeLayer ) const /Factory/;
|
||||
|
||||
|
||||
QgsMarkerSymbol *sizeLegendSymbol() const;
|
||||
%Docstring
|
||||
Returns the marker symbol used for rendering the diagram size legend.
|
||||
.. versionadded:: 2.16
|
||||
.. seealso:: setSizeLegendSymbol()
|
||||
.. seealso:: sizeLegend()
|
||||
:rtype: QgsMarkerSymbol
|
||||
%End
|
||||
|
||||
void setSizeLegendSymbol( QgsMarkerSymbol *symbol /Transfer/ );
|
||||
%Docstring
|
||||
Sets the marker symbol used for rendering the diagram size legend.
|
||||
\param symbol marker symbol, ownership is transferred to the renderer.
|
||||
.. versionadded:: 2.16
|
||||
.. seealso:: sizeLegendSymbol()
|
||||
.. seealso:: setSizeLegend()
|
||||
%End
|
||||
|
||||
void setDataDefinedSizeLegend( QgsDataDefinedSizeLegend *settings /Transfer/ );
|
||||
%Docstring
|
||||
Configures appearance of legend. Takes ownership of the passed settings objects.
|
||||
|
@ -21,6 +21,8 @@
|
||||
|
||||
#include "qgsproject.h"
|
||||
#include "qgsapplication.h"
|
||||
#include "qgsdatadefinedsizelegend.h"
|
||||
#include "qgsdatadefinedsizelegenddialog.h"
|
||||
#include "qgsdiagramproperties.h"
|
||||
#include "qgsdiagramrenderer.h"
|
||||
#include "qgslabelengineconfigdialog.h"
|
||||
@ -188,6 +190,8 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer *layer, QWidget *pare
|
||||
newItem->setFlags( newItem->flags() & ~Qt::ItemIsDropEnabled );
|
||||
}
|
||||
|
||||
mSizeLegendSymbol.reset( QgsMarkerSymbol::createSimple( QgsStringMap() ) );
|
||||
|
||||
const QgsDiagramRenderer *dr = layer->diagramRenderer();
|
||||
if ( !dr ) //no diagram renderer yet, insert reasonable default
|
||||
{
|
||||
@ -208,8 +212,6 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer *layer, QWidget *pare
|
||||
mScaleRangeWidget->setScaleRange( layer->minimumScale(), layer->maximumScale() );
|
||||
mShowAllCheckBox->setChecked( true );
|
||||
mCheckBoxAttributeLegend->setChecked( true );
|
||||
mCheckBoxSizeLegend->setChecked( false );
|
||||
mSizeLegendSymbol.reset( QgsMarkerSymbol::createSimple( QgsStringMap() ) );
|
||||
|
||||
switch ( layerType )
|
||||
{
|
||||
@ -248,10 +250,6 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer *layer, QWidget *pare
|
||||
mDiagramSizeSpinBox->setEnabled( mFixedSizeRadio->isChecked() );
|
||||
mLinearScaleFrame->setEnabled( mAttributeBasedScalingRadio->isChecked() );
|
||||
mCheckBoxAttributeLegend->setChecked( dr->attributeLegend() );
|
||||
mCheckBoxSizeLegend->setChecked( dr->sizeLegend() );
|
||||
mSizeLegendSymbol.reset( dr->sizeLegendSymbol() ? dr->sizeLegendSymbol()->clone() : QgsMarkerSymbol::createSimple( QgsStringMap() ) );
|
||||
QIcon icon = QgsSymbolLayerUtils::symbolPreviewIcon( mSizeLegendSymbol.get(), mButtonSizeLegendSymbol->iconSize() );
|
||||
mButtonSizeLegendSymbol->setIcon( icon );
|
||||
|
||||
//assume single category or linearly interpolated diagram renderer for now
|
||||
QList<QgsDiagramSettings> settingList = dr->diagramSettings();
|
||||
@ -361,6 +359,9 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer *layer, QWidget *pare
|
||||
{
|
||||
mSizeFieldExpressionWidget->setField( lidr->classificationField() );
|
||||
}
|
||||
|
||||
mSizeLegendSymbol.reset( lidr->sizeLegendSymbol() ? lidr->sizeLegendSymbol()->clone() : QgsMarkerSymbol::createSimple( QgsStringMap() ) );
|
||||
mSizeLegend.reset( lidr->dataDefinedSizeLegend() ? new QgsDataDefinedSizeLegend( *lidr->dataDefinedSizeLegend() ) : nullptr );
|
||||
}
|
||||
}
|
||||
|
||||
@ -401,6 +402,9 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer *layer, QWidget *pare
|
||||
}
|
||||
}
|
||||
|
||||
QIcon icon = QgsSymbolLayerUtils::symbolPreviewIcon( mSizeLegendSymbol.get(), mButtonSizeLegendSymbol->iconSize() );
|
||||
mButtonSizeLegendSymbol->setIcon( icon );
|
||||
|
||||
connect( mAddAttributeExpression, &QPushButton::clicked, this, &QgsDiagramProperties::showAddAttributeExpressionDialog );
|
||||
registerDataDefinedButton( mBackgroundColorDDBtn, QgsDiagramLayerSettings::BackgroundColor );
|
||||
registerDataDefinedButton( mLineColorDDBtn, QgsDiagramLayerSettings::StrokeColor );
|
||||
@ -414,6 +418,8 @@ QgsDiagramProperties::QgsDiagramProperties( QgsVectorLayer *layer, QWidget *pare
|
||||
registerDataDefinedButton( mAlwaysShowDDBtn, QgsDiagramLayerSettings::AlwaysShow );
|
||||
registerDataDefinedButton( mIsObstacleDDBtn, QgsDiagramLayerSettings::IsObstacle );
|
||||
registerDataDefinedButton( mStartAngleDDBtn, QgsDiagramLayerSettings::StartAngle );
|
||||
|
||||
connect( mButtonSizeLegendSettings, &QPushButton::clicked, this, &QgsDiagramProperties::showSizeLegendDialog );
|
||||
}
|
||||
|
||||
QgsDiagramProperties::~QgsDiagramProperties()
|
||||
@ -811,12 +817,14 @@ void QgsDiagramProperties::apply()
|
||||
dr->setClassificationField( sizeFieldNameOrExp );
|
||||
}
|
||||
dr->setDiagramSettings( ds );
|
||||
|
||||
dr->setSizeLegendSymbol( mSizeLegendSymbol->clone() );
|
||||
dr->setDataDefinedSizeLegend( mSizeLegend ? new QgsDataDefinedSizeLegend( *mSizeLegend ) : nullptr );
|
||||
|
||||
renderer = dr;
|
||||
}
|
||||
renderer->setDiagram( diagram );
|
||||
renderer->setAttributeLegend( mCheckBoxAttributeLegend->isChecked() );
|
||||
renderer->setSizeLegend( mCheckBoxSizeLegend->isChecked() );
|
||||
renderer->setSizeLegendSymbol( mSizeLegendSymbol->clone() );
|
||||
mLayer->setDiagramRenderer( renderer );
|
||||
|
||||
QgsDiagramLayerSettings dls;
|
||||
@ -958,13 +966,29 @@ void QgsDiagramProperties::on_mButtonSizeLegendSymbol_clicked()
|
||||
|
||||
void QgsDiagramProperties::scalingTypeChanged()
|
||||
{
|
||||
if ( !mAttributeBasedScalingRadio->isChecked() )
|
||||
{
|
||||
mCheckBoxSizeLegend->setChecked( false );
|
||||
mCheckBoxSizeLegend->setEnabled( false );
|
||||
}
|
||||
else
|
||||
{
|
||||
mCheckBoxSizeLegend->setEnabled( true );
|
||||
}
|
||||
mSizeLegendGroupBox->setEnabled( mAttributeBasedScalingRadio->isChecked() );
|
||||
}
|
||||
|
||||
void QgsDiagramProperties::showSizeLegendDialog()
|
||||
{
|
||||
QgsDataDefinedSizeLegendDialog dlg( mSizeLegend.get() );
|
||||
QgsMarkerSymbol *symbol = mSizeLegendSymbol->clone();
|
||||
|
||||
// prepare size transformer
|
||||
bool isExpression;
|
||||
QString sizeFieldNameOrExp = mSizeFieldExpressionWidget->currentField( &isExpression );
|
||||
QgsProperty ddSize = isExpression ? QgsProperty::fromExpression( sizeFieldNameOrExp ) : QgsProperty::fromField( sizeFieldNameOrExp );
|
||||
ddSize.setTransformer( new QgsSizeScaleTransformer( QgsSizeScaleTransformer::Linear, 0.0, mMaxValueSpinBox->value(), 0.0, mSizeSpinBox->value() ) );
|
||||
symbol->setDataDefinedSize( ddSize );
|
||||
dlg.setSourceSymbol( symbol );
|
||||
|
||||
if ( mMapCanvas )
|
||||
{
|
||||
dlg.setLegendMapViewData( mMapCanvas->mapUnitsPerPixel(), mMapCanvas->mapSettings().outputDpi(), mMapCanvas->scale() );
|
||||
}
|
||||
|
||||
if ( !dlg.exec() )
|
||||
return;
|
||||
|
||||
mSizeLegend.reset( dlg.dataDefinedSizeLegend() );
|
||||
}
|
||||
|
@ -54,6 +54,7 @@ class APP_EXPORT QgsDiagramProperties : public QWidget, private Ui::QgsDiagramPr
|
||||
void on_mPlacementComboBox_currentIndexChanged( int index );
|
||||
void on_mButtonSizeLegendSymbol_clicked();
|
||||
void scalingTypeChanged();
|
||||
void showSizeLegendDialog();
|
||||
|
||||
protected:
|
||||
QFont mDiagramFont;
|
||||
@ -81,6 +82,7 @@ class APP_EXPORT QgsDiagramProperties : public QWidget, private Ui::QgsDiagramPr
|
||||
// Keeps track of the diagram type to properly save / restore settings when the diagram type combo box is set to no diagram.
|
||||
QString mDiagramType;
|
||||
std::unique_ptr< QgsMarkerSymbol > mSizeLegendSymbol;
|
||||
std::unique_ptr< QgsDataDefinedSizeLegend > mSizeLegend;
|
||||
|
||||
QString guessLegendText( const QString &expression );
|
||||
QgsMapCanvas *mMapCanvas = nullptr;
|
||||
|
@ -398,8 +398,6 @@ void QgsDiagramSettings::writeXml( QDomElement &rendererElem, QDomDocument &doc
|
||||
QgsDiagramRenderer::QgsDiagramRenderer()
|
||||
: mDiagram( nullptr )
|
||||
, mShowAttributeLegend( true )
|
||||
, mShowSizeLegend( false )
|
||||
, mSizeLegendSymbol( QgsMarkerSymbol::createSimple( QgsStringMap() ) )
|
||||
{
|
||||
}
|
||||
|
||||
@ -417,8 +415,6 @@ void QgsDiagramRenderer::setDiagram( QgsDiagram *d )
|
||||
QgsDiagramRenderer::QgsDiagramRenderer( const QgsDiagramRenderer &other )
|
||||
: mDiagram( other.mDiagram ? other.mDiagram->clone() : nullptr )
|
||||
, mShowAttributeLegend( other.mShowAttributeLegend )
|
||||
, mShowSizeLegend( other.mShowSizeLegend )
|
||||
, mSizeLegendSymbol( other.mSizeLegendSymbol ? other.mSizeLegendSymbol->clone() : nullptr )
|
||||
{
|
||||
}
|
||||
|
||||
@ -426,8 +422,6 @@ QgsDiagramRenderer &QgsDiagramRenderer::operator=( const QgsDiagramRenderer &oth
|
||||
{
|
||||
mDiagram = other.mDiagram ? other.mDiagram->clone() : nullptr;
|
||||
mShowAttributeLegend = other.mShowAttributeLegend;
|
||||
mShowSizeLegend = other.mShowSizeLegend;
|
||||
mSizeLegendSymbol.reset( other.mSizeLegendSymbol ? other.mSizeLegendSymbol->clone() : nullptr );
|
||||
return *this;
|
||||
}
|
||||
|
||||
@ -522,6 +516,7 @@ int QgsDiagramRenderer::dpiPaintDevice( const QPainter *painter )
|
||||
|
||||
void QgsDiagramRenderer::_readXml( const QDomElement &elem, const QgsReadWriteContext &context )
|
||||
{
|
||||
Q_UNUSED( context );
|
||||
delete mDiagram;
|
||||
QString diagramType = elem.attribute( QStringLiteral( "diagramType" ) );
|
||||
if ( diagramType == QLatin1String( "Pie" ) )
|
||||
@ -541,26 +536,18 @@ void QgsDiagramRenderer::_readXml( const QDomElement &elem, const QgsReadWriteCo
|
||||
mDiagram = nullptr;
|
||||
}
|
||||
mShowAttributeLegend = ( elem.attribute( QStringLiteral( "attributeLegend" ), QStringLiteral( "1" ) ) != QLatin1String( "0" ) );
|
||||
mShowSizeLegend = ( elem.attribute( QStringLiteral( "sizeLegend" ), QStringLiteral( "0" ) ) != QLatin1String( "0" ) );
|
||||
QDomElement sizeLegendSymbolElem = elem.firstChildElement( QStringLiteral( "symbol" ) );
|
||||
if ( !sizeLegendSymbolElem.isNull() && sizeLegendSymbolElem.attribute( QStringLiteral( "name" ) ) == QLatin1String( "sizeSymbol" ) )
|
||||
{
|
||||
mSizeLegendSymbol.reset( QgsSymbolLayerUtils::loadSymbol<QgsMarkerSymbol>( sizeLegendSymbolElem, context ) );
|
||||
}
|
||||
}
|
||||
|
||||
void QgsDiagramRenderer::_writeXml( QDomElement &rendererElem, QDomDocument &doc, const QgsReadWriteContext &context ) const
|
||||
{
|
||||
Q_UNUSED( doc );
|
||||
Q_UNUSED( context );
|
||||
|
||||
if ( mDiagram )
|
||||
{
|
||||
rendererElem.setAttribute( QStringLiteral( "diagramType" ), mDiagram->diagramName() );
|
||||
}
|
||||
rendererElem.setAttribute( QStringLiteral( "attributeLegend" ), mShowAttributeLegend );
|
||||
rendererElem.setAttribute( QStringLiteral( "sizeLegend" ), mShowSizeLegend );
|
||||
QDomElement sizeLegendSymbolElem = QgsSymbolLayerUtils::saveSymbol( QStringLiteral( "sizeSymbol" ), mSizeLegendSymbol.get(), doc, context );
|
||||
rendererElem.appendChild( sizeLegendSymbolElem );
|
||||
}
|
||||
|
||||
QgsSingleCategoryDiagramRenderer::QgsSingleCategoryDiagramRenderer(): QgsDiagramRenderer()
|
||||
@ -614,6 +601,7 @@ void QgsSingleCategoryDiagramRenderer::writeXml( QDomElement &layerElem, QDomDoc
|
||||
|
||||
QgsLinearlyInterpolatedDiagramRenderer::QgsLinearlyInterpolatedDiagramRenderer()
|
||||
: QgsDiagramRenderer()
|
||||
, mSizeLegendSymbol( QgsMarkerSymbol::createSimple( QgsStringMap() ) )
|
||||
{
|
||||
mInterpolationSettings.classificationAttributeIsExpression = false;
|
||||
}
|
||||
@ -622,6 +610,7 @@ QgsLinearlyInterpolatedDiagramRenderer::QgsLinearlyInterpolatedDiagramRenderer(
|
||||
: QgsDiagramRenderer( other )
|
||||
, mSettings( other.mSettings )
|
||||
, mInterpolationSettings( other.mInterpolationSettings )
|
||||
, mSizeLegendSymbol( other.mSizeLegendSymbol ? other.mSizeLegendSymbol->clone() : nullptr )
|
||||
, mDataDefinedSizeLegend( other.mDataDefinedSizeLegend ? new QgsDataDefinedSizeLegend( *other.mDataDefinedSizeLegend ) : nullptr )
|
||||
{
|
||||
}
|
||||
@ -696,11 +685,23 @@ void QgsLinearlyInterpolatedDiagramRenderer::readXml( const QDomElement &elem, c
|
||||
mSettings.readXml( settingsElem );
|
||||
}
|
||||
|
||||
QDomElement sizeLegendSymbolElem = elem.firstChildElement( QStringLiteral( "symbol" ) );
|
||||
if ( !sizeLegendSymbolElem.isNull() && sizeLegendSymbolElem.attribute( QStringLiteral( "name" ) ) == QLatin1String( "sizeSymbol" ) )
|
||||
{
|
||||
mSizeLegendSymbol.reset( QgsSymbolLayerUtils::loadSymbol<QgsMarkerSymbol>( sizeLegendSymbolElem, context ) );
|
||||
}
|
||||
|
||||
QDomElement ddsLegendSizeElem = elem.firstChildElement( "data-defined-size-legend" );
|
||||
if ( !ddsLegendSizeElem.isNull() )
|
||||
{
|
||||
mDataDefinedSizeLegend.reset( QgsDataDefinedSizeLegend::readTypeAndAlignmentFromXml( ddsLegendSizeElem ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
// pre-3.0 projects
|
||||
bool enabled = elem.attribute( QStringLiteral( "sizeLegend" ), QStringLiteral( "0" ) ) != QLatin1String( "0" );
|
||||
mDataDefinedSizeLegend.reset( enabled ? new QgsDataDefinedSizeLegend() : nullptr );
|
||||
}
|
||||
|
||||
_readXml( elem, context );
|
||||
}
|
||||
@ -724,6 +725,9 @@ void QgsLinearlyInterpolatedDiagramRenderer::writeXml( QDomElement &layerElem, Q
|
||||
}
|
||||
mSettings.writeXml( rendererElem, doc );
|
||||
|
||||
QDomElement sizeLegendSymbolElem = QgsSymbolLayerUtils::saveSymbol( QStringLiteral( "sizeSymbol" ), mSizeLegendSymbol.get(), doc, context );
|
||||
rendererElem.appendChild( sizeLegendSymbolElem );
|
||||
|
||||
if ( mDataDefinedSizeLegend )
|
||||
{
|
||||
QDomElement ddsLegendElem = doc.createElement( QStringLiteral( "data-defined-size-legend" ) );
|
||||
@ -768,7 +772,7 @@ QList< QgsLayerTreeModelLegendNode * > QgsLinearlyInterpolatedDiagramRenderer::l
|
||||
if ( mShowAttributeLegend )
|
||||
nodes = mSettings.legendItems( nodeLayer );
|
||||
|
||||
if ( mShowSizeLegend && mDiagram && mSizeLegendSymbol )
|
||||
if ( mDataDefinedSizeLegend && mDiagram && mSizeLegendSymbol )
|
||||
{
|
||||
// add size legend
|
||||
|
||||
@ -783,9 +787,7 @@ QList< QgsLayerTreeModelLegendNode * > QgsLinearlyInterpolatedDiagramRenderer::l
|
||||
sizeClasses << QgsDataDefinedSizeLegend::SizeClass( size, QString::number( v ) );
|
||||
}
|
||||
|
||||
QgsDataDefinedSizeLegend ddSizeLegend;
|
||||
if ( mDataDefinedSizeLegend ) // copy legend configuration if any...
|
||||
ddSizeLegend = *mDataDefinedSizeLegend;
|
||||
QgsDataDefinedSizeLegend ddSizeLegend( *mDataDefinedSizeLegend );
|
||||
ddSizeLegend.setSymbol( legendSymbol ); // transfers ownership
|
||||
ddSizeLegend.setClasses( sizeClasses );
|
||||
|
||||
|
@ -554,38 +554,6 @@ class CORE_EXPORT QgsDiagramRenderer
|
||||
*/
|
||||
void setAttributeLegend( bool enabled ) { mShowAttributeLegend = enabled; }
|
||||
|
||||
/** Returns true if renderer will show legend items for diagram sizes.
|
||||
* \since QGIS 2.16
|
||||
* \see setSizeLegend()
|
||||
* \see attributeLegend()
|
||||
* \see sizeLegendSymbol()
|
||||
*/
|
||||
bool sizeLegend() const { return mShowSizeLegend; }
|
||||
|
||||
/** Sets whether the renderer will show legend items for diagram sizes.
|
||||
* \param enabled set to true to show diagram size legend
|
||||
* \since QGIS 2.16
|
||||
* \see sizeLegend()
|
||||
* \see setAttributeLegend()
|
||||
* \see setSizeLegendSymbol()
|
||||
*/
|
||||
void setSizeLegend( bool enabled ) { mShowSizeLegend = enabled; }
|
||||
|
||||
/** Returns the marker symbol used for rendering the diagram size legend.
|
||||
* \since QGIS 2.16
|
||||
* \see setSizeLegendSymbol()
|
||||
* \see sizeLegend()
|
||||
*/
|
||||
QgsMarkerSymbol *sizeLegendSymbol() const { return mSizeLegendSymbol.get(); }
|
||||
|
||||
/** Sets the marker symbol used for rendering the diagram size legend.
|
||||
* \param symbol marker symbol, ownership is transferred to the renderer.
|
||||
* \since QGIS 2.16
|
||||
* \see sizeLegendSymbol()
|
||||
* \see setSizeLegend()
|
||||
*/
|
||||
void setSizeLegendSymbol( QgsMarkerSymbol *symbol SIP_TRANSFER ) { mSizeLegendSymbol.reset( symbol ); }
|
||||
|
||||
protected:
|
||||
QgsDiagramRenderer( const QgsDiagramRenderer &other );
|
||||
QgsDiagramRenderer &operator=( const QgsDiagramRenderer &other );
|
||||
@ -625,12 +593,6 @@ class CORE_EXPORT QgsDiagramRenderer
|
||||
|
||||
//! Whether to show an attribute legend for the diagrams
|
||||
bool mShowAttributeLegend;
|
||||
|
||||
//! Whether to show a size legend for the diagrams
|
||||
bool mShowSizeLegend;
|
||||
|
||||
//! Marker symbol to use in size legends
|
||||
std::unique_ptr< QgsMarkerSymbol > mSizeLegendSymbol;
|
||||
};
|
||||
|
||||
/** \ingroup core
|
||||
@ -723,6 +685,21 @@ class CORE_EXPORT QgsLinearlyInterpolatedDiagramRenderer : public QgsDiagramRend
|
||||
|
||||
QList< QgsLayerTreeModelLegendNode * > legendItems( QgsLayerTreeLayer *nodeLayer ) const override SIP_FACTORY;
|
||||
|
||||
/** Returns the marker symbol used for rendering the diagram size legend.
|
||||
* \since QGIS 2.16
|
||||
* \see setSizeLegendSymbol()
|
||||
* \see sizeLegend()
|
||||
*/
|
||||
QgsMarkerSymbol *sizeLegendSymbol() const { return mSizeLegendSymbol.get(); }
|
||||
|
||||
/** Sets the marker symbol used for rendering the diagram size legend.
|
||||
* \param symbol marker symbol, ownership is transferred to the renderer.
|
||||
* \since QGIS 2.16
|
||||
* \see sizeLegendSymbol()
|
||||
* \see setSizeLegend()
|
||||
*/
|
||||
void setSizeLegendSymbol( QgsMarkerSymbol *symbol SIP_TRANSFER ) { mSizeLegendSymbol.reset( symbol ); }
|
||||
|
||||
/**
|
||||
* Configures appearance of legend. Takes ownership of the passed settings objects.
|
||||
* \since QGIS 3.0
|
||||
@ -746,6 +723,9 @@ class CORE_EXPORT QgsLinearlyInterpolatedDiagramRenderer : public QgsDiagramRend
|
||||
QgsDiagramSettings mSettings;
|
||||
QgsDiagramInterpolationSettings mInterpolationSettings;
|
||||
|
||||
//! Marker symbol to use in size legends
|
||||
std::unique_ptr< QgsMarkerSymbol > mSizeLegendSymbol;
|
||||
|
||||
//! Stores more settings about how legend for varying size of symbols should be rendered
|
||||
std::unique_ptr<QgsDataDefinedSizeLegend> mDataDefinedSizeLegend;
|
||||
};
|
||||
|
@ -303,8 +303,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>644</width>
|
||||
<height>417</height>
|
||||
<width>640</width>
|
||||
<height>371</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||
@ -539,8 +539,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>630</width>
|
||||
<height>473</height>
|
||||
<width>616</width>
|
||||
<height>814</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,0,1">
|
||||
@ -1089,8 +1089,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>511</width>
|
||||
<height>294</height>
|
||||
<width>917</width>
|
||||
<height>539</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_11">
|
||||
@ -1405,8 +1405,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>280</width>
|
||||
<height>288</height>
|
||||
<width>612</width>
|
||||
<height>493</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_12">
|
||||
@ -1831,8 +1831,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>100</width>
|
||||
<height>180</height>
|
||||
<width>640</width>
|
||||
<height>371</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
@ -2050,8 +2050,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>324</width>
|
||||
<height>131</height>
|
||||
<width>640</width>
|
||||
<height>371</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_12">
|
||||
@ -2066,14 +2066,18 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QgsCollapsibleGroupBox" name="mCheckBoxSizeLegend">
|
||||
<widget class="QgsCollapsibleGroupBox" name="mSizeLegendGroupBox">
|
||||
<property name="title">
|
||||
<string>Show legend entries for diagram size</string>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
<string>Legend entries for diagram size</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_71">
|
||||
<item>
|
||||
<widget class="QPushButton" name="mButtonSizeLegendSettings">
|
||||
<property name="text">
|
||||
<string>Legend settings...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="mButtonSizeLegendSymbol">
|
||||
<property name="text">
|
||||
@ -2232,7 +2236,7 @@
|
||||
<tabstop>mOrientationLeftButton</tabstop>
|
||||
<tabstop>scrollArea_2</tabstop>
|
||||
<tabstop>mCheckBoxAttributeLegend</tabstop>
|
||||
<tabstop>mCheckBoxSizeLegend</tabstop>
|
||||
<tabstop>mSizeLegendGroupBox</tabstop>
|
||||
<tabstop>mButtonSizeLegendSymbol</tabstop>
|
||||
<tabstop>mBackgroundColorDDBtn</tabstop>
|
||||
<tabstop>mLineColorDDBtn</tabstop>
|
||||
|
@ -98,6 +98,7 @@ SET(TESTS
|
||||
testcontrastenhancements.cpp
|
||||
testqgscoordinatereferencesystem.cpp
|
||||
testqgscoordinatetransform.cpp
|
||||
testqgsdatadefinedsizelegend.cpp
|
||||
testqgsdataitem.cpp
|
||||
testqgsdatasourceuri.cpp
|
||||
testqgsdiagram.cpp
|
||||
|
@ -18,6 +18,7 @@
|
||||
|
||||
#include "qgsapplication.h"
|
||||
#include "qgscategorizedsymbolrenderer.h"
|
||||
#include "qgsdatadefinedsizelegend.h"
|
||||
#include "qgsfontutils.h"
|
||||
#include "qgslayertree.h"
|
||||
#include "qgslayertreeutils.h"
|
||||
@ -664,7 +665,7 @@ void TestQgsLegendRenderer::testDiagramAttributeLegend()
|
||||
dr->setClassificationField( QString() );
|
||||
dr->setDiagram( new QgsPieDiagram() );
|
||||
dr->setDiagramSettings( ds );
|
||||
dr->setSizeLegend( false );
|
||||
dr->setDataDefinedSizeLegend( nullptr );
|
||||
dr->setAttributeLegend( true );
|
||||
vl4->setDiagramRenderer( dr );
|
||||
|
||||
@ -704,7 +705,7 @@ void TestQgsLegendRenderer::testDiagramSizeLegend()
|
||||
dr->setClassificationField( QString( "a" ) );
|
||||
dr->setDiagram( new QgsPieDiagram() );
|
||||
dr->setDiagramSettings( ds );
|
||||
dr->setSizeLegend( true );
|
||||
dr->setDataDefinedSizeLegend( new QgsDataDefinedSizeLegend() );
|
||||
dr->setAttributeLegend( false );
|
||||
vl4->setDiagramRenderer( dr );
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user