QGIS API Documentation  3.21.0-Master (5b68dc587e)
qgsannotationitemregistry.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsannotationitemregistry.cpp
3  -------------------------
4  begin : October 2019
5  copyright : (C) 2019 by Nyall Dawson
6  email : nyall dot dawson at gmail dot com
7  ***************************************************************************/
8 /***************************************************************************
9  * *
10  * This program is free software; you can redistribute it and/or modify *
11  * it under the terms of the GNU General Public License as published by *
12  * the Free Software Foundation; either version 2 of the License, or *
13  * (at your option) any later version. *
14  * *
15  ***************************************************************************/
16 
18 #include "qgsannotationitem.h"
20 #include "qgsannotationlineitem.h"
23 #include <QDomElement>
24 
26  : QObject( parent )
27 {
28 }
29 
31 {
32  qDeleteAll( mMetadata );
33 }
34 
36 {
37  if ( !mMetadata.isEmpty() )
38  return false;
39 
40  mMetadata.insert( QStringLiteral( "marker" ), new QgsAnnotationItemMetadata( QStringLiteral( "marker" ), QObject::tr( "Marker" ), QObject::tr( "Markers" ),
42  mMetadata.insert( QStringLiteral( "linestring" ), new QgsAnnotationItemMetadata( QStringLiteral( "linestring" ), QObject::tr( "Polyline" ), QObject::tr( "Polylines" ),
44  mMetadata.insert( QStringLiteral( "polygon" ), new QgsAnnotationItemMetadata( QStringLiteral( "polygon" ), QObject::tr( "Polygon" ), QObject::tr( "Polygons" ),
46  mMetadata.insert( QStringLiteral( "pointtext" ), new QgsAnnotationItemMetadata( QStringLiteral( "pointtext" ), QObject::tr( "Text at point" ), QObject::tr( "Text at points" ),
48  return true;
49 }
50 
52 {
53  return mMetadata.value( type );
54 }
55 
57 {
58  if ( !metadata || mMetadata.contains( metadata->type() ) )
59  return false;
60 
61  mMetadata[metadata->type()] = metadata;
62  emit typeAdded( metadata->type(), metadata->visibleName() );
63  return true;
64 }
65 
67 {
68  if ( !mMetadata.contains( type ) )
69  return nullptr;
70 
71  return mMetadata[type]->createItem();
72 }
73 
74 QMap<QString, QString> QgsAnnotationItemRegistry::itemTypes() const
75 {
76  QMap<QString, QString> types;
77  for ( auto it = mMetadata.constBegin(); it != mMetadata.constEnd(); ++it )
78  {
79  types.insert( it.key(), it.value()->visibleName() );
80  }
81  return types;
82 }
Stores metadata about one annotation item class.
QString type() const
Returns the unique item type string for the annotation item class.
QString visibleName() const
Returns a translated, user visible name for the annotation item class.
Convenience metadata class that uses static functions to create annotation items and their configurat...
QgsAnnotationItem * createItem(const QString &type) const
Creates a new instance of a annotation item given the item type.
QgsAnnotationItemAbstractMetadata * itemMetadata(const QString &type) const
Returns the metadata for the specified item type.
void typeAdded(const QString &type, const QString &name)
Emitted whenever a new item type is added to the registry, with the specified type and visible name.
bool populate()
Populates the registry with standard item types.
QgsAnnotationItemRegistry(QObject *parent=nullptr)
Creates a new empty item registry.
QMap< QString, QString > itemTypes() const
Returns a map of available item types to translated name.
bool addItemType(QgsAnnotationItemAbstractMetadata *metadata)
Registers a new annotation item type.
Abstract base class for annotation items which are drawn with QgsAnnotationLayers.
static QgsAnnotationLineItem * create()
Creates a new linestring annotation item.
static QgsAnnotationMarkerItem * create()
Creates a new marker annotation item.
static QgsAnnotationPointTextItem * create()
Creates a new text at point annotation item.
static QgsAnnotationPolygonItem * create()
Creates a new polygon annotation item.