Quantum GIS API Documentation
1.7.4
|
00001 /*************************************************************************** 00002 qgslabel.h - render vector labels 00003 ------------------- 00004 begin : August 2004 00005 copyright : (C) 2004 by Radim Blazek 00006 email : blazek@itc.it 00007 ***************************************************************************/ 00008 /*************************************************************************** 00009 * * 00010 * This program is free software; you can redistribute it and/or modify * 00011 * it under the terms of the GNU General Public License as published by * 00012 * the Free Software Foundation; either version 2 of the License, or * 00013 * (at your option) any later version. * 00014 * * 00015 ***************************************************************************/ 00016 /* $Id$ */ 00017 #ifndef QGSLABEL_H 00018 #define QGSLABEL_H 00019 00020 #include <vector> 00021 00022 #include <QColor> 00023 #include <QList> 00024 #include <QMap> 00025 00026 #include "qgspoint.h" 00027 00028 class QDomNode; 00029 class QDomDocument; 00030 class QDomElement; 00031 class QString; 00032 class QPainter; 00033 class QPaintDevice; 00034 00035 class QgsFeature; 00036 class QgsField; 00037 class QgsLabelAttributes; 00038 00039 #include "qgsfield.h" 00040 #include "qgsrectangle.h" 00041 #include "qgsrendercontext.h" 00042 00043 typedef QList<int> QgsAttributeList; 00044 00045 typedef QMap<int, QgsField> QgsFieldMap; 00046 00052 class CORE_EXPORT QgsLabel 00053 { 00054 public: 00055 QgsLabel( const QgsFieldMap & fields ); 00056 00057 ~QgsLabel(); 00058 00059 /* Fields */ 00060 enum LabelField 00061 { 00062 Text = 0, 00063 Family, 00064 Size, 00065 SizeType, 00066 Bold, 00067 Italic, 00068 Underline, 00069 Color, 00070 XCoordinate, 00071 YCoordinate, 00072 XOffset, 00073 YOffset, 00074 Angle, 00075 Alignment, 00076 BufferEnabled, 00077 BufferSize, 00078 BufferColor, 00079 BufferBrush, 00080 BorderWidth, 00081 BorderColor, 00082 BorderStyle, 00083 MultilineEnabled, 00084 StrikeOut, // added in 1.5 00085 LabelFieldCount 00086 }; 00087 00088 struct labelpoint 00089 { 00090 QgsPoint p; 00091 double angle; 00092 }; 00093 00106 Q_DECL_DEPRECATED void renderLabel( QPainter* painter, const QgsRectangle& viewExtent, 00107 QgsCoordinateTransform* coordinateTransform, 00108 const QgsMapToPixel *transform, 00109 QgsFeature &feature, bool selected, QgsLabelAttributes *classAttributes = 0, 00110 double sizeScale = 1., double rasterScaleFactor = 1.0 ) 00111 { 00112 QgsRenderContext r; 00113 r.setExtent( viewExtent ); 00114 r.setCoordinateTransform( new QgsCoordinateTransform( coordinateTransform->sourceCrs(), coordinateTransform->destCRS() ) ); 00115 r.setMapToPixel( *transform ); 00116 r.setPainter( painter ); 00117 r.setScaleFactor( sizeScale ); 00118 r.setRasterScaleFactor( rasterScaleFactor ); 00119 renderLabel( r, feature, selected, classAttributes ); 00120 } 00121 00129 void renderLabel( QgsRenderContext &renderContext, QgsFeature &feature, bool selected, QgsLabelAttributes *classAttributes = 0 ); 00130 00134 void readXML( const QDomNode& node ); 00135 00137 void writeXML( QDomNode & label_node, QDomDocument & document ) const; 00138 00140 void addRequiredFields( QgsAttributeList& fields ) const; 00141 00143 void setFields( const QgsFieldMap & fields ); 00144 00146 QgsFieldMap & fields( void ); 00147 00151 Q_DECL_DEPRECATED QgsLabelAttributes *layerAttributes( void ); 00152 00157 QgsLabelAttributes *labelAttributes( void ); 00158 00160 void setLabelField( int attr, int fieldIndex ); 00161 00163 bool setLabelFieldName( int attr, QString name ); 00164 00166 QString labelField( int attr ) const; 00167 00173 QString fieldValue( int attr, QgsFeature& feature ); 00174 00176 void setMinScale( float theMinScale ); 00177 float minScale() const; 00178 00180 void setMaxScale( float theMaxScale ); 00181 float maxScale() const; 00182 00184 void setScaleBasedVisibility( bool theVisibilityFlag ); 00185 bool scaleBasedVisibility() const; 00186 00187 private: 00191 void renderLabel( QgsRenderContext &renderContext, QgsPoint point, 00192 QString text, QFont font, QPen pen, 00193 int dx, int dy, 00194 double xoffset, double yoffset, 00195 double ang, 00196 int width, int height, int alignment ); 00197 00198 bool readLabelField( QDomElement &el, int attr, QString prefix ); 00199 00201 void labelPoint( std::vector<labelpoint>&, QgsFeature &feature ); 00202 00204 unsigned char* labelPoint( labelpoint& point, unsigned char* wkb, size_t wkblen ); 00205 00207 QColor mSelectionColor; 00208 00210 QgsLabelAttributes *mLabelAttributes; 00211 00213 QgsFieldMap mField; 00214 00216 std::vector<QString> mLabelField; 00217 00219 std::vector<int> mLabelFieldIdx; 00220 00222 float mMinScale; 00224 float mMaxScale; 00226 bool mScaleBasedVisibility; 00227 }; 00228 00229 #endif