QGIS API Documentation 3.99.0-Master (d270888f95f)
Loading...
Searching...
No Matches
qgslayoutmapgridwidget.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgslayoutmapgridwidget.cpp
3 ----------------------------
4 begin : October 2017
5 copyright : (C) 2017 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
19
21#include "qgslayout.h"
22#include "qgslayoutitemmap.h"
24#include "qgslinesymbol.h"
25#include "qgsmarkersymbol.h"
26#include "qgsproject.h"
29#include "qgssymbol.h"
30#include "qgsvectorlayer.h"
31
32#include <QString>
33
34#include "moc_qgslayoutmapgridwidget.cpp"
35
36using namespace Qt::StringLiterals;
37
39 : QgsLayoutItemBaseWidget( nullptr, mapGrid )
40 , mMap( map )
41 , mMapGrid( mapGrid )
42{
43 setupUi( this );
44
45 mFrameStyleComboBox->addItem( tr( "No Frame" ), QVariant::fromValue( Qgis::MapGridFrameStyle::NoFrame ) );
46 mFrameStyleComboBox->addItem( tr( "Zebra" ), QVariant::fromValue( Qgis::MapGridFrameStyle::Zebra ) );
47 mFrameStyleComboBox->addItem( tr( "Zebra (Nautical)" ), QVariant::fromValue( Qgis::MapGridFrameStyle::ZebraNautical ) );
48 mFrameStyleComboBox->addItem( tr( "Interior Ticks" ), QVariant::fromValue( Qgis::MapGridFrameStyle::InteriorTicks ) );
49 mFrameStyleComboBox->addItem( tr( "Exterior Ticks" ), QVariant::fromValue( Qgis::MapGridFrameStyle::ExteriorTicks ) );
50 mFrameStyleComboBox->addItem( tr( "Interior and Exterior Ticks" ), QVariant::fromValue( Qgis::MapGridFrameStyle::InteriorExteriorTicks ) );
51 mFrameStyleComboBox->addItem( tr( "Line Border" ), QVariant::fromValue( Qgis::MapGridFrameStyle::LineBorder ) );
52 mFrameStyleComboBox->addItem( tr( "Line Border (Nautical)" ), QVariant::fromValue( Qgis::MapGridFrameStyle::LineBorderNautical ) );
53
54 mRotatedTicksLengthModeComboBox->addItem( tr( "Orthogonal" ), QVariant::fromValue( Qgis::MapGridTickLengthMode::OrthogonalTicks ) );
55 mRotatedTicksLengthModeComboBox->addItem( tr( "Fixed Length" ), QVariant::fromValue( Qgis::MapGridTickLengthMode::NormalizedTicks ) );
56 mRotatedAnnotationsLengthModeComboBox->addItem( tr( "Orthogonal" ), QVariant::fromValue( Qgis::MapGridTickLengthMode::OrthogonalTicks ) );
57 mRotatedAnnotationsLengthModeComboBox->addItem( tr( "Fixed Length" ), QVariant::fromValue( Qgis::MapGridTickLengthMode::NormalizedTicks ) );
58
59 mGridFrameMarginSpinBox->setShowClearButton( true );
60 mGridFrameMarginSpinBox->setClearValue( 0 );
61
62 mDistanceToMapFrameSpinBox->setShowClearButton( true );
63 mDistanceToMapFrameSpinBox->setClearValue( 0 );
64
65 mOffsetXSpinBox->setShowClearButton( true );
66 mOffsetXSpinBox->setClearValue( 0 );
67 mOffsetYSpinBox->setShowClearButton( true );
68 mOffsetYSpinBox->setClearValue( 0 );
69
70 connect( mIntervalXSpinBox, &QgsDoubleSpinBox::editingFinished, this, &QgsLayoutMapGridWidget::mIntervalXSpinBox_editingFinished );
71 connect( mIntervalYSpinBox, &QgsDoubleSpinBox::editingFinished, this, &QgsLayoutMapGridWidget::mIntervalYSpinBox_editingFinished );
72 connect( mOffsetXSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mOffsetXSpinBox_valueChanged );
73 connect( mOffsetYSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mOffsetYSpinBox_valueChanged );
74 connect( mCrossWidthSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mCrossWidthSpinBox_valueChanged );
75 connect( mFrameWidthSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mFrameWidthSpinBox_valueChanged );
76 connect( mGridFrameMarginSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mGridFrameMarginSpinBox_valueChanged );
77 connect( mFrameStyleComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mFrameStyleComboBox_currentIndexChanged );
78 connect( mRotatedTicksGroupBox, &QGroupBox::toggled, this, &QgsLayoutMapGridWidget::mRotatedTicksGroupBox_toggled );
79 connect( mRotatedTicksLengthModeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mRotatedTicksLengthModeComboBox_currentIndexChanged );
80 connect( mRotatedTicksThresholdSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mRotatedTicksThresholdSpinBox_valueChanged );
81 connect( mRotatedTicksMarginToCornerSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mRotatedTicksMarginToCornerSpinBox_valueChanged );
82 connect( mRotatedAnnotationsGroupBox, &QGroupBox::toggled, this, &QgsLayoutMapGridWidget::mRotatedAnnotationsGroupBox_toggled );
83 connect( mRotatedAnnotationsLengthModeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mRotatedAnnotationsLengthModeComboBox_currentIndexChanged );
84 connect( mRotatedAnnotationsThresholdSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mRotatedAnnotationsThresholdSpinBox_valueChanged );
85 connect( mRotatedAnnotationsMarginToCornerSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mRotatedAnnotationsMarginToCornerSpinBox_valueChanged );
86 connect( mGridFramePenSizeSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mGridFramePenSizeSpinBox_valueChanged );
87 connect( mGridFramePenColorButton, &QgsColorButton::colorChanged, this, &QgsLayoutMapGridWidget::mGridFramePenColorButton_colorChanged );
88 connect( mGridFrameFill1ColorButton, &QgsColorButton::colorChanged, this, &QgsLayoutMapGridWidget::mGridFrameFill1ColorButton_colorChanged );
89 connect( mGridFrameFill2ColorButton, &QgsColorButton::colorChanged, this, &QgsLayoutMapGridWidget::mGridFrameFill2ColorButton_colorChanged );
90 connect( mGridTypeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mGridTypeComboBox_currentIndexChanged );
91 connect( mMapGridUnitComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::intervalUnitChanged );
92 connect( mGridBlendComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mGridBlendComboBox_currentIndexChanged );
93 connect( mCheckGridLeftSide, &QCheckBox::toggled, this, &QgsLayoutMapGridWidget::mCheckGridLeftSide_toggled );
94 connect( mCheckGridRightSide, &QCheckBox::toggled, this, &QgsLayoutMapGridWidget::mCheckGridRightSide_toggled );
95 connect( mCheckGridTopSide, &QCheckBox::toggled, this, &QgsLayoutMapGridWidget::mCheckGridTopSide_toggled );
96 connect( mCheckGridBottomSide, &QCheckBox::toggled, this, &QgsLayoutMapGridWidget::mCheckGridBottomSide_toggled );
97 connect( mFrameDivisionsLeftComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mFrameDivisionsLeftComboBox_currentIndexChanged );
98 connect( mFrameDivisionsRightComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mFrameDivisionsRightComboBox_currentIndexChanged );
99 connect( mFrameDivisionsTopComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mFrameDivisionsTopComboBox_currentIndexChanged );
100 connect( mFrameDivisionsBottomComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mFrameDivisionsBottomComboBox_currentIndexChanged );
101 connect( mDrawAnnotationGroupBox, &QgsCollapsibleGroupBoxBasic::toggled, this, &QgsLayoutMapGridWidget::mDrawAnnotationGroupBox_toggled );
102 connect( mAnnotationFormatButton, &QToolButton::clicked, this, &QgsLayoutMapGridWidget::mAnnotationFormatButton_clicked );
103 connect( mAnnotationDisplayLeftComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDisplayLeftComboBox_currentIndexChanged );
104 connect( mAnnotationDisplayRightComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDisplayRightComboBox_currentIndexChanged );
105 connect( mAnnotationDisplayTopComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDisplayTopComboBox_currentIndexChanged );
106 connect( mAnnotationDisplayBottomComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDisplayBottomComboBox_currentIndexChanged );
107 connect( mAnnotationPositionLeftComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationPositionLeftComboBox_currentIndexChanged );
108 connect( mAnnotationPositionRightComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationPositionRightComboBox_currentIndexChanged );
109 connect( mAnnotationPositionTopComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationPositionTopComboBox_currentIndexChanged );
110 connect( mAnnotationPositionBottomComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationPositionBottomComboBox_currentIndexChanged );
111 connect( mAnnotationDirectionComboBoxLeft, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDirectionComboBoxLeft_currentIndexChanged );
112 connect( mAnnotationDirectionComboBoxRight, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDirectionComboBoxRight_currentIndexChanged );
113 connect( mAnnotationDirectionComboBoxTop, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDirectionComboBoxTop_currentIndexChanged );
114 connect( mAnnotationDirectionComboBoxBottom, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDirectionComboBoxBottom_currentIndexChanged );
115 connect( mAnnotationFormatComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationFormatComboBox_currentIndexChanged );
116 connect( mCoordinatePrecisionSpinBox, static_cast<void ( QSpinBox::* )( int )>( &QSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mCoordinatePrecisionSpinBox_valueChanged );
117 connect( mDistanceToMapFrameSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mDistanceToMapFrameSpinBox_valueChanged );
118 connect( mMinWidthSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::minIntervalChanged );
119 connect( mMaxWidthSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::maxIntervalChanged );
120 connect( mEnabledCheckBox, &QCheckBox::toggled, this, &QgsLayoutMapGridWidget::gridEnabledToggled );
121 setPanelTitle( tr( "Map Grid Properties" ) );
122
123 mMapGridCrsSelector->setOptionVisible( QgsProjectionSelectionWidget::CrsNotSet, true );
124 mMapGridCrsSelector->setNotSetText( tr( "Use Map CRS" ) );
125 mMapGridCrsSelector->setDialogTitle( tr( "Grid CRS" ) );
126
127 connect( mMapGridCrsSelector, &QgsProjectionSelectionWidget::crsChanged, this, &QgsLayoutMapGridWidget::mapGridCrsChanged );
128
129 blockAllSignals( true );
130
131 mMapGridUnitComboBox->addItem( tr( "Map Units" ), QVariant::fromValue( Qgis::MapGridUnit::MapUnits ) );
132 mMapGridUnitComboBox->addItem( tr( "Fit Segment Width" ), QVariant::fromValue( Qgis::MapGridUnit::DynamicPageSizeBased ) );
133 mMapGridUnitComboBox->addItem( tr( "Millimeters" ), QVariant::fromValue( Qgis::MapGridUnit::Millimeters ) );
134 mMapGridUnitComboBox->addItem( tr( "Centimeters" ), QVariant::fromValue( Qgis::MapGridUnit::Centimeters ) );
135
136 mGridTypeComboBox->insertItem( 0, tr( "Solid" ), QVariant::fromValue( Qgis::MapGridStyle::Lines ) );
137 mGridTypeComboBox->insertItem( 1, tr( "Cross" ), QVariant::fromValue( Qgis::MapGridStyle::LineCrosses ) );
138 mGridTypeComboBox->insertItem( 2, tr( "Markers" ), QVariant::fromValue( Qgis::MapGridStyle::Markers ) );
139 mGridTypeComboBox->insertItem( 3, tr( "Frame and annotations only" ), QVariant::fromValue( Qgis::MapGridStyle::FrameAndAnnotationsOnly ) );
140
141 insertFrameDisplayEntries( mFrameDivisionsLeftComboBox );
142 insertFrameDisplayEntries( mFrameDivisionsRightComboBox );
143 insertFrameDisplayEntries( mFrameDivisionsTopComboBox );
144 insertFrameDisplayEntries( mFrameDivisionsBottomComboBox );
145
146 insertAnnotationDisplayEntries( mAnnotationDisplayLeftComboBox );
147 insertAnnotationDisplayEntries( mAnnotationDisplayRightComboBox );
148 insertAnnotationDisplayEntries( mAnnotationDisplayTopComboBox );
149 insertAnnotationDisplayEntries( mAnnotationDisplayBottomComboBox );
150
151 insertAnnotationPositionEntries( mAnnotationPositionLeftComboBox );
152 insertAnnotationPositionEntries( mAnnotationPositionRightComboBox );
153 insertAnnotationPositionEntries( mAnnotationPositionTopComboBox );
154 insertAnnotationPositionEntries( mAnnotationPositionBottomComboBox );
155
156 insertAnnotationDirectionEntries( mAnnotationDirectionComboBoxLeft );
157 insertAnnotationDirectionEntries( mAnnotationDirectionComboBoxRight );
158 insertAnnotationDirectionEntries( mAnnotationDirectionComboBoxTop );
159 insertAnnotationDirectionEntries( mAnnotationDirectionComboBoxBottom );
160
161 mGridFramePenColorButton->setColorDialogTitle( tr( "Select Grid Frame Color" ) );
162 mGridFramePenColorButton->setAllowOpacity( true );
163 mGridFramePenColorButton->setContext( u"composer"_s );
164 mGridFramePenColorButton->setNoColorString( tr( "Transparent Frame" ) );
165 mGridFramePenColorButton->setShowNoColor( true );
166
167 mGridFrameFill1ColorButton->setColorDialogTitle( tr( "Select Grid Frame Fill Color" ) );
168 mGridFrameFill1ColorButton->setAllowOpacity( true );
169 mGridFrameFill1ColorButton->setContext( u"composer"_s );
170 mGridFrameFill1ColorButton->setNoColorString( tr( "Transparent Fill" ) );
171 mGridFrameFill1ColorButton->setShowNoColor( true );
172
173 mGridFrameFill2ColorButton->setColorDialogTitle( tr( "Select Grid Frame Fill Color" ) );
174 mGridFrameFill2ColorButton->setAllowOpacity( true );
175 mGridFrameFill2ColorButton->setContext( u"composer"_s );
176 mGridFrameFill2ColorButton->setNoColorString( tr( "Transparent Fill" ) );
177 mGridFrameFill2ColorButton->setShowNoColor( true );
178
179 mGridLineStyleButton->setSymbolType( Qgis::SymbolType::Line );
180 mGridMarkerStyleButton->setSymbolType( Qgis::SymbolType::Marker );
181
182 //set initial state of frame style controls
183 toggleFrameControls( false, false, false, false );
184
204
205 // call to initially populate mAnnotationFormatComboBox
206 onCrsChanged();
207
209
210 blockAllSignals( false );
211 connect( mAnnotationFontButton, &QgsFontButton::changed, this, &QgsLayoutMapGridWidget::annotationTextFormatChanged );
212 connect( mGridLineStyleButton, &QgsSymbolButton::changed, this, &QgsLayoutMapGridWidget::lineSymbolChanged );
213 connect( mGridMarkerStyleButton, &QgsSymbolButton::changed, this, &QgsLayoutMapGridWidget::markerSymbolChanged );
214
215 mGridLineStyleButton->registerExpressionContextGenerator( mMapGrid );
216 mGridLineStyleButton->setLayer( coverageLayer() );
217 mGridMarkerStyleButton->registerExpressionContextGenerator( mMapGrid );
218 mGridMarkerStyleButton->setLayer( coverageLayer() );
219 if ( mMap->layout() )
220 {
221 connect( &mMap->layout()->reportContext(), &QgsLayoutReportContext::layerChanged, mGridLineStyleButton, &QgsSymbolButton::setLayer );
222 connect( &mMap->layout()->reportContext(), &QgsLayoutReportContext::layerChanged, mGridMarkerStyleButton, &QgsSymbolButton::setLayer );
223 connect( &mMap->layout()->reportContext(), &QgsLayoutReportContext::layerChanged, mAnnotationFontButton, &QgsFontButton::setLayer );
224 }
225 mAnnotationFontButton->setLayer( coverageLayer() );
226 mAnnotationFontButton->registerExpressionContextGenerator( mMapGrid );
227
228 connect( mMapGrid, &QgsLayoutItemMapGrid::crsChanged, this, &QgsLayoutMapGridWidget::onCrsChanged );
229}
230
232{
233 updateDataDefinedButton( mEnabledDDBtn );
234 updateDataDefinedButton( mIntervalXDDBtn );
235 updateDataDefinedButton( mIntervalYDDBtn );
236 updateDataDefinedButton( mOffsetXDDBtn );
237 updateDataDefinedButton( mOffsetYDDBtn );
238 updateDataDefinedButton( mFrameSizeDDBtn );
239 updateDataDefinedButton( mFrameMarginDDBtn );
240 updateDataDefinedButton( mLabelDistDDBtn );
241 updateDataDefinedButton( mCrossWidthDDBtn );
242 updateDataDefinedButton( mFrameLineThicknessDDBtn );
243 updateDataDefinedButton( mAnnotationDisplayLeftDDBtn );
244 updateDataDefinedButton( mAnnotationDisplayRightDDBtn );
245 updateDataDefinedButton( mAnnotationDisplayTopDDBtn );
246 updateDataDefinedButton( mAnnotationDisplayBottomDDBtn );
247 updateDataDefinedButton( mFrameDivisionsLeftDDBtn );
248 updateDataDefinedButton( mFrameDivisionsRightDDBtn );
249 updateDataDefinedButton( mFrameDivisionsTopDDBtn );
250 updateDataDefinedButton( mFrameDivisionsBottomDDBtn );
251}
252
253void QgsLayoutMapGridWidget::setGuiElementValues()
254{
256}
257
259{
260 if ( !mMapGrid || !mMap )
261 {
262 return;
263 }
264
265 blockAllSignals( true );
267 setGridItems();
268 blockAllSignals( false );
269}
270
271void QgsLayoutMapGridWidget::blockAllSignals( bool block )
272{
273 //grid
274 mEnabledCheckBox->blockSignals( block );
275 mGridTypeComboBox->blockSignals( block );
276 mIntervalXSpinBox->blockSignals( block );
277 mIntervalYSpinBox->blockSignals( block );
278 mOffsetXSpinBox->blockSignals( block );
279 mOffsetYSpinBox->blockSignals( block );
280 mCrossWidthSpinBox->blockSignals( block );
281 mFrameStyleComboBox->blockSignals( block );
282 mFrameWidthSpinBox->blockSignals( block );
283 mGridFrameMarginSpinBox->blockSignals( block );
284 mGridLineStyleButton->blockSignals( block );
285 mMapGridUnitComboBox->blockSignals( block );
286 mGridFramePenSizeSpinBox->blockSignals( block );
287 mGridFramePenColorButton->blockSignals( block );
288 mGridFrameFill1ColorButton->blockSignals( block );
289 mGridFrameFill2ColorButton->blockSignals( block );
290 mGridBlendComboBox->blockSignals( block );
291 mCheckGridLeftSide->blockSignals( block );
292 mCheckGridRightSide->blockSignals( block );
293 mCheckGridTopSide->blockSignals( block );
294 mCheckGridBottomSide->blockSignals( block );
295 mFrameDivisionsLeftComboBox->blockSignals( block );
296 mFrameDivisionsRightComboBox->blockSignals( block );
297 mFrameDivisionsTopComboBox->blockSignals( block );
298 mFrameDivisionsBottomComboBox->blockSignals( block );
299 mGridMarkerStyleButton->blockSignals( block );
300
301 //grid annotation
302 mDrawAnnotationGroupBox->blockSignals( block );
303 mAnnotationFormatComboBox->blockSignals( block );
304 mAnnotationDisplayLeftComboBox->blockSignals( block );
305 mAnnotationPositionLeftComboBox->blockSignals( block );
306 mAnnotationDirectionComboBoxLeft->blockSignals( block );
307 mAnnotationDisplayRightComboBox->blockSignals( block );
308 mAnnotationPositionRightComboBox->blockSignals( block );
309 mAnnotationDirectionComboBoxRight->blockSignals( block );
310 mAnnotationDisplayTopComboBox->blockSignals( block );
311 mAnnotationPositionTopComboBox->blockSignals( block );
312 mAnnotationDirectionComboBoxTop->blockSignals( block );
313 mAnnotationDisplayBottomComboBox->blockSignals( block );
314 mAnnotationPositionBottomComboBox->blockSignals( block );
315 mAnnotationDirectionComboBoxBottom->blockSignals( block );
316 mDistanceToMapFrameSpinBox->blockSignals( block );
317 mCoordinatePrecisionSpinBox->blockSignals( block );
318 mAnnotationFontButton->blockSignals( block );
319 mMinWidthSpinBox->blockSignals( block );
320 mMaxWidthSpinBox->blockSignals( block );
321}
322
323void QgsLayoutMapGridWidget::handleChangedFrameDisplay( Qgis::MapGridBorderSide border, const Qgis::MapGridComponentVisibility mode )
324{
325 if ( !mMapGrid || !mMap )
326 {
327 return;
328 }
329
330 mMap->beginCommand( tr( "Change Frame Divisions" ) );
331 mMapGrid->setFrameDivisions( mode, border );
332 mMap->endCommand();
333 mMap->updateBoundingRect();
334}
335
336void QgsLayoutMapGridWidget::handleChangedAnnotationDisplay( Qgis::MapGridBorderSide border, const Qgis::MapGridComponentVisibility mode )
337{
338 if ( !mMapGrid || !mMap )
339 {
340 return;
341 }
342
343 mMap->beginCommand( tr( "Change Annotation Format" ) );
344 mMapGrid->setAnnotationDisplay( mode, border );
345 mMap->updateBoundingRect();
346 mMap->update();
347 mMap->endCommand();
348}
349
350void QgsLayoutMapGridWidget::toggleFrameControls( bool frameEnabled, bool frameFillEnabled, bool frameSizeEnabled, bool rotationEnabled )
351{
352 //set status of frame controls
353 mFrameWidthSpinBox->setEnabled( frameSizeEnabled );
354 mGridFrameMarginSpinBox->setEnabled( frameEnabled );
355 mGridFramePenSizeSpinBox->setEnabled( frameEnabled );
356 mGridFramePenColorButton->setEnabled( frameEnabled );
357 mGridFrameFill1ColorButton->setEnabled( frameFillEnabled );
358 mGridFrameFill2ColorButton->setEnabled( frameFillEnabled );
359 mFrameWidthLabel->setEnabled( frameSizeEnabled );
360 mFrameMarginLabel->setEnabled( frameEnabled );
361 mFramePenLabel->setEnabled( frameEnabled );
362 mFrameFillLabel->setEnabled( frameFillEnabled );
363 mCheckGridLeftSide->setEnabled( frameEnabled );
364 mCheckGridRightSide->setEnabled( frameEnabled );
365 mCheckGridTopSide->setEnabled( frameEnabled );
366 mCheckGridBottomSide->setEnabled( frameEnabled );
367 mFrameDivisionsLeftComboBox->setEnabled( frameEnabled );
368 mFrameDivisionsRightComboBox->setEnabled( frameEnabled );
369 mFrameDivisionsTopComboBox->setEnabled( frameEnabled );
370 mFrameDivisionsBottomComboBox->setEnabled( frameEnabled );
371 mLeftDivisionsLabel->setEnabled( frameEnabled );
372 mRightDivisionsLabel->setEnabled( frameEnabled );
373 mTopDivisionsLabel->setEnabled( frameEnabled );
374 mBottomDivisionsLabel->setEnabled( frameEnabled );
375 mRotatedTicksGroupBox->setEnabled( rotationEnabled );
376}
377
378void QgsLayoutMapGridWidget::insertAnnotationPositionEntries( QComboBox *c )
379{
380 c->insertItem( 0, tr( "Inside Frame" ), QVariant::fromValue( Qgis::MapGridAnnotationPosition::InsideMapFrame ) );
381 c->insertItem( 1, tr( "Outside Frame" ), QVariant::fromValue( Qgis::MapGridAnnotationPosition::OutsideMapFrame ) );
382}
383
384void QgsLayoutMapGridWidget::insertAnnotationDirectionEntries( QComboBox *c )
385{
386 c->addItem( tr( "Horizontal" ), QVariant::fromValue( Qgis::MapGridAnnotationDirection::Horizontal ) );
387 c->addItem( tr( "Vertical Ascending" ), QVariant::fromValue( Qgis::MapGridAnnotationDirection::Vertical ) );
388 c->addItem( tr( "Vertical Descending" ), QVariant::fromValue( Qgis::MapGridAnnotationDirection::VerticalDescending ) );
389 c->addItem( tr( "Boundary Direction" ), QVariant::fromValue( Qgis::MapGridAnnotationDirection::BoundaryDirection ) );
390 // c->addItem( tr( "Parallel to Tick" ), QVariant::fromValue( Qgis::MapGridAnnotationDirection::ParallelToTick ) );
391 c->addItem( tr( "Above Tick" ), QVariant::fromValue( Qgis::MapGridAnnotationDirection::AboveTick ) );
392 c->addItem( tr( "On Tick" ), QVariant::fromValue( Qgis::MapGridAnnotationDirection::OnTick ) );
393 c->addItem( tr( "Under Tick" ), QVariant::fromValue( Qgis::MapGridAnnotationDirection::UnderTick ) );
394}
395
396void QgsLayoutMapGridWidget::initFrameDisplayBox( QComboBox *c, Qgis::MapGridComponentVisibility display )
397{
398 if ( !c )
399 {
400 return;
401 }
402 c->setCurrentIndex( c->findData( QVariant::fromValue( display ) ) );
403}
404
405void QgsLayoutMapGridWidget::handleChangedAnnotationPosition( Qgis::MapGridBorderSide border, const Qgis::MapGridAnnotationPosition position )
406{
407 if ( !mMapGrid || !mMap )
408 {
409 return;
410 }
411
412 mMap->beginCommand( tr( "Change Annotation Position" ) );
413 mMapGrid->setAnnotationPosition( position, border );
414
415 mMap->updateBoundingRect();
416 mMap->update();
417 mMap->endCommand();
418}
419
420void QgsLayoutMapGridWidget::handleChangedAnnotationDirection( Qgis::MapGridBorderSide border, Qgis::MapGridAnnotationDirection direction )
421{
422 if ( !mMapGrid || !mMap )
423 {
424 return;
425 }
426
427 mMap->beginCommand( tr( "Change Annotation Direction" ) );
428 mMapGrid->setAnnotationDirection( direction, border );
429 mMap->updateBoundingRect();
430 mMap->update();
431 mMap->endCommand();
432}
433
434void QgsLayoutMapGridWidget::insertFrameDisplayEntries( QComboBox *c )
435{
436 c->addItem( tr( "All" ), QVariant::fromValue( Qgis::MapGridComponentVisibility::ShowAll ) );
437 c->addItem( tr( "Latitude/Y Only" ), QVariant::fromValue( Qgis::MapGridComponentVisibility::LatitudeOnly ) );
438 c->addItem( tr( "Longitude/X Only" ), QVariant::fromValue( Qgis::MapGridComponentVisibility::LongitudeOnly ) );
439}
440
441void QgsLayoutMapGridWidget::insertAnnotationDisplayEntries( QComboBox *c )
442{
443 c->insertItem( 0, tr( "Show All" ), QVariant::fromValue( Qgis::MapGridComponentVisibility::ShowAll ) );
444 c->insertItem( 1, tr( "Show Latitude/Y Only" ), QVariant::fromValue( Qgis::MapGridComponentVisibility::LatitudeOnly ) );
445 c->insertItem( 2, tr( "Show Longitude/X Only" ), QVariant::fromValue( Qgis::MapGridComponentVisibility::LongitudeOnly ) );
446 c->insertItem( 3, tr( "Disabled" ), QVariant::fromValue( Qgis::MapGridComponentVisibility::HideAll ) );
447}
448
449void QgsLayoutMapGridWidget::initAnnotationPositionBox( QComboBox *c, Qgis::MapGridAnnotationPosition pos )
450{
451 if ( !c )
452 {
453 return;
454 }
455
456 c->setCurrentIndex( c->findData( QVariant::fromValue( pos ) ) );
457}
458
459void QgsLayoutMapGridWidget::initAnnotationDirectionBox( QComboBox *c, Qgis::MapGridAnnotationDirection dir )
460{
461 if ( !c )
462 {
463 return;
464 }
465 c->setCurrentIndex( c->findData( QVariant::fromValue( dir ) ) );
466}
467
468bool QgsLayoutMapGridWidget::hasPredefinedScales() const
469{
470 // first look at project's scales
471 const QVector<double> scales = QgsProject::instance()->viewSettings()->mapScales();
472 const bool hasProjectScales( QgsProject::instance()->viewSettings()->useProjectScales() );
473 if ( !hasProjectScales || scales.isEmpty() )
474 {
475 // default to global map tool scales
476 const QStringList scales = QgsSettingsRegistryCore::settingsMapScales->value();
477 return !scales.isEmpty() && !scales[0].isEmpty();
478 }
479 return true;
480}
481
482void QgsLayoutMapGridWidget::setGridItems()
483{
484 if ( !mMapGrid )
485 {
486 return;
487 }
488
489 mGridMarkerStyleButton->registerExpressionContextGenerator( mMapGrid );
490 mGridLineStyleButton->registerExpressionContextGenerator( mMapGrid );
491 mAnnotationFontButton->registerExpressionContextGenerator( mMapGrid );
492
493 mEnabledCheckBox->setChecked( mMapGrid->enabled() );
494 mIntervalXSpinBox->setValue( mMapGrid->intervalX() );
495 mIntervalYSpinBox->setValue( mMapGrid->intervalY() );
496 mOffsetXSpinBox->setValue( mMapGrid->offsetX() );
497 mOffsetYSpinBox->setValue( mMapGrid->offsetY() );
498 mCrossWidthSpinBox->setValue( mMapGrid->crossLength() );
499 mFrameWidthSpinBox->setValue( mMapGrid->frameWidth() );
500 mGridFrameMarginSpinBox->setValue( mMapGrid->frameMargin() );
501 mGridFramePenSizeSpinBox->setValue( mMapGrid->framePenSize() );
502 mGridFramePenColorButton->setColor( mMapGrid->framePenColor() );
503 mGridFrameFill1ColorButton->setColor( mMapGrid->frameFillColor1() );
504 mGridFrameFill2ColorButton->setColor( mMapGrid->frameFillColor2() );
505
506 const Qgis::MapGridStyle gridStyle = mMapGrid->style();
507 mGridTypeComboBox->setCurrentIndex( mGridTypeComboBox->findData( QVariant::fromValue( gridStyle ) ) );
508 switch ( gridStyle )
509 {
511 mCrossWidthSpinBox->setVisible( true );
512 mCrossWidthDDBtn->setVisible( true );
513 mCrossWidthLabel->setVisible( true );
514 mGridLineStyleButton->setVisible( true );
515 mLineStyleLabel->setVisible( true );
516 mGridMarkerStyleButton->setVisible( false );
517 mMarkerStyleLabel->setVisible( false );
518 mGridBlendComboBox->setVisible( true );
519 mGridBlendLabel->setVisible( true );
520 break;
522 mCrossWidthSpinBox->setVisible( false );
523 mCrossWidthDDBtn->setVisible( false );
524 mCrossWidthLabel->setVisible( false );
525 mGridLineStyleButton->setVisible( false );
526 mLineStyleLabel->setVisible( false );
527 mGridMarkerStyleButton->setVisible( true );
528 mMarkerStyleFrame->setVisible( true );
529 mMarkerStyleLabel->setVisible( true );
530 mGridBlendComboBox->setVisible( true );
531 mGridBlendLabel->setVisible( true );
532 break;
534 mCrossWidthSpinBox->setVisible( false );
535 mCrossWidthDDBtn->setVisible( false );
536 mCrossWidthLabel->setVisible( false );
537 mGridLineStyleButton->setVisible( true );
538 mLineStyleLabel->setVisible( true );
539 mGridMarkerStyleButton->setVisible( false );
540 mMarkerStyleFrame->setVisible( false );
541 mMarkerStyleLabel->setVisible( false );
542 mGridBlendComboBox->setVisible( true );
543 mGridBlendLabel->setVisible( true );
544 break;
546 mCrossWidthSpinBox->setVisible( false );
547 mCrossWidthDDBtn->setVisible( false );
548 mCrossWidthLabel->setVisible( false );
549 mGridLineStyleButton->setVisible( false );
550 mLineStyleLabel->setVisible( false );
551 mGridMarkerStyleButton->setVisible( false );
552 mMarkerStyleFrame->setVisible( false );
553 mMarkerStyleLabel->setVisible( false );
554 mGridBlendComboBox->setVisible( false );
555 mGridBlendLabel->setVisible( false );
556 break;
557 }
558
559 //grid frame
560 mFrameWidthSpinBox->setValue( mMapGrid->frameWidth() );
561 mGridFrameMarginSpinBox->setValue( mMapGrid->frameMargin() );
562 const Qgis::MapGridFrameStyle gridFrameStyle = mMapGrid->frameStyle();
563 mFrameStyleComboBox->setCurrentIndex( mFrameStyleComboBox->findData( QVariant::fromValue( gridFrameStyle ) ) );
564 switch ( gridFrameStyle )
565 {
568 toggleFrameControls( true, true, true, false );
569 break;
573 toggleFrameControls( true, false, true, true );
574 break;
577 toggleFrameControls( true, false, false, false );
578 break;
580 toggleFrameControls( false, false, false, false );
581 break;
582 }
583
584 mCheckGridLeftSide->setChecked( mMapGrid->testFrameSideFlag( Qgis::MapGridFrameSideFlag::Left ) );
585 mCheckGridRightSide->setChecked( mMapGrid->testFrameSideFlag( Qgis::MapGridFrameSideFlag::Right ) );
586 mCheckGridTopSide->setChecked( mMapGrid->testFrameSideFlag( Qgis::MapGridFrameSideFlag::Top ) );
587 mCheckGridBottomSide->setChecked( mMapGrid->testFrameSideFlag( Qgis::MapGridFrameSideFlag::Bottom ) );
588
589 mRotatedTicksGroupBox->setChecked( mMapGrid->rotatedTicksEnabled() );
590 mRotatedTicksLengthModeComboBox->setCurrentIndex( mRotatedTicksLengthModeComboBox->findData( QVariant::fromValue( mMapGrid->rotatedTicksLengthMode() ) ) );
591 mRotatedTicksThresholdSpinBox->setValue( mMapGrid->rotatedTicksMinimumAngle() );
592 mRotatedTicksMarginToCornerSpinBox->setValue( mMapGrid->rotatedTicksMarginToCorner() );
593
594 mRotatedAnnotationsGroupBox->setChecked( mMapGrid->rotatedAnnotationsEnabled() );
595 mRotatedAnnotationsLengthModeComboBox->setCurrentIndex( mRotatedAnnotationsLengthModeComboBox->findData( QVariant::fromValue( mMapGrid->rotatedAnnotationsLengthMode() ) ) );
596 mRotatedAnnotationsThresholdSpinBox->setValue( mMapGrid->rotatedAnnotationsMinimumAngle() );
597 mRotatedAnnotationsMarginToCornerSpinBox->setValue( mMapGrid->rotatedAnnotationsMarginToCorner() );
598
599 initFrameDisplayBox( mFrameDivisionsLeftComboBox, mMapGrid->frameDivisions( Qgis::MapGridBorderSide::Left ) );
600 initFrameDisplayBox( mFrameDivisionsRightComboBox, mMapGrid->frameDivisions( Qgis::MapGridBorderSide::Right ) );
601 initFrameDisplayBox( mFrameDivisionsTopComboBox, mMapGrid->frameDivisions( Qgis::MapGridBorderSide::Top ) );
602 initFrameDisplayBox( mFrameDivisionsBottomComboBox, mMapGrid->frameDivisions( Qgis::MapGridBorderSide::Bottom ) );
603
604 //line style
605 mGridLineStyleButton->setSymbol( mMapGrid->lineSymbol()->clone() );
606 //marker style
607 mGridMarkerStyleButton->setSymbol( mMapGrid->markerSymbol()->clone() );
608
609 mGridBlendComboBox->setBlendMode( mMapGrid->blendMode() );
610
611 mDrawAnnotationGroupBox->setChecked( mMapGrid->annotationEnabled() );
612 mAnnotationDisplayLeftComboBox->setCurrentIndex( mAnnotationDisplayLeftComboBox->findData( QVariant::fromValue( mMapGrid->annotationDisplay( Qgis::MapGridBorderSide::Left ) ) ) );
613 mAnnotationDisplayRightComboBox->setCurrentIndex( mAnnotationDisplayRightComboBox->findData( QVariant::fromValue( mMapGrid->annotationDisplay( Qgis::MapGridBorderSide::Right ) ) ) );
614 mAnnotationDisplayTopComboBox->setCurrentIndex( mAnnotationDisplayTopComboBox->findData( QVariant::fromValue( mMapGrid->annotationDisplay( Qgis::MapGridBorderSide::Top ) ) ) );
615 mAnnotationDisplayBottomComboBox->setCurrentIndex( mAnnotationDisplayBottomComboBox->findData( QVariant::fromValue( mMapGrid->annotationDisplay( Qgis::MapGridBorderSide::Bottom ) ) ) );
616
617 mAnnotationPositionLeftComboBox->setCurrentIndex( mAnnotationPositionLeftComboBox->findData( QVariant::fromValue( mMapGrid->annotationPosition( Qgis::MapGridBorderSide::Left ) ) ) );
618 mAnnotationPositionRightComboBox->setCurrentIndex( mAnnotationPositionRightComboBox->findData( QVariant::fromValue( mMapGrid->annotationPosition( Qgis::MapGridBorderSide::Right ) ) ) );
619 mAnnotationPositionTopComboBox->setCurrentIndex( mAnnotationPositionTopComboBox->findData( QVariant::fromValue( mMapGrid->annotationPosition( Qgis::MapGridBorderSide::Top ) ) ) );
620 mAnnotationPositionBottomComboBox->setCurrentIndex( mAnnotationPositionBottomComboBox->findData( QVariant::fromValue( mMapGrid->annotationPosition( Qgis::MapGridBorderSide::Bottom ) ) ) );
621
622 initAnnotationDirectionBox( mAnnotationDirectionComboBoxLeft, mMapGrid->annotationDirection( Qgis::MapGridBorderSide::Left ) );
623 initAnnotationDirectionBox( mAnnotationDirectionComboBoxRight, mMapGrid->annotationDirection( Qgis::MapGridBorderSide::Right ) );
624 initAnnotationDirectionBox( mAnnotationDirectionComboBoxTop, mMapGrid->annotationDirection( Qgis::MapGridBorderSide::Top ) );
625 initAnnotationDirectionBox( mAnnotationDirectionComboBoxBottom, mMapGrid->annotationDirection( Qgis::MapGridBorderSide::Bottom ) );
626
627 mAnnotationFontButton->setDialogTitle( tr( "Grid Annotation Font" ) );
628 mAnnotationFontButton->setMode( QgsFontButton::ModeTextRenderer );
629 mAnnotationFontButton->setTextFormat( mMapGrid->annotationTextFormat() );
630
631 mAnnotationFormatComboBox->setCurrentIndex( mAnnotationFormatComboBox->findData( QVariant::fromValue( mMapGrid->annotationFormat() ) ) );
632 mAnnotationFormatButton->setEnabled( mMapGrid->annotationFormat() == Qgis::MapGridAnnotationFormat::CustomFormat );
633 mDistanceToMapFrameSpinBox->setValue( mMapGrid->annotationFrameDistance() );
634 mCoordinatePrecisionSpinBox->setValue( mMapGrid->annotationPrecision() );
635
636 //Unit
637 mMapGridUnitComboBox->setCurrentIndex( mMapGridUnitComboBox->findData( QVariant::fromValue( mMapGrid->units() ) ) );
638 switch ( mMapGrid->units() )
639 {
643 mIntervalStackedWidget->setCurrentIndex( 0 );
644 break;
645
647 mIntervalStackedWidget->setCurrentIndex( 1 );
648 break;
649 }
650 mMinWidthSpinBox->setValue( mMapGrid->minimumIntervalWidth() );
651 mMaxWidthSpinBox->setValue( mMapGrid->maximumIntervalWidth() );
652
653 whileBlocking( mMapGridCrsSelector )->setCrs( mMapGrid->crs() );
654}
655
656void QgsLayoutMapGridWidget::mIntervalXSpinBox_editingFinished()
657{
658 if ( !mMapGrid || !mMap )
659 {
660 return;
661 }
662
663 mMap->beginCommand( tr( "Change Grid Interval" ) );
664 mMapGrid->setIntervalX( mIntervalXSpinBox->value() );
665 mMap->updateBoundingRect();
666 mMap->update();
667 mMap->endCommand();
668}
669
670void QgsLayoutMapGridWidget::mIntervalYSpinBox_editingFinished()
671{
672 if ( !mMapGrid || !mMap )
673 {
674 return;
675 }
676
677 mMap->beginCommand( tr( "Change Grid Interval" ) );
678 mMapGrid->setIntervalY( mIntervalYSpinBox->value() );
679 mMap->updateBoundingRect();
680 mMap->update();
681 mMap->endCommand();
682}
683
684void QgsLayoutMapGridWidget::mOffsetXSpinBox_valueChanged( double value )
685{
686 if ( !mMapGrid || !mMap )
687 {
688 return;
689 }
690
691 mMap->beginCommand( tr( "Change Grid Offset" ) );
692 mMapGrid->setOffsetX( value );
693 mMap->updateBoundingRect();
694 mMap->update();
695 mMap->endCommand();
696}
697
698void QgsLayoutMapGridWidget::mOffsetYSpinBox_valueChanged( double value )
699{
700 if ( !mMapGrid || !mMap )
701 {
702 return;
703 }
704
705 mMap->beginCommand( tr( "Change Grid Offset" ) );
706 mMapGrid->setOffsetY( value );
707 mMap->updateBoundingRect();
708 mMap->update();
709 mMap->endCommand();
710}
711
712void QgsLayoutMapGridWidget::mCrossWidthSpinBox_valueChanged( double val )
713{
714 if ( !mMapGrid || !mMap )
715 {
716 return;
717 }
718
719 mMap->beginCommand( tr( "Change Cross Width" ) );
720 mMapGrid->setCrossLength( val );
721 mMap->update();
722 mMap->endCommand();
723}
724
725void QgsLayoutMapGridWidget::mFrameWidthSpinBox_valueChanged( double val )
726{
727 if ( !mMapGrid || !mMap )
728 {
729 return;
730 }
731
732 mMap->beginCommand( tr( "Change Frame Width" ) );
733 mMapGrid->setFrameWidth( val );
734 mMap->updateBoundingRect();
735 mMap->update();
736 mMap->endCommand();
737}
738
739void QgsLayoutMapGridWidget::mGridFrameMarginSpinBox_valueChanged( double val )
740{
741 if ( !mMapGrid || !mMap )
742 {
743 return;
744 }
745
746 mMap->beginCommand( tr( "Change Grid Frame Margin" ) );
747 mMapGrid->setFrameMargin( val );
748 mMap->updateBoundingRect();
749 mMap->update();
750 mMap->endCommand();
751}
752
753void QgsLayoutMapGridWidget::mCheckGridLeftSide_toggled( bool checked )
754{
755 if ( !mMapGrid || !mMap )
756 {
757 return;
758 }
759
760 mMap->beginCommand( tr( "Change Frame Left" ) );
761 mMapGrid->setFrameSideFlag( Qgis::MapGridFrameSideFlag::Left, checked );
762 mMap->updateBoundingRect();
763 mMap->update();
764 mMap->endCommand();
765}
766
767void QgsLayoutMapGridWidget::mCheckGridRightSide_toggled( bool checked )
768{
769 if ( !mMapGrid || !mMap )
770 {
771 return;
772 }
773
774 mMap->beginCommand( tr( "Change Frame Right" ) );
775 mMapGrid->setFrameSideFlag( Qgis::MapGridFrameSideFlag::Right, checked );
776 mMap->updateBoundingRect();
777 mMap->update();
778 mMap->endCommand();
779}
780
781void QgsLayoutMapGridWidget::mCheckGridTopSide_toggled( bool checked )
782{
783 if ( !mMapGrid || !mMap )
784 {
785 return;
786 }
787
788 mMap->beginCommand( tr( "Change Frame Top" ) );
789 mMapGrid->setFrameSideFlag( Qgis::MapGridFrameSideFlag::Top, checked );
790 mMap->updateBoundingRect();
791 mMap->update();
792 mMap->endCommand();
793}
794
795void QgsLayoutMapGridWidget::mCheckGridBottomSide_toggled( bool checked )
796{
797 if ( !mMapGrid || !mMap )
798 {
799 return;
800 }
801
802 mMap->beginCommand( tr( "Change Frame Bottom" ) );
803 mMapGrid->setFrameSideFlag( Qgis::MapGridFrameSideFlag::Bottom, checked );
804 mMap->updateBoundingRect();
805 mMap->update();
806 mMap->endCommand();
807}
808
809void QgsLayoutMapGridWidget::mFrameDivisionsLeftComboBox_currentIndexChanged( int index )
810{
811 handleChangedFrameDisplay( Qgis::MapGridBorderSide::Left, mFrameDivisionsLeftComboBox->itemData( index ).value< Qgis::MapGridComponentVisibility >() );
812}
813
814void QgsLayoutMapGridWidget::mFrameDivisionsRightComboBox_currentIndexChanged( int index )
815{
816 handleChangedFrameDisplay( Qgis::MapGridBorderSide::Right, mFrameDivisionsRightComboBox->itemData( index ).value< Qgis::MapGridComponentVisibility >() );
817}
818
819void QgsLayoutMapGridWidget::mFrameDivisionsTopComboBox_currentIndexChanged( int index )
820{
821 handleChangedFrameDisplay( Qgis::MapGridBorderSide::Top, mFrameDivisionsTopComboBox->itemData( index ).value< Qgis::MapGridComponentVisibility >() );
822}
823
824void QgsLayoutMapGridWidget::mFrameDivisionsBottomComboBox_currentIndexChanged( int index )
825{
826 handleChangedFrameDisplay( Qgis::MapGridBorderSide::Bottom, mFrameDivisionsBottomComboBox->itemData( index ).value< Qgis::MapGridComponentVisibility >() );
827}
828
829void QgsLayoutMapGridWidget::mGridFramePenSizeSpinBox_valueChanged( double d )
830{
831 if ( !mMapGrid || !mMap )
832 {
833 return;
834 }
835
836 mMap->beginCommand( tr( "Change Frame Thickness" ) );
837 mMapGrid->setFramePenSize( d );
838 mMap->updateBoundingRect();
839 mMap->update();
840 mMap->endCommand();
841}
842
843void QgsLayoutMapGridWidget::mGridFramePenColorButton_colorChanged( const QColor &newColor )
844{
845 if ( !mMapGrid || !mMap )
846 {
847 return;
848 }
849
850 mMap->beginCommand( tr( "Change Frame Color" ), QgsLayoutItem::UndoGridFramePenColor );
851 mMapGrid->setFramePenColor( newColor );
852 mMap->update();
853 mMap->endCommand();
854}
855
856void QgsLayoutMapGridWidget::mGridFrameFill1ColorButton_colorChanged( const QColor &newColor )
857{
858 if ( !mMapGrid || !mMap )
859 {
860 return;
861 }
862
863 mMap->beginCommand( tr( "Change Frame Fill Color" ), QgsLayoutItem::UndoMapGridFrameFill1Color );
864 mMapGrid->setFrameFillColor1( newColor );
865 mMap->update();
866 mMap->endCommand();
867}
868
869void QgsLayoutMapGridWidget::mGridFrameFill2ColorButton_colorChanged( const QColor &newColor )
870{
871 if ( !mMapGrid || !mMap )
872 {
873 return;
874 }
875
876 mMap->beginCommand( tr( "Change Frame Fill Color" ), QgsLayoutItem::UndoMapGridFrameFill2Color );
877 mMapGrid->setFrameFillColor2( newColor );
878 mMap->update();
879 mMap->endCommand();
880}
881
882void QgsLayoutMapGridWidget::mFrameStyleComboBox_currentIndexChanged( int )
883{
884 if ( !mMapGrid || !mMap )
885 {
886 return;
887 }
888
889 const Qgis::MapGridFrameStyle style = mFrameStyleComboBox->currentData().value< Qgis::MapGridFrameStyle >();
890 mMap->beginCommand( tr( "Change Frame Style" ) );
891 mMapGrid->setFrameStyle( style );
892 switch ( style )
893 {
896 toggleFrameControls( true, true, true, false );
897 break;
901 toggleFrameControls( true, false, true, true );
902 break;
905 toggleFrameControls( true, false, false, false );
906 break;
908 toggleFrameControls( false, false, false, false );
909 break;
910 }
911 mMap->updateBoundingRect();
912 mMap->update();
913 mMap->endCommand();
914}
915
916void QgsLayoutMapGridWidget::mRotatedTicksGroupBox_toggled( bool state )
917{
918 if ( !mMapGrid || !mMap )
919 {
920 return;
921 }
922
923 mMap->beginCommand( tr( "Change Tick Rotation Enabled" ) );
924 mMapGrid->setRotatedTicksEnabled( state );
925 mMap->update();
926 mMap->endCommand();
927}
928
929void QgsLayoutMapGridWidget::mRotatedTicksLengthModeComboBox_currentIndexChanged( int )
930{
931 if ( !mMapGrid || !mMap )
932 {
933 return;
934 }
935
936 const Qgis::MapGridTickLengthMode mode = mRotatedTicksLengthModeComboBox->currentData().value< Qgis::MapGridTickLengthMode >();
937 mMap->beginCommand( tr( "Change Tick Length Mode" ) );
938 mMapGrid->setRotatedTicksLengthMode( mode );
939 mMap->update();
940 mMap->endCommand();
941}
942
943void QgsLayoutMapGridWidget::mRotatedTicksThresholdSpinBox_valueChanged( double val )
944{
945 if ( !mMapGrid || !mMap )
946 {
947 return;
948 }
949
950 mMap->beginCommand( tr( "Change Rotated Ticks Threshold" ) );
951 mMapGrid->setRotatedTicksMinimumAngle( val );
952 mMap->update();
953 mMap->endCommand();
954}
955
956void QgsLayoutMapGridWidget::mRotatedTicksMarginToCornerSpinBox_valueChanged( double val )
957{
958 if ( !mMapGrid || !mMap )
959 {
960 return;
961 }
962
963 mMap->beginCommand( tr( "Change Rotated Ticks Margin to Corner" ) );
964 mMapGrid->setRotatedTicksMarginToCorner( val );
965 mMap->update();
966 mMap->endCommand();
967}
968
969void QgsLayoutMapGridWidget::mRotatedAnnotationsGroupBox_toggled( bool state )
970{
971 if ( !mMapGrid || !mMap )
972 {
973 return;
974 }
975
976 mMap->beginCommand( tr( "Change Annotation Rotation Enabled" ) );
977 mMapGrid->setRotatedAnnotationsEnabled( state );
978 mMap->update();
979 mMap->endCommand();
980}
981
982void QgsLayoutMapGridWidget::mRotatedAnnotationsLengthModeComboBox_currentIndexChanged( int )
983{
984 if ( !mMapGrid || !mMap )
985 {
986 return;
987 }
988
989 const Qgis::MapGridTickLengthMode mode = mRotatedAnnotationsLengthModeComboBox->currentData().value< Qgis::MapGridTickLengthMode >();
990 mMap->beginCommand( tr( "Change Annotation Length Mode" ) );
991 mMapGrid->setRotatedAnnotationsLengthMode( mode );
992 mMap->update();
993 mMap->endCommand();
994}
995
996void QgsLayoutMapGridWidget::mRotatedAnnotationsThresholdSpinBox_valueChanged( double val )
997{
998 if ( !mMapGrid || !mMap )
999 {
1000 return;
1001 }
1002
1003 mMap->beginCommand( tr( "Change Rotated Annotations Threshold" ) );
1004 mMapGrid->setRotatedAnnotationsMinimumAngle( val );
1005 mMap->update();
1006 mMap->endCommand();
1007}
1008
1009void QgsLayoutMapGridWidget::mRotatedAnnotationsMarginToCornerSpinBox_valueChanged( double val )
1010{
1011 if ( !mMapGrid || !mMap )
1012 {
1013 return;
1014 }
1015
1016 mMap->beginCommand( tr( "Change Rotated Annotations Margin to Corner" ) );
1017 mMapGrid->setRotatedAnnotationsMarginToCorner( val );
1018 mMap->update();
1019 mMap->endCommand();
1020}
1021
1022void QgsLayoutMapGridWidget::intervalUnitChanged( int )
1023{
1024 if ( !mMapGrid || !mMap )
1025 {
1026 return;
1027 }
1028
1029 const Qgis::MapGridUnit unit = mMapGridUnitComboBox->currentData().value< Qgis::MapGridUnit >();
1030 switch ( unit )
1031 {
1035 mIntervalStackedWidget->setCurrentIndex( 0 );
1036 break;
1037
1039 mIntervalStackedWidget->setCurrentIndex( 1 );
1040 break;
1041 }
1042
1043 mMap->beginCommand( tr( "Change Grid Unit" ) );
1044 mMapGrid->setUnits( unit );
1045 mMap->updateBoundingRect();
1046 mMap->update();
1047 mMap->endCommand();
1048}
1049
1050void QgsLayoutMapGridWidget::minIntervalChanged( double interval )
1051{
1052 mMap->beginCommand( tr( "Change Grid Interval Range" ), QgsLayoutItem::UndoMapGridIntervalRange );
1053 mMapGrid->setMinimumIntervalWidth( interval );
1054 mMap->endCommand();
1055 mMap->updateBoundingRect();
1056 mMap->update();
1057}
1058
1059void QgsLayoutMapGridWidget::maxIntervalChanged( double interval )
1060{
1061 mMap->beginCommand( tr( "Change Grid Interval Range" ), QgsLayoutItem::UndoMapGridIntervalRange );
1062 mMapGrid->setMaximumIntervalWidth( interval );
1063 mMap->endCommand();
1064 mMap->updateBoundingRect();
1065 mMap->update();
1066}
1067
1068void QgsLayoutMapGridWidget::annotationTextFormatChanged()
1069{
1070 if ( !mMapGrid || !mMap )
1071 {
1072 return;
1073 }
1074
1075 mMap->beginCommand( tr( "Change Annotation Font" ) );
1076 mMapGrid->setAnnotationTextFormat( mAnnotationFontButton->textFormat() );
1077 mMap->endCommand();
1078 mMap->updateBoundingRect();
1079 mMap->update();
1080}
1081
1082void QgsLayoutMapGridWidget::onCrsChanged()
1083{
1084 mBlockAnnotationFormatUpdates++;
1085 const Qgis::MapGridAnnotationFormat prevFormat = mAnnotationFormatComboBox->currentData().value< Qgis::MapGridAnnotationFormat >();
1086
1087 mAnnotationFormatComboBox->clear();
1088 mAnnotationFormatComboBox->addItem( tr( "Decimal" ), QVariant::fromValue( Qgis::MapGridAnnotationFormat::Decimal ) );
1089 mAnnotationFormatComboBox->addItem( tr( "Decimal with Suffix" ), QVariant::fromValue( Qgis::MapGridAnnotationFormat::DecimalWithSuffix ) );
1090
1091 // only show degree based options for geographic CRSes
1092 const QgsCoordinateReferenceSystem crs = mMapGrid->crs().isValid() ? mMapGrid->crs() : mMap->crs();
1093 switch ( crs.mapUnits() )
1094 {
1143 break;
1144
1147 mAnnotationFormatComboBox->addItem( tr( "Degree, Minute" ), QVariant::fromValue( Qgis::MapGridAnnotationFormat::DegreeMinuteNoSuffix ) );
1148 mAnnotationFormatComboBox->addItem( tr( "Degree, Minute with Suffix" ), QVariant::fromValue( Qgis::MapGridAnnotationFormat::DegreeMinute ) );
1149 mAnnotationFormatComboBox->addItem( tr( "Degree, Minute Aligned" ), QVariant::fromValue( Qgis::MapGridAnnotationFormat::DegreeMinutePadded ) );
1150 mAnnotationFormatComboBox->addItem( tr( "Degree, Minute, Second" ), QVariant::fromValue( Qgis::MapGridAnnotationFormat::DegreeMinuteSecondNoSuffix ) );
1151 mAnnotationFormatComboBox->addItem( tr( "Degree, Minute, Second with Suffix" ), QVariant::fromValue( Qgis::MapGridAnnotationFormat::DegreeMinuteSecond ) );
1152 mAnnotationFormatComboBox->addItem( tr( "Degree, Minute, Second Aligned" ), QVariant::fromValue( Qgis::MapGridAnnotationFormat::DegreeMinuteSecondPadded ) );
1153 break;
1154 }
1155 mAnnotationFormatComboBox->addItem( tr( "Custom" ), QVariant::fromValue( Qgis::MapGridAnnotationFormat::CustomFormat ) );
1156
1157 const int prevIndex = mAnnotationFormatComboBox->findData( QVariant::fromValue( prevFormat ) );
1158 if ( prevIndex >= 0 )
1159 mAnnotationFormatComboBox->setCurrentIndex( prevIndex );
1160 else
1161 mAnnotationFormatComboBox->setCurrentIndex( 0 );
1162 mBlockAnnotationFormatUpdates--;
1163
1164 const Qgis::MapGridAnnotationFormat newFormat = mAnnotationFormatComboBox->currentData().value< Qgis::MapGridAnnotationFormat >();
1165 if ( newFormat != prevFormat )
1166 {
1167 mAnnotationFormatComboBox_currentIndexChanged( mAnnotationFormatComboBox->currentIndex() );
1168 }
1169}
1170
1171void QgsLayoutMapGridWidget::mGridBlendComboBox_currentIndexChanged( int index )
1172{
1173 Q_UNUSED( index )
1174 if ( mMapGrid )
1175 {
1176 mMap->beginCommand( tr( "Change Grid Blend Mode" ) );
1177 mMapGrid->setBlendMode( mGridBlendComboBox->blendMode() );
1178 mMap->update();
1179 mMap->endCommand();
1180 }
1181}
1182
1183void QgsLayoutMapGridWidget::mGridTypeComboBox_currentIndexChanged( int )
1184{
1185 if ( !mMapGrid || !mMap )
1186 {
1187 return;
1188 }
1189
1190 mMap->beginCommand( tr( "Change Grid Type" ) );
1191 switch ( mGridTypeComboBox->currentData().value< Qgis::MapGridStyle >() )
1192 {
1194 mMapGrid->setStyle( Qgis::MapGridStyle::LineCrosses );
1195 mCrossWidthSpinBox->setVisible( true );
1196 mCrossWidthDDBtn->setVisible( true );
1197 mCrossWidthLabel->setVisible( true );
1198 mGridLineStyleButton->setVisible( true );
1199 mLineStyleLabel->setVisible( true );
1200 mGridMarkerStyleButton->setVisible( false );
1201 mMarkerStyleFrame->setVisible( false );
1202 mMarkerStyleFrame->setVisible( false );
1203 mMarkerStyleLabel->setVisible( false );
1204 mGridBlendComboBox->setVisible( true );
1205 mGridBlendLabel->setVisible( true );
1206 break;
1207
1209 mMapGrid->setStyle( Qgis::MapGridStyle::Markers );
1210 mCrossWidthSpinBox->setVisible( false );
1211 mCrossWidthDDBtn->setVisible( false );
1212 mCrossWidthLabel->setVisible( false );
1213 mGridLineStyleButton->setVisible( false );
1214 mLineStyleLabel->setVisible( false );
1215 mGridMarkerStyleButton->setVisible( true );
1216 mMarkerStyleFrame->setVisible( true );
1217 mMarkerStyleLabel->setVisible( true );
1218 mGridBlendComboBox->setVisible( true );
1219 mGridBlendLabel->setVisible( true );
1220 break;
1221
1223 mMapGrid->setStyle( Qgis::MapGridStyle::Lines );
1224 mCrossWidthSpinBox->setVisible( false );
1225 mCrossWidthDDBtn->setVisible( false );
1226 mCrossWidthLabel->setVisible( false );
1227 mGridLineStyleButton->setVisible( true );
1228 mLineStyleLabel->setVisible( true );
1229 mGridMarkerStyleButton->setVisible( false );
1230 mMarkerStyleFrame->setVisible( false );
1231 mMarkerStyleLabel->setVisible( false );
1232 mGridBlendComboBox->setVisible( true );
1233 mGridBlendLabel->setVisible( true );
1234 break;
1235
1237 mMapGrid->setStyle( Qgis::MapGridStyle::FrameAndAnnotationsOnly );
1238 mCrossWidthSpinBox->setVisible( false );
1239 mCrossWidthDDBtn->setVisible( false );
1240 mCrossWidthLabel->setVisible( false );
1241 mGridLineStyleButton->setVisible( false );
1242 mLineStyleLabel->setVisible( false );
1243 mGridMarkerStyleButton->setVisible( false );
1244 mMarkerStyleFrame->setVisible( false );
1245 mMarkerStyleLabel->setVisible( false );
1246 mGridBlendComboBox->setVisible( false );
1247 mGridBlendLabel->setVisible( false );
1248 break;
1249 }
1250
1251 mMap->updateBoundingRect();
1252 mMap->update();
1253 mMap->endCommand();
1254}
1255
1256void QgsLayoutMapGridWidget::mapGridCrsChanged( const QgsCoordinateReferenceSystem &crs )
1257{
1258 if ( !mMapGrid || !mMap )
1259 {
1260 return;
1261 }
1262
1263 if ( mMapGrid->crs() == crs )
1264 return;
1265
1266 mMap->beginCommand( tr( "Change Grid CRS" ) );
1267 mMapGrid->setCrs( crs );
1268 mMap->updateBoundingRect();
1269 mMap->update();
1270 mMap->endCommand();
1271}
1272
1273void QgsLayoutMapGridWidget::mDrawAnnotationGroupBox_toggled( bool state )
1274{
1275 if ( !mMapGrid || !mMap )
1276 {
1277 return;
1278 }
1279
1280 mMap->beginCommand( tr( "Toggle Annotations" ) );
1281 mMapGrid->setAnnotationEnabled( state );
1282 mMap->updateBoundingRect();
1283 mMap->update();
1284 mMap->endCommand();
1285}
1286
1287void QgsLayoutMapGridWidget::mAnnotationFormatButton_clicked()
1288{
1289 if ( !mMapGrid || !mMap )
1290 {
1291 return;
1292 }
1293
1294 QgsExpressionContext expressionContext = mMapGrid->createExpressionContext();
1295 expressionContext.setHighlightedFunctions( QStringList() << u"to_dms"_s << u"to_dm"_s );
1296
1297 QgsExpressionBuilderDialog exprDlg( coverageLayer(), mMapGrid->annotationExpression(), this, u"generic"_s, expressionContext );
1298 exprDlg.setWindowTitle( tr( "Expression Based Annotation" ) );
1299
1300 if ( exprDlg.exec() == QDialog::Accepted )
1301 {
1302 const QString expression = exprDlg.expressionText();
1303 mMap->beginCommand( tr( "Change Annotation Format" ) );
1304 mMapGrid->setAnnotationExpression( expression );
1305 mMap->updateBoundingRect();
1306 mMap->update();
1307 mMap->endCommand();
1308 }
1309}
1310
1311void QgsLayoutMapGridWidget::mAnnotationDisplayLeftComboBox_currentIndexChanged( int )
1312{
1313 handleChangedAnnotationDisplay( Qgis::MapGridBorderSide::Left, mAnnotationDisplayLeftComboBox->currentData().value< Qgis::MapGridComponentVisibility >() );
1314}
1315
1316void QgsLayoutMapGridWidget::mAnnotationDisplayRightComboBox_currentIndexChanged( int )
1317{
1318 handleChangedAnnotationDisplay( Qgis::MapGridBorderSide::Right, mAnnotationDisplayRightComboBox->currentData().value< Qgis::MapGridComponentVisibility >() );
1319}
1320
1321void QgsLayoutMapGridWidget::mAnnotationDisplayTopComboBox_currentIndexChanged( int )
1322{
1323 handleChangedAnnotationDisplay( Qgis::MapGridBorderSide::Top, mAnnotationDisplayTopComboBox->currentData().value< Qgis::MapGridComponentVisibility >() );
1324}
1325
1326void QgsLayoutMapGridWidget::mAnnotationDisplayBottomComboBox_currentIndexChanged( int )
1327{
1328 handleChangedAnnotationDisplay( Qgis::MapGridBorderSide::Bottom, mAnnotationDisplayBottomComboBox->currentData().value< Qgis::MapGridComponentVisibility >() );
1329}
1330
1331void QgsLayoutMapGridWidget::mAnnotationPositionLeftComboBox_currentIndexChanged( int )
1332{
1333 handleChangedAnnotationPosition( Qgis::MapGridBorderSide::Left, mAnnotationPositionLeftComboBox->currentData().value< Qgis::MapGridAnnotationPosition >() );
1334}
1335
1336void QgsLayoutMapGridWidget::mAnnotationPositionRightComboBox_currentIndexChanged( int )
1337{
1338 handleChangedAnnotationPosition( Qgis::MapGridBorderSide::Right, mAnnotationPositionRightComboBox->currentData().value< Qgis::MapGridAnnotationPosition >() );
1339}
1340
1341void QgsLayoutMapGridWidget::mAnnotationPositionTopComboBox_currentIndexChanged( int )
1342{
1343 handleChangedAnnotationPosition( Qgis::MapGridBorderSide::Top, mAnnotationPositionTopComboBox->currentData().value< Qgis::MapGridAnnotationPosition >() );
1344}
1345
1346void QgsLayoutMapGridWidget::mAnnotationPositionBottomComboBox_currentIndexChanged( int )
1347{
1348 handleChangedAnnotationPosition( Qgis::MapGridBorderSide::Bottom, mAnnotationPositionBottomComboBox->currentData().value< Qgis::MapGridAnnotationPosition >() );
1349}
1350
1351void QgsLayoutMapGridWidget::mAnnotationDirectionComboBoxLeft_currentIndexChanged( int index )
1352{
1353 handleChangedAnnotationDirection( Qgis::MapGridBorderSide::Left, mAnnotationDirectionComboBoxLeft->itemData( index ).value< Qgis::MapGridAnnotationDirection >() );
1354}
1355
1356void QgsLayoutMapGridWidget::mAnnotationDirectionComboBoxRight_currentIndexChanged( int index )
1357{
1358 handleChangedAnnotationDirection( Qgis::MapGridBorderSide::Right, mAnnotationDirectionComboBoxRight->itemData( index ).value< Qgis::MapGridAnnotationDirection >() );
1359}
1360
1361void QgsLayoutMapGridWidget::mAnnotationDirectionComboBoxTop_currentIndexChanged( int index )
1362{
1363 handleChangedAnnotationDirection( Qgis::MapGridBorderSide::Top, mAnnotationDirectionComboBoxTop->itemData( index ).value< Qgis::MapGridAnnotationDirection >() );
1364}
1365
1366void QgsLayoutMapGridWidget::mAnnotationDirectionComboBoxBottom_currentIndexChanged( int index )
1367{
1368 handleChangedAnnotationDirection( Qgis::MapGridBorderSide::Bottom, mAnnotationDirectionComboBoxBottom->itemData( index ).value< Qgis::MapGridAnnotationDirection >() );
1369}
1370
1371void QgsLayoutMapGridWidget::mDistanceToMapFrameSpinBox_valueChanged( double d )
1372{
1373 if ( !mMapGrid || !mMap )
1374 {
1375 return;
1376 }
1377
1378 mMap->beginCommand( tr( "Change Annotation Distance" ), QgsLayoutItem::UndoMapAnnotationDistance );
1379 mMapGrid->setAnnotationFrameDistance( d );
1380 mMap->updateBoundingRect();
1381 mMap->update();
1382 mMap->endCommand();
1383}
1384
1385void QgsLayoutMapGridWidget::lineSymbolChanged()
1386{
1387 if ( !mMapGrid || !mMap )
1388 {
1389 return;
1390 }
1391
1392 mMap->beginCommand( tr( "Change Grid Line Style" ), QgsLayoutItem::UndoMapGridLineSymbol );
1393 mMapGrid->setLineSymbol( mGridLineStyleButton->clonedSymbol<QgsLineSymbol>() );
1394 mMap->endCommand();
1395 mMap->update();
1396}
1397
1398void QgsLayoutMapGridWidget::markerSymbolChanged()
1399{
1400 if ( !mMapGrid || !mMap )
1401 {
1402 return;
1403 }
1404
1405 mMap->beginCommand( tr( "Change Grid Marker Style" ), QgsLayoutItem::UndoMapGridMarkerSymbol );
1406 mMapGrid->setMarkerSymbol( mGridMarkerStyleButton->clonedSymbol<QgsMarkerSymbol>() );
1407 mMap->endCommand();
1408 mMap->update();
1409}
1410
1411void QgsLayoutMapGridWidget::gridEnabledToggled( bool active )
1412{
1413 if ( !mMapGrid || !mMap )
1414 {
1415 return;
1416 }
1417
1418 mMap->beginCommand( tr( "Toggle Grid Display" ) );
1419 mMapGrid->setEnabled( active );
1420 mMap->endCommand();
1421 mMap->updateBoundingRect();
1422 mMap->update();
1423}
1424
1425void QgsLayoutMapGridWidget::mAnnotationFormatComboBox_currentIndexChanged( int index )
1426{
1427 if ( !mMapGrid || !mMap )
1428 {
1429 return;
1430 }
1431 if ( mBlockAnnotationFormatUpdates )
1432 return;
1433
1434 mMap->beginCommand( tr( "Change Annotation Format" ) );
1435
1436 mMapGrid->setAnnotationFormat( mAnnotationFormatComboBox->itemData( index ).value< Qgis::MapGridAnnotationFormat >() );
1437 mAnnotationFormatButton->setEnabled( mMapGrid->annotationFormat() == Qgis::MapGridAnnotationFormat::CustomFormat );
1438
1439 mMap->updateBoundingRect();
1440 mMap->update();
1441 mMap->endCommand();
1442}
1443
1444void QgsLayoutMapGridWidget::mCoordinatePrecisionSpinBox_valueChanged( int value )
1445{
1446 if ( !mMapGrid || !mMap )
1447 {
1448 return;
1449 }
1450 mMap->beginCommand( tr( "Change Annotation Precision" ) );
1451 mMapGrid->setAnnotationPrecision( value );
1452 mMap->updateBoundingRect();
1453 mMap->update();
1454 mMap->endCommand();
1455}
MapGridTickLengthMode
Map grid tick length mode (useful for rotated grids).
Definition qgis.h:5570
@ OrthogonalTicks
Align ticks orthogonaly.
Definition qgis.h:5571
@ NormalizedTicks
Constant tick lengths.
Definition qgis.h:5572
MapGridAnnotationPosition
Position for map grid annotations.
Definition qgis.h:5480
@ InsideMapFrame
Draw annotations inside the map frame.
Definition qgis.h:5481
@ OutsideMapFrame
Draw annotations outside the map frame.
Definition qgis.h:5482
MapGridUnit
Units for map grid values.
Definition qgis.h:5432
@ Centimeters
Grid units in centimeters.
Definition qgis.h:5435
@ Millimeters
Grid units in millimeters.
Definition qgis.h:5434
@ DynamicPageSizeBased
Dynamically sized, based on a on-page size range.
Definition qgis.h:5436
@ MapUnits
Grid units follow map units.
Definition qgis.h:5433
@ YardsBritishSears1922Truncated
British yards (Sears 1922 truncated).
Definition qgis.h:5125
@ Feet
Imperial feet.
Definition qgis.h:5088
@ MilesUSSurvey
US Survey miles.
Definition qgis.h:5132
@ LinksBritishSears1922
British links (Sears 1922).
Definition qgis.h:5120
@ YardsBritishBenoit1895A
British yards (Benoit 1895 A).
Definition qgis.h:5123
@ LinksBritishBenoit1895A
British links (Benoit 1895 A).
Definition qgis.h:5117
@ Centimeters
Centimeters.
Definition qgis.h:5093
@ YardsIndian1975
Indian yards (1975).
Definition qgis.h:5131
@ FeetUSSurvey
US Survey feet.
Definition qgis.h:5115
@ Millimeters
Millimeters.
Definition qgis.h:5094
@ FeetBritishSears1922
British feet (Sears 1922).
Definition qgis.h:5108
@ YardsClarkes
Clarke's yards.
Definition qgis.h:5127
@ YardsIndian
Indian yards.
Definition qgis.h:5128
@ FeetBritishBenoit1895B
British feet (Benoit 1895 B).
Definition qgis.h:5106
@ Miles
Terrestrial miles.
Definition qgis.h:5091
@ LinksUSSurvey
US Survey links.
Definition qgis.h:5122
@ Meters
Meters.
Definition qgis.h:5086
@ ChainsUSSurvey
US Survey chains.
Definition qgis.h:5102
@ FeetClarkes
Clarke's feet.
Definition qgis.h:5109
@ Unknown
Unknown distance unit.
Definition qgis.h:5135
@ Yards
Imperial yards.
Definition qgis.h:5090
@ FeetBritish1936
British feet (1936).
Definition qgis.h:5104
@ FeetIndian1962
Indian feet (1962).
Definition qgis.h:5113
@ YardsBritishSears1922
British yards (Sears 1922).
Definition qgis.h:5126
@ FeetIndian1937
Indian feet (1937).
Definition qgis.h:5112
@ YardsIndian1937
Indian yards (1937).
Definition qgis.h:5129
@ Degrees
Degrees, for planar geographic CRS distance measurements.
Definition qgis.h:5092
@ ChainsBritishBenoit1895B
British chains (Benoit 1895 B).
Definition qgis.h:5098
@ LinksBritishSears1922Truncated
British links (Sears 1922 truncated).
Definition qgis.h:5119
@ ChainsBritishBenoit1895A
British chains (Benoit 1895 A).
Definition qgis.h:5097
@ YardsBritishBenoit1895B
British yards (Benoit 1895 B).
Definition qgis.h:5124
@ FeetBritish1865
British feet (1865).
Definition qgis.h:5103
@ YardsIndian1962
Indian yards (1962).
Definition qgis.h:5130
@ FeetBritishSears1922Truncated
British feet (Sears 1922 truncated).
Definition qgis.h:5107
@ MetersGermanLegal
German legal meter.
Definition qgis.h:5134
@ LinksBritishBenoit1895B
British links (Benoit 1895 B).
Definition qgis.h:5118
@ ChainsInternational
International chains.
Definition qgis.h:5096
@ Inches
Inches.
Definition qgis.h:5095
@ Fathoms
Fathoms.
Definition qgis.h:5133
@ LinksInternational
International links.
Definition qgis.h:5116
@ ChainsBritishSears1922Truncated
British chains (Sears 1922 truncated).
Definition qgis.h:5099
@ FeetIndian
Indian (geodetic) feet.
Definition qgis.h:5111
@ NauticalMiles
Nautical miles.
Definition qgis.h:5089
@ ChainsClarkes
Clarke's chains.
Definition qgis.h:5101
@ LinksClarkes
Clarke's links.
Definition qgis.h:5121
@ ChainsBritishSears1922
British chains (Sears 1922).
Definition qgis.h:5100
@ Kilometers
Kilometers.
Definition qgis.h:5087
@ FeetIndian1975
Indian feet (1975).
Definition qgis.h:5114
@ FeetGoldCoast
Gold Coast feet.
Definition qgis.h:5110
@ FeetBritishBenoit1895A
British feet (Benoit 1895 A).
Definition qgis.h:5105
MapGridBorderSide
Border sides for map grid annotations.
Definition qgis.h:5534
@ Bottom
Bottom border.
Definition qgis.h:5537
@ Right
Right border.
Definition qgis.h:5536
@ Left
Left border.
Definition qgis.h:5535
@ Top
Top border.
Definition qgis.h:5538
@ Bottom
Bottom side of map.
Definition qgis.h:5589
@ Right
Right side of map.
Definition qgis.h:5587
@ Left
Left side of map.
Definition qgis.h:5586
@ Top
Top side of map.
Definition qgis.h:5588
MapGridComponentVisibility
Visibility display settings for map grid annotations and frames.
Definition qgis.h:5464
@ ShowAll
Show both latitude and longitude annotations/divisions.
Definition qgis.h:5465
@ LongitudeOnly
Show longitude/x annotations/divisions only.
Definition qgis.h:5467
@ LatitudeOnly
Show latitude/y annotations/divisions only.
Definition qgis.h:5466
@ HideAll
No annotations.
Definition qgis.h:5468
MapGridStyle
Map grid drawing styles.
Definition qgis.h:5448
@ LineCrosses
Draw line crosses at intersections of grid lines.
Definition qgis.h:5450
@ Markers
Draw markers at intersections of grid lines.
Definition qgis.h:5451
@ Lines
Draw lines for grid.
Definition qgis.h:5449
@ FrameAndAnnotationsOnly
No grid lines over the map, only draw frame and annotations.
Definition qgis.h:5452
MapGridFrameStyle
Style for map grid frames.
Definition qgis.h:5550
@ LineBorderNautical
Simple solid line frame, with nautical style diagonals on corners.
Definition qgis.h:5557
@ ZebraNautical
Black/white pattern, with nautical style diagonals on corners.
Definition qgis.h:5558
@ InteriorExteriorTicks
Tick markers drawn both inside and outside the map frame.
Definition qgis.h:5555
@ NoFrame
Disable grid frame.
Definition qgis.h:5551
@ ExteriorTicks
Tick markers drawn outside map frame.
Definition qgis.h:5554
@ Zebra
Black/white pattern.
Definition qgis.h:5552
@ LineBorder
Simple solid line frame.
Definition qgis.h:5556
@ InteriorTicks
Tick markers drawn inside map frame.
Definition qgis.h:5553
@ Marker
Marker symbol.
Definition qgis.h:630
@ Line
Line symbol.
Definition qgis.h:631
MapGridAnnotationDirection
Direction of grid annotations.
Definition qgis.h:5494
@ Vertical
Draw annotations vertically, ascending.
Definition qgis.h:5496
@ UnderTick
Draw annotations parallel to tick (under the line).
Definition qgis.h:5501
@ VerticalDescending
Draw annotations vertically, descending.
Definition qgis.h:5497
@ BoundaryDirection
Annotations follow the boundary direction.
Definition qgis.h:5498
@ AboveTick
Draw annotations parallel to tick (above the line).
Definition qgis.h:5499
@ OnTick
Draw annotations parallel to tick (on the line).
Definition qgis.h:5500
@ Horizontal
Draw annotations horizontally.
Definition qgis.h:5495
MapGridAnnotationFormat
Format for displaying map grid annotations.
Definition qgis.h:5513
@ DegreeMinute
Degree/minutes, use NSEW suffix.
Definition qgis.h:5515
@ DegreeMinuteSecond
Degree/minutes/seconds, use NSEW suffix.
Definition qgis.h:5516
@ DegreeMinuteNoSuffix
Degree/minutes, use - for S/W coordinates.
Definition qgis.h:5518
@ CustomFormat
Custom expression-based format.
Definition qgis.h:5522
@ Decimal
Decimal degrees, use - for S/W coordinates.
Definition qgis.h:5514
@ DegreeMinuteSecondNoSuffix
Degree/minutes/seconds, use - for S/W coordinates.
Definition qgis.h:5520
@ DegreeMinutePadded
Degree/minutes, with minutes using leading zeros where required.
Definition qgis.h:5519
@ DegreeMinuteSecondPadded
Degree/minutes/seconds, with minutes using leading zeros where required.
Definition qgis.h:5521
@ DecimalWithSuffix
Decimal degrees, use NSEW suffix.
Definition qgis.h:5517
void colorChanged(const QColor &color)
Emitted whenever a new color is set for the button.
Represents a coordinate reference system (CRS).
void setHighlightedFunctions(const QStringList &names)
Sets the list of function names intended to be highlighted to the user.
@ ModeTextRenderer
Configure font settings for use with QgsTextRenderer.
void setLayer(QgsVectorLayer *layer)
Sets a layer to associate with the widget.
void changed()
Emitted when the widget's text format settings are changed.
void updateDataDefinedButton(QgsPropertyOverrideButton *button)
Updates a previously registered data defined button to reflect the item's current properties.
QgsVectorLayer * coverageLayer() const
Returns the current layout context coverage layer (if set).
void registerDataDefinedButton(QgsPropertyOverrideButton *button, QgsLayoutObject::DataDefinedProperty property)
Registers a data defined button, setting up its initial value, connections and description.
QgsLayoutItemBaseWidget(QWidget *parent SIP_TRANSFERTHIS, QgsLayoutObject *layoutObject)
Constructor for QgsLayoutItemBaseWidget, linked with the specified layoutObject.
An individual grid which is drawn above the map content in a QgsLayoutItemMap.
void crsChanged()
Emitted whenever the grid's CRS is changed.
Layout graphical items for displaying a map.
@ UndoGridFramePenColor
Map grid frame pen color.
@ UndoMapGridIntervalRange
Grid interval range.
@ UndoMapGridLineSymbol
Grid line symbol.
@ UndoMapGridMarkerSymbol
Grid marker symbol.
@ UndoMapGridFrameFill1Color
Map grid frame fill color 1.
@ UndoMapAnnotationDistance
Map frame annotation distance.
@ UndoMapGridFrameFill2Color
Map grid frame fill color 2.
void populateDataDefinedButtons()
Initializes data defined buttons to current atlas coverage layer.
virtual void updateGuiElements()
Sets the current composer map values to the GUI elements.
QgsLayoutMapGridWidget(QgsLayoutItemMapGrid *mapGrid, QgsLayoutItemMap *map)
constructor
@ MapGridFrameDivisionsBottom
Map frame division display bottom.
@ MapGridFrameDivisionsTop
Map frame division display top.
@ MapGridAnnotationDisplayLeft
Map annotation display left.
@ MapGridFrameMargin
Map grid frame margin.
@ MapGridDrawAnnotation
Map annotation visibility (for individual annotations).
@ MapGridAnnotationDisplayRight
Map annotation display right.
@ MapGridAnnotationDisplayTop
Map annotation display top.
@ MapGridAnnotationDisplayBottom
Map annotation display bottom.
@ MapGridFrameDivisionsRight
Map frame division display right.
@ MapGridLabelDistance
Map grid label distance.
@ MapGridFrameLineThickness
Map grid frame line thickness.
@ MapGridFrameDivisionsLeft
Map frame division display left.
void layerChanged(QgsVectorLayer *layer)
Emitted when the context's layer is changed.
void setPanelTitle(const QString &panelTitle)
Set the title of the panel when shown in the interface.
QVector< double > mapScales() const
Returns the list of custom project map scales.
static QgsProject * instance()
Returns the QgsProject singleton instance.
const QgsProjectViewSettings * viewSettings() const
Returns the project's view settings, which contains settings and properties relating to how a QgsProj...
@ CrsNotSet
Not set (hidden by default).
void crsChanged(const QgsCoordinateReferenceSystem &crs)
Emitted when the selected CRS is changed.
T value(const QString &dynamicKeyPart=QString()) const
Returns settings value.
static const QgsSettingsEntryStringList * settingsMapScales
void setLayer(QgsVectorLayer *layer)
Sets a layer to associate with the widget.
void changed()
Emitted when the symbol's settings are changed.
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.
Definition qgis.h:6804