Skip to content

Commit 5b6393f

Browse files
committed
Revived labeling and diagrams for vector layers
1 parent fe0596f commit 5b6393f

16 files changed

+149
-111
lines changed

src/core/diagram/qgsdiagram.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ class CORE_EXPORT QgsDiagram
3333
{
3434
public:
3535
virtual ~QgsDiagram() {}
36+
/** Returns an instance that is equivalent to this one
37+
* @note added in 2.1 */
38+
virtual QgsDiagram* clone() const = 0;
3639
/**Draws the diagram at the given position (in pixel coordinates)*/
3740
virtual void renderDiagram( const QgsAttributes& att, QgsRenderContext& c, const QgsDiagramSettings& s, const QPointF& position ) = 0;
3841
virtual QString diagramName() const = 0;

src/core/diagram/qgshistogramdiagram.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ QgsHistogramDiagram::~QgsHistogramDiagram()
2929
{
3030
}
3131

32+
QgsDiagram* QgsHistogramDiagram::clone() const
33+
{
34+
return new QgsHistogramDiagram( *this );
35+
}
36+
3237
QSizeF QgsHistogramDiagram::diagramSize( const QgsAttributes& attributes, const QgsRenderContext& c, const QgsDiagramSettings& s, const QgsDiagramInterpolationSettings& is )
3338
{
3439
Q_UNUSED( c );

src/core/diagram/qgshistogramdiagram.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ class CORE_EXPORT QgsHistogramDiagram: public QgsDiagram
3737
QgsHistogramDiagram();
3838
~QgsHistogramDiagram();
3939

40+
virtual QgsDiagram* clone() const;
41+
4042
void renderDiagram( const QgsAttributes& att, QgsRenderContext& c, const QgsDiagramSettings& s, const QPointF& position );
4143
QSizeF diagramSize( const QgsAttributes& attributes, const QgsRenderContext& c, const QgsDiagramSettings& s );
4244
QSizeF diagramSize( const QgsAttributes& attributes, const QgsRenderContext& c, const QgsDiagramSettings& s, const QgsDiagramInterpolationSettings& is );

src/core/diagram/qgspiediagram.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ QgsPieDiagram::~QgsPieDiagram()
2929
{
3030
}
3131

32+
QgsDiagram* QgsPieDiagram::clone() const
33+
{
34+
return new QgsPieDiagram( *this );
35+
}
36+
3237
QSizeF QgsPieDiagram::diagramSize( const QgsAttributes& attributes, const QgsRenderContext& c, const QgsDiagramSettings& s, const QgsDiagramInterpolationSettings& is )
3338
{
3439
Q_UNUSED( c );

src/core/diagram/qgspiediagram.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ class CORE_EXPORT QgsPieDiagram: public QgsDiagram
3535
QgsPieDiagram();
3636
~QgsPieDiagram();
3737

38+
virtual QgsDiagram* clone() const;
39+
3840
void renderDiagram( const QgsAttributes& att, QgsRenderContext& c, const QgsDiagramSettings& s, const QPointF& position );
3941
QSizeF diagramSize( const QgsAttributes& attributes, const QgsRenderContext& c, const QgsDiagramSettings& s );
4042
QSizeF diagramSize( const QgsAttributes& attributes, const QgsRenderContext& c, const QgsDiagramSettings& s, const QgsDiagramInterpolationSettings& is );

src/core/diagram/qgstextdiagram.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ QgsTextDiagram::~QgsTextDiagram()
3030
{
3131
}
3232

33+
QgsDiagram* QgsTextDiagram::clone() const
34+
{
35+
return new QgsTextDiagram( *this );
36+
}
37+
3338
QSizeF QgsTextDiagram::diagramSize( const QgsAttributes& attributes, const QgsRenderContext& c, const QgsDiagramSettings& s, const QgsDiagramInterpolationSettings& is )
3439
{
3540
Q_UNUSED( c );

src/core/diagram/qgstextdiagram.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ class CORE_EXPORT QgsTextDiagram: public QgsDiagram
4848

4949
QgsTextDiagram();
5050
~QgsTextDiagram();
51+
52+
virtual QgsDiagram* clone() const;
53+
5154
void renderDiagram( const QgsAttributes& att, QgsRenderContext& c, const QgsDiagramSettings& s, const QPointF& position );
5255
QSizeF diagramSize( const QgsAttributes& attributes, const QgsRenderContext& c, const QgsDiagramSettings& s );
5356
QSizeF diagramSize( const QgsAttributes& attributes, const QgsRenderContext& c, const QgsDiagramSettings& s, const QgsDiagramInterpolationSettings& is );

src/core/qgsdiagramrendererv2.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@
2222
#include <QPainter>
2323

2424

25+
QgsDiagramLayerSettings::~QgsDiagramLayerSettings()
26+
{
27+
delete renderer;
28+
}
29+
2530
void QgsDiagramLayerSettings::readXML( const QDomElement& elem, const QgsVectorLayer* layer )
2631
{
2732
Q_UNUSED( layer )
@@ -260,6 +265,11 @@ void QgsDiagramRendererV2::setDiagram( QgsDiagram* d )
260265
mDiagram = d;
261266
}
262267

268+
QgsDiagramRendererV2::QgsDiagramRendererV2(const QgsDiagramRendererV2& other)
269+
: mDiagram( other.mDiagram ? other.mDiagram->clone() : 0 )
270+
{
271+
}
272+
263273
void QgsDiagramRendererV2::renderDiagram( const QgsAttributes& att, QgsRenderContext& c, const QPointF& pos )
264274
{
265275
if ( !mDiagram )
@@ -360,6 +370,11 @@ QgsSingleCategoryDiagramRenderer::~QgsSingleCategoryDiagramRenderer()
360370
{
361371
}
362372

373+
QgsDiagramRendererV2* QgsSingleCategoryDiagramRenderer::clone() const
374+
{
375+
return new QgsSingleCategoryDiagramRenderer( *this );
376+
}
377+
363378
bool QgsSingleCategoryDiagramRenderer::diagramSettings( const QgsAttributes&, const QgsRenderContext& c, QgsDiagramSettings& s )
364379
{
365380
Q_UNUSED( c );
@@ -408,6 +423,11 @@ QgsLinearlyInterpolatedDiagramRenderer::~QgsLinearlyInterpolatedDiagramRenderer(
408423
{
409424
}
410425

426+
QgsDiagramRendererV2 *QgsLinearlyInterpolatedDiagramRenderer::clone() const
427+
{
428+
return new QgsLinearlyInterpolatedDiagramRenderer( *this );
429+
}
430+
411431
QList<QgsDiagramSettings> QgsLinearlyInterpolatedDiagramRenderer::diagramSettings() const
412432
{
413433
QList<QgsDiagramSettings> settingsList;

src/core/qgsdiagramrendererv2.h

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,15 @@ class CORE_EXPORT QgsDiagramLayerSettings
7373
{
7474
}
7575

76+
~QgsDiagramLayerSettings();
77+
7678
//pal placement properties
7779
Placement placement;
7880
LinePlacementFlags placementFlags;
7981
int priority; // 0 = low, 10 = high
8082
bool obstacle; // whether it's an obstacle
8183
double dist; // distance from the feature (in mm)
82-
QgsDiagramRendererV2* renderer;
84+
QgsDiagramRendererV2* renderer; // if any renderer is assigned, it is owned by this class
8385

8486
//assigned when layer gets prepared
8587
pal::Layer* palLayer;
@@ -167,6 +169,10 @@ class CORE_EXPORT QgsDiagramRendererV2
167169
QgsDiagramRendererV2();
168170
virtual ~QgsDiagramRendererV2();
169171

172+
/** Returns new instance that is equivalent to this one
173+
* @note added in 2.1 */
174+
virtual QgsDiagramRendererV2* clone() const = 0;
175+
170176
/**Returns size of the diagram for feature f in map units. Returns an invalid QSizeF in case of error*/
171177
virtual QSizeF sizeMapUnits( const QgsAttributes& attributes, const QgsRenderContext& c );
172178

@@ -187,6 +193,7 @@ class CORE_EXPORT QgsDiagramRendererV2
187193
virtual void writeXML( QDomElement& layerElem, QDomDocument& doc, const QgsVectorLayer* layer ) const = 0;
188194

189195
protected:
196+
QgsDiagramRendererV2( const QgsDiagramRendererV2& other );
190197

191198
/**Returns diagram settings for a feature (or false if the diagram for the feature is not to be rendered). Used internally within renderDiagram()
192199
* @param att attribute map
@@ -219,6 +226,8 @@ class CORE_EXPORT QgsSingleCategoryDiagramRenderer : public QgsDiagramRendererV2
219226
QgsSingleCategoryDiagramRenderer();
220227
~QgsSingleCategoryDiagramRenderer();
221228

229+
QgsDiagramRendererV2* clone() const;
230+
222231
QString rendererName() const { return "SingleCategory"; }
223232

224233
QList<int> diagramAttributes() const { return mSettings.categoryIndices; }
@@ -245,6 +254,8 @@ class CORE_EXPORT QgsLinearlyInterpolatedDiagramRenderer : public QgsDiagramRend
245254
QgsLinearlyInterpolatedDiagramRenderer();
246255
~QgsLinearlyInterpolatedDiagramRenderer();
247256

257+
QgsDiagramRendererV2* clone() const;
258+
248259
/**Returns list with all diagram settings in the renderer*/
249260
QList<QgsDiagramSettings> diagramSettings() const;
250261

src/core/qgsfeaturerequest.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ QgsFeatureRequest& QgsFeatureRequest::setSubsetOfAttributes( const QStringList&
122122
foreach ( const QString& attrName, attrNames )
123123
{
124124
int attrNum = fields.fieldNameIndex( attrName );
125-
if ( attrNum != -1 )
125+
if ( attrNum != -1 && !mAttrs.contains( attrNum ) )
126126
mAttrs.append( attrNum );
127127
}
128128

0 commit comments

Comments
 (0)