00001
00002 #ifndef QGSRENDERERV2_H
00003 #define QGSRENDERERV2_H
00004
00005 #include "qgis.h"
00006
00007 #include <QList>
00008 #include <QString>
00009 #include <QVariant>
00010 #include <QPair>
00011 #include <QPixmap>
00012
00013 class QDomDocument;
00014 class QDomElement;
00015
00016 class QgsSymbolV2;
00017 class QgsRenderContext;
00018 class QgsFeature;
00019 class QgsVectorLayer;
00020
00021 typedef QList<QgsSymbolV2*> QgsSymbolV2List;
00022 typedef QMap<QString, QgsSymbolV2* > QgsSymbolV2Map;
00023
00024 typedef QList< QPair<QString, QPixmap> > QgsLegendSymbologyList;
00025 typedef QList< QPair<QString, QgsSymbolV2*> > QgsLegendSymbolList;
00026
00027 #define RENDERER_TAG_NAME "renderer-v2"
00028
00030
00031
00032 class CORE_EXPORT QgsSymbolV2LevelItem
00033 {
00034 public:
00035 QgsSymbolV2LevelItem( QgsSymbolV2* symbol, int layer ) : mSymbol( symbol ), mLayer( layer ) {}
00036 QgsSymbolV2* symbol() { return mSymbol; }
00037 int layer() { return mLayer; }
00038 protected:
00039 QgsSymbolV2* mSymbol;
00040 int mLayer;
00041 };
00042
00043
00044 typedef QList< QgsSymbolV2LevelItem > QgsSymbolV2Level;
00045
00046
00047 typedef QList< QgsSymbolV2Level > QgsSymbolV2LevelOrder;
00048
00049
00051
00052
00053 class CORE_EXPORT QgsFeatureRendererV2
00054 {
00055 public:
00056
00057
00059 static QgsFeatureRendererV2* defaultRenderer( QGis::GeometryType geomType );
00060
00061 QString type() const { return mType; }
00062
00063
00064 virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature ) = 0;
00065
00066 virtual void startRender( QgsRenderContext& context, const QgsVectorLayer *vlayer ) = 0;
00067
00068 virtual void stopRender( QgsRenderContext& context ) = 0;
00069
00070 virtual QList<QString> usedAttributes() = 0;
00071
00072 virtual ~QgsFeatureRendererV2() {}
00073
00074 virtual QgsFeatureRendererV2* clone() = 0;
00075
00076 virtual void renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false );
00077
00079 virtual QString dump();
00080
00082 virtual QgsSymbolV2List symbols() = 0;
00083
00084 bool usingSymbolLevels() const { return mUsingSymbolLevels; }
00085 void setUsingSymbolLevels( bool usingSymbolLevels ) { mUsingSymbolLevels = usingSymbolLevels; }
00086
00088 static QgsFeatureRendererV2* load( QDomElement& symbologyElem );
00089
00091 virtual QDomElement save( QDomDocument& doc );
00092
00094 virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
00095
00098 virtual QgsLegendSymbolList legendSymbolItems();
00099
00101 void setVertexMarkerAppearance( int type, int size );
00102
00103 protected:
00104 QgsFeatureRendererV2( QString type );
00105
00107 void renderVertexMarker( QPointF& pt, QgsRenderContext& context );
00109 void renderVertexMarkerPolyline( QPolygonF& pts, QgsRenderContext& context );
00111 void renderVertexMarkerPolygon( QPolygonF& pts, QList<QPolygonF>* rings, QgsRenderContext& context );
00112
00113 static unsigned char* _getPoint( QPointF& pt, QgsRenderContext& context, unsigned char* wkb );
00114 static unsigned char* _getLineString( QPolygonF& pts, QgsRenderContext& context, unsigned char* wkb );
00115 static unsigned char* _getPolygon( QPolygonF& pts, QList<QPolygonF>& holes, QgsRenderContext& context, unsigned char* wkb );
00116
00117 QString mType;
00118
00119 bool mUsingSymbolLevels;
00120
00122 int mCurrentVertexMarkerType;
00124 int mCurrentVertexMarkerSize;
00125 };
00126
00127
00128 #endif