Skip to content

Commit

Permalink
Code cleanup and modernization
Browse files Browse the repository at this point in the history
(cherry picked from commit b3f0674)
  • Loading branch information
nyalldawson committed May 31, 2021
1 parent f19e891 commit 1d1a688
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 42 deletions.
22 changes: 9 additions & 13 deletions src/gui/symbology/qgssinglesymbolrendererwidget.cpp
Expand Up @@ -34,29 +34,28 @@ QgsRendererWidget *QgsSingleSymbolRendererWidget::create( QgsVectorLayer *layer,

QgsSingleSymbolRendererWidget::QgsSingleSymbolRendererWidget( QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer )
: QgsRendererWidget( layer, style )

{
// try to recognize the previous renderer
// (null renderer means "no previous renderer")

if ( renderer )
{
mRenderer = QgsSingleSymbolRenderer::convertFromRenderer( renderer );
mRenderer.reset( QgsSingleSymbolRenderer::convertFromRenderer( renderer ) );
}
if ( !mRenderer )
{
QgsSymbol *symbol = QgsSymbol::defaultSymbol( mLayer->geometryType() );

if ( symbol )
mRenderer = new QgsSingleSymbolRenderer( symbol );
mRenderer = std::make_unique< QgsSingleSymbolRenderer >( symbol );
}

// load symbol from it
if ( mRenderer )
mSingleSymbol = mRenderer->symbol()->clone();
mSingleSymbol.reset( mRenderer->symbol()->clone() );

// setup ui
mSelector = new QgsSymbolSelectorWidget( mSingleSymbol, mStyle, mLayer, nullptr );
mSelector = new QgsSymbolSelectorWidget( mSingleSymbol.get(), mStyle, mLayer, nullptr );
connect( mSelector, &QgsSymbolSelectorWidget::symbolModified, this, &QgsSingleSymbolRendererWidget::changeSingleSymbol );
connect( mSelector, &QgsPanelWidget::showPanel, this, &QgsPanelWidget::openPanel );

Expand All @@ -72,24 +71,21 @@ QgsSingleSymbolRendererWidget::QgsSingleSymbolRendererWidget( QgsVectorLayer *la
if ( mSingleSymbol && mSingleSymbol->type() == QgsSymbol::Marker )
{
QAction *actionDdsLegend = advMenu->addAction( tr( "Data-defined Size Legend…" ) );
// only from Qt 5.6 there is convenience addAction() with new style connection
connect( actionDdsLegend, &QAction::triggered, this, &QgsSingleSymbolRendererWidget::dataDefinedSizeLegend );
}
}

QgsSingleSymbolRendererWidget::~QgsSingleSymbolRendererWidget()
{
delete mSingleSymbol;

delete mRenderer;
mSingleSymbol.reset();
mRenderer.reset();

delete mSelector;
}


QgsFeatureRenderer *QgsSingleSymbolRendererWidget::renderer()
{
return mRenderer;
return mRenderer.get();
}

void QgsSingleSymbolRendererWidget::setContext( const QgsSymbolWidgetContext &context )
Expand Down Expand Up @@ -124,12 +120,12 @@ void QgsSingleSymbolRendererWidget::changeSingleSymbol()

void QgsSingleSymbolRendererWidget::showSymbolLevels()
{
showSymbolLevelsDialog( mRenderer );
showSymbolLevelsDialog( mRenderer.get() );
}

void QgsSingleSymbolRendererWidget::dataDefinedSizeLegend()
{
QgsMarkerSymbol *s = static_cast<QgsMarkerSymbol *>( mSingleSymbol ); // this should be only enabled for marker symbols
QgsMarkerSymbol *s = static_cast<QgsMarkerSymbol *>( mSingleSymbol.get() ); // this should be only enabled for marker symbols
QgsDataDefinedSizeLegendWidget *panel = createDataDefinedSizeLegendWidget( s, mRenderer->dataDefinedSizeLegend() );
if ( panel )
{
Expand Down
4 changes: 2 additions & 2 deletions src/gui/symbology/qgssinglesymbolrendererwidget.h
Expand Up @@ -61,9 +61,9 @@ class GUI_EXPORT QgsSingleSymbolRendererWidget : public QgsRendererWidget

private:

QgsSingleSymbolRenderer *mRenderer = nullptr;
std::unique_ptr< QgsSingleSymbolRenderer > mRenderer;
QgsSymbolSelectorWidget *mSelector = nullptr;
QgsSymbol *mSingleSymbol = nullptr;
std::unique_ptr< QgsSymbol > mSingleSymbol;
};


Expand Down
47 changes: 21 additions & 26 deletions src/gui/symbology/qgssymbolselectordialog.cpp
Expand Up @@ -231,14 +231,13 @@ class SymbolLayerItem : public QStandardItem

QgsSymbolSelectorWidget::QgsSymbolSelectorWidget( QgsSymbol *symbol, QgsStyle *style, QgsVectorLayer *vl, QWidget *parent )
: QgsPanelWidget( parent )
, mStyle( style )
, mSymbol( symbol )
, mVectorLayer( vl )
{
#ifdef Q_OS_MAC
setWindowModality( Qt::WindowModal );
#endif
mStyle = style;
mSymbol = symbol;
mPresentWidget = nullptr;

setupUi( this );
this->layout()->setContentsMargins( 0, 0, 0, 0 );
Expand All @@ -260,9 +259,9 @@ QgsSymbolSelectorWidget::QgsSymbolSelectorWidget( QgsSymbol *symbol, QgsStyle *s
btnUp->setIcon( QIcon( QgsApplication::iconPath( "mActionArrowUp.svg" ) ) );
btnDown->setIcon( QIcon( QgsApplication::iconPath( "mActionArrowDown.svg" ) ) );

model = new QStandardItemModel( layersTree );
mSymbolLayersModel = new QStandardItemModel( layersTree );
// Set the symbol
layersTree->setModel( model );
layersTree->setModel( mSymbolLayersModel );
layersTree->setHeaderHidden( true );

//get first feature from layer for previews
Expand All @@ -286,7 +285,7 @@ QgsSymbolSelectorWidget::QgsSymbolSelectorWidget( QgsSymbol *symbol, QgsStyle *s
QItemSelectionModel *selModel = layersTree->selectionModel();
connect( selModel, &QItemSelectionModel::currentChanged, this, &QgsSymbolSelectorWidget::layerChanged );

loadSymbol( symbol, static_cast<SymbolLayerItem *>( model->invisibleRootItem() ) );
loadSymbol( mSymbol, static_cast<SymbolLayerItem *>( mSymbolLayersModel->invisibleRootItem() ) );
updatePreview();

connect( btnUp, &QAbstractButton::clicked, this, &QgsSymbolSelectorWidget::moveLayerUp );
Expand Down Expand Up @@ -351,12 +350,9 @@ void QgsSymbolSelectorWidget::setContext( const QgsSymbolWidgetContext &context
}

QWidget *widget = stackedWidget->currentWidget();
QgsLayerPropertiesWidget *layerProp = dynamic_cast< QgsLayerPropertiesWidget * >( widget );
QgsSymbolsListWidget *listWidget = dynamic_cast< QgsSymbolsListWidget * >( widget );

if ( layerProp )
if ( QgsLayerPropertiesWidget *layerProp = qobject_cast< QgsLayerPropertiesWidget * >( widget ) )
layerProp->setContext( context );
if ( listWidget )
else if ( QgsSymbolsListWidget *listWidget = qobject_cast< QgsSymbolsListWidget * >( widget ) )
listWidget->setContext( context );

layerChanged();
Expand All @@ -376,8 +372,8 @@ void QgsSymbolSelectorWidget::loadSymbol( QgsSymbol *symbol, SymbolLayerItem *pa
if ( !parent )
{
mSymbol = symbol;
model->clear();
parent = static_cast<SymbolLayerItem *>( model->invisibleRootItem() );
mSymbolLayersModel->clear();
parent = static_cast<SymbolLayerItem *>( mSymbolLayersModel->invisibleRootItem() );
}

SymbolLayerItem *symbolItem = new SymbolLayerItem( symbol );
Expand All @@ -399,7 +395,6 @@ void QgsSymbolSelectorWidget::loadSymbol( QgsSymbol *symbol, SymbolLayerItem *pa
layersTree->setExpanded( layerItem->index(), true );
}
layersTree->setExpanded( symbolItem->index(), true );
}

if ( mSymbol == symbol && !layersTree->currentIndex().isValid() )
{
Expand All @@ -410,8 +405,8 @@ void QgsSymbolSelectorWidget::loadSymbol( QgsSymbol *symbol, SymbolLayerItem *pa

void QgsSymbolSelectorWidget::reloadSymbol()
{
model->clear();
loadSymbol( mSymbol, static_cast<SymbolLayerItem *>( model->invisibleRootItem() ) );
mSymbolLayersModel->clear();
loadSymbol( mSymbol, static_cast<SymbolLayerItem *>( mSymbolLayersModel->invisibleRootItem() ) );
}

void QgsSymbolSelectorWidget::updateUi()
Expand All @@ -420,7 +415,7 @@ void QgsSymbolSelectorWidget::updateUi()
if ( !currentIdx.isValid() )
return;

SymbolLayerItem *item = static_cast<SymbolLayerItem *>( model->itemFromIndex( currentIdx ) );
SymbolLayerItem *item = static_cast<SymbolLayerItem *>( mSymbolLayersModel->itemFromIndex( currentIdx ) );
if ( !item->isLayer() )
{
btnUp->setEnabled( false );
Expand Down Expand Up @@ -470,7 +465,7 @@ SymbolLayerItem *QgsSymbolSelectorWidget::currentLayerItem()
if ( !idx.isValid() )
return nullptr;

SymbolLayerItem *item = static_cast<SymbolLayerItem *>( model->itemFromIndex( idx ) );
SymbolLayerItem *item = static_cast<SymbolLayerItem *>( mSymbolLayersModel->itemFromIndex( idx ) );
if ( !item->isLayer() )
return nullptr;

Expand All @@ -483,7 +478,7 @@ QgsSymbolLayer *QgsSymbolSelectorWidget::currentLayer()
if ( !idx.isValid() )
return nullptr;

SymbolLayerItem *item = static_cast<SymbolLayerItem *>( model->itemFromIndex( idx ) );
SymbolLayerItem *item = static_cast<SymbolLayerItem *>( mSymbolLayersModel->itemFromIndex( idx ) );
if ( item->isLayer() )
return item->layer();

Expand All @@ -494,7 +489,7 @@ void QgsSymbolSelectorWidget::layerChanged()
{
updateUi();

SymbolLayerItem *currentItem = static_cast<SymbolLayerItem *>( model->itemFromIndex( layersTree->currentIndex() ) );
SymbolLayerItem *currentItem = static_cast<SymbolLayerItem *>( mSymbolLayersModel->itemFromIndex( layersTree->currentIndex() ) );
if ( !currentItem )
return;

Expand All @@ -515,8 +510,8 @@ void QgsSymbolSelectorWidget::layerChanged()
}
else
{
mDataDefineRestorer.reset();
// then it must be a symbol
mDataDefineRestorer.reset();
Q_NOWARN_DEPRECATED_PUSH
currentItem->symbol()->setLayer( mVectorLayer );
Q_NOWARN_DEPRECATED_POP
Expand All @@ -532,7 +527,7 @@ void QgsSymbolSelectorWidget::layerChanged()

void QgsSymbolSelectorWidget::symbolChanged()
{
SymbolLayerItem *currentItem = static_cast<SymbolLayerItem *>( model->itemFromIndex( layersTree->currentIndex() ) );
SymbolLayerItem *currentItem = static_cast<SymbolLayerItem *>( mSymbolLayersModel->itemFromIndex( layersTree->currentIndex() ) );
if ( !currentItem || currentItem->isLayer() )
return;
// disconnect to avoid recreating widget
Expand Down Expand Up @@ -583,7 +578,7 @@ void QgsSymbolSelectorWidget::addLayer()
return;

int insertIdx = -1;
SymbolLayerItem *item = static_cast<SymbolLayerItem *>( model->itemFromIndex( idx ) );
SymbolLayerItem *item = static_cast<SymbolLayerItem *>( mSymbolLayersModel->itemFromIndex( idx ) );
if ( item->isLayer() )
{
insertIdx = item->row();
Expand Down Expand Up @@ -621,7 +616,7 @@ void QgsSymbolSelectorWidget::addLayer()
item->insertRow( insertIdx == -1 ? 0 : insertIdx, newLayerItem );
item->updatePreview();

layersTree->setCurrentIndex( model->indexFromItem( newLayerItem ) );
layersTree->setCurrentIndex( mSymbolLayersModel->indexFromItem( newLayerItem ) );
updateUi();
updatePreview();
}
Expand Down Expand Up @@ -699,7 +694,7 @@ void QgsSymbolSelectorWidget::duplicateLayer()
if ( !idx.isValid() )
return;

SymbolLayerItem *item = static_cast<SymbolLayerItem *>( model->itemFromIndex( idx ) );
SymbolLayerItem *item = static_cast<SymbolLayerItem *>( mSymbolLayersModel->itemFromIndex( idx ) );
if ( !item->isLayer() )
return;

Expand All @@ -725,7 +720,7 @@ void QgsSymbolSelectorWidget::duplicateLayer()
}
item->updatePreview();

layersTree->setCurrentIndex( model->indexFromItem( newLayerItem ) );
layersTree->setCurrentIndex( mSymbolLayersModel->indexFromItem( newLayerItem ) );
updateUi();
updatePreview();
}
Expand Down
2 changes: 1 addition & 1 deletion src/gui/symbology/qgssymbolselectordialog.h
Expand Up @@ -258,7 +258,7 @@ class GUI_EXPORT QgsSymbolSelectorWidget: public QgsPanelWidget, private Ui::Qgs
QMenu *mAdvancedMenu = nullptr;
QgsVectorLayer *mVectorLayer = nullptr;

QStandardItemModel *model = nullptr;
QStandardItemModel *mSymbolLayersModel = nullptr;
QWidget *mPresentWidget = nullptr;

std::unique_ptr<DataDefinedRestorer> mDataDefineRestorer;
Expand Down

0 comments on commit 1d1a688

Please sign in to comment.