~ubuntu-branches/ubuntu/utopic/qgis/utopic

« back to all changes in this revision

Viewing changes to src/core/symbology-ng/qgsrendererv2.h

  • Committer: Bazaar Package Importer
  • Author(s): Johan Van de Wauw
  • Date: 2010-07-11 20:23:24 UTC
  • mfrom: (3.1.4 squeeze)
  • Revision ID: james.westby@ubuntu.com-20100711202324-5ktghxa7hracohmr
Tags: 1.4.0+12730-3ubuntu1
* Merge from Debian unstable (LP: #540941).
* Fix compilation issues with QT 4.7
* Add build-depends on libqt4-webkit-dev 

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
#ifndef QGSRENDERERV2_H
 
3
#define QGSRENDERERV2_H
 
4
 
 
5
#include "qgis.h"
 
6
 
 
7
#include <QList>
 
8
#include <QString>
 
9
#include <QVariant>
 
10
#include <QPair>
 
11
#include <QPixmap>
 
12
 
 
13
class QDomDocument;
 
14
class QDomElement;
 
15
 
 
16
class QgsSymbolV2;
 
17
class QgsRenderContext;
 
18
class QgsFeature;
 
19
class QgsVectorLayer;
 
20
 
 
21
typedef QList<QgsSymbolV2*> QgsSymbolV2List;
 
22
typedef QMap<QString, QgsSymbolV2* > QgsSymbolV2Map;
 
23
 
 
24
typedef QList< QPair<QString, QPixmap> > QgsLegendSymbologyList;
 
25
 
 
26
#define RENDERER_TAG_NAME   "renderer-v2"
 
27
 
 
28
////////
 
29
// symbol levels
 
30
 
 
31
class CORE_EXPORT QgsSymbolV2LevelItem
 
32
{
 
33
  public:
 
34
    QgsSymbolV2LevelItem( QgsSymbolV2* symbol, int layer ) : mSymbol( symbol ), mLayer( layer ) {}
 
35
    QgsSymbolV2* symbol() { return mSymbol; }
 
36
    int layer() { return mLayer; }
 
37
  protected:
 
38
    QgsSymbolV2* mSymbol;
 
39
    int mLayer;
 
40
};
 
41
 
 
42
// every level has list of items: symbol + symbol layer num
 
43
typedef QList< QgsSymbolV2LevelItem > QgsSymbolV2Level;
 
44
 
 
45
// this is a list of levels
 
46
typedef QList< QgsSymbolV2Level > QgsSymbolV2LevelOrder;
 
47
 
 
48
 
 
49
//////////////
 
50
// renderers
 
51
 
 
52
class CORE_EXPORT QgsFeatureRendererV2
 
53
{
 
54
  public:
 
55
    // renderer takes ownership of its symbols!
 
56
 
 
57
    //! return a new renderer - used by default in vector layers
 
58
    static QgsFeatureRendererV2* defaultRenderer( QGis::GeometryType geomType );
 
59
 
 
60
    QString type() const { return mType; }
 
61
 
 
62
    // to be overridden
 
63
    virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature ) = 0;
 
64
 
 
65
    virtual void startRender( QgsRenderContext& context, const QgsVectorLayer *vlayer ) = 0;
 
66
 
 
67
    virtual void stopRender( QgsRenderContext& context ) = 0;
 
68
 
 
69
    virtual QList<QString> usedAttributes() = 0;
 
70
 
 
71
    virtual ~QgsFeatureRendererV2() {}
 
72
 
 
73
    virtual QgsFeatureRendererV2* clone() = 0;
 
74
 
 
75
    void renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool drawVertexMarker = false );
 
76
 
 
77
    //! for debugging
 
78
    virtual QString dump();
 
79
 
 
80
    //! for symbol levels
 
81
    virtual QgsSymbolV2List symbols() = 0;
 
82
 
 
83
    bool usingSymbolLevels() const { return mUsingSymbolLevels; }
 
84
    void setUsingSymbolLevels( bool usingSymbolLevels ) { mUsingSymbolLevels = usingSymbolLevels; }
 
85
 
 
86
    //! create a renderer from XML element
 
87
    static QgsFeatureRendererV2* load( QDomElement& symbologyElem );
 
88
 
 
89
    //! store renderer info to XML element
 
90
    virtual QDomElement save( QDomDocument& doc );
 
91
 
 
92
    //! return a list of symbology items for the legend
 
93
    virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
 
94
 
 
95
    //! set type and size of editing vertex markers for subsequent rendering
 
96
    void setVertexMarkerAppearance( int type, int size );
 
97
 
 
98
  protected:
 
99
    QgsFeatureRendererV2( QString type );
 
100
 
 
101
    //! render editing vertex marker at specified point
 
102
    void renderVertexMarker( QPointF& pt, QgsRenderContext& context );
 
103
    //! render editing vertex marker for a polyline
 
104
    void renderVertexMarkerPolyline( QPolygonF& pts, QgsRenderContext& context );
 
105
    //! render editing vertex marker for a polygon
 
106
    void renderVertexMarkerPolygon( QPolygonF& pts, QList<QPolygonF>* rings, QgsRenderContext& context );
 
107
 
 
108
    QString mType;
 
109
 
 
110
    bool mUsingSymbolLevels;
 
111
 
 
112
    /** The current type of editing marker */
 
113
    int mCurrentVertexMarkerType;
 
114
    /** The current size of editing marker */
 
115
    int mCurrentVertexMarkerSize;
 
116
};
 
117
 
 
118
 
 
119
#endif