QGIS API Documentation 3.99.0-Master (2fe06baccd8)
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 "moc_qgslayoutmapgridwidget.cpp"
33
35 : QgsLayoutItemBaseWidget( nullptr, mapGrid )
36 , mMap( map )
37 , mMapGrid( mapGrid )
38{
39 setupUi( this );
40
41 mFrameStyleComboBox->addItem( tr( "No Frame" ), QgsLayoutItemMapGrid::NoFrame );
42 mFrameStyleComboBox->addItem( tr( "Zebra" ), QgsLayoutItemMapGrid::Zebra );
43 mFrameStyleComboBox->addItem( tr( "Zebra (Nautical)" ), QgsLayoutItemMapGrid::ZebraNautical );
44 mFrameStyleComboBox->addItem( tr( "Interior Ticks" ), QgsLayoutItemMapGrid::InteriorTicks );
45 mFrameStyleComboBox->addItem( tr( "Exterior Ticks" ), QgsLayoutItemMapGrid::ExteriorTicks );
46 mFrameStyleComboBox->addItem( tr( "Interior and Exterior Ticks" ), QgsLayoutItemMapGrid::InteriorExteriorTicks );
47 mFrameStyleComboBox->addItem( tr( "Line Border" ), QgsLayoutItemMapGrid::LineBorder );
48 mFrameStyleComboBox->addItem( tr( "Line Border (Nautical)" ), QgsLayoutItemMapGrid::LineBorderNautical );
49
50 mRotatedTicksLengthModeComboBox->addItem( tr( "Orthogonal" ), QgsLayoutItemMapGrid::OrthogonalTicks );
51 mRotatedTicksLengthModeComboBox->addItem( tr( "Fixed Length" ), QgsLayoutItemMapGrid::NormalizedTicks );
52 mRotatedAnnotationsLengthModeComboBox->addItem( tr( "Orthogonal" ), QgsLayoutItemMapGrid::OrthogonalTicks );
53 mRotatedAnnotationsLengthModeComboBox->addItem( tr( "Fixed Length" ), QgsLayoutItemMapGrid::NormalizedTicks );
54
55 mGridFrameMarginSpinBox->setShowClearButton( true );
56 mGridFrameMarginSpinBox->setClearValue( 0 );
57
58 mDistanceToMapFrameSpinBox->setShowClearButton( true );
59 mDistanceToMapFrameSpinBox->setClearValue( 0 );
60
61 mOffsetXSpinBox->setShowClearButton( true );
62 mOffsetXSpinBox->setClearValue( 0 );
63 mOffsetYSpinBox->setShowClearButton( true );
64 mOffsetYSpinBox->setClearValue( 0 );
65
66 connect( mIntervalXSpinBox, &QgsDoubleSpinBox::editingFinished, this, &QgsLayoutMapGridWidget::mIntervalXSpinBox_editingFinished );
67 connect( mIntervalYSpinBox, &QgsDoubleSpinBox::editingFinished, this, &QgsLayoutMapGridWidget::mIntervalYSpinBox_editingFinished );
68 connect( mOffsetXSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mOffsetXSpinBox_valueChanged );
69 connect( mOffsetYSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mOffsetYSpinBox_valueChanged );
70 connect( mCrossWidthSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mCrossWidthSpinBox_valueChanged );
71 connect( mFrameWidthSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mFrameWidthSpinBox_valueChanged );
72 connect( mGridFrameMarginSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mGridFrameMarginSpinBox_valueChanged );
73 connect( mFrameStyleComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mFrameStyleComboBox_currentIndexChanged );
74 connect( mRotatedTicksGroupBox, &QGroupBox::toggled, this, &QgsLayoutMapGridWidget::mRotatedTicksGroupBox_toggled );
75 connect( mRotatedTicksLengthModeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mRotatedTicksLengthModeComboBox_currentIndexChanged );
76 connect( mRotatedTicksThresholdSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mRotatedTicksThresholdSpinBox_valueChanged );
77 connect( mRotatedTicksMarginToCornerSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mRotatedTicksMarginToCornerSpinBox_valueChanged );
78 connect( mRotatedAnnotationsGroupBox, &QGroupBox::toggled, this, &QgsLayoutMapGridWidget::mRotatedAnnotationsGroupBox_toggled );
79 connect( mRotatedAnnotationsLengthModeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mRotatedAnnotationsLengthModeComboBox_currentIndexChanged );
80 connect( mRotatedAnnotationsThresholdSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mRotatedAnnotationsThresholdSpinBox_valueChanged );
81 connect( mRotatedAnnotationsMarginToCornerSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mRotatedAnnotationsMarginToCornerSpinBox_valueChanged );
82 connect( mGridFramePenSizeSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mGridFramePenSizeSpinBox_valueChanged );
83 connect( mGridFramePenColorButton, &QgsColorButton::colorChanged, this, &QgsLayoutMapGridWidget::mGridFramePenColorButton_colorChanged );
84 connect( mGridFrameFill1ColorButton, &QgsColorButton::colorChanged, this, &QgsLayoutMapGridWidget::mGridFrameFill1ColorButton_colorChanged );
85 connect( mGridFrameFill2ColorButton, &QgsColorButton::colorChanged, this, &QgsLayoutMapGridWidget::mGridFrameFill2ColorButton_colorChanged );
86 connect( mGridTypeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mGridTypeComboBox_currentIndexChanged );
87 connect( mMapGridUnitComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::intervalUnitChanged );
88 connect( mGridBlendComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mGridBlendComboBox_currentIndexChanged );
89 connect( mCheckGridLeftSide, &QCheckBox::toggled, this, &QgsLayoutMapGridWidget::mCheckGridLeftSide_toggled );
90 connect( mCheckGridRightSide, &QCheckBox::toggled, this, &QgsLayoutMapGridWidget::mCheckGridRightSide_toggled );
91 connect( mCheckGridTopSide, &QCheckBox::toggled, this, &QgsLayoutMapGridWidget::mCheckGridTopSide_toggled );
92 connect( mCheckGridBottomSide, &QCheckBox::toggled, this, &QgsLayoutMapGridWidget::mCheckGridBottomSide_toggled );
93 connect( mFrameDivisionsLeftComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mFrameDivisionsLeftComboBox_currentIndexChanged );
94 connect( mFrameDivisionsRightComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mFrameDivisionsRightComboBox_currentIndexChanged );
95 connect( mFrameDivisionsTopComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mFrameDivisionsTopComboBox_currentIndexChanged );
96 connect( mFrameDivisionsBottomComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mFrameDivisionsBottomComboBox_currentIndexChanged );
97 connect( mDrawAnnotationGroupBox, &QgsCollapsibleGroupBoxBasic::toggled, this, &QgsLayoutMapGridWidget::mDrawAnnotationGroupBox_toggled );
98 connect( mAnnotationFormatButton, &QToolButton::clicked, this, &QgsLayoutMapGridWidget::mAnnotationFormatButton_clicked );
99 connect( mAnnotationDisplayLeftComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDisplayLeftComboBox_currentIndexChanged );
100 connect( mAnnotationDisplayRightComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDisplayRightComboBox_currentIndexChanged );
101 connect( mAnnotationDisplayTopComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDisplayTopComboBox_currentIndexChanged );
102 connect( mAnnotationDisplayBottomComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDisplayBottomComboBox_currentIndexChanged );
103 connect( mAnnotationPositionLeftComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationPositionLeftComboBox_currentIndexChanged );
104 connect( mAnnotationPositionRightComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationPositionRightComboBox_currentIndexChanged );
105 connect( mAnnotationPositionTopComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationPositionTopComboBox_currentIndexChanged );
106 connect( mAnnotationPositionBottomComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationPositionBottomComboBox_currentIndexChanged );
107 connect( mAnnotationDirectionComboBoxLeft, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDirectionComboBoxLeft_currentIndexChanged );
108 connect( mAnnotationDirectionComboBoxRight, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDirectionComboBoxRight_currentIndexChanged );
109 connect( mAnnotationDirectionComboBoxTop, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDirectionComboBoxTop_currentIndexChanged );
110 connect( mAnnotationDirectionComboBoxBottom, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDirectionComboBoxBottom_currentIndexChanged );
111 connect( mAnnotationFormatComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationFormatComboBox_currentIndexChanged );
112 connect( mCoordinatePrecisionSpinBox, static_cast<void ( QSpinBox::* )( int )>( &QSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mCoordinatePrecisionSpinBox_valueChanged );
113 connect( mDistanceToMapFrameSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mDistanceToMapFrameSpinBox_valueChanged );
114 connect( mMinWidthSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::minIntervalChanged );
115 connect( mMaxWidthSpinBox, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::maxIntervalChanged );
116 connect( mEnabledCheckBox, &QCheckBox::toggled, this, &QgsLayoutMapGridWidget::gridEnabledToggled );
117 setPanelTitle( tr( "Map Grid Properties" ) );
118
119 mMapGridCrsSelector->setOptionVisible( QgsProjectionSelectionWidget::CrsNotSet, true );
120 mMapGridCrsSelector->setNotSetText( tr( "Use Map CRS" ) );
121 mMapGridCrsSelector->setDialogTitle( tr( "Grid CRS" ) );
122
123 connect( mMapGridCrsSelector, &QgsProjectionSelectionWidget::crsChanged, this, &QgsLayoutMapGridWidget::mapGridCrsChanged );
124
125 blockAllSignals( true );
126
127 mMapGridUnitComboBox->addItem( tr( "Map Units" ), QgsLayoutItemMapGrid::MapUnit );
128 mMapGridUnitComboBox->addItem( tr( "Fit Segment Width" ), QgsLayoutItemMapGrid::DynamicPageSizeBased );
129 mMapGridUnitComboBox->addItem( tr( "Millimeters" ), QgsLayoutItemMapGrid::MM );
130 mMapGridUnitComboBox->addItem( tr( "Centimeters" ), QgsLayoutItemMapGrid::CM );
131
132 mGridTypeComboBox->insertItem( 0, tr( "Solid" ), QgsLayoutItemMapGrid::Solid );
133 mGridTypeComboBox->insertItem( 1, tr( "Cross" ), QgsLayoutItemMapGrid::Cross );
134 mGridTypeComboBox->insertItem( 2, tr( "Markers" ), QgsLayoutItemMapGrid::Markers );
135 mGridTypeComboBox->insertItem( 3, tr( "Frame and annotations only" ), QgsLayoutItemMapGrid::FrameAnnotationsOnly );
136
137 insertFrameDisplayEntries( mFrameDivisionsLeftComboBox );
138 insertFrameDisplayEntries( mFrameDivisionsRightComboBox );
139 insertFrameDisplayEntries( mFrameDivisionsTopComboBox );
140 insertFrameDisplayEntries( mFrameDivisionsBottomComboBox );
141
142 insertAnnotationDisplayEntries( mAnnotationDisplayLeftComboBox );
143 insertAnnotationDisplayEntries( mAnnotationDisplayRightComboBox );
144 insertAnnotationDisplayEntries( mAnnotationDisplayTopComboBox );
145 insertAnnotationDisplayEntries( mAnnotationDisplayBottomComboBox );
146
147 insertAnnotationPositionEntries( mAnnotationPositionLeftComboBox );
148 insertAnnotationPositionEntries( mAnnotationPositionRightComboBox );
149 insertAnnotationPositionEntries( mAnnotationPositionTopComboBox );
150 insertAnnotationPositionEntries( mAnnotationPositionBottomComboBox );
151
152 insertAnnotationDirectionEntries( mAnnotationDirectionComboBoxLeft );
153 insertAnnotationDirectionEntries( mAnnotationDirectionComboBoxRight );
154 insertAnnotationDirectionEntries( mAnnotationDirectionComboBoxTop );
155 insertAnnotationDirectionEntries( mAnnotationDirectionComboBoxBottom );
156
157 mGridFramePenColorButton->setColorDialogTitle( tr( "Select Grid Frame Color" ) );
158 mGridFramePenColorButton->setAllowOpacity( true );
159 mGridFramePenColorButton->setContext( QStringLiteral( "composer" ) );
160 mGridFramePenColorButton->setNoColorString( tr( "Transparent Frame" ) );
161 mGridFramePenColorButton->setShowNoColor( true );
162
163 mGridFrameFill1ColorButton->setColorDialogTitle( tr( "Select Grid Frame Fill Color" ) );
164 mGridFrameFill1ColorButton->setAllowOpacity( true );
165 mGridFrameFill1ColorButton->setContext( QStringLiteral( "composer" ) );
166 mGridFrameFill1ColorButton->setNoColorString( tr( "Transparent Fill" ) );
167 mGridFrameFill1ColorButton->setShowNoColor( true );
168
169 mGridFrameFill2ColorButton->setColorDialogTitle( tr( "Select Grid Frame Fill Color" ) );
170 mGridFrameFill2ColorButton->setAllowOpacity( true );
171 mGridFrameFill2ColorButton->setContext( QStringLiteral( "composer" ) );
172 mGridFrameFill2ColorButton->setNoColorString( tr( "Transparent Fill" ) );
173 mGridFrameFill2ColorButton->setShowNoColor( true );
174
175 mGridLineStyleButton->setSymbolType( Qgis::SymbolType::Line );
176 mGridMarkerStyleButton->setSymbolType( Qgis::SymbolType::Marker );
177
178 //set initial state of frame style controls
179 toggleFrameControls( false, false, false, false );
180
200
201 // call to initially populate mAnnotationFormatComboBox
202 onCrsChanged();
203
205
206 blockAllSignals( false );
207 connect( mAnnotationFontButton, &QgsFontButton::changed, this, &QgsLayoutMapGridWidget::annotationTextFormatChanged );
208 connect( mGridLineStyleButton, &QgsSymbolButton::changed, this, &QgsLayoutMapGridWidget::lineSymbolChanged );
209 connect( mGridMarkerStyleButton, &QgsSymbolButton::changed, this, &QgsLayoutMapGridWidget::markerSymbolChanged );
210
211 mGridLineStyleButton->registerExpressionContextGenerator( mMapGrid );
212 mGridLineStyleButton->setLayer( coverageLayer() );
213 mGridMarkerStyleButton->registerExpressionContextGenerator( mMapGrid );
214 mGridMarkerStyleButton->setLayer( coverageLayer() );
215 if ( mMap->layout() )
216 {
217 connect( &mMap->layout()->reportContext(), &QgsLayoutReportContext::layerChanged, mGridLineStyleButton, &QgsSymbolButton::setLayer );
218 connect( &mMap->layout()->reportContext(), &QgsLayoutReportContext::layerChanged, mGridMarkerStyleButton, &QgsSymbolButton::setLayer );
219 connect( &mMap->layout()->reportContext(), &QgsLayoutReportContext::layerChanged, mAnnotationFontButton, &QgsFontButton::setLayer );
220 }
221 mAnnotationFontButton->setLayer( coverageLayer() );
222 mAnnotationFontButton->registerExpressionContextGenerator( mMapGrid );
223
224 connect( mMapGrid, &QgsLayoutItemMapGrid::crsChanged, this, &QgsLayoutMapGridWidget::onCrsChanged );
225}
226
228{
229 updateDataDefinedButton( mEnabledDDBtn );
230 updateDataDefinedButton( mIntervalXDDBtn );
231 updateDataDefinedButton( mIntervalYDDBtn );
232 updateDataDefinedButton( mOffsetXDDBtn );
233 updateDataDefinedButton( mOffsetYDDBtn );
234 updateDataDefinedButton( mFrameSizeDDBtn );
235 updateDataDefinedButton( mFrameMarginDDBtn );
236 updateDataDefinedButton( mLabelDistDDBtn );
237 updateDataDefinedButton( mCrossWidthDDBtn );
238 updateDataDefinedButton( mFrameLineThicknessDDBtn );
239 updateDataDefinedButton( mAnnotationDisplayLeftDDBtn );
240 updateDataDefinedButton( mAnnotationDisplayRightDDBtn );
241 updateDataDefinedButton( mAnnotationDisplayTopDDBtn );
242 updateDataDefinedButton( mAnnotationDisplayBottomDDBtn );
243 updateDataDefinedButton( mFrameDivisionsLeftDDBtn );
244 updateDataDefinedButton( mFrameDivisionsRightDDBtn );
245 updateDataDefinedButton( mFrameDivisionsTopDDBtn );
246 updateDataDefinedButton( mFrameDivisionsBottomDDBtn );
247}
248
249void QgsLayoutMapGridWidget::setGuiElementValues()
250{
252}
253
255{
256 if ( !mMapGrid || !mMap )
257 {
258 return;
259 }
260
261 blockAllSignals( true );
263 setGridItems();
264 blockAllSignals( false );
265}
266
267void QgsLayoutMapGridWidget::blockAllSignals( bool block )
268{
269 //grid
270 mEnabledCheckBox->blockSignals( block );
271 mGridTypeComboBox->blockSignals( block );
272 mIntervalXSpinBox->blockSignals( block );
273 mIntervalYSpinBox->blockSignals( block );
274 mOffsetXSpinBox->blockSignals( block );
275 mOffsetYSpinBox->blockSignals( block );
276 mCrossWidthSpinBox->blockSignals( block );
277 mFrameStyleComboBox->blockSignals( block );
278 mFrameWidthSpinBox->blockSignals( block );
279 mGridFrameMarginSpinBox->blockSignals( block );
280 mGridLineStyleButton->blockSignals( block );
281 mMapGridUnitComboBox->blockSignals( block );
282 mGridFramePenSizeSpinBox->blockSignals( block );
283 mGridFramePenColorButton->blockSignals( block );
284 mGridFrameFill1ColorButton->blockSignals( block );
285 mGridFrameFill2ColorButton->blockSignals( block );
286 mGridBlendComboBox->blockSignals( block );
287 mCheckGridLeftSide->blockSignals( block );
288 mCheckGridRightSide->blockSignals( block );
289 mCheckGridTopSide->blockSignals( block );
290 mCheckGridBottomSide->blockSignals( block );
291 mFrameDivisionsLeftComboBox->blockSignals( block );
292 mFrameDivisionsRightComboBox->blockSignals( block );
293 mFrameDivisionsTopComboBox->blockSignals( block );
294 mFrameDivisionsBottomComboBox->blockSignals( block );
295 mGridMarkerStyleButton->blockSignals( block );
296
297 //grid annotation
298 mDrawAnnotationGroupBox->blockSignals( block );
299 mAnnotationFormatComboBox->blockSignals( block );
300 mAnnotationDisplayLeftComboBox->blockSignals( block );
301 mAnnotationPositionLeftComboBox->blockSignals( block );
302 mAnnotationDirectionComboBoxLeft->blockSignals( block );
303 mAnnotationDisplayRightComboBox->blockSignals( block );
304 mAnnotationPositionRightComboBox->blockSignals( block );
305 mAnnotationDirectionComboBoxRight->blockSignals( block );
306 mAnnotationDisplayTopComboBox->blockSignals( block );
307 mAnnotationPositionTopComboBox->blockSignals( block );
308 mAnnotationDirectionComboBoxTop->blockSignals( block );
309 mAnnotationDisplayBottomComboBox->blockSignals( block );
310 mAnnotationPositionBottomComboBox->blockSignals( block );
311 mAnnotationDirectionComboBoxBottom->blockSignals( block );
312 mDistanceToMapFrameSpinBox->blockSignals( block );
313 mCoordinatePrecisionSpinBox->blockSignals( block );
314 mAnnotationFontButton->blockSignals( block );
315 mMinWidthSpinBox->blockSignals( block );
316 mMaxWidthSpinBox->blockSignals( block );
317}
318
319void QgsLayoutMapGridWidget::handleChangedFrameDisplay( QgsLayoutItemMapGrid::BorderSide border, const QgsLayoutItemMapGrid::DisplayMode mode )
320{
321 if ( !mMapGrid || !mMap )
322 {
323 return;
324 }
325
326 mMap->beginCommand( tr( "Change Frame Divisions" ) );
327 mMapGrid->setFrameDivisions( mode, border );
328 mMap->endCommand();
329 mMap->updateBoundingRect();
330}
331
332void QgsLayoutMapGridWidget::handleChangedAnnotationDisplay( QgsLayoutItemMapGrid::BorderSide border, const QgsLayoutItemMapGrid::DisplayMode mode )
333{
334 if ( !mMapGrid || !mMap )
335 {
336 return;
337 }
338
339 mMap->beginCommand( tr( "Change Annotation Format" ) );
340 mMapGrid->setAnnotationDisplay( mode, border );
341 mMap->updateBoundingRect();
342 mMap->update();
343 mMap->endCommand();
344}
345
346void QgsLayoutMapGridWidget::toggleFrameControls( bool frameEnabled, bool frameFillEnabled, bool frameSizeEnabled, bool rotationEnabled )
347{
348 //set status of frame controls
349 mFrameWidthSpinBox->setEnabled( frameSizeEnabled );
350 mGridFrameMarginSpinBox->setEnabled( frameEnabled );
351 mGridFramePenSizeSpinBox->setEnabled( frameEnabled );
352 mGridFramePenColorButton->setEnabled( frameEnabled );
353 mGridFrameFill1ColorButton->setEnabled( frameFillEnabled );
354 mGridFrameFill2ColorButton->setEnabled( frameFillEnabled );
355 mFrameWidthLabel->setEnabled( frameSizeEnabled );
356 mFrameMarginLabel->setEnabled( frameEnabled );
357 mFramePenLabel->setEnabled( frameEnabled );
358 mFrameFillLabel->setEnabled( frameFillEnabled );
359 mCheckGridLeftSide->setEnabled( frameEnabled );
360 mCheckGridRightSide->setEnabled( frameEnabled );
361 mCheckGridTopSide->setEnabled( frameEnabled );
362 mCheckGridBottomSide->setEnabled( frameEnabled );
363 mFrameDivisionsLeftComboBox->setEnabled( frameEnabled );
364 mFrameDivisionsRightComboBox->setEnabled( frameEnabled );
365 mFrameDivisionsTopComboBox->setEnabled( frameEnabled );
366 mFrameDivisionsBottomComboBox->setEnabled( frameEnabled );
367 mLeftDivisionsLabel->setEnabled( frameEnabled );
368 mRightDivisionsLabel->setEnabled( frameEnabled );
369 mTopDivisionsLabel->setEnabled( frameEnabled );
370 mBottomDivisionsLabel->setEnabled( frameEnabled );
371 mRotatedTicksGroupBox->setEnabled( rotationEnabled );
372}
373
374void QgsLayoutMapGridWidget::insertAnnotationPositionEntries( QComboBox *c )
375{
376 c->insertItem( 0, tr( "Inside Frame" ), QgsLayoutItemMapGrid::InsideMapFrame );
377 c->insertItem( 1, tr( "Outside Frame" ), QgsLayoutItemMapGrid::OutsideMapFrame );
378}
379
380void QgsLayoutMapGridWidget::insertAnnotationDirectionEntries( QComboBox *c )
381{
382 c->addItem( tr( "Horizontal" ), QgsLayoutItemMapGrid::Horizontal );
383 c->addItem( tr( "Vertical Ascending" ), QgsLayoutItemMapGrid::Vertical );
384 c->addItem( tr( "Vertical Descending" ), QgsLayoutItemMapGrid::VerticalDescending );
385 c->addItem( tr( "Boundary Direction" ), QgsLayoutItemMapGrid::BoundaryDirection );
386 // c->addItem( tr( "Parallel to Tick" ), QgsLayoutItemMapGrid::ParallelToTick );
387 c->addItem( tr( "Above Tick" ), QgsLayoutItemMapGrid::AboveTick );
388 c->addItem( tr( "On Tick" ), QgsLayoutItemMapGrid::OnTick );
389 c->addItem( tr( "Under Tick" ), QgsLayoutItemMapGrid::UnderTick );
390}
391
392void QgsLayoutMapGridWidget::initFrameDisplayBox( QComboBox *c, QgsLayoutItemMapGrid::DisplayMode display )
393{
394 if ( !c )
395 {
396 return;
397 }
398 c->setCurrentIndex( c->findData( display ) );
399}
400
401void QgsLayoutMapGridWidget::handleChangedAnnotationPosition( QgsLayoutItemMapGrid::BorderSide border, const QgsLayoutItemMapGrid::AnnotationPosition position )
402{
403 if ( !mMapGrid || !mMap )
404 {
405 return;
406 }
407
408 mMap->beginCommand( tr( "Change Annotation Position" ) );
409 mMapGrid->setAnnotationPosition( position, border );
410
411 mMap->updateBoundingRect();
412 mMap->update();
413 mMap->endCommand();
414}
415
416void QgsLayoutMapGridWidget::handleChangedAnnotationDirection( QgsLayoutItemMapGrid::BorderSide border, QgsLayoutItemMapGrid::AnnotationDirection direction )
417{
418 if ( !mMapGrid || !mMap )
419 {
420 return;
421 }
422
423 mMap->beginCommand( tr( "Change Annotation Direction" ) );
424 mMapGrid->setAnnotationDirection( direction, border );
425 mMap->updateBoundingRect();
426 mMap->update();
427 mMap->endCommand();
428}
429
430void QgsLayoutMapGridWidget::insertFrameDisplayEntries( QComboBox *c )
431{
432 c->addItem( tr( "All" ), QgsLayoutItemMapGrid::ShowAll );
433 c->addItem( tr( "Latitude/Y Only" ), QgsLayoutItemMapGrid::LatitudeOnly );
434 c->addItem( tr( "Longitude/X Only" ), QgsLayoutItemMapGrid::LongitudeOnly );
435}
436
437void QgsLayoutMapGridWidget::insertAnnotationDisplayEntries( QComboBox *c )
438{
439 c->insertItem( 0, tr( "Show All" ), QgsLayoutItemMapGrid::ShowAll );
440 c->insertItem( 1, tr( "Show Latitude/Y Only" ), QgsLayoutItemMapGrid::LatitudeOnly );
441 c->insertItem( 2, tr( "Show Longitude/X Only" ), QgsLayoutItemMapGrid::LongitudeOnly );
442 c->insertItem( 3, tr( "Disabled" ), QgsLayoutItemMapGrid::HideAll );
443}
444
445void QgsLayoutMapGridWidget::initAnnotationPositionBox( QComboBox *c, QgsLayoutItemMapGrid::AnnotationPosition pos )
446{
447 if ( !c )
448 {
449 return;
450 }
451
453 {
454 c->setCurrentIndex( c->findText( tr( "Inside Frame" ) ) );
455 }
456 else
457 {
458 c->setCurrentIndex( c->findText( tr( "Outside Frame" ) ) );
459 }
460}
461
462void QgsLayoutMapGridWidget::initAnnotationDirectionBox( QComboBox *c, QgsLayoutItemMapGrid::AnnotationDirection dir )
463{
464 if ( !c )
465 {
466 return;
467 }
468 c->setCurrentIndex( c->findData( dir ) );
469}
470
471bool QgsLayoutMapGridWidget::hasPredefinedScales() const
472{
473 // first look at project's scales
474 const QVector<double> scales = QgsProject::instance()->viewSettings()->mapScales();
475 const bool hasProjectScales( QgsProject::instance()->viewSettings()->useProjectScales() );
476 if ( !hasProjectScales || scales.isEmpty() )
477 {
478 // default to global map tool scales
479 const QStringList scales = QgsSettingsRegistryCore::settingsMapScales->value();
480 return !scales.isEmpty() && !scales[0].isEmpty();
481 }
482 return true;
483}
484
485void QgsLayoutMapGridWidget::setGridItems()
486{
487 if ( !mMapGrid )
488 {
489 return;
490 }
491
492 mGridMarkerStyleButton->registerExpressionContextGenerator( mMapGrid );
493 mGridLineStyleButton->registerExpressionContextGenerator( mMapGrid );
494 mAnnotationFontButton->registerExpressionContextGenerator( mMapGrid );
495
496 mEnabledCheckBox->setChecked( mMapGrid->enabled() );
497 mIntervalXSpinBox->setValue( mMapGrid->intervalX() );
498 mIntervalYSpinBox->setValue( mMapGrid->intervalY() );
499 mOffsetXSpinBox->setValue( mMapGrid->offsetX() );
500 mOffsetYSpinBox->setValue( mMapGrid->offsetY() );
501 mCrossWidthSpinBox->setValue( mMapGrid->crossLength() );
502 mFrameWidthSpinBox->setValue( mMapGrid->frameWidth() );
503 mGridFrameMarginSpinBox->setValue( mMapGrid->frameMargin() );
504 mGridFramePenSizeSpinBox->setValue( mMapGrid->framePenSize() );
505 mGridFramePenColorButton->setColor( mMapGrid->framePenColor() );
506 mGridFrameFill1ColorButton->setColor( mMapGrid->frameFillColor1() );
507 mGridFrameFill2ColorButton->setColor( mMapGrid->frameFillColor2() );
508
509 const QgsLayoutItemMapGrid::GridStyle gridStyle = mMapGrid->style();
510 mGridTypeComboBox->setCurrentIndex( mGridTypeComboBox->findData( gridStyle ) );
511 switch ( gridStyle )
512 {
514 mCrossWidthSpinBox->setVisible( true );
515 mCrossWidthDDBtn->setVisible( true );
516 mCrossWidthLabel->setVisible( true );
517 mGridLineStyleButton->setVisible( true );
518 mLineStyleLabel->setVisible( true );
519 mGridMarkerStyleButton->setVisible( false );
520 mMarkerStyleLabel->setVisible( false );
521 mGridBlendComboBox->setVisible( true );
522 mGridBlendLabel->setVisible( true );
523 break;
525 mCrossWidthSpinBox->setVisible( false );
526 mCrossWidthDDBtn->setVisible( false );
527 mCrossWidthLabel->setVisible( false );
528 mGridLineStyleButton->setVisible( false );
529 mLineStyleLabel->setVisible( false );
530 mGridMarkerStyleButton->setVisible( true );
531 mMarkerStyleFrame->setVisible( true );
532 mMarkerStyleLabel->setVisible( true );
533 mGridBlendComboBox->setVisible( true );
534 mGridBlendLabel->setVisible( true );
535 break;
537 mCrossWidthSpinBox->setVisible( false );
538 mCrossWidthDDBtn->setVisible( false );
539 mCrossWidthLabel->setVisible( false );
540 mGridLineStyleButton->setVisible( true );
541 mLineStyleLabel->setVisible( true );
542 mGridMarkerStyleButton->setVisible( false );
543 mMarkerStyleFrame->setVisible( false );
544 mMarkerStyleLabel->setVisible( false );
545 mGridBlendComboBox->setVisible( true );
546 mGridBlendLabel->setVisible( true );
547 break;
549 mCrossWidthSpinBox->setVisible( false );
550 mCrossWidthDDBtn->setVisible( false );
551 mCrossWidthLabel->setVisible( false );
552 mGridLineStyleButton->setVisible( false );
553 mLineStyleLabel->setVisible( false );
554 mGridMarkerStyleButton->setVisible( false );
555 mMarkerStyleFrame->setVisible( false );
556 mMarkerStyleLabel->setVisible( false );
557 mGridBlendComboBox->setVisible( false );
558 mGridBlendLabel->setVisible( false );
559 break;
560 }
561
562 //grid frame
563 mFrameWidthSpinBox->setValue( mMapGrid->frameWidth() );
564 mGridFrameMarginSpinBox->setValue( mMapGrid->frameMargin() );
565 const QgsLayoutItemMapGrid::FrameStyle gridFrameStyle = mMapGrid->frameStyle();
566 mFrameStyleComboBox->setCurrentIndex( mFrameStyleComboBox->findData( gridFrameStyle ) );
567 switch ( gridFrameStyle )
568 {
571 toggleFrameControls( true, true, true, false );
572 break;
576 toggleFrameControls( true, false, true, true );
577 break;
580 toggleFrameControls( true, false, false, false );
581 break;
583 toggleFrameControls( false, false, false, false );
584 break;
585 }
586
587 mCheckGridLeftSide->setChecked( mMapGrid->testFrameSideFlag( QgsLayoutItemMapGrid::FrameLeft ) );
588 mCheckGridRightSide->setChecked( mMapGrid->testFrameSideFlag( QgsLayoutItemMapGrid::FrameRight ) );
589 mCheckGridTopSide->setChecked( mMapGrid->testFrameSideFlag( QgsLayoutItemMapGrid::FrameTop ) );
590 mCheckGridBottomSide->setChecked( mMapGrid->testFrameSideFlag( QgsLayoutItemMapGrid::FrameBottom ) );
591
592 mRotatedTicksGroupBox->setChecked( mMapGrid->rotatedTicksEnabled() );
593 mRotatedTicksLengthModeComboBox->setCurrentIndex( mRotatedTicksLengthModeComboBox->findData( mMapGrid->rotatedTicksLengthMode() ) );
594 mRotatedTicksThresholdSpinBox->setValue( mMapGrid->rotatedTicksMinimumAngle() );
595 mRotatedTicksMarginToCornerSpinBox->setValue( mMapGrid->rotatedTicksMarginToCorner() );
596
597 mRotatedAnnotationsGroupBox->setChecked( mMapGrid->rotatedAnnotationsEnabled() );
598 mRotatedAnnotationsLengthModeComboBox->setCurrentIndex( mRotatedAnnotationsLengthModeComboBox->findData( mMapGrid->rotatedAnnotationsLengthMode() ) );
599 mRotatedAnnotationsThresholdSpinBox->setValue( mMapGrid->rotatedAnnotationsMinimumAngle() );
600 mRotatedAnnotationsMarginToCornerSpinBox->setValue( mMapGrid->rotatedAnnotationsMarginToCorner() );
601
602 initFrameDisplayBox( mFrameDivisionsLeftComboBox, mMapGrid->frameDivisions( QgsLayoutItemMapGrid::Left ) );
603 initFrameDisplayBox( mFrameDivisionsRightComboBox, mMapGrid->frameDivisions( QgsLayoutItemMapGrid::Right ) );
604 initFrameDisplayBox( mFrameDivisionsTopComboBox, mMapGrid->frameDivisions( QgsLayoutItemMapGrid::Top ) );
605 initFrameDisplayBox( mFrameDivisionsBottomComboBox, mMapGrid->frameDivisions( QgsLayoutItemMapGrid::Bottom ) );
606
607 //line style
608 mGridLineStyleButton->setSymbol( mMapGrid->lineSymbol()->clone() );
609 //marker style
610 mGridMarkerStyleButton->setSymbol( mMapGrid->markerSymbol()->clone() );
611
612 mGridBlendComboBox->setBlendMode( mMapGrid->blendMode() );
613
614 mDrawAnnotationGroupBox->setChecked( mMapGrid->annotationEnabled() );
615 mAnnotationDisplayLeftComboBox->setCurrentIndex( mAnnotationDisplayLeftComboBox->findData( mMapGrid->annotationDisplay( QgsLayoutItemMapGrid::Left ) ) );
616 mAnnotationDisplayRightComboBox->setCurrentIndex( mAnnotationDisplayRightComboBox->findData( mMapGrid->annotationDisplay( QgsLayoutItemMapGrid::Right ) ) );
617 mAnnotationDisplayTopComboBox->setCurrentIndex( mAnnotationDisplayTopComboBox->findData( mMapGrid->annotationDisplay( QgsLayoutItemMapGrid::Top ) ) );
618 mAnnotationDisplayBottomComboBox->setCurrentIndex( mAnnotationDisplayBottomComboBox->findData( mMapGrid->annotationDisplay( QgsLayoutItemMapGrid::Bottom ) ) );
619
620 mAnnotationPositionLeftComboBox->setCurrentIndex( mAnnotationPositionLeftComboBox->findData( mMapGrid->annotationPosition( QgsLayoutItemMapGrid::Left ) ) );
621 mAnnotationPositionRightComboBox->setCurrentIndex( mAnnotationPositionRightComboBox->findData( mMapGrid->annotationPosition( QgsLayoutItemMapGrid::Right ) ) );
622 mAnnotationPositionTopComboBox->setCurrentIndex( mAnnotationPositionTopComboBox->findData( mMapGrid->annotationPosition( QgsLayoutItemMapGrid::Top ) ) );
623 mAnnotationPositionBottomComboBox->setCurrentIndex( mAnnotationPositionBottomComboBox->findData( mMapGrid->annotationPosition( QgsLayoutItemMapGrid::Bottom ) ) );
624
625 initAnnotationDirectionBox( mAnnotationDirectionComboBoxLeft, mMapGrid->annotationDirection( QgsLayoutItemMapGrid::Left ) );
626 initAnnotationDirectionBox( mAnnotationDirectionComboBoxRight, mMapGrid->annotationDirection( QgsLayoutItemMapGrid::Right ) );
627 initAnnotationDirectionBox( mAnnotationDirectionComboBoxTop, mMapGrid->annotationDirection( QgsLayoutItemMapGrid::Top ) );
628 initAnnotationDirectionBox( mAnnotationDirectionComboBoxBottom, mMapGrid->annotationDirection( QgsLayoutItemMapGrid::Bottom ) );
629
630 mAnnotationFontButton->setDialogTitle( tr( "Grid Annotation Font" ) );
631 mAnnotationFontButton->setMode( QgsFontButton::ModeTextRenderer );
632 mAnnotationFontButton->setTextFormat( mMapGrid->annotationTextFormat() );
633
634 mAnnotationFormatComboBox->setCurrentIndex( mAnnotationFormatComboBox->findData( mMapGrid->annotationFormat() ) );
635 mAnnotationFormatButton->setEnabled( mMapGrid->annotationFormat() == QgsLayoutItemMapGrid::CustomFormat );
636 mDistanceToMapFrameSpinBox->setValue( mMapGrid->annotationFrameDistance() );
637 mCoordinatePrecisionSpinBox->setValue( mMapGrid->annotationPrecision() );
638
639 //Unit
640 mMapGridUnitComboBox->setCurrentIndex( mMapGridUnitComboBox->findData( mMapGrid->units() ) );
641 switch ( mMapGrid->units() )
642 {
646 mIntervalStackedWidget->setCurrentIndex( 0 );
647 break;
648
650 mIntervalStackedWidget->setCurrentIndex( 1 );
651 break;
652 }
653 mMinWidthSpinBox->setValue( mMapGrid->minimumIntervalWidth() );
654 mMaxWidthSpinBox->setValue( mMapGrid->maximumIntervalWidth() );
655
656 whileBlocking( mMapGridCrsSelector )->setCrs( mMapGrid->crs() );
657}
658
659void QgsLayoutMapGridWidget::mIntervalXSpinBox_editingFinished()
660{
661 if ( !mMapGrid || !mMap )
662 {
663 return;
664 }
665
666 mMap->beginCommand( tr( "Change Grid Interval" ) );
667 mMapGrid->setIntervalX( mIntervalXSpinBox->value() );
668 mMap->updateBoundingRect();
669 mMap->update();
670 mMap->endCommand();
671}
672
673void QgsLayoutMapGridWidget::mIntervalYSpinBox_editingFinished()
674{
675 if ( !mMapGrid || !mMap )
676 {
677 return;
678 }
679
680 mMap->beginCommand( tr( "Change Grid Interval" ) );
681 mMapGrid->setIntervalY( mIntervalYSpinBox->value() );
682 mMap->updateBoundingRect();
683 mMap->update();
684 mMap->endCommand();
685}
686
687void QgsLayoutMapGridWidget::mOffsetXSpinBox_valueChanged( double value )
688{
689 if ( !mMapGrid || !mMap )
690 {
691 return;
692 }
693
694 mMap->beginCommand( tr( "Change Grid Offset" ) );
695 mMapGrid->setOffsetX( value );
696 mMap->updateBoundingRect();
697 mMap->update();
698 mMap->endCommand();
699}
700
701void QgsLayoutMapGridWidget::mOffsetYSpinBox_valueChanged( double value )
702{
703 if ( !mMapGrid || !mMap )
704 {
705 return;
706 }
707
708 mMap->beginCommand( tr( "Change Grid Offset" ) );
709 mMapGrid->setOffsetY( value );
710 mMap->updateBoundingRect();
711 mMap->update();
712 mMap->endCommand();
713}
714
715void QgsLayoutMapGridWidget::mCrossWidthSpinBox_valueChanged( double val )
716{
717 if ( !mMapGrid || !mMap )
718 {
719 return;
720 }
721
722 mMap->beginCommand( tr( "Change Cross Width" ) );
723 mMapGrid->setCrossLength( val );
724 mMap->update();
725 mMap->endCommand();
726}
727
728void QgsLayoutMapGridWidget::mFrameWidthSpinBox_valueChanged( double val )
729{
730 if ( !mMapGrid || !mMap )
731 {
732 return;
733 }
734
735 mMap->beginCommand( tr( "Change Frame Width" ) );
736 mMapGrid->setFrameWidth( val );
737 mMap->updateBoundingRect();
738 mMap->update();
739 mMap->endCommand();
740}
741
742void QgsLayoutMapGridWidget::mGridFrameMarginSpinBox_valueChanged( double val )
743{
744 if ( !mMapGrid || !mMap )
745 {
746 return;
747 }
748
749 mMap->beginCommand( tr( "Change Grid Frame Margin" ) );
750 mMapGrid->setFrameMargin( val );
751 mMap->updateBoundingRect();
752 mMap->update();
753 mMap->endCommand();
754}
755
756void QgsLayoutMapGridWidget::mCheckGridLeftSide_toggled( bool checked )
757{
758 if ( !mMapGrid || !mMap )
759 {
760 return;
761 }
762
763 mMap->beginCommand( tr( "Change Frame Left" ) );
764 mMapGrid->setFrameSideFlag( QgsLayoutItemMapGrid::FrameLeft, checked );
765 mMap->updateBoundingRect();
766 mMap->update();
767 mMap->endCommand();
768}
769
770void QgsLayoutMapGridWidget::mCheckGridRightSide_toggled( bool checked )
771{
772 if ( !mMapGrid || !mMap )
773 {
774 return;
775 }
776
777 mMap->beginCommand( tr( "Change Frame Right" ) );
778 mMapGrid->setFrameSideFlag( QgsLayoutItemMapGrid::FrameRight, checked );
779 mMap->updateBoundingRect();
780 mMap->update();
781 mMap->endCommand();
782}
783
784void QgsLayoutMapGridWidget::mCheckGridTopSide_toggled( bool checked )
785{
786 if ( !mMapGrid || !mMap )
787 {
788 return;
789 }
790
791 mMap->beginCommand( tr( "Change Frame Top" ) );
792 mMapGrid->setFrameSideFlag( QgsLayoutItemMapGrid::FrameTop, checked );
793 mMap->updateBoundingRect();
794 mMap->update();
795 mMap->endCommand();
796}
797
798void QgsLayoutMapGridWidget::mCheckGridBottomSide_toggled( bool checked )
799{
800 if ( !mMapGrid || !mMap )
801 {
802 return;
803 }
804
805 mMap->beginCommand( tr( "Change Frame Bottom" ) );
806 mMapGrid->setFrameSideFlag( QgsLayoutItemMapGrid::FrameBottom, checked );
807 mMap->updateBoundingRect();
808 mMap->update();
809 mMap->endCommand();
810}
811
812void QgsLayoutMapGridWidget::mFrameDivisionsLeftComboBox_currentIndexChanged( int index )
813{
814 handleChangedFrameDisplay( QgsLayoutItemMapGrid::Left, static_cast<QgsLayoutItemMapGrid::DisplayMode>( mFrameDivisionsLeftComboBox->itemData( index ).toInt() ) );
815}
816
817void QgsLayoutMapGridWidget::mFrameDivisionsRightComboBox_currentIndexChanged( int index )
818{
819 handleChangedFrameDisplay( QgsLayoutItemMapGrid::Right, static_cast<QgsLayoutItemMapGrid::DisplayMode>( mFrameDivisionsRightComboBox->itemData( index ).toInt() ) );
820}
821
822void QgsLayoutMapGridWidget::mFrameDivisionsTopComboBox_currentIndexChanged( int index )
823{
824 handleChangedFrameDisplay( QgsLayoutItemMapGrid::Top, static_cast<QgsLayoutItemMapGrid::DisplayMode>( mFrameDivisionsTopComboBox->itemData( index ).toInt() ) );
825}
826
827void QgsLayoutMapGridWidget::mFrameDivisionsBottomComboBox_currentIndexChanged( int index )
828{
829 handleChangedFrameDisplay( QgsLayoutItemMapGrid::Bottom, static_cast<QgsLayoutItemMapGrid::DisplayMode>( mFrameDivisionsBottomComboBox->itemData( index ).toInt() ) );
830}
831
832void QgsLayoutMapGridWidget::mGridFramePenSizeSpinBox_valueChanged( double d )
833{
834 if ( !mMapGrid || !mMap )
835 {
836 return;
837 }
838
839 mMap->beginCommand( tr( "Change Frame Thickness" ) );
840 mMapGrid->setFramePenSize( d );
841 mMap->updateBoundingRect();
842 mMap->update();
843 mMap->endCommand();
844}
845
846void QgsLayoutMapGridWidget::mGridFramePenColorButton_colorChanged( const QColor &newColor )
847{
848 if ( !mMapGrid || !mMap )
849 {
850 return;
851 }
852
853 mMap->beginCommand( tr( "Change Frame Color" ), QgsLayoutItem::UndoGridFramePenColor );
854 mMapGrid->setFramePenColor( newColor );
855 mMap->update();
856 mMap->endCommand();
857}
858
859void QgsLayoutMapGridWidget::mGridFrameFill1ColorButton_colorChanged( const QColor &newColor )
860{
861 if ( !mMapGrid || !mMap )
862 {
863 return;
864 }
865
866 mMap->beginCommand( tr( "Change Frame Fill Color" ), QgsLayoutItem::UndoMapGridFrameFill1Color );
867 mMapGrid->setFrameFillColor1( newColor );
868 mMap->update();
869 mMap->endCommand();
870}
871
872void QgsLayoutMapGridWidget::mGridFrameFill2ColorButton_colorChanged( const QColor &newColor )
873{
874 if ( !mMapGrid || !mMap )
875 {
876 return;
877 }
878
879 mMap->beginCommand( tr( "Change Frame Fill Color" ), QgsLayoutItem::UndoMapGridFrameFill2Color );
880 mMapGrid->setFrameFillColor2( newColor );
881 mMap->update();
882 mMap->endCommand();
883}
884
885void QgsLayoutMapGridWidget::mFrameStyleComboBox_currentIndexChanged( int )
886{
887 if ( !mMapGrid || !mMap )
888 {
889 return;
890 }
891
892 const QgsLayoutItemMapGrid::FrameStyle style = static_cast<QgsLayoutItemMapGrid::FrameStyle>( mFrameStyleComboBox->currentData().toInt() );
893 mMap->beginCommand( tr( "Change Frame Style" ) );
894 mMapGrid->setFrameStyle( style );
895 switch ( style )
896 {
899 toggleFrameControls( true, true, true, false );
900 break;
904 toggleFrameControls( true, false, true, true );
905 break;
908 toggleFrameControls( true, false, false, false );
909 break;
911 toggleFrameControls( false, false, false, false );
912 break;
913 }
914 mMap->updateBoundingRect();
915 mMap->update();
916 mMap->endCommand();
917}
918
919void QgsLayoutMapGridWidget::mRotatedTicksGroupBox_toggled( bool state )
920{
921 if ( !mMapGrid || !mMap )
922 {
923 return;
924 }
925
926 mMap->beginCommand( tr( "Change Tick Rotation Enabled" ) );
927 mMapGrid->setRotatedTicksEnabled( state );
928 mMap->update();
929 mMap->endCommand();
930}
931
932void QgsLayoutMapGridWidget::mRotatedTicksLengthModeComboBox_currentIndexChanged( int )
933{
934 if ( !mMapGrid || !mMap )
935 {
936 return;
937 }
938
939 const QgsLayoutItemMapGrid::TickLengthMode mode = static_cast<QgsLayoutItemMapGrid::TickLengthMode>( mRotatedTicksLengthModeComboBox->currentData().toInt() );
940 mMap->beginCommand( tr( "Change Tick Length Mode" ) );
941 mMapGrid->setRotatedTicksLengthMode( mode );
942 mMap->update();
943 mMap->endCommand();
944}
945
946void QgsLayoutMapGridWidget::mRotatedTicksThresholdSpinBox_valueChanged( double val )
947{
948 if ( !mMapGrid || !mMap )
949 {
950 return;
951 }
952
953 mMap->beginCommand( tr( "Change Rotated Ticks Threshold" ) );
954 mMapGrid->setRotatedTicksMinimumAngle( val );
955 mMap->update();
956 mMap->endCommand();
957}
958
959void QgsLayoutMapGridWidget::mRotatedTicksMarginToCornerSpinBox_valueChanged( double val )
960{
961 if ( !mMapGrid || !mMap )
962 {
963 return;
964 }
965
966 mMap->beginCommand( tr( "Change Rotated Ticks Margin to Corner" ) );
967 mMapGrid->setRotatedTicksMarginToCorner( val );
968 mMap->update();
969 mMap->endCommand();
970}
971
972void QgsLayoutMapGridWidget::mRotatedAnnotationsGroupBox_toggled( bool state )
973{
974 if ( !mMapGrid || !mMap )
975 {
976 return;
977 }
978
979 mMap->beginCommand( tr( "Change Annotation Rotation Enabled" ) );
980 mMapGrid->setRotatedAnnotationsEnabled( state );
981 mMap->update();
982 mMap->endCommand();
983}
984
985void QgsLayoutMapGridWidget::mRotatedAnnotationsLengthModeComboBox_currentIndexChanged( int )
986{
987 if ( !mMapGrid || !mMap )
988 {
989 return;
990 }
991
992 const QgsLayoutItemMapGrid::TickLengthMode mode = static_cast<QgsLayoutItemMapGrid::TickLengthMode>( mRotatedAnnotationsLengthModeComboBox->currentData().toInt() );
993 mMap->beginCommand( tr( "Change Annotation Length Mode" ) );
994 mMapGrid->setRotatedAnnotationsLengthMode( mode );
995 mMap->update();
996 mMap->endCommand();
997}
998
999void QgsLayoutMapGridWidget::mRotatedAnnotationsThresholdSpinBox_valueChanged( double val )
1000{
1001 if ( !mMapGrid || !mMap )
1002 {
1003 return;
1004 }
1005
1006 mMap->beginCommand( tr( "Change Rotated Annotations Threshold" ) );
1007 mMapGrid->setRotatedAnnotationsMinimumAngle( val );
1008 mMap->update();
1009 mMap->endCommand();
1010}
1011
1012void QgsLayoutMapGridWidget::mRotatedAnnotationsMarginToCornerSpinBox_valueChanged( double val )
1013{
1014 if ( !mMapGrid || !mMap )
1015 {
1016 return;
1017 }
1018
1019 mMap->beginCommand( tr( "Change Rotated Annotations Margin to Corner" ) );
1020 mMapGrid->setRotatedAnnotationsMarginToCorner( val );
1021 mMap->update();
1022 mMap->endCommand();
1023}
1024
1025void QgsLayoutMapGridWidget::intervalUnitChanged( int )
1026{
1027 if ( !mMapGrid || !mMap )
1028 {
1029 return;
1030 }
1031
1032 const QgsLayoutItemMapGrid::GridUnit unit = static_cast<QgsLayoutItemMapGrid::GridUnit>( mMapGridUnitComboBox->currentData().toInt() );
1033 switch ( unit )
1034 {
1038 mIntervalStackedWidget->setCurrentIndex( 0 );
1039 break;
1040
1042 mIntervalStackedWidget->setCurrentIndex( 1 );
1043 break;
1044 }
1045
1046 mMap->beginCommand( tr( "Change Grid Unit" ) );
1047 mMapGrid->setUnits( unit );
1048 mMap->updateBoundingRect();
1049 mMap->update();
1050 mMap->endCommand();
1051}
1052
1053void QgsLayoutMapGridWidget::minIntervalChanged( double interval )
1054{
1055 mMap->beginCommand( tr( "Change Grid Interval Range" ), QgsLayoutItem::UndoMapGridIntervalRange );
1056 mMapGrid->setMinimumIntervalWidth( interval );
1057 mMap->endCommand();
1058 mMap->updateBoundingRect();
1059 mMap->update();
1060}
1061
1062void QgsLayoutMapGridWidget::maxIntervalChanged( double interval )
1063{
1064 mMap->beginCommand( tr( "Change Grid Interval Range" ), QgsLayoutItem::UndoMapGridIntervalRange );
1065 mMapGrid->setMaximumIntervalWidth( interval );
1066 mMap->endCommand();
1067 mMap->updateBoundingRect();
1068 mMap->update();
1069}
1070
1071void QgsLayoutMapGridWidget::annotationTextFormatChanged()
1072{
1073 if ( !mMapGrid || !mMap )
1074 {
1075 return;
1076 }
1077
1078 mMap->beginCommand( tr( "Change Annotation Font" ) );
1079 mMapGrid->setAnnotationTextFormat( mAnnotationFontButton->textFormat() );
1080 mMap->endCommand();
1081 mMap->updateBoundingRect();
1082 mMap->update();
1083}
1084
1085void QgsLayoutMapGridWidget::onCrsChanged()
1086{
1087 mBlockAnnotationFormatUpdates++;
1088 const QgsLayoutItemMapGrid::AnnotationFormat prevFormat = static_cast<QgsLayoutItemMapGrid::AnnotationFormat>( mAnnotationFormatComboBox->currentData().toInt() );
1089
1090 mAnnotationFormatComboBox->clear();
1091 mAnnotationFormatComboBox->addItem( tr( "Decimal" ), QgsLayoutItemMapGrid::Decimal );
1092 mAnnotationFormatComboBox->addItem( tr( "Decimal with Suffix" ), QgsLayoutItemMapGrid::DecimalWithSuffix );
1093
1094 // only show degree based options for geographic CRSes
1095 const QgsCoordinateReferenceSystem crs = mMapGrid->crs().isValid() ? mMapGrid->crs() : mMap->crs();
1096 switch ( crs.mapUnits() )
1097 {
1146 break;
1147
1150 mAnnotationFormatComboBox->addItem( tr( "Degree, Minute" ), QgsLayoutItemMapGrid::DegreeMinuteNoSuffix );
1151 mAnnotationFormatComboBox->addItem( tr( "Degree, Minute with Suffix" ), QgsLayoutItemMapGrid::DegreeMinute );
1152 mAnnotationFormatComboBox->addItem( tr( "Degree, Minute Aligned" ), QgsLayoutItemMapGrid::DegreeMinutePadded );
1153 mAnnotationFormatComboBox->addItem( tr( "Degree, Minute, Second" ), QgsLayoutItemMapGrid::DegreeMinuteSecondNoSuffix );
1154 mAnnotationFormatComboBox->addItem( tr( "Degree, Minute, Second with Suffix" ), QgsLayoutItemMapGrid::DegreeMinuteSecond );
1155 mAnnotationFormatComboBox->addItem( tr( "Degree, Minute, Second Aligned" ), QgsLayoutItemMapGrid::DegreeMinuteSecondPadded );
1156 break;
1157 }
1158 mAnnotationFormatComboBox->addItem( tr( "Custom" ), QgsLayoutItemMapGrid::CustomFormat );
1159
1160 const int prevIndex = mAnnotationFormatComboBox->findData( prevFormat );
1161 if ( prevIndex >= 0 )
1162 mAnnotationFormatComboBox->setCurrentIndex( prevIndex );
1163 else
1164 mAnnotationFormatComboBox->setCurrentIndex( 0 );
1165 mBlockAnnotationFormatUpdates--;
1166
1167 const QgsLayoutItemMapGrid::AnnotationFormat newFormat = static_cast<QgsLayoutItemMapGrid::AnnotationFormat>( mAnnotationFormatComboBox->currentData().toInt() );
1168 if ( newFormat != prevFormat )
1169 {
1170 mAnnotationFormatComboBox_currentIndexChanged( mAnnotationFormatComboBox->currentIndex() );
1171 }
1172}
1173
1174void QgsLayoutMapGridWidget::mGridBlendComboBox_currentIndexChanged( int index )
1175{
1176 Q_UNUSED( index )
1177 if ( mMapGrid )
1178 {
1179 mMap->beginCommand( tr( "Change Grid Blend Mode" ) );
1180 mMapGrid->setBlendMode( mGridBlendComboBox->blendMode() );
1181 mMap->update();
1182 mMap->endCommand();
1183 }
1184}
1185
1186void QgsLayoutMapGridWidget::mGridTypeComboBox_currentIndexChanged( int )
1187{
1188 if ( !mMapGrid || !mMap )
1189 {
1190 return;
1191 }
1192
1193 mMap->beginCommand( tr( "Change Grid Type" ) );
1194 switch ( static_cast<QgsLayoutItemMapGrid::GridStyle>( mGridTypeComboBox->currentData().toInt() ) )
1195 {
1197 mMapGrid->setStyle( QgsLayoutItemMapGrid::Cross );
1198 mCrossWidthSpinBox->setVisible( true );
1199 mCrossWidthDDBtn->setVisible( true );
1200 mCrossWidthLabel->setVisible( true );
1201 mGridLineStyleButton->setVisible( true );
1202 mLineStyleLabel->setVisible( true );
1203 mGridMarkerStyleButton->setVisible( false );
1204 mMarkerStyleFrame->setVisible( false );
1205 mMarkerStyleFrame->setVisible( false );
1206 mMarkerStyleLabel->setVisible( false );
1207 mGridBlendComboBox->setVisible( true );
1208 mGridBlendLabel->setVisible( true );
1209 break;
1210
1212 mMapGrid->setStyle( QgsLayoutItemMapGrid::Markers );
1213 mCrossWidthSpinBox->setVisible( false );
1214 mCrossWidthDDBtn->setVisible( false );
1215 mCrossWidthLabel->setVisible( false );
1216 mGridLineStyleButton->setVisible( false );
1217 mLineStyleLabel->setVisible( false );
1218 mGridMarkerStyleButton->setVisible( true );
1219 mMarkerStyleFrame->setVisible( true );
1220 mMarkerStyleLabel->setVisible( true );
1221 mGridBlendComboBox->setVisible( true );
1222 mGridBlendLabel->setVisible( true );
1223 break;
1224
1226 mMapGrid->setStyle( QgsLayoutItemMapGrid::Solid );
1227 mCrossWidthSpinBox->setVisible( false );
1228 mCrossWidthDDBtn->setVisible( false );
1229 mCrossWidthLabel->setVisible( false );
1230 mGridLineStyleButton->setVisible( true );
1231 mLineStyleLabel->setVisible( true );
1232 mGridMarkerStyleButton->setVisible( false );
1233 mMarkerStyleFrame->setVisible( false );
1234 mMarkerStyleLabel->setVisible( false );
1235 mGridBlendComboBox->setVisible( true );
1236 mGridBlendLabel->setVisible( true );
1237 break;
1238
1240 mMapGrid->setStyle( QgsLayoutItemMapGrid::FrameAnnotationsOnly );
1241 mCrossWidthSpinBox->setVisible( false );
1242 mCrossWidthDDBtn->setVisible( false );
1243 mCrossWidthLabel->setVisible( false );
1244 mGridLineStyleButton->setVisible( false );
1245 mLineStyleLabel->setVisible( false );
1246 mGridMarkerStyleButton->setVisible( false );
1247 mMarkerStyleFrame->setVisible( false );
1248 mMarkerStyleLabel->setVisible( false );
1249 mGridBlendComboBox->setVisible( false );
1250 mGridBlendLabel->setVisible( false );
1251 break;
1252 }
1253
1254 mMap->updateBoundingRect();
1255 mMap->update();
1256 mMap->endCommand();
1257}
1258
1259void QgsLayoutMapGridWidget::mapGridCrsChanged( const QgsCoordinateReferenceSystem &crs )
1260{
1261 if ( !mMapGrid || !mMap )
1262 {
1263 return;
1264 }
1265
1266 if ( mMapGrid->crs() == crs )
1267 return;
1268
1269 mMap->beginCommand( tr( "Change Grid CRS" ) );
1270 mMapGrid->setCrs( crs );
1271 mMap->updateBoundingRect();
1272 mMap->update();
1273 mMap->endCommand();
1274}
1275
1276void QgsLayoutMapGridWidget::mDrawAnnotationGroupBox_toggled( bool state )
1277{
1278 if ( !mMapGrid || !mMap )
1279 {
1280 return;
1281 }
1282
1283 mMap->beginCommand( tr( "Toggle Annotations" ) );
1284 mMapGrid->setAnnotationEnabled( state );
1285 mMap->updateBoundingRect();
1286 mMap->update();
1287 mMap->endCommand();
1288}
1289
1290void QgsLayoutMapGridWidget::mAnnotationFormatButton_clicked()
1291{
1292 if ( !mMapGrid || !mMap )
1293 {
1294 return;
1295 }
1296
1297 QgsExpressionContext expressionContext = mMapGrid->createExpressionContext();
1298 expressionContext.setHighlightedFunctions( QStringList() << QStringLiteral( "to_dms" ) << QStringLiteral( "to_dm" ) );
1299
1300 QgsExpressionBuilderDialog exprDlg( coverageLayer(), mMapGrid->annotationExpression(), this, QStringLiteral( "generic" ), expressionContext );
1301 exprDlg.setWindowTitle( tr( "Expression Based Annotation" ) );
1302
1303 if ( exprDlg.exec() == QDialog::Accepted )
1304 {
1305 const QString expression = exprDlg.expressionText();
1306 mMap->beginCommand( tr( "Change Annotation Format" ) );
1307 mMapGrid->setAnnotationExpression( expression );
1308 mMap->updateBoundingRect();
1309 mMap->update();
1310 mMap->endCommand();
1311 }
1312}
1313
1314void QgsLayoutMapGridWidget::mAnnotationDisplayLeftComboBox_currentIndexChanged( int )
1315{
1316 handleChangedAnnotationDisplay( QgsLayoutItemMapGrid::Left, static_cast<QgsLayoutItemMapGrid::DisplayMode>( mAnnotationDisplayLeftComboBox->currentData().toInt() ) );
1317}
1318
1319void QgsLayoutMapGridWidget::mAnnotationDisplayRightComboBox_currentIndexChanged( int )
1320{
1321 handleChangedAnnotationDisplay( QgsLayoutItemMapGrid::Right, static_cast<QgsLayoutItemMapGrid::DisplayMode>( mAnnotationDisplayRightComboBox->currentData().toInt() ) );
1322}
1323
1324void QgsLayoutMapGridWidget::mAnnotationDisplayTopComboBox_currentIndexChanged( int )
1325{
1326 handleChangedAnnotationDisplay( QgsLayoutItemMapGrid::Top, static_cast<QgsLayoutItemMapGrid::DisplayMode>( mAnnotationDisplayTopComboBox->currentData().toInt() ) );
1327}
1328
1329void QgsLayoutMapGridWidget::mAnnotationDisplayBottomComboBox_currentIndexChanged( int )
1330{
1331 handleChangedAnnotationDisplay( QgsLayoutItemMapGrid::Bottom, static_cast<QgsLayoutItemMapGrid::DisplayMode>( mAnnotationDisplayBottomComboBox->currentData().toInt() ) );
1332}
1333
1334void QgsLayoutMapGridWidget::mAnnotationPositionLeftComboBox_currentIndexChanged( int )
1335{
1336 handleChangedAnnotationPosition( QgsLayoutItemMapGrid::Left, static_cast<QgsLayoutItemMapGrid::AnnotationPosition>( mAnnotationPositionLeftComboBox->currentData().toInt() ) );
1337}
1338
1339void QgsLayoutMapGridWidget::mAnnotationPositionRightComboBox_currentIndexChanged( int )
1340{
1341 handleChangedAnnotationPosition( QgsLayoutItemMapGrid::Right, static_cast<QgsLayoutItemMapGrid::AnnotationPosition>( mAnnotationPositionRightComboBox->currentData().toInt() ) );
1342}
1343
1344void QgsLayoutMapGridWidget::mAnnotationPositionTopComboBox_currentIndexChanged( int )
1345{
1346 handleChangedAnnotationPosition( QgsLayoutItemMapGrid::Top, static_cast<QgsLayoutItemMapGrid::AnnotationPosition>( mAnnotationPositionTopComboBox->currentData().toInt() ) );
1347}
1348
1349void QgsLayoutMapGridWidget::mAnnotationPositionBottomComboBox_currentIndexChanged( int )
1350{
1351 handleChangedAnnotationPosition( QgsLayoutItemMapGrid::Bottom, static_cast<QgsLayoutItemMapGrid::AnnotationPosition>( mAnnotationPositionBottomComboBox->currentData().toInt() ) );
1352}
1353
1354void QgsLayoutMapGridWidget::mAnnotationDirectionComboBoxLeft_currentIndexChanged( int index )
1355{
1356 handleChangedAnnotationDirection( QgsLayoutItemMapGrid::Left, static_cast<QgsLayoutItemMapGrid::AnnotationDirection>( mAnnotationDirectionComboBoxLeft->itemData( index ).toInt() ) );
1357}
1358
1359void QgsLayoutMapGridWidget::mAnnotationDirectionComboBoxRight_currentIndexChanged( int index )
1360{
1361 handleChangedAnnotationDirection( QgsLayoutItemMapGrid::Right, static_cast<QgsLayoutItemMapGrid::AnnotationDirection>( mAnnotationDirectionComboBoxRight->itemData( index ).toInt() ) );
1362}
1363
1364void QgsLayoutMapGridWidget::mAnnotationDirectionComboBoxTop_currentIndexChanged( int index )
1365{
1366 handleChangedAnnotationDirection( QgsLayoutItemMapGrid::Top, static_cast<QgsLayoutItemMapGrid::AnnotationDirection>( mAnnotationDirectionComboBoxTop->itemData( index ).toInt() ) );
1367}
1368
1369void QgsLayoutMapGridWidget::mAnnotationDirectionComboBoxBottom_currentIndexChanged( int index )
1370{
1371 handleChangedAnnotationDirection( QgsLayoutItemMapGrid::Bottom, static_cast<QgsLayoutItemMapGrid::AnnotationDirection>( mAnnotationDirectionComboBoxBottom->itemData( index ).toInt() ) );
1372}
1373
1374void QgsLayoutMapGridWidget::mDistanceToMapFrameSpinBox_valueChanged( double d )
1375{
1376 if ( !mMapGrid || !mMap )
1377 {
1378 return;
1379 }
1380
1381 mMap->beginCommand( tr( "Change Annotation Distance" ), QgsLayoutItem::UndoMapAnnotationDistance );
1382 mMapGrid->setAnnotationFrameDistance( d );
1383 mMap->updateBoundingRect();
1384 mMap->update();
1385 mMap->endCommand();
1386}
1387
1388void QgsLayoutMapGridWidget::lineSymbolChanged()
1389{
1390 if ( !mMapGrid || !mMap )
1391 {
1392 return;
1393 }
1394
1395 mMap->beginCommand( tr( "Change Grid Line Style" ), QgsLayoutItem::UndoMapGridLineSymbol );
1396 mMapGrid->setLineSymbol( mGridLineStyleButton->clonedSymbol<QgsLineSymbol>() );
1397 mMap->endCommand();
1398 mMap->update();
1399}
1400
1401void QgsLayoutMapGridWidget::markerSymbolChanged()
1402{
1403 if ( !mMapGrid || !mMap )
1404 {
1405 return;
1406 }
1407
1408 mMap->beginCommand( tr( "Change Grid Marker Style" ), QgsLayoutItem::UndoMapGridMarkerSymbol );
1409 mMapGrid->setMarkerSymbol( mGridMarkerStyleButton->clonedSymbol<QgsMarkerSymbol>() );
1410 mMap->endCommand();
1411 mMap->update();
1412}
1413
1414void QgsLayoutMapGridWidget::gridEnabledToggled( bool active )
1415{
1416 if ( !mMapGrid || !mMap )
1417 {
1418 return;
1419 }
1420
1421 mMap->beginCommand( tr( "Toggle Grid Display" ) );
1422 mMapGrid->setEnabled( active );
1423 mMap->endCommand();
1424 mMap->updateBoundingRect();
1425 mMap->update();
1426}
1427
1428void QgsLayoutMapGridWidget::mAnnotationFormatComboBox_currentIndexChanged( int index )
1429{
1430 if ( !mMapGrid || !mMap )
1431 {
1432 return;
1433 }
1434 if ( mBlockAnnotationFormatUpdates )
1435 return;
1436
1437 mMap->beginCommand( tr( "Change Annotation Format" ) );
1438
1439 mMapGrid->setAnnotationFormat( static_cast<QgsLayoutItemMapGrid::AnnotationFormat>( mAnnotationFormatComboBox->itemData( index ).toInt() ) );
1440 mAnnotationFormatButton->setEnabled( mMapGrid->annotationFormat() == QgsLayoutItemMapGrid::CustomFormat );
1441
1442 mMap->updateBoundingRect();
1443 mMap->update();
1444 mMap->endCommand();
1445}
1446
1447void QgsLayoutMapGridWidget::mCoordinatePrecisionSpinBox_valueChanged( int value )
1448{
1449 if ( !mMapGrid || !mMap )
1450 {
1451 return;
1452 }
1453 mMap->beginCommand( tr( "Change Annotation Precision" ) );
1454 mMapGrid->setAnnotationPrecision( value );
1455 mMap->updateBoundingRect();
1456 mMap->update();
1457 mMap->endCommand();
1458}
@ YardsBritishSears1922Truncated
British yards (Sears 1922 truncated).
Definition qgis.h:5053
@ Feet
Imperial feet.
Definition qgis.h:5016
@ MilesUSSurvey
US Survey miles.
Definition qgis.h:5060
@ LinksBritishSears1922
British links (Sears 1922).
Definition qgis.h:5048
@ YardsBritishBenoit1895A
British yards (Benoit 1895 A).
Definition qgis.h:5051
@ LinksBritishBenoit1895A
British links (Benoit 1895 A).
Definition qgis.h:5045
@ Centimeters
Centimeters.
Definition qgis.h:5021
@ YardsIndian1975
Indian yards (1975).
Definition qgis.h:5059
@ FeetUSSurvey
US Survey feet.
Definition qgis.h:5043
@ Millimeters
Millimeters.
Definition qgis.h:5022
@ FeetBritishSears1922
British feet (Sears 1922).
Definition qgis.h:5036
@ YardsClarkes
Clarke's yards.
Definition qgis.h:5055
@ YardsIndian
Indian yards.
Definition qgis.h:5056
@ FeetBritishBenoit1895B
British feet (Benoit 1895 B).
Definition qgis.h:5034
@ Miles
Terrestrial miles.
Definition qgis.h:5019
@ LinksUSSurvey
US Survey links.
Definition qgis.h:5050
@ Meters
Meters.
Definition qgis.h:5014
@ ChainsUSSurvey
US Survey chains.
Definition qgis.h:5030
@ FeetClarkes
Clarke's feet.
Definition qgis.h:5037
@ Unknown
Unknown distance unit.
Definition qgis.h:5063
@ Yards
Imperial yards.
Definition qgis.h:5018
@ FeetBritish1936
British feet (1936).
Definition qgis.h:5032
@ FeetIndian1962
Indian feet (1962).
Definition qgis.h:5041
@ YardsBritishSears1922
British yards (Sears 1922).
Definition qgis.h:5054
@ FeetIndian1937
Indian feet (1937).
Definition qgis.h:5040
@ YardsIndian1937
Indian yards (1937).
Definition qgis.h:5057
@ Degrees
Degrees, for planar geographic CRS distance measurements.
Definition qgis.h:5020
@ ChainsBritishBenoit1895B
British chains (Benoit 1895 B).
Definition qgis.h:5026
@ LinksBritishSears1922Truncated
British links (Sears 1922 truncated).
Definition qgis.h:5047
@ ChainsBritishBenoit1895A
British chains (Benoit 1895 A).
Definition qgis.h:5025
@ YardsBritishBenoit1895B
British yards (Benoit 1895 B).
Definition qgis.h:5052
@ FeetBritish1865
British feet (1865).
Definition qgis.h:5031
@ YardsIndian1962
Indian yards (1962).
Definition qgis.h:5058
@ FeetBritishSears1922Truncated
British feet (Sears 1922 truncated).
Definition qgis.h:5035
@ MetersGermanLegal
German legal meter.
Definition qgis.h:5062
@ LinksBritishBenoit1895B
British links (Benoit 1895 B).
Definition qgis.h:5046
@ ChainsInternational
International chains.
Definition qgis.h:5024
@ Inches
Inches.
Definition qgis.h:5023
@ Fathoms
Fathoms.
Definition qgis.h:5061
@ LinksInternational
International links.
Definition qgis.h:5044
@ ChainsBritishSears1922Truncated
British chains (Sears 1922 truncated).
Definition qgis.h:5027
@ FeetIndian
Indian (geodetic) feet.
Definition qgis.h:5039
@ NauticalMiles
Nautical miles.
Definition qgis.h:5017
@ ChainsClarkes
Clarke's chains.
Definition qgis.h:5029
@ LinksClarkes
Clarke's links.
Definition qgis.h:5049
@ ChainsBritishSears1922
British chains (Sears 1922).
Definition qgis.h:5028
@ Kilometers
Kilometers.
Definition qgis.h:5015
@ FeetIndian1975
Indian feet (1975).
Definition qgis.h:5042
@ FeetGoldCoast
Gold Coast feet.
Definition qgis.h:5038
@ FeetBritishBenoit1895A
British feet (Benoit 1895 A).
Definition qgis.h:5033
@ Marker
Marker symbol.
Definition qgis.h:611
@ Line
Line symbol.
Definition qgis.h:612
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.
GridStyle
Grid drawing style.
@ Markers
Draw markers at intersections of grid lines.
@ Cross
Draw line crosses at intersections of grid lines.
@ FrameAnnotationsOnly
No grid lines over the map, only draw frame and annotations.
GridUnit
Unit for grid values.
@ CM
Grid units in centimeters.
@ MM
Grid units in millimeters.
@ DynamicPageSizeBased
Dynamically sized, based on a on-page size range.
@ MapUnit
Grid units follow map units.
@ FrameBottom
Bottom side of map.
@ FrameLeft
Left side of map.
@ FrameRight
Right side of map.
AnnotationPosition
Position for grid annotations.
@ InsideMapFrame
Draw annotations inside the map frame.
@ OutsideMapFrame
Draw annotations outside the map frame.
DisplayMode
Display settings for grid annotations and frames.
@ LongitudeOnly
Show longitude/x annotations/divisions only.
@ ShowAll
Show both latitude and longitude annotations/divisions.
@ LatitudeOnly
Show latitude/y annotations/divisions only.
void crsChanged()
Emitted whenever the grid's CRS is changed.
TickLengthMode
Tick length mode (useful for rotated grids).
@ OrthogonalTicks
Align ticks orthogonaly.
@ NormalizedTicks
Constant tick lengths.
AnnotationFormat
Format for displaying grid annotations.
@ DegreeMinuteSecondNoSuffix
Degree/minutes/seconds, use - for S/W coordinates.
@ DegreeMinuteSecondPadded
Degree/minutes/seconds, with minutes using leading zeros where required.
@ DegreeMinuteSecond
Degree/minutes/seconds, use NSEW suffix.
@ DecimalWithSuffix
Decimal degrees, use NSEW suffix.
@ DegreeMinute
Degree/minutes, use NSEW suffix.
@ DegreeMinuteNoSuffix
Degree/minutes, use - for S/W coordinates.
@ Decimal
Decimal degrees, use - for S/W coordinates.
@ DegreeMinutePadded
Degree/minutes, with minutes using leading zeros where required.
@ CustomFormat
Custom expression-based format.
AnnotationDirection
Direction of grid annotations.
@ OnTick
Draw annotations parallel to tick (on the line).
@ Horizontal
Draw annotations horizontally.
@ Vertical
Draw annotations vertically, ascending.
@ BoundaryDirection
Annotations follow the boundary direction.
@ AboveTick
Draw annotations parallel to tick (above the line).
@ UnderTick
Draw annotations parallel to tick (under the line).
@ VerticalDescending
Draw annotations vertically, descending.
FrameStyle
Style for grid frame.
@ Zebra
Black/white pattern.
@ InteriorTicks
Tick markers drawn inside map frame.
@ LineBorder
Simple solid line frame.
@ InteriorExteriorTicks
Tick markers drawn both inside and outside the map frame.
@ LineBorderNautical
Simple solid line frame, with nautical style diagonals on corners.
@ ExteriorTicks
Tick markers drawn outside map frame.
@ NoFrame
Disable grid frame.
@ ZebraNautical
Black/white pattern, with nautical style diagonals on corners.
BorderSide
Border sides for annotations.
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:6511