/*************************************************************************** qgsmaptoolpinlabels.h -------------------- begin : 2012-07-12 copyright : (C) 2012 by Larry Shaffer email : larrys at dakotacarto dot 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 QGSMAPTOOLPINLABELS_H #define QGSMAPTOOLPINLABELS_H #include "qgsmaptoollabel.h" #include "qgis_app.h" class QgsRubberBand; class QgsLabelPosition; //! A map tool for pinning (writing to attribute table) and unpinning labelpositions and rotation class APP_EXPORT QgsMapToolPinLabels: public QgsMapToolLabel { Q_OBJECT public: QgsMapToolPinLabels( QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDock ); ~QgsMapToolPinLabels() override; //! Overridden mouse move event void canvasMoveEvent( QgsMapMouseEvent *e ) override; //! Overridden mouse press event void canvasPressEvent( QgsMapMouseEvent *e ) override; //! Overridden mouse release event void canvasReleaseEvent( QgsMapMouseEvent *e ) override; bool isShowingPinned() const { return mShowPinned; } void setShowingPinned( bool showing ) { mShowPinned = showing; } //! Called when Show Pinned Labels tool is toggled, via its qgisapp.cpp slot void showPinnedLabels( bool show ); //! Remove rectangles from around pinned labels void removePinnedHighlights(); public slots: //! Update pinned label highlights on layer edit mode change void updatePinnedLabels(); //! Render highlight rectangles around pinned labels void highlightPinnedLabels(); protected: //! Mapping of feature ids of layers that have been highlighted QMap mHighlights; //! Flag to indicate a map canvas drag operation is taking place bool mDragging; //! Flag to indicate whether to draw the highlight for pinned labels bool mShowPinned; //! Stores actual select rect QRect mSelectRect; //! Stores selection marquee QgsRubberBand *mRubberBand = nullptr; private: //! Highlights a given label relative to whether its pinned and editable void highlightLabel( const QgsLabelPosition &labelpos, const QString &id, const QColor &color ); //! Highlights a given callout relative to whether its pinned and editable void highlightCallout( bool isOrigin, const QgsCalloutPosition &labelpos, const QString &id, const QColor &color ); //! Select valid labels to pin or unpin void pinUnpinLabels( const QgsRectangle &ext, QMouseEvent *e ); //! Pin or unpin current label relative to whether its editable bool pinUnpinCurrentLabel( bool pin ); //! Pin or unpin diagram relative to whether its editable bool pinUnpinCurrentDiagram( bool pin ); //! Pin or unpin current feature (diagram or label) bool pinUnpinCurrentFeature( bool pin ); }; #endif // QGSMAPTOOLPINLABELS_H