Skip to content

Commit 8650597

Browse files
committed
[FEATURE][composer] Add marker style for map grids (fix #9381)
1 parent a44e48c commit 8650597

File tree

8 files changed

+395
-221
lines changed

8 files changed

+395
-221
lines changed

src/app/composer/qgscomposermapwidget.cpp

+92-27
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ QgsComposerMapWidget::QgsComposerMapWidget( QgsComposerMap* composerMap ): QgsCo
6161

6262
mGridTypeComboBox->insertItem( 0, tr( "Solid" ) );
6363
mGridTypeComboBox->insertItem( 1, tr( "Cross" ) );
64+
mGridTypeComboBox->insertItem( 2, tr( "Markers" ) );
6465

6566
mAnnotationFormatComboBox->insertItem( 0, tr( "Decimal" ) );
6667
mAnnotationFormatComboBox->insertItem( 1, tr( "DegreeMinute" ) );
@@ -1006,15 +1007,6 @@ void QgsComposerMapWidget::updateOverviewSymbolMarker()
10061007
}
10071008
}
10081009

1009-
void QgsComposerMapWidget::updateLineSymbolMarker()
1010-
{
1011-
if ( mComposerMap )
1012-
{
1013-
QIcon icon = QgsSymbolLayerV2Utils::symbolPreviewIcon( mComposerMap->gridLineSymbol(), mGridLineStyleButton->iconSize() );
1014-
mGridLineStyleButton->setIcon( icon );
1015-
}
1016-
}
1017-
10181010
void QgsComposerMapWidget::refreshMapComboBox()
10191011
{
10201012
if ( !mComposerMap )
@@ -1287,17 +1279,35 @@ void QgsComposerMapWidget::setGridItems( const QgsComposerMapGrid* grid )
12871279
mGridFrameFill2ColorButton->setColor( grid->gridFrameFillColor2() );
12881280

12891281
QgsComposerMap::GridStyle gridStyle = grid->gridStyle();
1290-
if ( gridStyle == QgsComposerMap::Cross )
1291-
{
1292-
mGridTypeComboBox->setCurrentIndex( mGridTypeComboBox->findText( tr( "Cross" ) ) );
1293-
mCrossWidthSpinBox->setEnabled( true );
1294-
mCrossWidthLabel->setEnabled( true );
1295-
}
1296-
else
1297-
{
1298-
mGridTypeComboBox->setCurrentIndex( mGridTypeComboBox->findText( tr( "Solid" ) ) );
1299-
mCrossWidthSpinBox->setEnabled( false );
1300-
mCrossWidthLabel->setEnabled( false );
1282+
switch ( gridStyle )
1283+
{
1284+
case QgsComposerMap::Cross:
1285+
mGridTypeComboBox->setCurrentIndex( mGridTypeComboBox->findText( tr( "Cross" ) ) );
1286+
mCrossWidthSpinBox->setVisible( true );
1287+
mCrossWidthLabel->setVisible( true );
1288+
mGridLineStyleButton->setVisible( true );
1289+
mLineStyleLabel->setVisible( true );
1290+
mGridMarkerStyleButton->setVisible( false );
1291+
mMarkerStyleLabel->setVisible( false );
1292+
break;
1293+
case QgsComposerMap::Markers:
1294+
mGridTypeComboBox->setCurrentIndex( mGridTypeComboBox->findText( tr( "Markers" ) ) );
1295+
mCrossWidthSpinBox->setVisible( false );
1296+
mCrossWidthLabel->setVisible( false );
1297+
mGridLineStyleButton->setVisible( false );
1298+
mLineStyleLabel->setVisible( false );
1299+
mGridMarkerStyleButton->setVisible( true );
1300+
mMarkerStyleLabel->setVisible( true );
1301+
break;
1302+
case QgsComposerMap::Solid:
1303+
mGridTypeComboBox->setCurrentIndex( mGridTypeComboBox->findText( tr( "Solid" ) ) );
1304+
mCrossWidthSpinBox->setVisible( false );
1305+
mCrossWidthLabel->setVisible( false );
1306+
mGridLineStyleButton->setVisible( true );
1307+
mLineStyleLabel->setVisible( true );
1308+
mGridMarkerStyleButton->setVisible( false );
1309+
mMarkerStyleLabel->setVisible( false );
1310+
break;
13011311
}
13021312

13031313
//grid frame
@@ -1315,7 +1325,9 @@ void QgsComposerMapWidget::setGridItems( const QgsComposerMapGrid* grid )
13151325
}
13161326

13171327
//line style
1318-
updateLineSymbolMarker( grid );
1328+
updateGridLineSymbolMarker( grid );
1329+
//marker style
1330+
updateGridMarkerSymbolMarker( grid );
13191331

13201332
mGridBlendComboBox->setBlendMode( grid->blendMode() );
13211333

@@ -1361,7 +1373,7 @@ void QgsComposerMapWidget::setGridItems( const QgsComposerMapGrid* grid )
13611373
blockGridItemsSignals( false );
13621374
}
13631375

1364-
void QgsComposerMapWidget::updateLineSymbolMarker( const QgsComposerMapGrid* grid )
1376+
void QgsComposerMapWidget::updateGridLineSymbolMarker( const QgsComposerMapGrid* grid )
13651377
{
13661378
if ( grid )
13671379
{
@@ -1371,6 +1383,16 @@ void QgsComposerMapWidget::updateLineSymbolMarker( const QgsComposerMapGrid* gri
13711383
}
13721384
}
13731385

1386+
void QgsComposerMapWidget::updateGridMarkerSymbolMarker( const QgsComposerMapGrid *grid )
1387+
{
1388+
if ( grid )
1389+
{
1390+
QgsMarkerSymbolV2* nonConstSymbol = const_cast<QgsMarkerSymbolV2*>( grid->gridMarkerSymbol() ); //bad
1391+
QIcon icon = QgsSymbolLayerV2Utils::symbolPreviewIcon( nonConstSymbol, mGridMarkerStyleButton->iconSize() );
1392+
mGridMarkerStyleButton->setIcon( icon );
1393+
}
1394+
}
1395+
13741396
void QgsComposerMapWidget::on_mGridLineStyleButton_clicked()
13751397
{
13761398
QgsComposerMapGrid* grid = currentGrid();
@@ -1386,7 +1408,32 @@ void QgsComposerMapWidget::on_mGridLineStyleButton_clicked()
13861408
{
13871409
mComposerMap->beginCommand( tr( "Grid line style changed" ) );
13881410
grid->setGridLineSymbol( newSymbol );
1389-
updateLineSymbolMarker();
1411+
updateGridLineSymbolMarker( grid );
1412+
mComposerMap->endCommand();
1413+
mComposerMap->update();
1414+
}
1415+
else
1416+
{
1417+
delete newSymbol;
1418+
}
1419+
}
1420+
1421+
void QgsComposerMapWidget::on_mGridMarkerStyleButton_clicked()
1422+
{
1423+
QgsComposerMapGrid* grid = currentGrid();
1424+
if ( !grid )
1425+
{
1426+
return;
1427+
}
1428+
1429+
QgsMarkerSymbolV2* newSymbol = dynamic_cast<QgsMarkerSymbolV2*>( grid->gridMarkerSymbol()->clone() );
1430+
QgsSymbolV2SelectorDialog d( newSymbol, QgsStyleV2::defaultStyle(), 0 );
1431+
1432+
if ( d.exec() == QDialog::Accepted )
1433+
{
1434+
mComposerMap->beginCommand( tr( "Grid markers style changed" ) );
1435+
grid->setGridMarkerSymbol( newSymbol );
1436+
updateGridMarkerSymbolMarker( grid );
13901437
mComposerMap->endCommand();
13911438
mComposerMap->update();
13921439
}
@@ -1617,14 +1664,32 @@ void QgsComposerMapWidget::on_mGridTypeComboBox_currentIndexChanged( const QStri
16171664
if ( text == tr( "Cross" ) )
16181665
{
16191666
grid->setGridStyle( QgsComposerMap::Cross );
1620-
mCrossWidthSpinBox->setEnabled( true );
1621-
mCrossWidthLabel->setEnabled( true );
1667+
mCrossWidthSpinBox->setVisible( true );
1668+
mCrossWidthLabel->setVisible( true );
1669+
mGridLineStyleButton->setVisible( true );
1670+
mLineStyleLabel->setVisible( true );
1671+
mGridMarkerStyleButton->setVisible( false );
1672+
mMarkerStyleLabel->setVisible( false );
1673+
}
1674+
else if ( text == tr( "Markers" ) )
1675+
{
1676+
grid->setGridStyle( QgsComposerMap::Markers );
1677+
mCrossWidthSpinBox->setVisible( false );
1678+
mCrossWidthLabel->setVisible( false );
1679+
mGridLineStyleButton->setVisible( false );
1680+
mLineStyleLabel->setVisible( false );
1681+
mGridMarkerStyleButton->setVisible( true );
1682+
mMarkerStyleLabel->setVisible( true );
16221683
}
16231684
else
16241685
{
16251686
grid->setGridStyle( QgsComposerMap::Solid );
1626-
mCrossWidthSpinBox->setEnabled( false );
1627-
mCrossWidthLabel->setEnabled( false );
1687+
mCrossWidthSpinBox->setVisible( false );
1688+
mCrossWidthLabel->setVisible( false );
1689+
mGridLineStyleButton->setVisible( true );
1690+
mLineStyleLabel->setVisible( true );
1691+
mGridMarkerStyleButton->setVisible( false );
1692+
mMarkerStyleLabel->setVisible( false );
16281693
}
16291694
mComposerMap->update();
16301695
mComposerMap->endCommand();

src/app/composer/qgscomposermapwidget.h

+3-2
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ class QgsComposerMapWidget: public QgsComposerItemBaseWidget, private Ui::QgsCom
7575
void setGridItemsEnabled( bool enabled );
7676
void setGridItems( const QgsComposerMapGrid* grid );
7777
void blockGridItemsSignals( bool block );
78-
void updateLineSymbolMarker( const QgsComposerMapGrid* grid );
7978
void on_mGridLineStyleButton_clicked();
79+
void on_mGridMarkerStyleButton_clicked();
8080
void on_mIntervalXSpinBox_editingFinished();
8181
void on_mIntervalYSpinBox_editingFinished();
8282
void on_mOffsetXSpinBox_valueChanged( double value );
@@ -156,7 +156,8 @@ class QgsComposerMapWidget: public QgsComposerItemBaseWidget, private Ui::QgsCom
156156
void initAnnotationDirectionBox( QComboBox* c, QgsComposerMap::GridAnnotationDirection dir );
157157

158158
void updateOverviewSymbolMarker();
159-
void updateLineSymbolMarker();
159+
void updateGridLineSymbolMarker( const QgsComposerMapGrid* grid );
160+
void updateGridMarkerSymbolMarker( const QgsComposerMapGrid* grid );
160161

161162
/**Updates the map combo box with the current composer map ids*/
162163
void refreshMapComboBox();

src/core/composer/qgscomposermap.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ class CORE_EXPORT QgsComposerMap : public QgsComposerItem
6565
enum GridStyle
6666
{
6767
Solid = 0, //solid lines
68-
Cross //only draw line crossings
68+
Cross, //only draw line crossings
69+
Markers
6970
};
7071

7172
enum GridAnnotationPosition

0 commit comments

Comments
 (0)