Skip to content

Commit

Permalink
Fix auxiliary field creation for QgsSymbolListWidget
Browse files Browse the repository at this point in the history
  • Loading branch information
pblottiere committed Oct 9, 2017
1 parent fd455f6 commit 429b1ec
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 4 deletions.
4 changes: 3 additions & 1 deletion python/gui/symbology/qgssymbolslistwidget.sip
Expand Up @@ -19,7 +19,7 @@ class QgsSymbolsListWidget : QWidget
#include "qgssymbolslistwidget.h"
%End
public:
QgsSymbolsListWidget( QgsSymbol *symbol, QgsStyle *style, QMenu *menu, QWidget *parent /TransferThis/, const QgsVectorLayer *layer = 0 );
QgsSymbolsListWidget( QgsSymbol *symbol, QgsStyle *style, QMenu *menu, QWidget *parent /TransferThis/, QgsVectorLayer *layer = 0 );


virtual ~QgsSymbolsListWidget();
Expand Down Expand Up @@ -71,6 +71,8 @@ Pupulates the groups combo box with available tags and smartgroups
void updateDataDefinedMarkerAngle();
void updateDataDefinedLineWidth();

void createAuxiliaryField();

signals:
void changed();

Expand Down
51 changes: 50 additions & 1 deletion src/gui/symbology/qgssymbolslistwidget.cpp
Expand Up @@ -27,6 +27,8 @@
#include "qgsapplication.h"
#include "qgsvectorlayer.h"
#include "qgssettings.h"
#include "qgsnewauxiliarylayerdialog.h"
#include "qgsauxiliarystorage.h"

#include <QAction>
#include <QString>
Expand All @@ -41,7 +43,7 @@
#include <QPushButton>


QgsSymbolsListWidget::QgsSymbolsListWidget( QgsSymbol *symbol, QgsStyle *style, QMenu *menu, QWidget *parent, const QgsVectorLayer *layer )
QgsSymbolsListWidget::QgsSymbolsListWidget( QgsSymbol *symbol, QgsStyle *style, QMenu *menu, QWidget *parent, QgsVectorLayer *layer )
: QWidget( parent )
, mSymbol( symbol )
, mStyle( style )
Expand Down Expand Up @@ -127,6 +129,53 @@ void QgsSymbolsListWidget::registerDataDefinedButton( QgsPropertyOverrideButton
{
button->setProperty( "propertyKey", key );
button->registerExpressionContextGenerator( this );

connect( button, &QgsPropertyOverrideButton::createAuxiliaryField, this, &QgsSymbolsListWidget::createAuxiliaryField );
}

void QgsSymbolsListWidget::createAuxiliaryField()
{
// try to create an auxiliary layer if not yet created
if ( !mLayer->auxiliaryLayer() )
{
QgsNewAuxiliaryLayerDialog dlg( mLayer, this );
dlg.exec();
}

// return if still not exists
if ( !mLayer->auxiliaryLayer() )
return;

QgsPropertyOverrideButton *button = qobject_cast<QgsPropertyOverrideButton *>( sender() );
QgsSymbolLayer::Property key = static_cast< QgsSymbolLayer::Property >( button->propertyKey() );
const QgsPropertyDefinition def = QgsSymbolLayer::propertyDefinitions()[key];

// create property in auxiliary storage if necessary
if ( !mLayer->auxiliaryLayer()->exists( def ) )
mLayer->auxiliaryLayer()->addAuxiliaryField( def );

// update property with join field name from auxiliary storage
QgsProperty property = button->toProperty();
property.setField( QgsAuxiliaryField::nameFromProperty( def, true ) );
property.setActive( true );
button->updateFieldLists();
button->setToProperty( property );

QgsMarkerSymbol *markerSymbol = static_cast<QgsMarkerSymbol *>( mSymbol );
switch ( key )
{
case QgsSymbolLayer::PropertyAngle:
markerSymbol->setDataDefinedAngle( button->toProperty() );
break;
case QgsSymbolLayer::PropertySize:
markerSymbol->setDataDefinedSize( button->toProperty() );
markerSymbol->setScaleMethod( QgsSymbol::ScaleDiameter );
break;
default:
break;
}

emit changed();
}

void QgsSymbolsListWidget::setContext( const QgsSymbolWidgetContext &context )
Expand Down
6 changes: 4 additions & 2 deletions src/gui/symbology/qgssymbolslistwidget.h
Expand Up @@ -38,7 +38,7 @@ class GUI_EXPORT QgsSymbolsListWidget : public QWidget, private Ui::SymbolsListW
Q_OBJECT

public:
QgsSymbolsListWidget( QgsSymbol *symbol, QgsStyle *style, QMenu *menu, QWidget *parent SIP_TRANSFERTHIS, const QgsVectorLayer *layer = nullptr );
QgsSymbolsListWidget( QgsSymbol *symbol, QgsStyle *style, QMenu *menu, QWidget *parent SIP_TRANSFERTHIS, QgsVectorLayer *layer = nullptr );


virtual ~QgsSymbolsListWidget();
Expand Down Expand Up @@ -86,6 +86,8 @@ class GUI_EXPORT QgsSymbolsListWidget : public QWidget, private Ui::SymbolsListW
void updateDataDefinedMarkerAngle();
void updateDataDefinedLineWidth();

void createAuxiliaryField();

signals:
void changed();

Expand All @@ -101,7 +103,7 @@ class GUI_EXPORT QgsSymbolsListWidget : public QWidget, private Ui::SymbolsListW
QgsStyle *mStyle = nullptr;
QMenu *mAdvancedMenu = nullptr;
QAction *mClipFeaturesAction = nullptr;
const QgsVectorLayer *mLayer = nullptr;
QgsVectorLayer *mLayer = nullptr;
QgsMapCanvas *mMapCanvas = nullptr;

void populateSymbolView();
Expand Down

0 comments on commit 429b1ec

Please sign in to comment.