diff --git a/python/core/layout/qgslayoutitem.sip b/python/core/layout/qgslayoutitem.sip index f5f0a2591d7..bce49ab58e7 100644 --- a/python/core/layout/qgslayoutitem.sip +++ b/python/core/layout/qgslayoutitem.sip @@ -73,6 +73,8 @@ class QgsLayoutItem : QgsLayoutObject, QGraphicsRectItem, QgsLayoutUndoObjectInt UndoMapGridFrameFill2Color, UndoMapAnnotationDistance, UndoMapGridAnnotationFontColor, + UndoMapGridLineSymbol, + UndoMapGridMarkerSymbol, }; explicit QgsLayoutItem( QgsLayout *layout, bool manageZValue = true ); diff --git a/src/app/layout/qgslayoutmapgridwidget.cpp b/src/app/layout/qgslayoutmapgridwidget.cpp index d9df19ca69e..aef77a39977 100644 --- a/src/app/layout/qgslayoutmapgridwidget.cpp +++ b/src/app/layout/qgslayoutmapgridwidget.cpp @@ -33,8 +33,6 @@ QgsLayoutMapGridWidget::QgsLayoutMapGridWidget( QgsLayoutItemMapGrid *mapGrid, Q , mMapGrid( mapGrid ) { setupUi( this ); - connect( mGridLineStyleButton, &QPushButton::clicked, this, &QgsLayoutMapGridWidget::mGridLineStyleButton_clicked ); - connect( mGridMarkerStyleButton, &QPushButton::clicked, this, &QgsLayoutMapGridWidget::mGridMarkerStyleButton_clicked ); connect( mIntervalXSpinBox, &QgsDoubleSpinBox::editingFinished, this, &QgsLayoutMapGridWidget::mIntervalXSpinBox_editingFinished ); connect( mIntervalYSpinBox, &QgsDoubleSpinBox::editingFinished, this, &QgsLayoutMapGridWidget::mIntervalYSpinBox_editingFinished ); connect( mOffsetXSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mOffsetXSpinBox_valueChanged ); @@ -139,6 +137,9 @@ QgsLayoutMapGridWidget::QgsLayoutMapGridWidget( QgsLayoutItemMapGrid *mapGrid, Q mGridFrameFill2ColorButton->setNoColorString( tr( "Transparent fill" ) ); mGridFrameFill2ColorButton->setShowNoColor( true ); + mGridLineStyleButton->setSymbolType( QgsSymbol::Line ); + mGridMarkerStyleButton->setSymbolType( QgsSymbol::Marker ); + //set initial state of frame style controls toggleFrameControls( false, false, false ); @@ -146,6 +147,8 @@ QgsLayoutMapGridWidget::QgsLayoutMapGridWidget( QgsLayoutItemMapGrid *mapGrid, Q blockAllSignals( false ); connect( mAnnotationFontButton, &QgsFontButton::changed, this, &QgsLayoutMapGridWidget::annotationFontChanged ); + connect( mGridLineStyleButton, &QgsSymbolButton::changed, this, &QgsLayoutMapGridWidget::lineSymbolChanged ); + connect( mGridMarkerStyleButton, &QgsSymbolButton::changed, this, &QgsLayoutMapGridWidget::markerSymbolChanged ); } void QgsLayoutMapGridWidget::populateDataDefinedButtons() @@ -153,65 +156,6 @@ void QgsLayoutMapGridWidget::populateDataDefinedButtons() // none for now } - -void QgsLayoutMapGridWidget::updateGridLineStyleFromWidget() -{ - if ( !mMapGrid || !mMap ) - { - return; - } - - QgsSymbolSelectorWidget *w = qobject_cast( sender() ); - mMapGrid->setLineSymbol( dynamic_cast< QgsLineSymbol * >( w->symbol()->clone() ) ); - mMap->update(); -} - -void QgsLayoutMapGridWidget::cleanUpGridLineStyleSelector( QgsPanelWidget *container ) -{ - QgsSymbolSelectorWidget *w = qobject_cast( container ); - if ( !w ) - return; - - delete w->symbol(); - - if ( !mMapGrid || !mMap ) - { - return; - } - - updateGridLineSymbolMarker(); - mMap->endCommand(); -} - -void QgsLayoutMapGridWidget::updateGridMarkerStyleFromWidget() -{ - if ( !mMapGrid || !mMap ) - { - return; - } - - QgsSymbolSelectorWidget *w = qobject_cast( sender() ); - mMapGrid->setMarkerSymbol( dynamic_cast< QgsMarkerSymbol * >( w->symbol()->clone() ) ); - mMap->update(); -} - -void QgsLayoutMapGridWidget::cleanUpGridMarkerStyleSelector( QgsPanelWidget *container ) -{ - QgsSymbolSelectorWidget *w = qobject_cast( container ); - if ( !w ) - return; - - delete w->symbol(); - - if ( !mMapGrid || !mMap ) - { - return; - } - - updateGridMarkerSymbolMarker(); - mMap->endCommand(); -} - void QgsLayoutMapGridWidget::setGuiElementValues() { updateGuiElements(); @@ -256,6 +200,7 @@ void QgsLayoutMapGridWidget::blockAllSignals( bool block ) mFrameDivisionsRightComboBox->blockSignals( block ); mFrameDivisionsTopComboBox->blockSignals( block ); mFrameDivisionsBottomComboBox->blockSignals( block ); + mGridMarkerStyleButton->blockSignals( block ); //grid annotation mDrawAnnotationGroupBox->blockSignals( block ); @@ -493,6 +438,9 @@ void QgsLayoutMapGridWidget::setGridItems() return; } + mGridMarkerStyleButton->registerExpressionContextGenerator( mMapGrid ); + mGridLineStyleButton->registerExpressionContextGenerator( mMapGrid ); + mIntervalXSpinBox->setValue( mMapGrid->intervalX() ); mIntervalYSpinBox->setValue( mMapGrid->intervalY() ); mOffsetXSpinBox->setValue( mMapGrid->offsetX() ); @@ -595,9 +543,9 @@ void QgsLayoutMapGridWidget::setGridItems() initFrameDisplayBox( mFrameDivisionsBottomComboBox, mMapGrid->frameDivisions( QgsLayoutItemMapGrid::Bottom ) ); //line style - updateGridLineSymbolMarker(); + mGridLineStyleButton->setSymbol( mMapGrid->lineSymbol()->clone() ); //marker style - updateGridMarkerSymbolMarker(); + mGridMarkerStyleButton->setSymbol( mMapGrid->markerSymbol()->clone() ); mGridBlendComboBox->setBlendMode( mMapGrid->blendMode() ); @@ -646,80 +594,6 @@ void QgsLayoutMapGridWidget::setGridItems() mMapGridCRSButton->setText( crsButtonText ); } -void QgsLayoutMapGridWidget::updateGridLineSymbolMarker() -{ - if ( mMapGrid ) - { - QgsLineSymbol *nonConstSymbol = const_cast( mMapGrid->lineSymbol() ); //bad - QIcon icon = QgsSymbolLayerUtils::symbolPreviewIcon( nonConstSymbol, mGridLineStyleButton->iconSize() ); - mGridLineStyleButton->setIcon( icon ); - } -} - -void QgsLayoutMapGridWidget::updateGridMarkerSymbolMarker() -{ - if ( mMapGrid ) - { - QgsMarkerSymbol *nonConstSymbol = const_cast( mMapGrid->markerSymbol() ); //bad - QIcon icon = QgsSymbolLayerUtils::symbolPreviewIcon( nonConstSymbol, mGridMarkerStyleButton->iconSize() ); - mGridMarkerStyleButton->setIcon( icon ); - } -} - -void QgsLayoutMapGridWidget::mGridLineStyleButton_clicked() -{ - if ( !mMapGrid || !mMap ) - { - return; - } - -#if 0 //TODO - // use the atlas coverage layer, if any - QgsVectorLayer *coverageLayer = atlasCoverageLayer(); -#endif - QgsVectorLayer *coverageLayer = nullptr; - - QgsLineSymbol *newSymbol = static_cast( mMapGrid->lineSymbol()->clone() ); - QgsExpressionContext context = mMap->createExpressionContext(); - - QgsSymbolSelectorWidget *d = new QgsSymbolSelectorWidget( newSymbol, QgsStyle::defaultStyle(), coverageLayer, nullptr ); - QgsSymbolWidgetContext symbolContext; - symbolContext.setExpressionContext( &context ); - d->setContext( symbolContext ); - - connect( d, &QgsPanelWidget::widgetChanged, this, &QgsLayoutMapGridWidget::updateGridLineStyleFromWidget ); - connect( d, &QgsPanelWidget::panelAccepted, this, &QgsLayoutMapGridWidget::cleanUpGridLineStyleSelector ); - openPanel( d ); - mMap->beginCommand( tr( "Grid line style changed" ) ); -} - -void QgsLayoutMapGridWidget::mGridMarkerStyleButton_clicked() -{ - if ( !mMapGrid || !mMap ) - { - return; - } - -#if 0 //TODO - // use the atlas coverage layer, if any - QgsVectorLayer *coverageLayer = atlasCoverageLayer(); -#endif - QgsVectorLayer *coverageLayer = nullptr; - - QgsMarkerSymbol *newSymbol = static_cast( mMapGrid->markerSymbol()->clone() ); - QgsExpressionContext context = mMap->createExpressionContext(); - - QgsSymbolSelectorWidget *d = new QgsSymbolSelectorWidget( newSymbol, QgsStyle::defaultStyle(), coverageLayer, nullptr ); - QgsSymbolWidgetContext symbolContext; - symbolContext.setExpressionContext( &context ); - d->setContext( symbolContext ); - - connect( d, &QgsPanelWidget::widgetChanged, this, &QgsLayoutMapGridWidget::updateGridMarkerStyleFromWidget ); - connect( d, &QgsPanelWidget::panelAccepted, this, &QgsLayoutMapGridWidget::cleanUpGridMarkerStyleSelector ); - openPanel( d ); - mMap->beginCommand( tr( "Grid markers style changed" ) ); -} - void QgsLayoutMapGridWidget::mIntervalXSpinBox_editingFinished() { if ( !mMapGrid || !mMap ) @@ -1221,6 +1095,32 @@ void QgsLayoutMapGridWidget::annotationFontChanged() mMap->endCommand(); } +void QgsLayoutMapGridWidget::lineSymbolChanged() +{ + if ( !mMapGrid || !mMap ) + { + return; + } + + mMap->beginCommand( tr( "Change Grid Line Style" ), QgsLayoutItem::UndoMapGridLineSymbol ); + mMapGrid->setLineSymbol( mGridLineStyleButton->clonedSymbol() ); + mMap->endCommand(); + mMap->update(); +} + +void QgsLayoutMapGridWidget::markerSymbolChanged() +{ + if ( !mMapGrid || !mMap ) + { + return; + } + + mMap->beginCommand( tr( "Change Grid Marker Style" ), QgsLayoutItem::UndoMapGridMarkerSymbol ); + mMapGrid->setMarkerSymbol( mGridMarkerStyleButton->clonedSymbol() ); + mMap->endCommand(); + mMap->update(); +} + void QgsLayoutMapGridWidget::mAnnotationFontColorButton_colorChanged( const QColor &color ) { if ( !mMapGrid || !mMap ) diff --git a/src/app/layout/qgslayoutmapgridwidget.h b/src/app/layout/qgslayoutmapgridwidget.h index d79d0f262ea..61f6b35eecc 100644 --- a/src/app/layout/qgslayoutmapgridwidget.h +++ b/src/app/layout/qgslayoutmapgridwidget.h @@ -36,8 +36,6 @@ class QgsLayoutMapGridWidget: public QgsLayoutItemBaseWidget, private Ui::QgsLay public slots: void setGridItems(); - void mGridLineStyleButton_clicked(); - void mGridMarkerStyleButton_clicked(); void mIntervalXSpinBox_editingFinished(); void mIntervalYSpinBox_editingFinished(); void mOffsetXSpinBox_valueChanged( double value ); @@ -103,12 +101,9 @@ class QgsLayoutMapGridWidget: public QgsLayoutItemBaseWidget, private Ui::QgsLay //! Sets the GUI elements to the values of mPicture void setGuiElementValues(); - - void updateGridLineStyleFromWidget(); - void cleanUpGridLineStyleSelector( QgsPanelWidget *container ); - void updateGridMarkerStyleFromWidget(); - void cleanUpGridMarkerStyleSelector( QgsPanelWidget *container ); void annotationFontChanged(); + void lineSymbolChanged(); + void markerSymbolChanged(); private: QgsLayoutItemMap *mMap = nullptr; @@ -132,9 +127,6 @@ class QgsLayoutMapGridWidget: public QgsLayoutItemBaseWidget, private Ui::QgsLay void initAnnotationPositionBox( QComboBox *c, QgsLayoutItemMapGrid::AnnotationPosition pos ); void initAnnotationDirectionBox( QComboBox *c, QgsLayoutItemMapGrid::AnnotationDirection dir ); - void updateGridLineSymbolMarker(); - void updateGridMarkerSymbolMarker(); - //! Enables/disables grid frame related controls void toggleFrameControls( bool frameEnabled, bool frameFillEnabled, bool frameSizeEnabled ); diff --git a/src/core/layout/qgslayoutitem.h b/src/core/layout/qgslayoutitem.h index 6ccc081976d..d91846c50a3 100644 --- a/src/core/layout/qgslayoutitem.h +++ b/src/core/layout/qgslayoutitem.h @@ -106,6 +106,8 @@ class CORE_EXPORT QgsLayoutItem : public QgsLayoutObject, public QGraphicsRectIt UndoMapGridFrameFill2Color, //!< Map grid frame fill color 2 UndoMapAnnotationDistance, //!< Map frame annotation distance UndoMapGridAnnotationFontColor, //!< Map frame annotation color + UndoMapGridLineSymbol, //!< Grid line symbol + UndoMapGridMarkerSymbol, //!< Grid marker symbol }; /** diff --git a/src/ui/layout/qgslayoutmapgridwidgetbase.ui b/src/ui/layout/qgslayoutmapgridwidgetbase.ui index af327aaa4d8..5c11ade07a0 100644 --- a/src/ui/layout/qgslayoutmapgridwidgetbase.ui +++ b/src/ui/layout/qgslayoutmapgridwidgetbase.ui @@ -49,7 +49,7 @@ 0 0 389 - 1419 + 1417 @@ -249,13 +249,6 @@ - - - - change... - - - @@ -266,13 +259,6 @@ - - - - change... - - - @@ -283,6 +269,32 @@ + + + + + 0 + 0 + + + + change... + + + + + + + + 0 + 0 + + + + change... + + + @@ -780,6 +792,11 @@ QComboBox
qgsblendmodecombobox.h
+ + QgsSymbolButton + QToolButton +
qgssymbolbutton.h
+
scrollArea