Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgslayoutnortharrowhandler.h 3 : : ------------------- 4 : : begin : April 2020 5 : : copyright : (C) 2020 by Nyall Dawson 6 : : email : nyall dot dawson at gmail dot com 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 QGSLAYOUTNORTHARROWHANDLER_H 18 : : #define QGSLAYOUTNORTHARROWHANDLER_H 19 : : 20 : : #include "qgis_core.h" 21 : : #include "qgis_sip.h" 22 : : #include <QObject> 23 : : #include <QPointer> 24 : : 25 : : class QgsLayoutItemMap; 26 : : 27 : : /** 28 : : * \ingroup core 29 : : * \brief An object which handles north-arrow type behavior for layout items. 30 : : * \since QGIS 3.14 31 : : */ 32 : : class CORE_EXPORT QgsLayoutNorthArrowHandler: public QObject 33 : : { 34 : : Q_OBJECT 35 : : public: 36 : : 37 : : //! Method for syncing rotation to a map's North direction 38 : : enum NorthMode 39 : : { 40 : : GridNorth = 0, //!< Align to grid north 41 : : TrueNorth, //!< Align to true north 42 : : }; 43 : : 44 : : /** 45 : : * Constructor for QgsLayoutNorthArrowHandler, with the specified parent \a object. 46 : : */ 47 : : QgsLayoutNorthArrowHandler( QObject *parent SIP_TRANSFERTHIS ); 48 : : 49 : : /** 50 : : * Returns the rotation to be used for the arrow, in degrees clockwise. 51 : : */ 52 : : double arrowRotation() const { return mArrowRotation; } 53 : : 54 : : /** 55 : : * Sets the linked \a map item. 56 : : * 57 : : * \see linkedMap() 58 : : */ 59 : : void setLinkedMap( QgsLayoutItemMap *map ); 60 : : 61 : : /** 62 : : * Returns the linked rotation map, if set. An NULLPTR means arrow calculation is 63 : : * disabled. 64 : : * 65 : : * \see setLinkedMap() 66 : : */ 67 : : QgsLayoutItemMap *linkedMap() const; 68 : : 69 : : /** 70 : : * Returns the mode used to calculate the arrow rotation. 71 : : * \see setNorthMode() 72 : : * \see northOffset() 73 : : */ 74 : 0 : NorthMode northMode() const { return mNorthMode; } 75 : : 76 : : /** 77 : : * Sets the \a mode used to calculate the arrow rotation. 78 : : * \see northMode() 79 : : * \see setNorthOffset() 80 : : */ 81 : : void setNorthMode( NorthMode mode ); 82 : : 83 : : /** 84 : : * Returns the offset added to the arrows's rotation from a map's North. 85 : : * \see setNorthOffset() 86 : : * \see northMode() 87 : : */ 88 : 0 : double northOffset() const { return mNorthOffset; } 89 : : 90 : : /** 91 : : * Sets the \a offset added to the arrows's rotation from a map's North. 92 : : * \see northOffset() 93 : : * \see setNorthMode() 94 : : */ 95 : : void setNorthOffset( double offset ); 96 : : 97 : : signals: 98 : : //! Emitted on arrow rotation change 99 : : void arrowRotationChanged( double newRotation ); 100 : : 101 : : private: 102 : : 103 : : //! Arrow rotation 104 : : double mArrowRotation = 0; 105 : : 106 : : QString mRotationMapUuid; 107 : : //! Map that sets the rotation (or NULLPTR if this picture uses map independent rotation) 108 : : QPointer< QgsLayoutItemMap > mRotationMap; 109 : : 110 : : //! Mode used to align to North 111 : : NorthMode mNorthMode = GridNorth; 112 : : //! Offset for north arrow 113 : : double mNorthOffset = 0.0; 114 : : 115 : : void disconnectMap( QgsLayoutItemMap *map ); 116 : : 117 : : private slots: 118 : : 119 : : void updateMapRotation(); 120 : : 121 : : 122 : : }; 123 : : 124 : : #endif // QGSLAYOUTNORTHARROWHANDLER_H