/
qgscomposerpicture.h
110 lines (91 loc) · 4.03 KB
/
qgscomposerpicture.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/***************************************************************************
qgscomposerpicture.h
-------------------
begin : September 2005
copyright : (C) 2005 by Radim Blazek
email : radim.blazek@gmail.com
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSCOMPOSERPICTURE_H
#define QGSCOMPOSERPICTURE_H
#include "qgscomposeritem.h"
#include <QFile>
#include <QImage>
/** \ingroup MapComposer
* A composer class that displays svg files or raster format (jpg, png, ...)
* */
class CORE_EXPORT QgsComposerPicture: public QgsComposerItem
{
Q_OBJECT
public:
QgsComposerPicture( QgsComposition *composition );
~QgsComposerPicture();
/**Reimplementation of QCanvasItem::paint*/
void paint( QPainter* painter, const QStyleOptionGraphicsItem* itemStyle, QWidget* pWidget );
/**Sets the source file of the image (may be svg or a raster format)*/
void setPictureFile( const QString& path );
QString pictureFile() const;
/**Sets this items bound in scene coordinates such that 1 item size units
corresponds to 1 scene size unit and resizes the svg symbol / image*/
void setSceneRect( const QRectF& rectangle );
/** stores state in Dom element
* @param elem is Dom element corresponding to 'Composer' tag
* @param doc is Dom document
*/
bool writeXML( QDomElement& elem, QDomDocument & doc ) const;
/** sets state from Dom document
* @param itemElem is Dom node corresponding to item tag
* @param doc is Dom document
*/
bool readXML( const QDomElement& itemElem, const QDomDocument& doc );
/**Sets the map object for rotation (by id). A value of -1 disables the map rotation*/
void setRotationMap( int composerMapId );
/**Returns the id of the rotation map*/
int rotationMap() const;
/**True if the rotation is taken from a map item*/
bool useRotationMap() const {return mRotationMap;}
public slots:
/**Sets the rotation and adapts the item rect*/
virtual void setRotation( double r );
private:
enum Mode //SVG or raster graphic format
{
SVG,
RASTER,
Unknown
};
//default constructor is forbidden
QgsComposerPicture();
/**Calculates bounding rect for svg file (mSourcefile) such that aspect ratio is correct*/
QRectF boundedSVGRect( double deviceWidth, double deviceHeight );
/**Calculates bounding rect for image such that aspect ratio is correct*/
QRectF boundedImageRect( double deviceWidth, double deviceHeight );
/**Updates content of mImage using svg generator*/
void updateImageFromSvg();
QImage mImage;
QFile mSourceFile;
Mode mMode;
/**False if image needs to be rendered from svg*/
bool mSvgCacheUpToDate;
int mCachedDpi; //store dpis for which the svg cache is valid
double mCachedRotation; //store last rotation value to generate new pixmap from svg on change
double mCachedViewScaleFactor;
QSize mDefaultSvgSize;
/**Map that sets the rotation (or 0 if this picture uses map independent rotation)*/
const QgsComposerMap* mRotationMap;
/**Width of the picture (in mm)*/
double mPictureWidth;
/**Height of the picture (in mm)*/
double mPictureHeight;
signals:
/**Tell the configuration widget that the settings need to be updated*/
void settingsChanged();
};
#endif