Skip to content

Commit 11258c0

Browse files
committed
[FEATURE][layouts] Don't draw diagonals on line border grid style when a
margin is set Instead, split this behaviour off into a new "Line border (Nautical)" grid style. It's a very specific type of effect and won't always be desirable when using margins with the line border style.
1 parent 3838ef3 commit 11258c0

File tree

6 files changed

+67
-87
lines changed

6 files changed

+67
-87
lines changed

python/core/auto_generated/layout/qgslayoutitemmapgrid.sip.in

+2-1
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,8 @@ An individual grid which is drawn above the map content in a
202202
InteriorTicks,
203203
ExteriorTicks,
204204
InteriorExteriorTicks,
205-
LineBorder
205+
LineBorder,
206+
LineBorderNautical
206207
};
207208

208209
enum FrameSideFlag

src/app/layout/qgslayoutmapgridwidget.cpp

+34-41
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,25 @@ QgsLayoutMapGridWidget::QgsLayoutMapGridWidget( QgsLayoutItemMapGrid *mapGrid, Q
3434
, mMapGrid( mapGrid )
3535
{
3636
setupUi( this );
37+
38+
mFrameStyleComboBox->addItem( tr( "No Frame" ), QgsLayoutItemMapGrid::NoFrame );
39+
mFrameStyleComboBox->addItem( tr( "Zebra" ), QgsLayoutItemMapGrid::Zebra );
40+
mFrameStyleComboBox->addItem( tr( "Interior Ticks" ), QgsLayoutItemMapGrid::InteriorTicks );
41+
mFrameStyleComboBox->addItem( tr( "Exterior Ticks" ), QgsLayoutItemMapGrid::ExteriorTicks );
42+
mFrameStyleComboBox->addItem( tr( "Interior and Exterior Ticks" ), QgsLayoutItemMapGrid::InteriorExteriorTicks );
43+
mFrameStyleComboBox->addItem( tr( "Line Border" ), QgsLayoutItemMapGrid::LineBorder );
44+
mFrameStyleComboBox->addItem( tr( "Line Border (Nautical)" ), QgsLayoutItemMapGrid::LineBorderNautical );
45+
46+
mGridFrameMarginSpinBox->setClearValue( 0 );
47+
3748
connect( mIntervalXSpinBox, &QgsDoubleSpinBox::editingFinished, this, &QgsLayoutMapGridWidget::mIntervalXSpinBox_editingFinished );
3849
connect( mIntervalYSpinBox, &QgsDoubleSpinBox::editingFinished, this, &QgsLayoutMapGridWidget::mIntervalYSpinBox_editingFinished );
3950
connect( mOffsetXSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mOffsetXSpinBox_valueChanged );
4051
connect( mOffsetYSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mOffsetYSpinBox_valueChanged );
4152
connect( mCrossWidthSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mCrossWidthSpinBox_valueChanged );
4253
connect( mFrameWidthSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mFrameWidthSpinBox_valueChanged );
4354
connect( mGridFrameMarginSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mGridFrameMarginSpinBox_valueChanged );
44-
connect( mFrameStyleComboBox, static_cast<void ( QComboBox::* )( const QString & )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mFrameStyleComboBox_currentIndexChanged );
55+
connect( mFrameStyleComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mFrameStyleComboBox_currentIndexChanged );
4556
connect( mGridFramePenSizeSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mGridFramePenSizeSpinBox_valueChanged );
4657
connect( mGridFramePenColorButton, &QgsColorButton::colorChanged, this, &QgsLayoutMapGridWidget::mGridFramePenColorButton_colorChanged );
4758
connect( mGridFrameFill1ColorButton, &QgsColorButton::colorChanged, this, &QgsLayoutMapGridWidget::mGridFrameFill1ColorButton_colorChanged );
@@ -522,30 +533,22 @@ void QgsLayoutMapGridWidget::setGridItems()
522533
mFrameWidthSpinBox->setValue( mMapGrid->frameWidth() );
523534
mGridFrameMarginSpinBox->setValue( mMapGrid->gridFrameMargin() );
524535
QgsLayoutItemMapGrid::FrameStyle gridFrameStyle = mMapGrid->frameStyle();
536+
mFrameStyleComboBox->setCurrentIndex( mFrameStyleComboBox->findData( gridFrameStyle ) );
525537
switch ( gridFrameStyle )
526538
{
527539
case QgsLayoutItemMapGrid::Zebra:
528-
mFrameStyleComboBox->setCurrentIndex( 1 );
529540
toggleFrameControls( true, true, true );
530541
break;
531542
case QgsLayoutItemMapGrid::InteriorTicks:
532-
mFrameStyleComboBox->setCurrentIndex( 2 );
533-
toggleFrameControls( true, false, true );
534-
break;
535543
case QgsLayoutItemMapGrid::ExteriorTicks:
536-
mFrameStyleComboBox->setCurrentIndex( 3 );
537-
toggleFrameControls( true, false, true );
538-
break;
539544
case QgsLayoutItemMapGrid::InteriorExteriorTicks:
540-
mFrameStyleComboBox->setCurrentIndex( 4 );
541545
toggleFrameControls( true, false, true );
542546
break;
543547
case QgsLayoutItemMapGrid::LineBorder:
544-
mFrameStyleComboBox->setCurrentIndex( 5 );
548+
case QgsLayoutItemMapGrid::LineBorderNautical:
545549
toggleFrameControls( true, false, false );
546550
break;
547-
default:
548-
mFrameStyleComboBox->setCurrentIndex( 0 );
551+
case QgsLayoutItemMapGrid::NoFrame:
549552
toggleFrameControls( false, false, false );
550553
break;
551554
}
@@ -838,43 +841,33 @@ void QgsLayoutMapGridWidget::mGridFrameFill2ColorButton_colorChanged( const QCol
838841
mMap->endCommand();
839842
}
840843

841-
void QgsLayoutMapGridWidget::mFrameStyleComboBox_currentIndexChanged( const QString &text )
844+
void QgsLayoutMapGridWidget::mFrameStyleComboBox_currentIndexChanged( int )
842845
{
843846
if ( !mMapGrid || !mMap )
844847
{
845848
return;
846849
}
847850

851+
QgsLayoutItemMapGrid::FrameStyle style = static_cast< QgsLayoutItemMapGrid::FrameStyle >( mFrameStyleComboBox->currentData().toInt() );
848852
mMap->beginCommand( tr( "Change Frame Style" ) );
849-
if ( text == tr( "Zebra" ) )
850-
{
851-
mMapGrid->setFrameStyle( QgsLayoutItemMapGrid::Zebra );
852-
toggleFrameControls( true, true, true );
853-
}
854-
else if ( text == tr( "Interior ticks" ) )
855-
{
856-
mMapGrid->setFrameStyle( QgsLayoutItemMapGrid::InteriorTicks );
857-
toggleFrameControls( true, false, true );
858-
}
859-
else if ( text == tr( "Exterior ticks" ) )
860-
{
861-
mMapGrid->setFrameStyle( QgsLayoutItemMapGrid::ExteriorTicks );
862-
toggleFrameControls( true, false, true );
863-
}
864-
else if ( text == tr( "Interior and exterior ticks" ) )
865-
{
866-
mMapGrid->setFrameStyle( QgsLayoutItemMapGrid::InteriorExteriorTicks );
867-
toggleFrameControls( true, false, true );
868-
}
869-
else if ( text == tr( "Line border" ) )
853+
mMapGrid->setFrameStyle( style );
854+
switch ( style )
870855
{
871-
mMapGrid->setFrameStyle( QgsLayoutItemMapGrid::LineBorder );
872-
toggleFrameControls( true, false, false );
873-
}
874-
else //no frame
875-
{
876-
mMapGrid->setFrameStyle( QgsLayoutItemMapGrid::NoFrame );
877-
toggleFrameControls( false, false, false );
856+
case QgsLayoutItemMapGrid::Zebra:
857+
toggleFrameControls( true, true, true );
858+
break;
859+
case QgsLayoutItemMapGrid::InteriorTicks:
860+
case QgsLayoutItemMapGrid::ExteriorTicks:
861+
case QgsLayoutItemMapGrid::InteriorExteriorTicks:
862+
toggleFrameControls( true, false, true );
863+
break;
864+
case QgsLayoutItemMapGrid::LineBorder:
865+
case QgsLayoutItemMapGrid::LineBorderNautical:
866+
toggleFrameControls( true, false, false );
867+
break;
868+
case QgsLayoutItemMapGrid::NoFrame:
869+
toggleFrameControls( false, false, false );
870+
break;
878871
}
879872
mMap->updateBoundingRect();
880873
mMap->update();

src/app/layout/qgslayoutmapgridwidget.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class QgsLayoutMapGridWidget: public QgsLayoutItemBaseWidget, private Ui::QgsLay
4343
void mCrossWidthSpinBox_valueChanged( double val );
4444
void mFrameWidthSpinBox_valueChanged( double val );
4545
void mGridFrameMarginSpinBox_valueChanged( double val );
46-
void mFrameStyleComboBox_currentIndexChanged( const QString &text );
46+
void mFrameStyleComboBox_currentIndexChanged( int );
4747
void mGridFramePenSizeSpinBox_valueChanged( double d );
4848
void mGridFramePenColorButton_colorChanged( const QColor &newColor );
4949
void mGridFrameFill1ColorButton_colorChanged( const QColor &newColor );

src/core/layout/qgslayoutitemmapgrid.cpp

+22-10
Original file line numberDiff line numberDiff line change
@@ -784,6 +784,7 @@ void QgsLayoutItemMapGrid::drawGridFrameBorder( QPainter *p, const QMap< double,
784784
break;
785785

786786
case QgsLayoutItemMapGrid::LineBorder:
787+
case QgsLayoutItemMapGrid::LineBorderNautical:
787788
drawGridFrameLineBorder( p, border, extension );
788789
break;
789790

@@ -972,12 +973,14 @@ void QgsLayoutItemMapGrid::drawGridFrameLineBorder( QPainter *p, QgsLayoutItemMa
972973
p->setBrush( Qt::NoBrush );
973974
p->setPen( framePen );
974975

976+
const bool drawDiagonals = mGridFrameStyle == LineBorderNautical && !qgsDoubleNear( mGridFrameMargin, 0.0 );
977+
975978
switch ( border )
976979
{
977980
case QgsLayoutItemMapGrid::Left:
978981
p->drawLine( QLineF( 0 - mGridFrameMargin, 0 - mGridFrameMargin, 0 - mGridFrameMargin, mMap->rect().height() + mGridFrameMargin ) );
979982
//corner left-top
980-
if ( !qgsDoubleNear( mGridFrameMargin, 0.0 ) )
983+
if ( drawDiagonals )
981984
{
982985
const double X1 = 0 - mGridFrameMargin + mGridFramePenThickness / 2.0;
983986
const double Y1 = 0 - mGridFrameMargin + mGridFramePenThickness / 2.0;
@@ -987,7 +990,7 @@ void QgsLayoutItemMapGrid::drawGridFrameLineBorder( QPainter *p, QgsLayoutItemMa
987990
case QgsLayoutItemMapGrid::Right:
988991
p->drawLine( QLineF( mMap->rect().width() + mGridFrameMargin, 0 - mGridFrameMargin, mMap->rect().width() + mGridFrameMargin, mMap->rect().height() + mGridFrameMargin ) );
989992
//corner right-bottom
990-
if ( !qgsDoubleNear( mGridFrameMargin, 0.0 ) )
993+
if ( drawDiagonals )
991994
{
992995
const double X1 = mMap->rect().width() + mGridFrameMargin - mGridFramePenThickness / 2.0 ;
993996
const double Y1 = mMap->rect().height() + mGridFrameMargin - mGridFramePenThickness / 2.0 ;
@@ -997,7 +1000,7 @@ void QgsLayoutItemMapGrid::drawGridFrameLineBorder( QPainter *p, QgsLayoutItemMa
9971000
case QgsLayoutItemMapGrid::Top:
9981001
p->drawLine( QLineF( 0 - mGridFrameMargin, 0 - mGridFrameMargin, mMap->rect().width() + mGridFrameMargin, 0 - mGridFrameMargin ) );
9991002
//corner right-top
1000-
if ( !qgsDoubleNear( mGridFrameMargin, 0.0 ) )
1003+
if ( drawDiagonals )
10011004
{
10021005
const double X1 = mMap->rect().width() + mGridFrameMargin - mGridFramePenThickness / 2.0 ;
10031006
const double Y1 = 0 - mGridFrameMargin + mGridFramePenThickness / 2.0 ;
@@ -1007,7 +1010,7 @@ void QgsLayoutItemMapGrid::drawGridFrameLineBorder( QPainter *p, QgsLayoutItemMa
10071010
case QgsLayoutItemMapGrid::Bottom:
10081011
p->drawLine( QLineF( 0 - mGridFrameMargin, mMap->rect().height() + mGridFrameMargin, mMap->rect().width() + mGridFrameMargin, mMap->rect().height() + mGridFrameMargin ) );
10091012
//corner left-bottom
1010-
if ( !qgsDoubleNear( mGridFrameMargin, 0.0 ) )
1013+
if ( drawDiagonals )
10111014
{
10121015
const double X1 = 0 - mGridFrameMargin + mGridFramePenThickness / 2.0 ;
10131016
const double Y1 = mMap->rect().height() + mGridFrameMargin - mGridFramePenThickness / 2.0 ;
@@ -1055,13 +1058,22 @@ void QgsLayoutItemMapGrid::drawCoordinateAnnotation( QPainter *p, QPointF pos, c
10551058
int rotation = 0;
10561059

10571060
double gridFrameDistance = 0;
1058-
if ( mGridFrameStyle != QgsLayoutItemMapGrid::NoFrame && mGridFrameStyle != QgsLayoutItemMapGrid::LineBorder )
1059-
{
1060-
gridFrameDistance = mGridFrameWidth;
1061-
}
1062-
if ( mGridFrameStyle == QgsLayoutItemMapGrid::Zebra || mGridFrameStyle == QgsLayoutItemMapGrid::LineBorder )
1061+
switch ( mGridFrameStyle )
10631062
{
1064-
gridFrameDistance += ( mGridFramePenThickness / 2.0 );
1063+
case InteriorTicks:
1064+
case ExteriorTicks:
1065+
case InteriorExteriorTicks:
1066+
gridFrameDistance = mGridFrameWidth;
1067+
break;
1068+
1069+
case QgsLayoutItemMapGrid::Zebra:
1070+
case QgsLayoutItemMapGrid::LineBorder:
1071+
case QgsLayoutItemMapGrid::LineBorderNautical:
1072+
gridFrameDistance += ( mGridFramePenThickness / 2.0 );
1073+
break;
1074+
1075+
case QgsLayoutItemMapGrid::NoFrame:
1076+
break;
10651077
}
10661078

10671079
if ( frameBorder == QgsLayoutItemMapGrid::Left )

src/core/layout/qgslayoutitemmapgrid.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,8 @@ class CORE_EXPORT QgsLayoutItemMapGrid : public QgsLayoutItemMapItem
232232
InteriorTicks, //!< Tick markers drawn inside map frame
233233
ExteriorTicks, //!< Tick markers drawn outside map frame
234234
InteriorExteriorTicks, //!< Tick markers drawn both inside and outside the map frame
235-
LineBorder //!< Simple solid line frame
235+
LineBorder, //!< Simple solid line frame
236+
LineBorderNautical //!< Simple solid line frame, with nautical style diagonals on corners
236237
};
237238

238239
/**

src/ui/layout/qgslayoutmapgridwidgetbase.ui

+6-33
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
<x>0</x>
5050
<y>0</y>
5151
<width>389</width>
52-
<height>1417</height>
52+
<height>1452</height>
5353
</rect>
5454
</property>
5555
<property name="sizePolicy">
@@ -444,38 +444,7 @@
444444
</layout>
445445
</item>
446446
<item row="0" column="1" colspan="2">
447-
<widget class="QComboBox" name="mFrameStyleComboBox">
448-
<item>
449-
<property name="text">
450-
<string>No frame</string>
451-
</property>
452-
</item>
453-
<item>
454-
<property name="text">
455-
<string>Zebra</string>
456-
</property>
457-
</item>
458-
<item>
459-
<property name="text">
460-
<string>Interior ticks</string>
461-
</property>
462-
</item>
463-
<item>
464-
<property name="text">
465-
<string>Exterior ticks</string>
466-
</property>
467-
</item>
468-
<item>
469-
<property name="text">
470-
<string>Interior and exterior ticks</string>
471-
</property>
472-
</item>
473-
<item>
474-
<property name="text">
475-
<string>Line border</string>
476-
</property>
477-
</item>
478-
</widget>
447+
<widget class="QComboBox" name="mFrameStyleComboBox"/>
479448
</item>
480449
<item row="1" column="1" colspan="2">
481450
<widget class="QgsDoubleSpinBox" name="mFrameWidthSpinBox">
@@ -893,6 +862,10 @@
893862
<include location="../../../images/images.qrc"/>
894863
<include location="../../../images/images.qrc"/>
895864
<include location="../../../images/images.qrc"/>
865+
<include location="../../../images/images.qrc"/>
866+
<include location="../../../images/images.qrc"/>
867+
<include location="../../../images/images.qrc"/>
868+
<include location="../../../images/images.qrc"/>
896869
</resources>
897870
<connections/>
898871
</ui>

0 commit comments

Comments
 (0)