Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #4073 from nyalldawson/annotations
Refactor annotations, add new annotation features + some other exciting stuff
  • Loading branch information
nyalldawson committed Jan 30, 2017
2 parents 50319b1 + 1f7758a commit 61d3147
Show file tree
Hide file tree
Showing 138 changed files with 4,610 additions and 2,671 deletions.
1 change: 1 addition & 0 deletions doc/CMakeLists.txt
Expand Up @@ -48,6 +48,7 @@ IF(WITH_APIDOC)
SET(DOXYGEN_INPUT
${CMAKE_SOURCE_DIR}/doc
${CMAKE_SOURCE_DIR}/src/core
${CMAKE_SOURCE_DIR}/src/core/annotations
${CMAKE_SOURCE_DIR}/src/core/auth
${CMAKE_SOURCE_DIR}/src/core/composer
${CMAKE_SOURCE_DIR}/src/core/diagram
Expand Down
1 change: 1 addition & 0 deletions python/CMakeLists.txt
Expand Up @@ -93,6 +93,7 @@ INCLUDE_DIRECTORIES(SYSTEM
)
INCLUDE_DIRECTORIES(
../src/core
../src/core/annotations
../src/core/auth
../src/core/pal
../src/core/composer
Expand Down
84 changes: 84 additions & 0 deletions python/core/annotations/qgsannotation.sip
@@ -0,0 +1,84 @@
%ModuleHeaderCode
#include <qgshtmlannotation.h>
#include <qgssvgannotation.h>
#include <qgstextannotation.h>
%End

class QgsAnnotation : QObject
{
%TypeHeaderCode
#include <qgsannotation.h>
%End

%ConvertToSubClassCode
if ( dynamic_cast< QgsTextAnnotation* > ( sipCpp ) )
sipType = sipType_QgsTextAnnotation;
else if ( dynamic_cast< QgsSvgAnnotation* > ( sipCpp ) )
sipType = sipType_QgsSvgAnnotation;
else if ( dynamic_cast< QgsHtmlAnnotation* > ( sipCpp ) )
sipType = sipType_QgsHtmlAnnotation;
else
sipType = NULL;
%End

public:

QgsAnnotation( QObject* parent /TransferThis/ = nullptr );

bool isVisible() const;
void setVisible( bool visible );

bool hasFixedMapPosition() const;
void setHasFixedMapPosition( bool fixed );

QgsPoint mapPosition() const;
void setMapPosition( const QgsPoint& position );

QgsCoordinateReferenceSystem mapPositionCrs() const;
void setMapPositionCrs( const QgsCoordinateReferenceSystem& crs );

QPointF relativePosition() const;
void setRelativePosition( QPointF position );

void setFrameOffsetFromReferencePoint( QPointF offset );
QPointF frameOffsetFromReferencePoint() const;

void setFrameSize( QSizeF size );
QSizeF frameSize() const;

void setContentsMargin( const QgsMargins& margins );
QgsMargins contentsMargin() const;

void setFillSymbol( QgsFillSymbol* symbol /Transfer/ );
QgsFillSymbol* fillSymbol() const;

void render( QgsRenderContext& context ) const;

virtual void writeXml( QDomElement& elem, QDomDocument & doc ) const = 0;
virtual void readXml( const QDomElement& itemElem, const QDomDocument& doc ) = 0;

void setMarkerSymbol( QgsMarkerSymbol* symbol /Transfer/ );
QgsMarkerSymbol* markerSymbol() const;

QgsMapLayer* mapLayer() const;
void setMapLayer( QgsMapLayer* layer );

QgsFeature associatedFeature() const;
virtual void setAssociatedFeature( const QgsFeature& feature );

signals:

void appearanceChanged();
void moved();
void mapLayerChanged();

protected:

virtual void renderAnnotation( QgsRenderContext& context, QSizeF size ) const = 0;

virtual QSizeF minimumFrameSize() const;

void _writeXml( QDomElement& itemElem, QDomDocument& doc ) const;
void _readXml( const QDomElement& annotationElem, const QDomDocument& doc );

};
24 changes: 24 additions & 0 deletions python/core/annotations/qgsannotationmanager.sip
@@ -0,0 +1,24 @@
class QgsAnnotationManager : QObject
{
%TypeHeaderCode
#include <qgsannotationmanager.h>
%End
public:

explicit QgsAnnotationManager( QgsProject* project = nullptr );
~QgsAnnotationManager();

bool addAnnotation( QgsAnnotation* annotation /Transfer/ );
bool removeAnnotation( QgsAnnotation* annotation );
void clear();
QList< QgsAnnotation* > annotations() const;
bool readXml( const QDomElement& element, const QDomDocument& doc );
QDomElement writeXml( QDomDocument& doc ) const;

signals:

void annotationAdded( QgsAnnotation* annotation );
void annotationRemoved();
void annotationAboutToBeRemoved( QgsAnnotation* annotation );

};
28 changes: 28 additions & 0 deletions python/core/annotations/qgshtmlannotation.sip
@@ -0,0 +1,28 @@
class QgsHtmlAnnotation : QgsAnnotation
{
%TypeHeaderCode
#include <qgshtmlannotation.h>
%End
public:

QgsHtmlAnnotation( QObject* parent /TransferThis/ = nullptr );

~QgsHtmlAnnotation();

QSizeF minimumFrameSize() const;

void setSourceFile( const QString& htmlFile );
QString sourceFile() const;

virtual void writeXml( QDomElement& elem, QDomDocument & doc ) const;
virtual void readXml( const QDomElement& itemElem, const QDomDocument& doc );

virtual void setAssociatedFeature( const QgsFeature& feature );

static QgsHtmlAnnotation* create() /Factory/;

protected:

void renderAnnotation( QgsRenderContext& context, QSizeF size ) const;

};
22 changes: 22 additions & 0 deletions python/core/annotations/qgssvgannotation.sip
@@ -0,0 +1,22 @@
class QgsSvgAnnotation : QgsAnnotation
{
%TypeHeaderCode
#include <qgssvgannotation.h>
%End
public:

QgsSvgAnnotation( QObject* parent /TransferThis/ = nullptr );

virtual void writeXml( QDomElement& elem, QDomDocument & doc ) const;
virtual void readXml( const QDomElement& itemElem, const QDomDocument& doc );

void setFilePath( const QString& file );
QString filePath() const;

static QgsSvgAnnotation* create() /Factory/;

protected:

void renderAnnotation( QgsRenderContext& context, QSizeF size ) const;

};
22 changes: 22 additions & 0 deletions python/core/annotations/qgstextannotation.sip
@@ -0,0 +1,22 @@
class QgsTextAnnotation : QgsAnnotation
{
%TypeHeaderCode
#include <qgstextannotation.h>
%End
public:

QgsTextAnnotation( QObject* parent /TransferThis/ = nullptr );

const QTextDocument* document() const;
void setDocument( const QTextDocument* doc );

virtual void writeXml( QDomElement& elem, QDomDocument & doc ) const;
virtual void readXml( const QDomElement& itemElem, const QDomDocument& doc );

static QgsTextAnnotation* create() /Factory/;

protected:

void renderAnnotation( QgsRenderContext& context, QSizeF size ) const;

};
7 changes: 2 additions & 5 deletions python/core/composer/qgscomposermap.sip
Expand Up @@ -255,11 +255,8 @@ class QgsComposerMap : QgsComposerItem

void updateItem();

/** Sets canvas pointer (necessary to query and draw map canvas items)*/
void setMapCanvas( QGraphicsView* canvas /Transfer/ );

void setDrawCanvasItems( bool b );
bool drawCanvasItems() const;
void setDrawAnnotations( bool draw );
bool drawAnnotations() const;

/** Returns the conversion factor map units -> mm*/
double mapUnitsToMM() const;
Expand Down
12 changes: 11 additions & 1 deletion python/core/composer/qgscomposerutils.sip
Expand Up @@ -222,11 +222,21 @@ class QgsComposerUtils
*/
static void drawText( QPainter* painter, const QRectF& rect, const QString& text, const QFont& font, const QColor& color = QColor(), const Qt::AlignmentFlag halignment = Qt::AlignLeft, const Qt::AlignmentFlag valignment = Qt::AlignTop, const int flags = Qt::TextWordWrap );

/**
* Creates a render context suitable for the specified composer map and QPainter destination.
* This method returns a new QgsRenderContext which matches the scale and settings of the
* target map.
* @note added in QGIS 3.0
* @see createRenderContextForComposition()
*/
static QgsRenderContext createRenderContextForMap( QgsComposerMap* map, QPainter* painter );

/**
* Creates a render context suitable for the specified composition and QPainter destination.
* This method returns a new QgsRenderContext which matches the scale and settings from the composition's
* QgsComposition::referenceMap().
* @note added in QGIS 3.0
* @see createRenderContextForMap()
*/
static QgsRenderContext createRenderContext( QgsComposition* composition, QPainter* painter );
static QgsRenderContext createRenderContextForComposition( QgsComposition* composition, QPainter* painter );
};
8 changes: 7 additions & 1 deletion python/core/core.sip
Expand Up @@ -13,7 +13,6 @@

%Include qgis.sip

%Include qgsannotation.sip
%Include qgsapplication.sip
%Include qgsaction.sip
%Include qgsactionmanager.sip
Expand Down Expand Up @@ -94,6 +93,7 @@
%Include qgsmapsettings.sip
%Include qgsmaptopixel.sip
%Include qgsmapunitscale.sip
%Include qgsmargins.sip
%Include qgsmessagelog.sip
%Include qgsmessageoutput.sip
%Include qgsmimedatautils.sip
Expand Down Expand Up @@ -174,6 +174,12 @@
%Include qgsmapthemecollection.sip
%Include qgsxmlutils.sip

%Include annotations/qgsannotation.sip
%Include annotations/qgsannotationmanager.sip
%Include annotations/qgshtmlannotation.sip
%Include annotations/qgssvgannotation.sip
%Include annotations/qgstextannotation.sip

%Include auth/qgsauthcertutils.sip
%Include auth/qgsauthconfig.sip
// %Include auth/qgsauthcrypto.sip
Expand Down
63 changes: 0 additions & 63 deletions python/core/qgsannotation.sip

This file was deleted.

47 changes: 47 additions & 0 deletions python/core/qgsmargins.sip
@@ -0,0 +1,47 @@
class QgsMargins
{
%TypeHeaderCode
#include <qgsmargins.h>
%End

public:

QgsMargins();
QgsMargins( double left, double top, double right, double bottom );

bool isNull() const;

double left() const;
double top() const;
double right() const;
double bottom() const;

void setLeft( double left );
void setTop( double top );
void setRight( double right );
void setBottom( double bottom );

QgsMargins &operator+=( const QgsMargins &margins );
QgsMargins &operator-=( const QgsMargins &margins );
QgsMargins &operator+=( double addend );
QgsMargins &operator-=( double subtrahend );
QgsMargins &operator*=( double factor );
QgsMargins &operator/=( double divisor );

QString toString() const;
static QgsMargins fromString( const QString& string );
};

bool operator==( const QgsMargins &lhs, const QgsMargins &rhs );
bool operator!=( const QgsMargins &lhs, const QgsMargins &rhs );
QgsMargins operator+( const QgsMargins &m1, const QgsMargins &m2 );
QgsMargins operator-( const QgsMargins &m1, const QgsMargins &m2 );
QgsMargins operator+( const QgsMargins &lhs, double rhs );
QgsMargins operator+( double lhs, const QgsMargins &rhs );
QgsMargins operator-( const QgsMargins &lhs, double rhs );
QgsMargins operator*( const QgsMargins &margins, double factor );
QgsMargins operator*( double factor, const QgsMargins &margins );
QgsMargins operator/( const QgsMargins &margins, double divisor );
QgsMargins operator+( const QgsMargins &margins );
QgsMargins operator-( const QgsMargins &margins );

2 changes: 2 additions & 0 deletions python/core/qgsproject.sip
Expand Up @@ -325,6 +325,8 @@ class QgsProject : QObject, QgsExpressionContextGenerator
*/
QgsMapThemeCollection* mapThemeCollection();

QgsAnnotationManager* annotationManager();

/**
* Set a list of layers which should not be taken into account on map identification
*/
Expand Down

0 comments on commit 61d3147

Please sign in to comment.