QGIS API Documentation  2.3.0-Master
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
qgscomposermap.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgscomposermap.h
3  -------------------
4  begin : January 2005
5  copyright : (C) 2005 by Radim Blazek
6  email : blazek@itc.it
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 #ifndef QGSCOMPOSERMAP_H
18 #define QGSCOMPOSERMAP_H
19 
20 //#include "ui_qgscomposermapbase.h"
21 #include "qgscomposeritem.h"
22 #include "qgsrectangle.h"
23 #include <QFont>
24 #include <QGraphicsRectItem>
25 
26 class QgsComposition;
27 class QgsMapRenderer;
28 class QgsMapToPixel;
29 class QDomNode;
30 class QDomDocument;
31 class QGraphicsView;
32 class QPainter;
33 class QgsFillSymbolV2;
34 class QgsLineSymbolV2;
35 class QgsVectorLayer;
36 
41 // NOTE: QgsComposerMapBase must be first, otherwise does not compile
42 class CORE_EXPORT QgsComposerMap : public QgsComposerItem
43 {
44  Q_OBJECT
45 
46  public:
48  QgsComposerMap( QgsComposition *composition, int x, int y, int width, int height );
50  QgsComposerMap( QgsComposition *composition );
51  virtual ~QgsComposerMap();
52 
54  virtual int type() const { return ComposerMap; }
55 
58  {
59  Cache = 0, // Use raster cache
60  Render, // Render the map
61  Rectangle // Display only rectangle
62  };
63 
64  enum GridStyle
65  {
66  Solid = 0, //solid lines
67  Cross //only draw line crossings
68  };
69 
71  {
72  InsideMapFrame = 0,
74  Disabled
75  };
76 
78  {
79  Horizontal = 0,
82  BoundaryDirection
83  };
84 
86  {
87  Decimal = 0,
89  DegreeMinuteSecond
90  };
91 
93  {
94  NoGridFrame = 0,
95  Zebra //black / white pattern
96  };
97 
99  enum Border
100  {
104  Top
105  };
106 
114  void draw( QPainter *painter, const QgsRectangle& extent, const QSizeF& size, double dpi, double* forceWidthScale = 0 );
115 
117  void paint( QPainter* painter, const QStyleOptionGraphicsItem* itemStyle, QWidget* pWidget );
118 
120  void cache();
121 
123  int id() const {return mId;}
124 
126  bool isDrawing() const {return mDrawing;}
127 
129  void resize( double dx, double dy );
130 
134  void moveContent( double dx, double dy );
135 
140  void zoomContent( int delta, double x, double y );
141 
143  void setSceneRect( const QRectF& rectangle );
144 
146  double scale() const;
147 
149  void setNewScale( double scaleDenominator );
150 
152  void setNewExtent( const QgsRectangle& extent );
153 
157  void setNewAtlasFeatureExtent( const QgsRectangle& extent );
158 
160  void toggleAtlasPreview();
161 
165  QgsRectangle* currentMapExtent();
166  const QgsRectangle* currentMapExtent() const;
167 
168  PreviewMode previewMode() const {return mPreviewMode;}
169  void setPreviewMode( PreviewMode m );
170 
173  bool keepLayerSet() const {return mKeepLayerSet;}
176  void setKeepLayerSet( bool enabled ) {mKeepLayerSet = enabled;}
177 
180  QStringList layerSet() const {return mLayerSet;}
183  void setLayerSet( const QStringList& layerSet ) {mLayerSet = layerSet;}
185  void storeCurrentLayerSet();
186 
187  // Set cache outdated
188  void setCacheUpdated( bool u = false );
189 
190  QgsRectangle extent() const {return mExtent;}
191 
193  Q_DECL_DEPRECATED const QgsMapRenderer* mapRenderer() const;
194 
196  void setOffset( double xOffset, double yOffset );
197 
199  bool containsWMSLayer() const;
200 
202  bool containsAdvancedEffects() const;
203 
208  bool writeXML( QDomElement& elem, QDomDocument & doc ) const;
209 
214  bool readXML( const QDomElement& itemElem, const QDomDocument& doc );
215 
218  void setGridEnabled( bool enabled ) {mGridEnabled = enabled;}
219  bool gridEnabled() const { return mGridEnabled; }
220 
223  void setGridStyle( GridStyle style ) {mGridStyle = style;}
224  GridStyle gridStyle() const { return mGridStyle; }
225 
228  void setGridIntervalX( double interval ) { mGridIntervalX = interval;}
229  double gridIntervalX() const { return mGridIntervalX; }
230 
233  void setGridIntervalY( double interval ) { mGridIntervalY = interval;}
234  double gridIntervalY() const { return mGridIntervalY; }
235 
238  void setGridOffsetX( double offset ) { mGridOffsetX = offset; }
239  double gridOffsetX() const { return mGridOffsetX; }
240 
243  void setGridOffsetY( double offset ) { mGridOffsetY = offset; }
244  double gridOffsetY() const { return mGridOffsetY; }
245 
248  void setGridPen( const QPen& p );
249  QPen gridPen() const;
250 
253  void setGridPenWidth( double w );
254 
257  void setGridPenColor( const QColor& c );
258 
261  void setGridAnnotationFont( const QFont& f ) { mGridAnnotationFont = f; }
262  QFont gridAnnotationFont() const { return mGridAnnotationFont; }
263 
266  void setAnnotationFontColor( const QColor& c ) {mGridAnnotationFontColor = c;}
269  QColor annotationFontColor() const {return mGridAnnotationFontColor;}
270 
273  void setGridAnnotationPrecision( int p ) {mGridAnnotationPrecision = p;}
274  int gridAnnotationPrecision() const {return mGridAnnotationPrecision;}
275 
278  void setShowGridAnnotation( bool show ) {mShowGridAnnotation = show;}
279  bool showGridAnnotation() const {return mShowGridAnnotation;}
280 
281  void setGridAnnotationPosition( GridAnnotationPosition p, QgsComposerMap::Border border );
282  GridAnnotationPosition gridAnnotationPosition( QgsComposerMap::Border border ) const;
283 
286  void setAnnotationFrameDistance( double d ) {mAnnotationFrameDistance = d;}
287  double annotationFrameDistance() const {return mAnnotationFrameDistance;}
288 
289  void setGridAnnotationDirection( GridAnnotationDirection d, QgsComposerMap::Border border );
290  GridAnnotationDirection gridAnnotationDirection( QgsComposerMap::Border border ) const;
291 
292  void setGridAnnotationFormat( GridAnnotationFormat f ) { mGridAnnotationFormat = f; }
293  GridAnnotationFormat gridAnnotationFormat() const { return mGridAnnotationFormat; }
294 
297  void setGridFrameStyle( GridFrameStyle style ) { mGridFrameStyle = style; }
298  GridFrameStyle gridFrameStyle() const { return mGridFrameStyle; }
299 
302  void setGridFrameWidth( double w ) { mGridFrameWidth = w; }
303  double gridFrameWidth() const { return mGridFrameWidth; }
304 
307  void setGridFramePenSize( double w ) { mGridFramePenThickness = w; }
308  double gridFramePenSize() const { return mGridFramePenThickness; }
309 
312  void setGridFramePenColor( const QColor& c ) { mGridFramePenColor = c;}
315  QColor gridFramePenColor() const {return mGridFramePenColor;}
316 
319  void setGridFrameFillColor1( const QColor& c ) { mGridFrameFillColor1 = c;}
322  QColor gridFrameFillColor1() const {return mGridFrameFillColor1;}
323 
326  void setGridFrameFillColor2( const QColor& c ) { mGridFrameFillColor2 = c;}
329  QColor gridFrameFillColor2() const {return mGridFrameFillColor2;}
330 
333  QRectF boundingRect() const;
336  void updateBoundingRect();
337 
338  /* reimplement setFrameOutlineWidth, so that updateBoundingRect() is called after setting the frame width */
339  virtual void setFrameOutlineWidth( double outlineWidth );
340 
343  void setCrossLength( double l ) {mCrossLength = l;}
344  double crossLength() {return mCrossLength;}
345 
350  void setRotation( double r );
354  double rotation() const { return mMapRotation;};
355 
359  void setMapRotation( double r );
361  double mapRotation() const { return mMapRotation;};
362 
363  void updateItem();
364 
366  void setMapCanvas( QGraphicsView* canvas ) { mMapCanvas = canvas; }
367 
368  void setDrawCanvasItems( bool b ) { mDrawCanvasItems = b; }
369  bool drawCanvasItems() const { return mDrawCanvasItems; }
370 
372  double mapUnitsToMM() const;
373 
376  void setOverviewFrameMap( int mapId );
379  int overviewFrameMapId() const { return mOverviewFrameMapId; }
380 
381  void setOverviewFrameMapSymbol( QgsFillSymbolV2* symbol );
382  QgsFillSymbolV2* overviewFrameMapSymbol() { return mOverviewFrameMapSymbol; }
383 
385  QPainter::CompositionMode overviewBlendMode() const {return mOverviewBlendMode;}
387  void setOverviewBlendMode( QPainter::CompositionMode blendMode );
388 
390  bool overviewInverted() const {return mOverviewInverted;}
392  void setOverviewInverted( bool inverted );
393 
395  bool overviewCentered() const { return mOverviewCentered; }
397  void setOverviewCentered( bool centered );
398 
399  void setGridLineSymbol( QgsLineSymbolV2* symbol );
400  QgsLineSymbolV2* gridLineSymbol() { return mGridLineSymbol; }
401 
403  QPainter::CompositionMode gridBlendMode() const {return mGridBlendMode;}
405  void setGridBlendMode( QPainter::CompositionMode blendMode );
406 
409  void assignFreeId();
410 
415  bool imageSizeConsideringRotation( double& width, double& height ) const;
420  bool cornerPointOnRotatedAndScaledRect( double& x, double& y, double width, double height ) const;
425  void sizeChangedByRotation( double& width, double& height );
426 
428  bool atlasDriven() const { return mAtlasDriven; }
430  void setAtlasDriven( bool enabled ) { mAtlasDriven = enabled; }
431 
433  bool atlasFixedScale() const { return mAtlasFixedScale; }
435  void setAtlasFixedScale( bool fixed ) { mAtlasFixedScale = fixed; }
436 
438  double atlasMargin() const { return mAtlasMargin; }
440  void setAtlasMargin( double margin ) { mAtlasMargin = margin; }
441 
443  void setUpdatesEnabled( bool enabled ) { mUpdatesEnabled = enabled; }
444 
446  bool updatesEnabled() const { return mUpdatesEnabled; }
447 
453  int numberExportLayers() const;
454 
455  signals:
456  void extentChanged();
457 
459  void mapRotationChanged( double newRotation );
460 
462  void preparedForAtlas();
463 
464  public slots:
465 
467  void updateCachedImage( );
469  void renderModeUpdateCachedImage();
470 
471  void overviewExtentChanged();
472 
473  private:
474 
476  {
477  Longitude = 0,
478  Latitude
479  };
480 
482  int mId;
483 
484  // Map region in map units realy used for rendering
485  // It can be the same as mUserExtent, but it can be bigger in on dimension if mCalculate==Scale,
486  // so that full rectangle in paper is used.
488 
489  // Current temporary map region in map units. This is overwritten when atlas feature changes. It's also
490  // used when the user changes the map extent and an atlas preview is enabled. This allows the user
491  // to manually tweak each atlas preview page without affecting the actual original map extent.
493 
494  // Cache used in composer preview
495  QImage mCacheImage;
496 
497  // Is cache up to date
499 
502 
505 
507  bool mDrawing;
508 
510  double mXOffset;
512  double mYOffset;
513 
515  double mMapRotation;
516 
519 
521  QStringList mLayerSet;
522 
529  QPainter::CompositionMode mOverviewBlendMode;
533 
536 
538  void connectUpdateSlot();
539 
541  void syncLayerSet();
542 
552  double mGridOffsetX;
554  double mGridOffsetY;
564  QPainter::CompositionMode mGridBlendMode;
565 
574 
577 
586 
588 
595 
599  double mCrossLength;
600  QGraphicsView* mMapCanvas;
603 
606  void adjustExtentToItemShape( double itemWidth, double itemHeight, QgsRectangle& extent ) const;
607 
613  double mAtlasMargin;
614 
616  QStringList layersToRender() const;
617 
619  void drawGrid( QPainter* p );
620  void drawGridFrame( QPainter* p, const QList< QPair< double, QLineF > >& hLines, const QList< QPair< double, QLineF > >& vLines );
625  void drawCoordinateAnnotations( QPainter* p, const QList< QPair< double, QLineF > >& hLines, const QList< QPair< double, QLineF > >& vLines );
626  void drawCoordinateAnnotation( QPainter* p, const QPointF& pos, QString annotationString );
632  void drawAnnotation( QPainter* p, const QPointF& pos, int rotation, const QString& annotationText );
633  QString gridAnnotationString( double value, AnnotationCoordinate coord ) const;
636  int xGridLines( QList< QPair< double, QLineF > >& lines ) const;
639  int yGridLines( QList< QPair< double, QLineF > >& lines ) const;
641  QgsRectangle transformedExtent() const;
643  QPolygonF transformedMapPolygon() const;
644  double maxExtension() const;
648  void mapPolygon( QPolygonF& poly ) const;
650  void mapPolygon( const QgsRectangle& extent, QPolygonF& poly ) const;
651 
653  void requestedExtent( QgsRectangle& extent ) const;
657  void transformShift( double& xShift, double& yShift ) const;
659  QPointF mapToItemCoords( const QPointF& mapCoords ) const;
661  Border borderForLineCoord( const QPointF& p ) const;
662 
663  void drawCanvasItems( QPainter* painter, const QStyleOptionGraphicsItem* itemStyle );
664  void drawCanvasItem( QGraphicsItem* item, QPainter* painter, const QStyleOptionGraphicsItem* itemStyle );
665  QPointF composerMapPosForItem( const QGraphicsItem* item ) const;
666  void sortGridLinesOnBorders( const QList< QPair< double, QLineF > >& hLines, const QList< QPair< double, QLineF > >& vLines, QMap< double, double >& leftFrameEntries,
667  QMap< double, double >& rightFrameEntries, QMap< double, double >& topFrameEntries, QMap< double, double >& bottomFrameEntries ) const;
668  void drawGridFrameBorder( QPainter* p, const QMap< double, double >& borderPos, Border border );
669  void drawGridLine( const QLineF& line, QPainter* p );
670  void drawOverviewMapExtent( QPainter* p );
671  void createDefaultOverviewFrameSymbol();
672  void createDefaultGridLineSymbol();
673  void initGridAnnotationFormatFromProject();
674 
675  enum PartType
676  {
682  SelectionBoxes
683  };
684 
686  bool shouldDrawPart( PartType part ) const;
687 };
688 
689 #endif
690 
void setGridFrameWidth(double w)
Set grid frame width.
bool mAtlasFixedScale
True if map uses a fixed scale when controlled by an atlas.
int mOverviewFrameMapId
Id of map which displays its extent rectangle into this composer map (overview map functionality)...
double mGridFrameWidth
double mXOffset
Offset in x direction for showing map cache image.
bool mGridEnabled
True if coordinate grid has to be displayed.
bool imageSizeConsideringRotation(double &width, double &height, double rotation) const
Calculates width and hight of the picture (in mm) such that it fits into the item frame with the give...
double outlineWidth
Definition: qgssvgcache.cpp:78
A rectangle specified with double values.
Definition: qgsrectangle.h:35
bool mDrawing
set to true if in state of drawing.
bool updatesEnabled() const
Returns whether updates to the composer map are enabled.
double mGridIntervalY
Grid line interval in y-direction (map units)
double mMapRotation
Map rotation.
virtual bool readXML(const QDomElement &itemElem, const QDomDocument &doc)=0
sets state from Dom document
void setGridIntervalY(double interval)
Sets coordinate interval in y-direction for composergrid.
QgsLineSymbolV2 * gridLineSymbol()
void setGridAnnotationFormat(GridAnnotationFormat f)
void setGridFrameFillColor1(const QColor &c)
Sets first fill color for grid zebra frame.
double gridIntervalX() const
virtual void setRotation(double r)
Sets the item rotation.
void setGridEnabled(bool enabled)
Enables a coordinate grid that is shown on top of this composermap.
double gridFramePenSize() const
QStringList mLayerSet
Stored layer list (used if layer live-link mKeepLayerSet is disabled)
QFont mGridAnnotationFont
Font for grid line annotation.
double atlasMargin() const
Returns the margin size (percentage) used when the map is in atlas mode.
QColor gridFrameFillColor1() const
Get first fill color for grid zebra frame.
bool mDrawCanvasItems
True if annotation items, rubber band, etc.
QStringList layerSet() const
Getter for stored layer set that is used if mKeepLayerSet is true.
void setAnnotationFontColor(const QColor &c)
Sets font color for grid annotations.
bool showGridAnnotation() const
void setGridStyle(GridStyle style)
Sets coordinate grid style to solid or cross.
A item that forms part of a map composition.
Border
Enum for different frame borders.
QPainter::CompositionMode mOverviewBlendMode
Blend mode for overview.
QGraphicsView * mMapCanvas
void setMapCanvas(QGraphicsView *canvas)
Sets canvas pointer (necessary to query and draw map canvas items)
double annotationFrameDistance() const
A non GUI class for rendering a map layer set onto a QPainter.
bool mShowGridAnnotation
True if coordinate values should be drawn.
double gridOffsetX() const
double mapRotation() const
Returns the rotation used for drawing the map within the composer item.
bool mOverviewCentered
Centering mode for overview.
GridFrameStyle mGridFrameStyle
QColor mGridFrameFillColor1
QColor mGridFramePenColor
void setGridAnnotationPrecision(int p)
Sets coordinate precision for grid annotations.
bool isDrawing() const
True if a draw is already in progress.
int mGridAnnotationPrecision
Digits after the dot.
QFont gridAnnotationFont() const
void setAtlasMargin(double margin)
Sets the margin size (percentage) used when the map is in atlas mode.
bool overviewInverted() const
Returns true if the overview frame is inverted.
virtual int type() const
return correct graphics item type.
QPainter::CompositionMode gridBlendMode() const
Returns the grid's blending mode.
QgsRectangle mExtent
Perform transforms between map coordinates and device coordinates.
Definition: qgsmaptopixel.h:33
QgsLineSymbolV2 * mGridLineSymbol
GridAnnotationDirection mLeftGridAnnotationDirection
Annotation direction on left side ( horizontal or vertical )
virtual void moveContent(double dx, double dy)
Move Content of item.
QColor gridFrameFillColor2() const
Get second fill color for grid zebra frame.
double mAnnotationFrameDistance
Distance between map frame and annotation.
int overviewFrameMapId() const
Returns id of overview frame (or -1 if no overfiew frame)
double gridFrameWidth() const
GridAnnotationDirection mRightGridAnnotationDirection
Annotation direction on right side ( horizontal or vertical )
QRectF mCurrentRectangle
Current bounding rectangle.
double mCrossLength
The length of the cross sides for mGridStyle Cross.
double mGridFramePenThickness
void setGridAnnotationFont(const QFont &f)
Sets font for grid annotations.
double mGridOffsetY
Grid line offset in y-direction.
QColor annotationFontColor() const
Get font color for grid annotations.
virtual void updateItem()
Updates item, with the possibility to do custom update for subclasses.
QPainter::CompositionMode overviewBlendMode() const
Returns the overview's blending mode.
bool drawCanvasItems() const
void setAnnotationFrameDistance(double d)
Sets distance between map frame and annotations.
double rotation() const
Returns the rotation used for drawing the map within the composer item.
double mYOffset
Offset in y direction for showing map cache image.
virtual void setFrameOutlineWidth(double outlineWidth)
Sets frame outline width.
QColor mGridFrameFillColor2
void setGridFrameFillColor2(const QColor &c)
Sets second fill color for grid zebra frame.
void setGridIntervalX(double interval)
Sets coordinate interval in x-direction for composergrid.
GridFrameStyle gridFrameStyle() const
bool atlasFixedScale() const
Returns true if the map uses a fixed scale when in atlas mode.
virtual int numberExportLayers() const
Get the number of layers that this item requires for exporting as layers.
double mGridIntervalX
Grid line interval in x-direction (map units)
GridAnnotationPosition mTopGridAnnotationPosition
Annotation position for top map side (inside / outside / not shown)
void setGridFramePenSize(double w)
Set grid frame pen thickness.
bool mAtlasDriven
True if map is being controlled by an atlas.
PreviewMode
Preview style.
GridAnnotationPosition mLeftGridAnnotationPosition
Annotation position for left map side (inside / outside / not shown)
GridAnnotationFormat mGridAnnotationFormat
Graphics scene for map printing.
QColor gridFramePenColor() const
Get pen color for grid frame.
GridAnnotationFormat gridAnnotationFormat() const
Object representing map window.
GridStyle mGridStyle
Solid or crosses.
GridStyle gridStyle() const
QgsFillSymbolV2 * mOverviewFrameMapSymbol
Drawing style for overview farme.
void setUpdatesEnabled(bool enabled)
Sets whether updates to the composer map are enabled.
GridAnnotationPosition mRightGridAnnotationPosition
Annotation position for right map side (inside / outside / not shown)
GridAnnotationDirection mTopGridAnnotationDirection
Annotation direction on top side ( horizontal or vertical )
PreviewMode previewMode() const
int gridAnnotationPrecision() const
void setCrossLength(double l)
Sets length of the cros segments (if grid style is cross)
bool gridEnabled() const
virtual void zoomContent(int delta, double x, double y)
Zoom content of item.
int id() const
Get identification number.
double mAtlasMargin
Margin size for atlas driven extents (percentage of feature size)
bool mKeepLayerSet
Flag if layers to be displayed should be read from qgis canvas (true) or from stored list in mLayerSe...
bool cornerPointOnRotatedAndScaledRect(double &x, double &y, double width, double height, double rotation) const
Calculates corner point after rotation and scaling.
double mGridOffsetX
Grid line offset in x-direction.
QgsFillSymbolV2 * overviewFrameMapSymbol()
QgsRectangle extent() const
GridAnnotationDirection mBottomGridAnnotationDirection
Annotation direction on bottom side ( horizontal or vertical )
int mId
Unique identifier.
void setLayerSet(const QStringList &layerSet)
Setter for stored layer set that is used if mKeepLayerSet is true.
bool mUpdatesEnabled
Whether updates to the map are enabled.
void setShowGridAnnotation(bool show)
Sets flag if grid annotation should be shown.
void setDrawCanvasItems(bool b)
virtual void setSceneRect(const QRectF &rectangle)
Sets this items bound in scene coordinates such that 1 item size units corresponds to 1 scene size un...
double gridIntervalY() const
QgsRectangle mAtlasFeatureExtent
void setAtlasFixedScale(bool fixed)
Set to true if the map should use a fixed scale when in atlas mode.
void setKeepLayerSet(bool enabled)
Setter for flag that determines if the stored layer set should be used or the current layer set of th...
double crossLength()
double gridOffsetY() const
void setGridOffsetX(double offset)
Sets x-coordinate offset for composer grid.
bool atlasDriven() const
Returns true if the map extent is set to follow the current atlas feature.
GridAnnotationPosition mBottomGridAnnotationPosition
Annotation position for bottom map side (inside / outside / not shown)
void setAtlasDriven(bool enabled)
Set to true if the map extents should be set by the current atlas feature.
QColor mGridAnnotationFontColor
Font color for grid line annotation.
void setGridOffsetY(double offset)
Sets y-coordinate offset for composer grid.
bool keepLayerSet() const
Getter for flag that determines if the stored layer set should be used or the current layer set of th...
Represents a vector layer which manages a vector based data sets.
double size
Definition: qgssvgcache.cpp:77
void setGridFrameStyle(GridFrameStyle style)
Set grid frame style (NoGridFrame or Zebra)
PreviewMode mPreviewMode
Preview style.
virtual bool writeXML(QDomElement &elem, QDomDocument &doc) const =0
stores state in Dom element
QPainter::CompositionMode mGridBlendMode
Blend mode for grid.
int mNumCachedLayers
Number of layers when cache was created.
void setGridFramePenColor(const QColor &c)
Sets pen color for grid frame.
void sizeChangedByRotation(double &width, double &height, double rotation)
Calculates width / height of the bounding box of a rotated rectangle.
bool overviewCentered() const
Returns true if the extent is forced to center on the overview.