00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef QGSCOMPOSERLEGEND_H
00019 #define QGSCOMPOSERLEGEND_H
00020
00021 #include "qgscomposeritem.h"
00022 #include "qgslegendmodel.h"
00023
00024 class QgsSymbol;
00025 class QgsSymbolV2;
00026 class QgsComposerGroupItem;
00027 class QgsComposerLayerItem;
00028
00032 class CORE_EXPORT QgsComposerLegend: public QgsComposerItem
00033 {
00034 Q_OBJECT
00035
00036 public:
00037 QgsComposerLegend( QgsComposition* composition );
00038 ~QgsComposerLegend();
00039
00041 void paint( QPainter* painter, const QStyleOptionGraphicsItem* itemStyle, QWidget* pWidget );
00042
00044 QSizeF paintAndDetermineSize( QPainter* painter );
00045
00047 void adjustBoxSize();
00048
00050 QgsLegendModel* model() {return &mLegendModel;}
00051
00052
00053 void setTitle( const QString& t ) {mTitle = t;}
00054 QString title() const {return mTitle;}
00055
00056 QFont titleFont() const;
00057 void setTitleFont( const QFont& f );
00058
00059 QFont groupFont() const;
00060 void setGroupFont( const QFont& f );
00061
00062 QFont layerFont() const;
00063 void setLayerFont( const QFont& f );
00064
00065 QFont itemFont() const;
00066 void setItemFont( const QFont& f );
00067
00068 double boxSpace() const {return mBoxSpace;}
00069 void setBoxSpace( double s ) {mBoxSpace = s;}
00070
00071 double layerSpace() const {return mLayerSpace;}
00072 void setLayerSpace( double s ) {mLayerSpace = s;}
00073
00074 double symbolSpace() const {return mSymbolSpace;}
00075 void setSymbolSpace( double s ) {mSymbolSpace = s;}
00076
00077 double iconLabelSpace() const {return mIconLabelSpace;}
00078 void setIconLabelSpace( double s ) {mIconLabelSpace = s;}
00079
00080 double symbolWidth() const {return mSymbolWidth;}
00081 void setSymbolWidth( double w ) {mSymbolWidth = w;}
00082
00083 double symbolHeight() const {return mSymbolHeight;}
00084 void setSymbolHeight( double h ) {mSymbolHeight = h;}
00085
00087 void updateLegend();
00088
00093 bool writeXML( QDomElement& elem, QDomDocument & doc ) const;
00094
00099 bool readXML( const QDomElement& itemElem, const QDomDocument& doc );
00100
00101 public slots:
00103 void synchronizeWithModel();
00104
00105 protected:
00106 QString mTitle;
00107
00108
00109 QFont mTitleFont;
00110 QFont mGroupFont;
00111 QFont mLayerFont;
00112 QFont mItemFont;
00113
00115 double mBoxSpace;
00117 double mLayerSpace;
00119 double mSymbolSpace;
00121 double mIconLabelSpace;
00123 double mSymbolWidth;
00125 double mSymbolHeight;
00126
00127 QgsLegendModel mLegendModel;
00128
00129
00130 private:
00131 QgsComposerLegend();
00132
00134 void drawGroupItem( QPainter* p, QgsComposerGroupItem* groupItem, double& currentYCoord, double& maxXCoord );
00136 void drawLayerItem( QPainter* p, QgsComposerLayerItem* layerItem, double& currentYCoord, double& maxXCoord );
00137
00145 void drawLayerChildItems( QPainter* p, QStandardItem* layerItem, double& currentYCoord, double& maxXCoord, int layerOpacity = 255 );
00146
00149 void drawSymbol( QPainter* p, QgsSymbol* s, double currentYCoord, double& currentXPosition, double& symbolHeight, int layerOpacity = 255 ) const;
00150 void drawSymbolV2( QPainter* p, QgsSymbolV2* s, double currentYCoord, double& currentXPosition, double& symbolHeight, int layerOpacity = 255 ) const;
00151 void drawPointSymbol( QPainter*, QgsSymbol* s, double currentYCoord, double& currentXPosition, double& symbolHeight, int opacity = 255 ) const;
00152 void drawLineSymbol( QPainter*, QgsSymbol* s, double currentYCoord, double& currentXPosition, int opacity = 255 ) const;
00153 void drawPolygonSymbol( QPainter* p, QgsSymbol* s, double currentYCoord, double& currentXPosition, int opacity = 255 ) const;
00154
00156 QStringList layerIdList() const;
00157 };
00158
00159 #endif