Skip to content

Commit

Permalink
Hookup initial marker item in registry
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Aug 5, 2020
1 parent b0e2a8b commit fe5b423
Show file tree
Hide file tree
Showing 9 changed files with 58 additions and 7 deletions.
Expand Up @@ -76,7 +76,8 @@ class QgsMarkerItem : QgsAnnotationItem

virtual bool writeXml( QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context ) const;

static QgsMarkerItem *create( QDomElement &element, const QgsReadWriteContext &context ) /Factory/;
static QgsMarkerItem *create() /Factory/;
static QgsMarkerItem *createFromElement( const QDomElement &element, const QgsReadWriteContext &context ) /Factory/;

virtual QgsMarkerItem *clone() /Factory/;

Expand Down
7 changes: 7 additions & 0 deletions python/core/auto_generated/qgsapplication.sip.in
Expand Up @@ -737,6 +737,13 @@ Returns the application's callout registry, used for managing callout types.
Returns the application's layout item registry, used for layout item types.

.. versionadded:: 3.0
%End

static QgsAnnotationItemRegistry *annotationItemRegistry() /KeepReference/;
%Docstring
Returns the application's annotation item registry, used for annotation item types.

.. versionadded:: 3.12
%End

static QgsGpsConnectionRegistry *gpsConnectionRegistry() /KeepReference/;
Expand Down
7 changes: 6 additions & 1 deletion src/core/annotations/qgsannotationitem.cpp
Expand Up @@ -72,7 +72,12 @@ bool QgsMarkerItem::writeXml( QDomElement &element, QDomDocument &document, cons
return true;
}

QgsMarkerItem *QgsMarkerItem::create( QDomElement &element, const QgsReadWriteContext &context )
QgsMarkerItem *QgsMarkerItem::create()
{
return new QgsMarkerItem( QgsPointXY(), QgsCoordinateReferenceSystem() );
}

QgsMarkerItem *QgsMarkerItem::createFromElement( const QDomElement &element, const QgsReadWriteContext &context )
{
const double x = element.attribute( QStringLiteral( "x" ) ).toDouble();
const double y = element.attribute( QStringLiteral( "y" ) ).toDouble();
Expand Down
3 changes: 2 additions & 1 deletion src/core/annotations/qgsannotationitem.h
Expand Up @@ -93,7 +93,8 @@ class CORE_EXPORT QgsMarkerItem : public QgsAnnotationItem
QString type() const override;
void render( QgsRenderContext &context, QgsFeedback *feedback ) override;
bool writeXml( QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context ) const override;
static QgsMarkerItem *create( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY;
static QgsMarkerItem *create() SIP_FACTORY;
static QgsMarkerItem *createFromElement( const QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY;

QgsMarkerItem *clone() override SIP_FACTORY;

Expand Down
14 changes: 14 additions & 0 deletions src/core/annotations/qgsannotationitemregistry.cpp
Expand Up @@ -15,6 +15,8 @@
***************************************************************************/

#include "qgsannotationitemregistry.h"
#include "qgsannotationitem.h"
#include <QDomElement>

QgsAnnotationItemRegistry::QgsAnnotationItemRegistry( QObject *parent )
: QObject( parent )
Expand All @@ -31,6 +33,9 @@ bool QgsAnnotationItemRegistry::populate()
if ( !mMetadata.isEmpty() )
return false;

mMetadata.insert( QStringLiteral( "marker" ), new QgsAnnotationItemMetadata( QStringLiteral( "marker" ), QObject::tr( "Marker" ), QObject::tr( "Markers" ),
QgsMarkerItem::create, QgsMarkerItem::createFromElement ) );

return true;
}

Expand All @@ -57,6 +62,15 @@ QgsAnnotationItem *QgsAnnotationItemRegistry::createItem( const QString &type )
return mMetadata[type]->createItem();
}

QgsAnnotationItem *QgsAnnotationItemRegistry::createItem( const QDomElement &element, const QgsReadWriteContext &context ) const
{
const QString type = element.attribute( QStringLiteral( "type" ) );
if ( !mMetadata.contains( type ) )
return nullptr;

return mMetadata[type]->createItem( element, context );
}

QMap<QString, QString> QgsAnnotationItemRegistry::itemTypes() const
{
QMap<QString, QString> types;
Expand Down
9 changes: 5 additions & 4 deletions src/core/annotations/qgsannotationlayer.cpp
Expand Up @@ -17,6 +17,8 @@
#include "qgsannotationlayer.h"
#include "qgsannotationlayerrenderer.h"
#include "qgsannotationitem.h"
#include "qgsannotationitemregistry.h"
#include "qgsapplication.h"
#include "qgslogger.h"
#include <QUuid>

Expand Down Expand Up @@ -113,11 +115,10 @@ bool QgsAnnotationLayer::readXml( const QDomNode &layerNode, QgsReadWriteContext
{
QDomElement itemElement = items.at( i ).toElement();
const QString id = itemElement.attribute( QStringLiteral( "id" ) );
const QString type = itemElement.attribute( QStringLiteral( "type" ) );
if ( type == "marker" )
std::unique_ptr< QgsAnnotationItem > item( QgsApplication::annotationItemRegistry()->createItem( itemElement, context ) );
if ( item )
{
std::unique_ptr< QgsMarkerItem > marker( QgsMarkerItem::create( itemElement, context ) );
mItems.insert( id, marker.release() );
mItems.insert( id, item.release() );
}
}

Expand Down
13 changes: 13 additions & 0 deletions src/core/qgsapplication.cpp
Expand Up @@ -19,6 +19,7 @@
#include "qgsdataitemproviderregistry.h"
#include "qgsexception.h"
#include "qgsgeometry.h"
#include "qgsannotationitemregistry.h"
#include "qgslayoutitemregistry.h"
#include "qgslogger.h"
#include "qgsproject.h"
Expand Down Expand Up @@ -2172,6 +2173,11 @@ QgsLayoutItemRegistry *QgsApplication::layoutItemRegistry()
return members()->mLayoutItemRegistry;
}

QgsAnnotationItemRegistry *QgsApplication::annotationItemRegistry()
{
return members()->mAnnotationItemRegistry;
}

QgsGpsConnectionRegistry *QgsApplication::gpsConnectionRegistry()
{
return members()->mGpsConnectionRegistry;
Expand Down Expand Up @@ -2362,6 +2368,12 @@ QgsApplication::ApplicationMembers::ApplicationMembers()
mAnnotationRegistry = new QgsAnnotationRegistry();
profiler->end();
}
{
profiler->start( tr( "Setup annotation item registry" ) );
mAnnotationItemRegistry = new QgsAnnotationItemRegistry();
mAnnotationItemRegistry->populate();
profiler->end();
}
{
profiler->start( tr( "Setup 3D symbol registry" ) );
m3DSymbolRegistry = new Qgs3DSymbolRegistry();
Expand Down Expand Up @@ -2422,6 +2434,7 @@ QgsApplication::ApplicationMembers::~ApplicationMembers()
delete mProcessingRegistry;
delete mProjectStorageRegistry;
delete mPageSizeRegistry;
delete mAnnotationItemRegistry;
delete mLayoutItemRegistry;
delete mRasterRendererRegistry;
delete mRendererRegistry;
Expand Down
8 changes: 8 additions & 0 deletions src/core/qgsapplication.h
Expand Up @@ -26,6 +26,7 @@

class Qgs3DRendererRegistry;
class QgsActionScopeRegistry;
class QgsAnnotationItemRegistry;
class QgsRuntimeProfiler;
class QgsTaskManager;
class QgsFieldFormatterRegistry;
Expand Down Expand Up @@ -682,6 +683,12 @@ class CORE_EXPORT QgsApplication : public QApplication
*/
static QgsLayoutItemRegistry *layoutItemRegistry() SIP_KEEPREFERENCE;

/**
* Returns the application's annotation item registry, used for annotation item types.
* \since QGIS 3.12
*/
static QgsAnnotationItemRegistry *annotationItemRegistry() SIP_KEEPREFERENCE;

/**
* Returns the application's GPS connection registry, used for managing GPS connections.
* \since QGIS 3.0
Expand Down Expand Up @@ -963,6 +970,7 @@ class CORE_EXPORT QgsApplication : public QApplication
QgsCalloutRegistry *mCalloutRegistry = nullptr;
QgsTaskManager *mTaskManager = nullptr;
QgsLayoutItemRegistry *mLayoutItemRegistry = nullptr;
QgsAnnotationItemRegistry *mAnnotationItemRegistry = nullptr;
QgsUserProfileManager *mUserConfigManager = nullptr;
QgsBookmarkManager *mBookmarkManager = nullptr;
QgsStyleModel *mStyleModel = nullptr;
Expand Down
1 change: 1 addition & 0 deletions tests/src/core/CMakeLists.txt
Expand Up @@ -87,6 +87,7 @@ ENDMACRO (ADD_QGIS_TEST)

SET(TESTS
testqgs25drenderer.cpp
testqgsannotationitem.cpp
testqgsapplication.cpp
testqgsauthcrypto.cpp
testqgsauthcertutils.cpp
Expand Down

0 comments on commit fe5b423

Please sign in to comment.