Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add widget for Embedded Symbols renderer
Allows users to control the default symbol used for features without embedded styles
- Loading branch information
1 parent
031e2b0
commit 5245430
Showing
10 changed files
with
344 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
58 changes: 58 additions & 0 deletions
58
python/gui/auto_generated/symbology/qgsembeddedsymbolrendererwidget.sip.in
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
/************************************************************************ | ||
* This file has been generated automatically from * | ||
* * | ||
* src/gui/symbology/qgsembeddedsymbolrendererwidget.h * | ||
* * | ||
* Do not edit manually ! Edit header and run scripts/sipify.pl again * | ||
************************************************************************/ | ||
|
||
|
||
|
||
class QgsEmbeddedSymbolRendererWidget : QgsRendererWidget, QgsExpressionContextGenerator | ||
{ | ||
%Docstring | ||
A widget used represent options of a :py:class:`QgsEmbeddedSymbolRenderer` | ||
|
||
.. versionadded:: 3.20 | ||
%End | ||
|
||
%TypeHeaderCode | ||
#include "qgsembeddedsymbolrendererwidget.h" | ||
%End | ||
public: | ||
|
||
static QgsRendererWidget *create( QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer ) /Factory/; | ||
%Docstring | ||
Static creation method | ||
|
||
:param layer: the layer where this renderer is applied | ||
:param style: | ||
:param renderer: the merged feature renderer (will not take ownership) | ||
%End | ||
|
||
QgsEmbeddedSymbolRendererWidget( QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer ); | ||
%Docstring | ||
Constructor | ||
|
||
:param layer: the layer where this renderer is applied | ||
:param style: | ||
:param renderer: the merged feature renderer (will not take ownership) | ||
%End | ||
|
||
virtual QgsFeatureRenderer *renderer(); | ||
|
||
virtual void setContext( const QgsSymbolWidgetContext &context ); | ||
|
||
virtual QgsExpressionContext createExpressionContext() const; | ||
|
||
|
||
}; | ||
|
||
|
||
/************************************************************************ | ||
* This file has been generated automatically from * | ||
* * | ||
* src/gui/symbology/qgsembeddedsymbolrendererwidget.h * | ||
* * | ||
* Do not edit manually ! Edit header and run scripts/sipify.pl again * | ||
************************************************************************/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
/*************************************************************************** | ||
qgsembeddedsymbolrendererwidget.cpp | ||
--------------------- | ||
begin : March 2021 | ||
copyright : (C) 2021 by Nyall Dawson | ||
email : nyall dot dawson at gmail 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. * | ||
* * | ||
***************************************************************************/ | ||
#include "qgsembeddedsymbolrendererwidget.h" | ||
#include "qgsembeddedsymbolrenderer.h" | ||
#include "qgsrendererregistry.h" | ||
|
||
#include "qgssymbol.h" | ||
|
||
#include "qgslogger.h" | ||
#include "qgsvectorlayer.h" | ||
#include "qgsapplication.h" | ||
|
||
QgsRendererWidget *QgsEmbeddedSymbolRendererWidget::create( QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer ) | ||
{ | ||
return new QgsEmbeddedSymbolRendererWidget( layer, style, renderer ); | ||
} | ||
|
||
QgsEmbeddedSymbolRendererWidget::QgsEmbeddedSymbolRendererWidget( QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer ) | ||
: QgsRendererWidget( layer, style ) | ||
{ | ||
if ( !layer ) | ||
{ | ||
return; | ||
} | ||
|
||
QgsWkbTypes::GeometryType type = QgsWkbTypes::geometryType( layer->wkbType() ); | ||
|
||
// the renderer only applies to layers with providers supporting embedded symbols | ||
if ( !( layer->dataProvider()->capabilities() & QgsVectorDataProvider::FeatureSymbology ) ) | ||
{ | ||
//setup blank dialog | ||
mRenderer.reset( nullptr ); | ||
QGridLayout *layout = new QGridLayout( this ); | ||
QLabel *label = new QLabel( tr( "The embedded symbols renderer can only be used with layers\n" | ||
"containing embedded styling information.\n\n" | ||
"'%1' does not contain embedded styling and cannot be displayed." ) | ||
.arg( layer->name() ), this ); | ||
this->setLayout( layout ); | ||
layout->addWidget( label ); | ||
return; | ||
} | ||
setupUi( this ); | ||
|
||
mDefaultSymbolToolButton->setSymbolType( QgsSymbol::symbolTypeForGeometryType( type ) ); | ||
|
||
// try to recognize the previous renderer | ||
// (null renderer means "no previous renderer") | ||
if ( renderer ) | ||
{ | ||
mRenderer.reset( QgsEmbeddedSymbolRenderer::convertFromRenderer( renderer ) ); | ||
} | ||
if ( ! mRenderer ) | ||
{ | ||
// use default embedded renderer | ||
mRenderer.reset( new QgsEmbeddedSymbolRenderer( QgsSymbol::defaultSymbol( type ) ) ); | ||
} | ||
|
||
mDefaultSymbolToolButton->setSymbol( mRenderer->defaultSymbol()->clone() ); | ||
mDefaultSymbolToolButton->setDialogTitle( tr( "Default symbol" ) ); | ||
mDefaultSymbolToolButton->setLayer( mLayer ); | ||
mDefaultSymbolToolButton->registerExpressionContextGenerator( this ); | ||
|
||
connect( mDefaultSymbolToolButton, &QgsSymbolButton::changed, this, [ = ] | ||
{ | ||
mRenderer->setDefaultSymbol( mDefaultSymbolToolButton->symbol()->clone() ); | ||
emit widgetChanged(); | ||
} ); | ||
} | ||
|
||
QgsFeatureRenderer *QgsEmbeddedSymbolRendererWidget::renderer() | ||
{ | ||
return mRenderer.get(); | ||
} | ||
|
||
void QgsEmbeddedSymbolRendererWidget::setContext( const QgsSymbolWidgetContext &context ) | ||
{ | ||
QgsRendererWidget::setContext( context ); | ||
if ( mDefaultSymbolToolButton ) | ||
{ | ||
mDefaultSymbolToolButton->setMapCanvas( context.mapCanvas() ); | ||
mDefaultSymbolToolButton->setMessageBar( context.messageBar() ); | ||
} | ||
} | ||
|
||
QgsExpressionContext QgsEmbeddedSymbolRendererWidget::createExpressionContext() const | ||
{ | ||
QgsExpressionContext context; | ||
if ( QgsExpressionContext *expressionContext = mContext.expressionContext() ) | ||
context = *expressionContext; | ||
else | ||
context.appendScopes( mContext.globalProjectAtlasMapLayerScopes( mLayer ) ); | ||
|
||
const QList< QgsExpressionContextScope > scopes = mContext.additionalExpressionContextScopes(); | ||
for ( const QgsExpressionContextScope &s : scopes ) | ||
{ | ||
context << new QgsExpressionContextScope( s ); | ||
} | ||
return context; | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
/*************************************************************************** | ||
qgsembeddedsymbolrendererwidget.h | ||
--------------------- | ||
begin : March 2021 | ||
copyright : (C) 2021 by Nyall Dawson | ||
email : nyall dot dawson at gmail 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 QGSEMBEDDEDSYMBOLRENDERERWIDGET_H | ||
#define QGSEMBEDDEDSYMBOLRENDERERWIDGET_H | ||
|
||
#include "ui_qgsembeddedsymbolrendererwidgetbase.h" | ||
#include "qgis_sip.h" | ||
#include "qgsembeddedsymbolrenderer.h" | ||
#include "qgsrendererwidget.h" | ||
#include "qgis_gui.h" | ||
|
||
class QMenu; | ||
|
||
/** | ||
* \ingroup gui | ||
* \brief A widget used represent options of a QgsEmbeddedSymbolRenderer | ||
* | ||
* \since QGIS 3.20 | ||
*/ | ||
class GUI_EXPORT QgsEmbeddedSymbolRendererWidget : public QgsRendererWidget, public QgsExpressionContextGenerator, private Ui::QgsEmbeddedSymbolRendererWidgetBase | ||
{ | ||
Q_OBJECT | ||
|
||
public: | ||
|
||
/** | ||
* Static creation method | ||
* \param layer the layer where this renderer is applied | ||
* \param style | ||
* \param renderer the merged feature renderer (will not take ownership) | ||
*/ | ||
static QgsRendererWidget *create( QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer ) SIP_FACTORY; | ||
|
||
/** | ||
* Constructor | ||
* \param layer the layer where this renderer is applied | ||
* \param style | ||
* \param renderer the merged feature renderer (will not take ownership) | ||
*/ | ||
QgsEmbeddedSymbolRendererWidget( QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer ); | ||
|
||
QgsFeatureRenderer *renderer() override; | ||
void setContext( const QgsSymbolWidgetContext &context ) override; | ||
QgsExpressionContext createExpressionContext() const override; | ||
|
||
private: | ||
//! The renderer | ||
std::unique_ptr<QgsEmbeddedSymbolRenderer> mRenderer; | ||
|
||
}; | ||
|
||
|
||
#endif // QGSEMBEDDEDSYMBOLRENDERERWIDGET_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.