Skip to content

Commit b7e3526

Browse files
committedNov 7, 2017
Use symbol buttons for grid symbols
1 parent cef5dbc commit b7e3526

File tree

5 files changed

+75
-162
lines changed

5 files changed

+75
-162
lines changed
 

‎python/core/layout/qgslayoutitem.sip

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ class QgsLayoutItem : QgsLayoutObject, QGraphicsRectItem, QgsLayoutUndoObjectInt
7373
UndoMapGridFrameFill2Color,
7474
UndoMapAnnotationDistance,
7575
UndoMapGridAnnotationFontColor,
76+
UndoMapGridLineSymbol,
77+
UndoMapGridMarkerSymbol,
7678
};
7779

7880
explicit QgsLayoutItem( QgsLayout *layout, bool manageZValue = true );

‎src/app/layout/qgslayoutmapgridwidget.cpp

Lines changed: 37 additions & 137 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ QgsLayoutMapGridWidget::QgsLayoutMapGridWidget( QgsLayoutItemMapGrid *mapGrid, Q
3333
, mMapGrid( mapGrid )
3434
{
3535
setupUi( this );
36-
connect( mGridLineStyleButton, &QPushButton::clicked, this, &QgsLayoutMapGridWidget::mGridLineStyleButton_clicked );
37-
connect( mGridMarkerStyleButton, &QPushButton::clicked, this, &QgsLayoutMapGridWidget::mGridMarkerStyleButton_clicked );
3836
connect( mIntervalXSpinBox, &QgsDoubleSpinBox::editingFinished, this, &QgsLayoutMapGridWidget::mIntervalXSpinBox_editingFinished );
3937
connect( mIntervalYSpinBox, &QgsDoubleSpinBox::editingFinished, this, &QgsLayoutMapGridWidget::mIntervalYSpinBox_editingFinished );
4038
connect( mOffsetXSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mOffsetXSpinBox_valueChanged );
@@ -139,79 +137,25 @@ QgsLayoutMapGridWidget::QgsLayoutMapGridWidget( QgsLayoutItemMapGrid *mapGrid, Q
139137
mGridFrameFill2ColorButton->setNoColorString( tr( "Transparent fill" ) );
140138
mGridFrameFill2ColorButton->setShowNoColor( true );
141139

140+
mGridLineStyleButton->setSymbolType( QgsSymbol::Line );
141+
mGridMarkerStyleButton->setSymbolType( QgsSymbol::Marker );
142+
142143
//set initial state of frame style controls
143144
toggleFrameControls( false, false, false );
144145

145146
updateGuiElements();
146147

147148
blockAllSignals( false );
148149
connect( mAnnotationFontButton, &QgsFontButton::changed, this, &QgsLayoutMapGridWidget::annotationFontChanged );
150+
connect( mGridLineStyleButton, &QgsSymbolButton::changed, this, &QgsLayoutMapGridWidget::lineSymbolChanged );
151+
connect( mGridMarkerStyleButton, &QgsSymbolButton::changed, this, &QgsLayoutMapGridWidget::markerSymbolChanged );
149152
}
150153

151154
void QgsLayoutMapGridWidget::populateDataDefinedButtons()
152155
{
153156
// none for now
154157
}
155158

156-
157-
void QgsLayoutMapGridWidget::updateGridLineStyleFromWidget()
158-
{
159-
if ( !mMapGrid || !mMap )
160-
{
161-
return;
162-
}
163-
164-
QgsSymbolSelectorWidget *w = qobject_cast<QgsSymbolSelectorWidget *>( sender() );
165-
mMapGrid->setLineSymbol( dynamic_cast< QgsLineSymbol * >( w->symbol()->clone() ) );
166-
mMap->update();
167-
}
168-
169-
void QgsLayoutMapGridWidget::cleanUpGridLineStyleSelector( QgsPanelWidget *container )
170-
{
171-
QgsSymbolSelectorWidget *w = qobject_cast<QgsSymbolSelectorWidget *>( container );
172-
if ( !w )
173-
return;
174-
175-
delete w->symbol();
176-
177-
if ( !mMapGrid || !mMap )
178-
{
179-
return;
180-
}
181-
182-
updateGridLineSymbolMarker();
183-
mMap->endCommand();
184-
}
185-
186-
void QgsLayoutMapGridWidget::updateGridMarkerStyleFromWidget()
187-
{
188-
if ( !mMapGrid || !mMap )
189-
{
190-
return;
191-
}
192-
193-
QgsSymbolSelectorWidget *w = qobject_cast<QgsSymbolSelectorWidget *>( sender() );
194-
mMapGrid->setMarkerSymbol( dynamic_cast< QgsMarkerSymbol * >( w->symbol()->clone() ) );
195-
mMap->update();
196-
}
197-
198-
void QgsLayoutMapGridWidget::cleanUpGridMarkerStyleSelector( QgsPanelWidget *container )
199-
{
200-
QgsSymbolSelectorWidget *w = qobject_cast<QgsSymbolSelectorWidget *>( container );
201-
if ( !w )
202-
return;
203-
204-
delete w->symbol();
205-
206-
if ( !mMapGrid || !mMap )
207-
{
208-
return;
209-
}
210-
211-
updateGridMarkerSymbolMarker();
212-
mMap->endCommand();
213-
}
214-
215159
void QgsLayoutMapGridWidget::setGuiElementValues()
216160
{
217161
updateGuiElements();
@@ -256,6 +200,7 @@ void QgsLayoutMapGridWidget::blockAllSignals( bool block )
256200
mFrameDivisionsRightComboBox->blockSignals( block );
257201
mFrameDivisionsTopComboBox->blockSignals( block );
258202
mFrameDivisionsBottomComboBox->blockSignals( block );
203+
mGridMarkerStyleButton->blockSignals( block );
259204

260205
//grid annotation
261206
mDrawAnnotationGroupBox->blockSignals( block );
@@ -493,6 +438,9 @@ void QgsLayoutMapGridWidget::setGridItems()
493438
return;
494439
}
495440

441+
mGridMarkerStyleButton->registerExpressionContextGenerator( mMapGrid );
442+
mGridLineStyleButton->registerExpressionContextGenerator( mMapGrid );
443+
496444
mIntervalXSpinBox->setValue( mMapGrid->intervalX() );
497445
mIntervalYSpinBox->setValue( mMapGrid->intervalY() );
498446
mOffsetXSpinBox->setValue( mMapGrid->offsetX() );
@@ -595,9 +543,9 @@ void QgsLayoutMapGridWidget::setGridItems()
595543
initFrameDisplayBox( mFrameDivisionsBottomComboBox, mMapGrid->frameDivisions( QgsLayoutItemMapGrid::Bottom ) );
596544

597545
//line style
598-
updateGridLineSymbolMarker();
546+
mGridLineStyleButton->setSymbol( mMapGrid->lineSymbol()->clone() );
599547
//marker style
600-
updateGridMarkerSymbolMarker();
548+
mGridMarkerStyleButton->setSymbol( mMapGrid->markerSymbol()->clone() );
601549

602550
mGridBlendComboBox->setBlendMode( mMapGrid->blendMode() );
603551

@@ -646,80 +594,6 @@ void QgsLayoutMapGridWidget::setGridItems()
646594
mMapGridCRSButton->setText( crsButtonText );
647595
}
648596

649-
void QgsLayoutMapGridWidget::updateGridLineSymbolMarker()
650-
{
651-
if ( mMapGrid )
652-
{
653-
QgsLineSymbol *nonConstSymbol = const_cast<QgsLineSymbol *>( mMapGrid->lineSymbol() ); //bad
654-
QIcon icon = QgsSymbolLayerUtils::symbolPreviewIcon( nonConstSymbol, mGridLineStyleButton->iconSize() );
655-
mGridLineStyleButton->setIcon( icon );
656-
}
657-
}
658-
659-
void QgsLayoutMapGridWidget::updateGridMarkerSymbolMarker()
660-
{
661-
if ( mMapGrid )
662-
{
663-
QgsMarkerSymbol *nonConstSymbol = const_cast<QgsMarkerSymbol *>( mMapGrid->markerSymbol() ); //bad
664-
QIcon icon = QgsSymbolLayerUtils::symbolPreviewIcon( nonConstSymbol, mGridMarkerStyleButton->iconSize() );
665-
mGridMarkerStyleButton->setIcon( icon );
666-
}
667-
}
668-
669-
void QgsLayoutMapGridWidget::mGridLineStyleButton_clicked()
670-
{
671-
if ( !mMapGrid || !mMap )
672-
{
673-
return;
674-
}
675-
676-
#if 0 //TODO
677-
// use the atlas coverage layer, if any
678-
QgsVectorLayer *coverageLayer = atlasCoverageLayer();
679-
#endif
680-
QgsVectorLayer *coverageLayer = nullptr;
681-
682-
QgsLineSymbol *newSymbol = static_cast<QgsLineSymbol *>( mMapGrid->lineSymbol()->clone() );
683-
QgsExpressionContext context = mMap->createExpressionContext();
684-
685-
QgsSymbolSelectorWidget *d = new QgsSymbolSelectorWidget( newSymbol, QgsStyle::defaultStyle(), coverageLayer, nullptr );
686-
QgsSymbolWidgetContext symbolContext;
687-
symbolContext.setExpressionContext( &context );
688-
d->setContext( symbolContext );
689-
690-
connect( d, &QgsPanelWidget::widgetChanged, this, &QgsLayoutMapGridWidget::updateGridLineStyleFromWidget );
691-
connect( d, &QgsPanelWidget::panelAccepted, this, &QgsLayoutMapGridWidget::cleanUpGridLineStyleSelector );
692-
openPanel( d );
693-
mMap->beginCommand( tr( "Grid line style changed" ) );
694-
}
695-
696-
void QgsLayoutMapGridWidget::mGridMarkerStyleButton_clicked()
697-
{
698-
if ( !mMapGrid || !mMap )
699-
{
700-
return;
701-
}
702-
703-
#if 0 //TODO
704-
// use the atlas coverage layer, if any
705-
QgsVectorLayer *coverageLayer = atlasCoverageLayer();
706-
#endif
707-
QgsVectorLayer *coverageLayer = nullptr;
708-
709-
QgsMarkerSymbol *newSymbol = static_cast<QgsMarkerSymbol *>( mMapGrid->markerSymbol()->clone() );
710-
QgsExpressionContext context = mMap->createExpressionContext();
711-
712-
QgsSymbolSelectorWidget *d = new QgsSymbolSelectorWidget( newSymbol, QgsStyle::defaultStyle(), coverageLayer, nullptr );
713-
QgsSymbolWidgetContext symbolContext;
714-
symbolContext.setExpressionContext( &context );
715-
d->setContext( symbolContext );
716-
717-
connect( d, &QgsPanelWidget::widgetChanged, this, &QgsLayoutMapGridWidget::updateGridMarkerStyleFromWidget );
718-
connect( d, &QgsPanelWidget::panelAccepted, this, &QgsLayoutMapGridWidget::cleanUpGridMarkerStyleSelector );
719-
openPanel( d );
720-
mMap->beginCommand( tr( "Grid markers style changed" ) );
721-
}
722-
723597
void QgsLayoutMapGridWidget::mIntervalXSpinBox_editingFinished()
724598
{
725599
if ( !mMapGrid || !mMap )
@@ -1221,6 +1095,32 @@ void QgsLayoutMapGridWidget::annotationFontChanged()
12211095
mMap->endCommand();
12221096
}
12231097

1098+
void QgsLayoutMapGridWidget::lineSymbolChanged()
1099+
{
1100+
if ( !mMapGrid || !mMap )
1101+
{
1102+
return;
1103+
}
1104+
1105+
mMap->beginCommand( tr( "Change Grid Line Style" ), QgsLayoutItem::UndoMapGridLineSymbol );
1106+
mMapGrid->setLineSymbol( mGridLineStyleButton->clonedSymbol<QgsLineSymbol>() );
1107+
mMap->endCommand();
1108+
mMap->update();
1109+
}
1110+
1111+
void QgsLayoutMapGridWidget::markerSymbolChanged()
1112+
{
1113+
if ( !mMapGrid || !mMap )
1114+
{
1115+
return;
1116+
}
1117+
1118+
mMap->beginCommand( tr( "Change Grid Marker Style" ), QgsLayoutItem::UndoMapGridMarkerSymbol );
1119+
mMapGrid->setMarkerSymbol( mGridMarkerStyleButton->clonedSymbol<QgsMarkerSymbol>() );
1120+
mMap->endCommand();
1121+
mMap->update();
1122+
}
1123+
12241124
void QgsLayoutMapGridWidget::mAnnotationFontColorButton_colorChanged( const QColor &color )
12251125
{
12261126
if ( !mMapGrid || !mMap )

‎src/app/layout/qgslayoutmapgridwidget.h

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ class QgsLayoutMapGridWidget: public QgsLayoutItemBaseWidget, private Ui::QgsLay
3636
public slots:
3737

3838
void setGridItems();
39-
void mGridLineStyleButton_clicked();
40-
void mGridMarkerStyleButton_clicked();
4139
void mIntervalXSpinBox_editingFinished();
4240
void mIntervalYSpinBox_editingFinished();
4341
void mOffsetXSpinBox_valueChanged( double value );
@@ -103,12 +101,9 @@ class QgsLayoutMapGridWidget: public QgsLayoutItemBaseWidget, private Ui::QgsLay
103101

104102
//! Sets the GUI elements to the values of mPicture
105103
void setGuiElementValues();
106-
107-
void updateGridLineStyleFromWidget();
108-
void cleanUpGridLineStyleSelector( QgsPanelWidget *container );
109-
void updateGridMarkerStyleFromWidget();
110-
void cleanUpGridMarkerStyleSelector( QgsPanelWidget *container );
111104
void annotationFontChanged();
105+
void lineSymbolChanged();
106+
void markerSymbolChanged();
112107

113108
private:
114109
QgsLayoutItemMap *mMap = nullptr;
@@ -132,9 +127,6 @@ class QgsLayoutMapGridWidget: public QgsLayoutItemBaseWidget, private Ui::QgsLay
132127
void initAnnotationPositionBox( QComboBox *c, QgsLayoutItemMapGrid::AnnotationPosition pos );
133128
void initAnnotationDirectionBox( QComboBox *c, QgsLayoutItemMapGrid::AnnotationDirection dir );
134129

135-
void updateGridLineSymbolMarker();
136-
void updateGridMarkerSymbolMarker();
137-
138130
//! Enables/disables grid frame related controls
139131
void toggleFrameControls( bool frameEnabled, bool frameFillEnabled, bool frameSizeEnabled );
140132

‎src/core/layout/qgslayoutitem.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ class CORE_EXPORT QgsLayoutItem : public QgsLayoutObject, public QGraphicsRectIt
106106
UndoMapGridFrameFill2Color, //!< Map grid frame fill color 2
107107
UndoMapAnnotationDistance, //!< Map frame annotation distance
108108
UndoMapGridAnnotationFontColor, //!< Map frame annotation color
109+
UndoMapGridLineSymbol, //!< Grid line symbol
110+
UndoMapGridMarkerSymbol, //!< Grid marker symbol
109111
};
110112

111113
/**

‎src/ui/layout/qgslayoutmapgridwidgetbase.ui

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
<x>0</x>
5050
<y>0</y>
5151
<width>389</width>
52-
<height>1419</height>
52+
<height>1417</height>
5353
</rect>
5454
</property>
5555
<property name="sizePolicy">
@@ -249,13 +249,6 @@
249249
</property>
250250
</widget>
251251
</item>
252-
<item row="6" column="1">
253-
<widget class="QPushButton" name="mGridLineStyleButton">
254-
<property name="text">
255-
<string>change...</string>
256-
</property>
257-
</widget>
258-
</item>
259252
<item row="7" column="0">
260253
<widget class="QLabel" name="mMarkerStyleLabel">
261254
<property name="text">
@@ -266,13 +259,6 @@
266259
</property>
267260
</widget>
268261
</item>
269-
<item row="7" column="1">
270-
<widget class="QPushButton" name="mGridMarkerStyleButton">
271-
<property name="text">
272-
<string>change...</string>
273-
</property>
274-
</widget>
275-
</item>
276262
<item row="8" column="0">
277263
<widget class="QLabel" name="mGridBlendLabel">
278264
<property name="text">
@@ -283,6 +269,32 @@
283269
<item row="8" column="1">
284270
<widget class="QgsBlendModeComboBox" name="mGridBlendComboBox"/>
285271
</item>
272+
<item row="6" column="1">
273+
<widget class="QgsSymbolButton" name="mGridLineStyleButton">
274+
<property name="sizePolicy">
275+
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
276+
<horstretch>0</horstretch>
277+
<verstretch>0</verstretch>
278+
</sizepolicy>
279+
</property>
280+
<property name="text">
281+
<string>change...</string>
282+
</property>
283+
</widget>
284+
</item>
285+
<item row="7" column="1">
286+
<widget class="QgsSymbolButton" name="mGridMarkerStyleButton">
287+
<property name="sizePolicy">
288+
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
289+
<horstretch>0</horstretch>
290+
<verstretch>0</verstretch>
291+
</sizepolicy>
292+
</property>
293+
<property name="text">
294+
<string>change...</string>
295+
</property>
296+
</widget>
297+
</item>
286298
</layout>
287299
</widget>
288300
</item>
@@ -780,6 +792,11 @@
780792
<extends>QComboBox</extends>
781793
<header>qgsblendmodecombobox.h</header>
782794
</customwidget>
795+
<customwidget>
796+
<class>QgsSymbolButton</class>
797+
<extends>QToolButton</extends>
798+
<header>qgssymbolbutton.h</header>
799+
</customwidget>
783800
</customwidgets>
784801
<tabstops>
785802
<tabstop>scrollArea</tabstop>

0 commit comments

Comments
 (0)
Please sign in to comment.