Quantum GIS API Documentation  1.7.4
src/core/symbology-ng/qgsrendererv2.h
Go to the documentation of this file.
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 // symbol levels
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 // every level has list of items: symbol + symbol layer num
00044 typedef QList< QgsSymbolV2LevelItem > QgsSymbolV2Level;
00045 
00046 // this is a list of levels
00047 typedef QList< QgsSymbolV2Level > QgsSymbolV2LevelOrder;
00048 
00049 
00051 // renderers
00052 
00053 class CORE_EXPORT QgsFeatureRendererV2
00054 {
00055   public:
00056     // renderer takes ownership of its symbols!
00057 
00059     static QgsFeatureRendererV2* defaultRenderer( QGis::GeometryType geomType );
00060 
00061     QString type() const { return mType; }
00062 
00063     // to be overridden
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 
00087     bool usingFirstRule() const { return mUsingFirstRule; }
00088     void setUsingFirstRule( bool usingFirstRule ) { mUsingFirstRule = usingFirstRule; }
00089 
00090 
00092     static QgsFeatureRendererV2* load( QDomElement& symbologyElem );
00093 
00095     virtual QDomElement save( QDomDocument& doc );
00096 
00098     virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
00099 
00102     virtual QgsLegendSymbolList legendSymbolItems();
00103 
00105     void setVertexMarkerAppearance( int type, int size );
00106 
00107   protected:
00108     QgsFeatureRendererV2( QString type );
00109 
00111     void renderVertexMarker( QPointF& pt, QgsRenderContext& context );
00113     void renderVertexMarkerPolyline( QPolygonF& pts, QgsRenderContext& context );
00115     void renderVertexMarkerPolygon( QPolygonF& pts, QList<QPolygonF>* rings, QgsRenderContext& context );
00116 
00117     static unsigned char* _getPoint( QPointF& pt, QgsRenderContext& context, unsigned char* wkb );
00118     static unsigned char* _getLineString( QPolygonF& pts, QgsRenderContext& context, unsigned char* wkb );
00119     static unsigned char* _getPolygon( QPolygonF& pts, QList<QPolygonF>& holes, QgsRenderContext& context, unsigned char* wkb );
00120 
00121     QString mType;
00122 
00123     bool mUsingSymbolLevels;
00124     bool mUsingFirstRule;
00125 
00127     int mCurrentVertexMarkerType;
00129     int mCurrentVertexMarkerSize;
00130 };
00131 
00132 
00133 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines