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