QGIS API Documentation  2.14.0-Essen
qgscomposeritem.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgscomposeritem.h
3  -------------------
4  begin : January 2005
5  copyright : (C) 2005 by Radim Blazek
6  email : [email protected]
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 QGSCOMPOSERITEM_H
18 #define QGSCOMPOSERITEM_H
19 
20 #include "qgscomposeritemcommand.h"
21 #include "qgscomposereffect.h"
22 #include "qgscomposerobject.h"
23 #include "qgsmaprenderer.h" // for blend mode functions & enums
24 #include <QGraphicsRectItem>
25 #include <QObject>
26 
27 class QWidget;
28 class QDomDocument;
29 class QDomElement;
30 class QGraphicsLineItem;
32 class QgsDataDefined;
33 class QgsComposition;
35 
39 class CORE_EXPORT QgsComposerItem: public QgsComposerObject, public QGraphicsRectItem
40 {
41  Q_OBJECT
42  public:
43 
44  enum ItemType
45  {
46  // base class for the items
47  ComposerItem = UserType + 100,
48 
49  // derived classes
55  ComposerPaper, // QgsPaperItem
62  ComposerFrame
63  };
64 
67  {
77  NoAction
78  };
79 
81  {
90  LowerRight
91  };
92 
93  //note - must sync with QgsMapCanvas::WheelAction.
94  //TODO - QGIS 3.0 move QgsMapCanvas::WheelAction from GUI->CORE and remove this enum
97  enum ZoomMode
98  {
99  Zoom = 0,
102  NoZoom
103  };
104 
108  QgsComposerItem( QgsComposition* composition, bool manageZValue = true );
116  QgsComposerItem( qreal x, qreal y, qreal width, qreal height, QgsComposition* composition, bool manageZValue = true );
117  virtual ~QgsComposerItem();
118 
120  virtual int type() const override { return ComposerItem; }
121 
129  virtual bool isRemoved() const { return mRemovedFromComposition; }
130 
138  void setIsRemoved( const bool removed ) { mRemovedFromComposition = removed; }
139 
141  virtual void setSelected( bool s );
142 
144  virtual bool selected() const { return QGraphicsRectItem::isSelected(); }
145 
147  void move( double dx, double dy );
148 
152  virtual void moveContent( double dx, double dy ) { Q_UNUSED( dx ); Q_UNUSED( dy ); }
153 
160  Q_DECL_DEPRECATED virtual void zoomContent( int delta, double x, double y ) { Q_UNUSED( delta ); Q_UNUSED( x ); Q_UNUSED( y ); }
161 
168  virtual void zoomContent( const double factor, const QPointF point, const ZoomMode mode = QgsComposerItem::Zoom ) { Q_UNUSED( factor ); Q_UNUSED( point ); Q_UNUSED( mode ); }
169 
176  int page() const;
177 
184  QPointF pagePos() const;
185 
194  void updatePagePos( double newPageWidth, double newPageHeight );
195 
203  void setItemPosition( double x, double y, ItemPositionMode itemPoint = UpperLeft, int page = -1 );
204 
215  void setItemPosition( double x, double y, double width, double height, ItemPositionMode itemPoint = UpperLeft, bool posIncludesFrame = false, int page = -1 );
216 
219  ItemPositionMode lastUsedPositionMode() { return mLastUsedPositionMode; }
220 
223  virtual void setSceneRect( const QRectF& rectangle );
224 
226  bool _writeXML( QDomElement& itemElem, QDomDocument& doc ) const;
227 
229  bool _readXML( const QDomElement& itemElem, const QDomDocument& doc );
230 
238  bool hasFrame() const {return mFrame;}
239 
247  virtual void setFrameEnabled( const bool drawFrame );
248 
257  virtual void setFrameOutlineColor( const QColor& color );
258 
267  QColor frameOutlineColor() const { return pen().color(); }
268 
277  virtual void setFrameOutlineWidth( const double outlineWidth );
278 
287  double frameOutlineWidth() const { return pen().widthF(); }
288 
297  Qt::PenJoinStyle frameJoinStyle() const { return mFrameJoinStyle; }
298 
307  void setFrameJoinStyle( const Qt::PenJoinStyle style );
308 
316  virtual double estimatedFrameBleed() const;
317 
326  virtual QRectF rectWithFrame() const;
327 
333  bool hasBackground() const {return mBackground;}
334 
341  void setBackgroundEnabled( const bool drawBackground ) { mBackground = drawBackground; }
342 
348  QColor backgroundColor() const { return mBackgroundColor; }
349 
356  void setBackgroundColor( const QColor& backgroundColor );
357 
362  QPainter::CompositionMode blendMode() const { return mBlendMode; }
363 
368  void setBlendMode( const QPainter::CompositionMode blendMode );
369 
374  int transparency() const { return mTransparency; }
375 
380  void setTransparency( const int transparency );
381 
388  bool effectsEnabled() const { return mEffectsEnabled; }
389 
396  void setEffectsEnabled( const bool effectsEnabled );
397 
399  virtual void addItem( QgsComposerItem* item ) { Q_UNUSED( item ); }
400  virtual void removeItems() {}
401 
402  virtual void beginItemCommand( const QString& text ) { beginCommand( text ); }
403 
407  void beginCommand( const QString& commandText, QgsComposerMergeCommand::Context c = QgsComposerMergeCommand::Unknown );
408 
409  virtual void endItemCommand() { endCommand(); }
411  void endCommand();
412  void cancelCommand();
413 
414  //functions that encapsulate the workaround for the Qt font bug (that is to scale the font size up and then scale the
415  //painter down by the same factor for drawing
416 
421  Q_DECL_DEPRECATED void drawText( QPainter* p, double x, double y, const QString& text, const QFont& font, const QColor& c = QColor() ) const;
422 
433  Q_DECL_DEPRECATED void drawText( QPainter* p, const QRectF& rect, const QString& text, const QFont& font, Qt::AlignmentFlag halignment = Qt::AlignLeft, Qt::AlignmentFlag valignment = Qt::AlignTop, int flags = Qt::TextWordWrap ) const;
434 
438  Q_DECL_DEPRECATED double textWidthMillimeters( const QFont& font, const QString& text ) const;
439 
443  Q_DECL_DEPRECATED double fontHeightCharacterMM( const QFont& font, QChar c ) const;
444 
448  Q_DECL_DEPRECATED double fontAscentMillimeters( const QFont& font ) const;
449 
453  Q_DECL_DEPRECATED double fontDescentMillimeters( const QFont& font ) const;
454 
460  Q_DECL_DEPRECATED double fontHeightMillimeters( const QFont& font ) const;
461 
465  Q_DECL_DEPRECATED double pixelFontSize( double pointSize ) const;
466 
470  Q_DECL_DEPRECATED QFont scaledFontPixelSize( const QFont& font ) const;
471 
476  void setPositionLock( const bool lock );
477 
482  bool positionLock() const { return mItemPositionLocked; }
483 
492  double itemRotation( const QgsComposerObject::PropertyValueType valueType = QgsComposerObject::EvaluatedValue ) const;
493 
497  Q_DECL_DEPRECATED double rotation() const { return mEvaluatedItemRotation; }
498 
500  virtual void updateItem() { QGraphicsRectItem::update(); }
501 
506  QString id() const { return mId; }
507 
512  virtual void setId( const QString& id );
513 
520  QString uuid() const { return mUuid; }
521 
529  virtual QString displayName() const;
530 
538  virtual void setVisibility( const bool visible );
539 
547  bool excludeFromExports( const QgsComposerObject::PropertyValueType valueType = QgsComposerObject::EvaluatedValue );
548 
554  virtual void setExcludeFromExports( const bool exclude );
555 
561  bool isGroupMember() const { return mIsGroupMember; }
562 
568  void setIsGroupMember( const bool isGroupMember );
569 
576  virtual int numberExportLayers() const { return 0; }
577 
583  virtual void setCurrentExportLayer( const int layerIdx = -1 ) { mCurrentExportLayer = layerIdx; }
584 
589  virtual QgsExpressionContext* createExpressionContext() const override;
590 
591  public slots:
595  virtual void setRotation( double r );
596 
604  virtual void setItemRotation( const double r, const bool adjustPosition = false );
605 
606  void repaint() override;
607 
616  virtual void refreshDataDefinedProperty( const QgsComposerObject::DataDefinedProperty property = QgsComposerObject::AllProperties, const QgsExpressionContext* context = nullptr ) override;
617 
618  protected:
621 
627 
632 
634  bool mFrame;
640  Qt::PenJoinStyle mFrameJoinStyle;
641 
645 
648 
655 
657  QPainter::CompositionMode mBlendMode;
660 
663 
666 
671 
674 
677 
683 
687  virtual void drawSelectionBoxes( QPainter* p );
688 
690  virtual void drawFrame( QPainter* p );
691 
693  virtual void drawBackground( QPainter* p );
694 
698  Q_DECL_DEPRECATED void drawArrowHead( QPainter* p, double x, double y, double angle, double arrowHeadWidth ) const;
699 
703  Q_DECL_DEPRECATED double angle( QPointF p1, QPointF p2 ) const;
704 
707  double rectHandlerBorderTolerance() const;
708 
712  Q_DECL_DEPRECATED double lockSymbolSize() const;
713 
717  double horizontalViewScaleFactor() const;
718 
719  //some utility functions
720 
724  Q_DECL_DEPRECATED bool imageSizeConsideringRotation( double& width, double& height, double rotation ) const;
725 
729  Q_DECL_DEPRECATED bool imageSizeConsideringRotation( double& width, double& height ) const;
730 
738  Q_DECL_DEPRECATED QRectF largestRotatedRectWithinBounds( const QRectF& originalRect, const QRectF& boundsRect, double rotation ) const;
739 
743  Q_DECL_DEPRECATED bool cornerPointOnRotatedAndScaledRect( double& x, double& y, double width, double height, double rotation ) const;
744 
748  Q_DECL_DEPRECATED bool cornerPointOnRotatedAndScaledRect( double& x, double& y, double width, double height ) const;
749 
753  Q_DECL_DEPRECATED void sizeChangedByRotation( double& width, double& height, double rotation );
754 
758  Q_DECL_DEPRECATED void sizeChangedByRotation( double& width, double& height );
759 
766  Q_DECL_DEPRECATED void rotate( double angle, double& x, double& y ) const;
767 
769  QGraphicsLineItem* hAlignSnapItem();
770  void deleteHAlignSnapItem();
772  QGraphicsLineItem* vAlignSnapItem();
773  void deleteVAlignSnapItem();
774  void deleteAlignItems();
775 
787  QRectF evalItemRect( const QRectF &newRect, const bool resizeOnly = false, const QgsExpressionContext* context = nullptr );
788 
793  bool shouldDrawItem() const;
794 
795  signals:
797  void itemRotationChanged( double newRotation );
799  void sizeChanged();
803  void frameChanged();
807  void lockChanged();
808 
809  private:
810  // id (not unique)
811  QString mId;
812  // name (unique)
813  QString mUuid;
814  // name (temporary when loaded from template)
815  QString mTemplateUuid;
816  // true if composition manages the z value for this item
817  bool mCompositionManagesZValue;
818 
826  void refreshRotation( const bool updateItem = true, const bool rotateAroundCenter = false, const QgsExpressionContext &context = QgsExpressionContext() );
827 
834  void refreshTransparency( const bool updateItem = true, const QgsExpressionContext &context = QgsExpressionContext() );
835 
839  void refreshBlendMode( const QgsExpressionContext &context );
840 
841  void init( const bool manageZValue );
842 
843  friend class QgsComposerItemGroup; // to access mTemplateUuid
844 };
845 
846 #endif
bool positionLock() const
Returns whether position lock for mouse drags is enabled returns true if item is locked for mouse mov...
bool mExcludeFromExports
Whether item should be excluded in exports.
void setSelected(bool selected)
bool effectsEnabled() const
Returns whether effects (eg blend modes) are enabled for the item.
int mTransparency
Item transparency.
A base class for objects which belong to a map composition.
A container class for data source field mapping or expression.
QPointF mLastMouseEventPos
Position of the last mouse move event (in scene coordinates)
virtual void beginItemCommand(const QString &text)
ItemPositionMode lastUsedPositionMode()
Returns item&#39;s last used position mode.
virtual bool selected() const
Is selected.
virtual void removeItems()
Qt::PenJoinStyle frameJoinStyle() const
Returns the join style used for drawing the item&#39;s frame.
ZoomMode
Modes for zooming item content.
A item that forms part of a map composition.
QgsComposerItem::MouseMoveAction mCurrentMouseMoveAction
virtual void refreshDataDefinedProperty(const DataDefinedProperty property=AllProperties, const QgsExpressionContext *context=nullptr)
Refreshes a data defined property for the item by reevaluating the property&#39;s value and redrawing the...
double mLastValidViewScaleFactor
Backup to restore item appearance if no view scale factor is available.
ItemPositionMode mLastUsedPositionMode
The item&#39;s position mode.
A container for grouping several QgsComposerItems.
virtual void zoomContent(const double factor, const QPointF point, const ZoomMode mode=QgsComposerItem::Zoom)
Zoom content of item.
QColor backgroundColor() const
Gets the background color for this item.
QPainter::CompositionMode mBlendMode
Composition blend mode for item.
void update(const QRectF &rect)
DataDefinedProperty
Data defined properties for different item types.
double frameOutlineWidth() const
Returns the frame&#39;s outline width.
virtual void moveContent(double dx, double dy)
Move Content of item.
QColor color() const
virtual QgsExpressionContext * createExpressionContext() const
Creates an expression context relating to the objects&#39; current state.
QString uuid() const
Get item identification name.
virtual void setCurrentExportLayer(const int layerIdx=-1)
Sets the current layer to draw for exporting.
void setIsRemoved(const bool removed)
Sets whether this item has been removed from the composition.
int transparency() const
Returns the item&#39;s transparency.
virtual void updateItem()
Updates item, with the possibility to do custom update for subclasses.
QGraphicsRectItem * mBoundingResizeRectangle
Rectangle used during move and resize actions.
bool mFrame
True if item fram needs to be painted.
bool isSelected() const
MouseMoveAction
Describes the action (move or resize in different directon) to be done during mouse move...
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
double mEvaluatedItemRotation
Temporary evaluated item rotation in degrees, clockwise.
virtual void repaint()
Triggers a redraw for the item.
bool mRemovedFromComposition
True if item has been removed from the composition.
virtual int numberExportLayers() const
Get the number of layers that this item requires for exporting as layers.
PropertyValueType
Specifies whether the value returned by a function should be the original, user set value...
QPointF mMouseMoveStartPos
Start point of the last mouse move action (in scene coordinates)
void setBackgroundEnabled(const bool drawBackground)
Set whether this item has a Background drawn around it or not.
Graphics scene for map printing.
double ANALYSIS_EXPORT angle(Point3D *p1, Point3D *p2, Point3D *p3, Point3D *p4)
Calculates the angle between two segments (in 2 dimension, z-values are ignored)
virtual bool isRemoved() const
Returns whether this item has been removed from the composition.
QColor frameOutlineColor() const
Returns the frame&#39;s outline color.
Q_DECL_DEPRECATED double rotation() const
Returns the rotation for the composer item.
Qt::PenJoinStyle mFrameJoinStyle
Frame join style.
QColor mBackgroundColor
Background color.
QGraphicsLineItem * mVAlignSnapItem
virtual Q_DECL_DEPRECATED void zoomContent(int delta, double x, double y)
Zoom content of item.
QGraphicsLineItem * mHAlignSnapItem
int mCurrentExportLayer
The layer that needs to be exported.
virtual void endItemCommand()
virtual void addItem(QgsComposerItem *item)
Composite operations for item groups do nothing per default.
bool mItemPositionLocked
True if item position and size cannot be changed with mouse move.
QPainter::CompositionMode blendMode() const
Returns the item&#39;s composition blending mode.
bool hasFrame() const
Whether this item has a frame or not.
bool hasBackground() const
Whether this item has a Background or not.
qreal widthF() const
void setRotation(qreal angle)
QgsComposerEffect * mEffect
bool mBackground
True if item background needs to be painted.
bool isGroupMember() const
Returns whether this item is part of a group.
bool mIsGroupMember
Whether or not this item is part of a group.
double mItemRotation
Item rotation in degrees, clockwise.
void rotate(qreal angle)
bool mEvaluatedExcludeFromExports
Temporary evaluated item exclusion.
virtual int type() const override
Return correct graphics item type.
QString id() const
Get item&#39;s id (which is not necessarly unique)