Skip to content

Commit

Permalink
Add tool for creation of marker annotation items
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Sep 8, 2021
1 parent ef25d91 commit 84247cb
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 3 deletions.
8 changes: 6 additions & 2 deletions src/gui/annotations/qgsannotationitemguiregistry.cpp
Expand Up @@ -200,13 +200,17 @@ void QgsAnnotationItemGuiRegistry::addDefaultItems()


addAnnotationItemGuiMetadata( new QgsAnnotationItemGuiMetadata( QStringLiteral( "marker" ), addAnnotationItemGuiMetadata( new QgsAnnotationItemGuiMetadata( QStringLiteral( "marker" ),
QObject::tr( "Marker" ), QObject::tr( "Marker" ),
QgsApplication::getThemeIcon( QStringLiteral( "/mActionAddImage.svg" ) ), QgsApplication::getThemeIcon( QStringLiteral( "/mActionAddMarker.svg" ) ),
[ = ]( QgsAnnotationItem * item )->QgsAnnotationItemBaseWidget * [ = ]( QgsAnnotationItem * item )->QgsAnnotationItemBaseWidget *
{ {
QgsAnnotationMarkerItemWidget *widget = new QgsAnnotationMarkerItemWidget( nullptr ); QgsAnnotationMarkerItemWidget *widget = new QgsAnnotationMarkerItemWidget( nullptr );
widget->setItem( item ); widget->setItem( item );
return widget; return widget;
}, QString(), Qgis::AnnotationItemGuiFlag::FlagNoCreationTools ) ); }, QString(), Qgis::AnnotationItemGuiFlags(), nullptr,
[ = ]( QgsMapCanvas * canvas, QgsAdvancedDigitizingDockWidget * cadDockWidget )->QgsCreateAnnotationItemMapToolInterface *
{
return new QgsCreateMarkerItemMapTool( canvas, cadDockWidget );
} ) );


addAnnotationItemGuiMetadata( new QgsAnnotationItemGuiMetadata( QStringLiteral( "pointtext" ), addAnnotationItemGuiMetadata( new QgsAnnotationItemGuiMetadata( QStringLiteral( "pointtext" ),
QObject::tr( "Text at Point" ), QObject::tr( "Text at Point" ),
Expand Down
42 changes: 42 additions & 0 deletions src/gui/annotations/qgscreateannotationitemmaptool_impl.cpp
Expand Up @@ -16,9 +16,11 @@
#include "qgscreateannotationitemmaptool_impl.h" #include "qgscreateannotationitemmaptool_impl.h"
#include "qgsmapmouseevent.h" #include "qgsmapmouseevent.h"
#include "qgsannotationpointtextitem.h" #include "qgsannotationpointtextitem.h"
#include "qgsannotationmarkeritem.h"
#include "qgsannotationlayer.h" #include "qgsannotationlayer.h"
#include "qgsstyle.h" #include "qgsstyle.h"
#include "qgsmapcanvas.h" #include "qgsmapcanvas.h"
#include "qgsmarkersymbol.h"


///@cond PRIVATE ///@cond PRIVATE


Expand Down Expand Up @@ -61,4 +63,44 @@ QgsMapTool *QgsCreatePointTextItemMapTool::mapTool()
return this; return this;
} }




//
// QgsCreateMarkerMapTool
//

QgsCreateMarkerItemMapTool::QgsCreateMarkerItemMapTool( QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDockWidget )
: QgsMapToolAdvancedDigitizing( canvas, cadDockWidget )
, mHandler( new QgsCreateAnnotationItemMapToolHandler( canvas, cadDockWidget ) )
{

}

QgsCreateMarkerItemMapTool::~QgsCreateMarkerItemMapTool() = default;

void QgsCreateMarkerItemMapTool::cadCanvasPressEvent( QgsMapMouseEvent *event )
{
if ( event->button() != Qt::LeftButton )
return;

const QgsPointXY layerPoint = toLayerCoordinates( mHandler->targetLayer(), event->mapPoint() );

std::unique_ptr< QgsAnnotationMarkerItem > createdItem = std::make_unique< QgsAnnotationMarkerItem >( QgsPoint( layerPoint ) );
createdItem->setSymbol( qgis::down_cast< QgsMarkerSymbol * >( QgsSymbol::defaultSymbol( QgsWkbTypes::PointGeometry ) ) );
// set reference scale to match canvas scale, but don't enable it by default for marker items
createdItem->setSymbologyReferenceScale( canvas()->scale() );

mHandler->pushCreatedItem( createdItem.release() );
}

QgsCreateAnnotationItemMapToolHandler *QgsCreateMarkerItemMapTool::handler()
{
return mHandler;
}

QgsMapTool *QgsCreateMarkerItemMapTool::mapTool()
{
return this;
}

///@endcond PRIVATE ///@endcond PRIVATE
20 changes: 19 additions & 1 deletion src/gui/annotations/qgscreateannotationitemmaptool_impl.h
Expand Up @@ -20,6 +20,7 @@
#include "qgscreateannotationitemmaptool.h" #include "qgscreateannotationitemmaptool.h"


class QgsAnnotationPointTextItem; class QgsAnnotationPointTextItem;
class QgsAnnotationMarkerItem;


#define SIP_NO_FILE #define SIP_NO_FILE


Expand All @@ -38,7 +39,24 @@ class QgsCreatePointTextItemMapTool: public QgsMapToolAdvancedDigitizing, public
QgsCreateAnnotationItemMapToolHandler *handler() override; QgsCreateAnnotationItemMapToolHandler *handler() override;
QgsMapTool *mapTool() override; QgsMapTool *mapTool() override;


QgsAnnotationItem *takeCreatedItem() override; private:

QgsCreateAnnotationItemMapToolHandler *mHandler = nullptr;

};

class QgsCreateMarkerItemMapTool: public QgsMapToolAdvancedDigitizing, public QgsCreateAnnotationItemMapToolInterface
{
Q_OBJECT

public:

QgsCreateMarkerItemMapTool( QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDockWidget );
~QgsCreateMarkerItemMapTool() override;

void cadCanvasPressEvent( QgsMapMouseEvent *event ) override;
QgsCreateAnnotationItemMapToolHandler *handler() override;
QgsMapTool *mapTool() override;


private: private:


Expand Down

0 comments on commit 84247cb

Please sign in to comment.