Skip to content

Commit 53fc584

Browse files
committed
Allow selection of a polygon symbol for the overview frame
1 parent 7a349a9 commit 53fc584

File tree

5 files changed

+94
-4
lines changed

5 files changed

+94
-4
lines changed

src/app/composer/qgscomposermapwidget.cpp

+26
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
#include "qgscomposermapwidget.h"
1919
#include "qgscomposeritemwidget.h"
2020
#include "qgsmaprenderer.h"
21+
#include "qgssymbolv2.h"
22+
#include "qgssymbolv2propertiesdialog.h"
23+
#include "qgssymbollayerv2utils.h"
2124
#include <QColorDialog>
2225
#include <QFontDialog>
2326

@@ -484,6 +487,7 @@ void QgsComposerMapWidget::blockAllSignals( bool b )
484487
mFrameStyleComboBox->blockSignals( b );
485488
mFrameWidthSpinBox->blockSignals( b );
486489
mOverviewFrameMapComboBox->blockSignals( b );
490+
mOverviewFrameStyleButton->blockSignals( b );
487491
}
488492

489493
void QgsComposerMapWidget::on_mUpdatePreviewButton_clicked()
@@ -590,6 +594,19 @@ void QgsComposerMapWidget::on_mOverviewFrameMapComboBox_currentIndexChanged( con
590594
mComposerMap->update();
591595
}
592596

597+
void QgsComposerMapWidget::on_mOverviewFrameStyleButton_clicked()
598+
{
599+
if ( !mComposerMap )
600+
{
601+
return;
602+
}
603+
QgsSymbolV2PropertiesDialog d( mComposerMap->overviewFrameMapSymbol(), 0, this );
604+
if ( d.exec() == QDialog::Accepted )
605+
{
606+
updateOverviewSymbolMarker();
607+
}
608+
}
609+
593610
void QgsComposerMapWidget::on_mGridCheckBox_toggled( bool state )
594611
{
595612
if ( !mComposerMap )
@@ -967,3 +984,12 @@ void QgsComposerMapWidget::initAnnotationDirectionBox( QComboBox* c, QgsComposer
967984
c->setCurrentIndex( c->findText( tr( "Horizontal" ) ) );
968985
}
969986
}
987+
988+
void QgsComposerMapWidget::updateOverviewSymbolMarker()
989+
{
990+
if ( mComposerMap )
991+
{
992+
QIcon icon = QgsSymbolLayerV2Utils::symbolPreviewIcon( mComposerMap->overviewFrameMapSymbol(), mOverviewFrameStyleButton->iconSize() );
993+
mOverviewFrameStyleButton->setIcon( icon );
994+
}
995+
}

src/app/composer/qgscomposermapwidget.h

+3
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ class QgsComposerMapWidget: public QWidget, private Ui::QgsComposerMapWidgetBase
4444
void on_mKeepLayerListCheckBox_stateChanged( int state );
4545
void on_mDrawCanvasItemsCheckBox_stateChanged( int state );
4646
void on_mOverviewFrameMapComboBox_currentIndexChanged( const QString& text );
47+
void on_mOverviewFrameStyleButton_clicked();
4748

4849
void on_mXMinLineEdit_editingFinished();
4950
void on_mXMaxLineEdit_editingFinished();
@@ -105,6 +106,8 @@ class QgsComposerMapWidget: public QWidget, private Ui::QgsComposerMapWidgetBase
105106

106107
void initAnnotationPositionBox( QComboBox* c, QgsComposerMap::GridAnnotationPosition pos );
107108
void initAnnotationDirectionBox( QComboBox* c, QgsComposerMap::GridAnnotationDirection dir );
109+
110+
void updateOverviewSymbolMarker();
108111
};
109112

110113
#endif

src/core/composer/qgscomposermap.cpp

+45-4
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ QgsComposerMap::QgsComposerMap( QgsComposition *composition, int x, int y, int w
4646
mCrossLength( 3 ), mMapCanvas( 0 ), mDrawCanvasItems( true )
4747
{
4848
mComposition = composition;
49+
mOverviewFrameMapSymbol = new QgsFillSymbolV2();
4950

5051
//mId = mComposition->composerMapItems().size();
5152
int maxId = -1;
@@ -92,6 +93,9 @@ QgsComposerMap::QgsComposerMap( QgsComposition *composition )
9293
mTopGridAnnotationDirection( Horizontal ), mBottomGridAnnotationDirection( Horizontal ), mGridFrameStyle( NoGridFrame ), mGridFrameWidth( 2.0 ), mCrossLength( 3 ),
9394
mMapCanvas( 0 ), mDrawCanvasItems( true )
9495
{
96+
97+
mOverviewFrameMapSymbol = new QgsFillSymbolV2();
98+
9599
//Offset
96100
mXOffset = 0.0;
97101
mYOffset = 0.0;
@@ -110,6 +114,7 @@ QgsComposerMap::QgsComposerMap( QgsComposition *composition )
110114

111115
QgsComposerMap::~QgsComposerMap()
112116
{
117+
delete mOverviewFrameMapSymbol;
113118
}
114119

115120
void QgsComposerMap::draw( QPainter *painter, const QgsRectangle& extent, const QSize& size, int dpi )
@@ -756,7 +761,7 @@ bool QgsComposerMap::readXML( const QDomElement& itemElem, const QDomDocument& d
756761
mPreviewMode = Rectangle;
757762
}
758763

759-
mOverviewFrameMapId = itemElem.attribute( "overviewFrameMap", "-1" ).toInt();
764+
setOverviewFrameMap( itemElem.attribute( "overviewFrameMap", "-1" ).toInt() );
760765

761766
//extent
762767
QDomNodeList extentNodeList = itemElem.elementsByTagName( "Extent" );
@@ -1570,6 +1575,12 @@ void QgsComposerMap::setOverviewFrameMap( int mapId )
15701575
update();
15711576
}
15721577

1578+
void QgsComposerMap::setOverviewFrameMapSymbol( QgsFillSymbolV2* symbol )
1579+
{
1580+
delete mOverviewFrameMapSymbol;
1581+
mOverviewFrameMapSymbol = symbol;
1582+
}
1583+
15731584
void QgsComposerMap::transformShift( double& xShift, double& yShift ) const
15741585
{
15751586
double mmToMapUnits = 1.0 / mapUnitsToMM();
@@ -1881,7 +1892,7 @@ void QgsComposerMap::sortGridLinesOnBorders( const QList< QPair< double, QLineF
18811892

18821893
void QgsComposerMap::drawOverviewMapExtent( QPainter* p )
18831894
{
1884-
if ( mOverviewFrameMapId == -1 )
1895+
if ( mOverviewFrameMapId == -1 || !mComposition )
18851896
{
18861897
return;
18871898
}
@@ -1896,11 +1907,41 @@ void QgsComposerMap::drawOverviewMapExtent( QPainter* p )
18961907
QgsRectangle thisExtent = extent();
18971908
QgsRectangle intersectRect = thisExtent.intersect( &otherExtent );
18981909

1899-
p->setPen( QPen( Qt::red ) ); //todo: make appearance configurable
1910+
QgsRenderContext context;
1911+
context.setPainter( p );
1912+
if ( mPreviewMode == Rectangle )
1913+
{
1914+
return;
1915+
}
1916+
else if ( mComposition->plotStyle() == QgsComposition::Preview )
1917+
{
1918+
context.setScaleFactor( 1.0 );
1919+
context.setRasterScaleFactor( /*96.0*/ mComposition->printResolution() / 25.4 );
1920+
}
1921+
else //print
1922+
{
1923+
context.setScaleFactor( 1.0 );
1924+
double rasterScaleFactor = mComposition->printResolution() / 25.4;
1925+
context.setRasterScaleFactor( rasterScaleFactor );
1926+
}
1927+
1928+
QPolygonF polygon;
1929+
double x = ( intersectRect.xMinimum() - thisExtent.xMinimum() ) / thisExtent.width() * rect().width();
1930+
double y = ( thisExtent.yMaximum() - intersectRect.yMaximum() ) / thisExtent.height() * rect().height();
1931+
double width = intersectRect.width() / thisExtent.width() * rect().width();
1932+
double height = intersectRect.height() / thisExtent.height() * rect().height();
1933+
polygon << QPointF( x, y ) << QPointF( x + width, y ) << QPointF( x + width, y + height ) << QPointF( x, y + height );
1934+
1935+
QList<QPolygonF> rings; //empty list
1936+
mOverviewFrameMapSymbol->startRender( context );
1937+
mOverviewFrameMapSymbol->renderPolygon( polygon, &rings, 0, context );
1938+
mOverviewFrameMapSymbol->stopRender( context );
1939+
1940+
/*p->setPen( QPen( Qt::red ) ); //todo: make appearance configurable
19001941
p->setBrush( QBrush( QColor( 255, 0, 0, 100 ) ) );
19011942
double x = ( intersectRect.xMinimum() - thisExtent.xMinimum() ) / thisExtent.width() * rect().width();
19021943
double y = ( thisExtent.yMaximum() - intersectRect.yMaximum() ) / thisExtent.height() * rect().height();
19031944
double width = intersectRect.width() / thisExtent.width() * rect().width();
19041945
double height = intersectRect.height() / thisExtent.height() * rect().height();
1905-
p->drawRect( QRectF( x, y, width, height ) );
1946+
p->drawRect( QRectF( x, y, width, height ) );*/
19061947
}

src/core/composer/qgscomposermap.h

+6
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class QDomNode;
2929
class QDomDocument;
3030
class QGraphicsView;
3131
class QPainter;
32+
class QgsFillSymbolV2;
3233

3334
/** \ingroup MapComposer
3435
* \class QgsComposerMap
@@ -296,6 +297,9 @@ class CORE_EXPORT QgsComposerMap : public QgsComposerItem
296297
@note: this function was added in version 1.9*/
297298
int overviewFrameMapId() const { return mOverviewFrameMapId; }
298299

300+
void setOverviewFrameMapSymbol( QgsFillSymbolV2* symbol );
301+
QgsFillSymbolV2* overviewFrameMapSymbol() { return mOverviewFrameMapSymbol; }
302+
299303
signals:
300304
void extentChanged();
301305

@@ -348,6 +352,8 @@ class CORE_EXPORT QgsComposerMap : public QgsComposerItem
348352

349353
/**Id of map which displays its extent rectangle into this composer map (overview map functionality). -1 if not present*/
350354
int mOverviewFrameMapId;
355+
/**Drawing style for overview farme*/
356+
QgsFillSymbolV2* mOverviewFrameMapSymbol;
351357

352358
/**Establishes signal/slot connection for update in case of layer change*/
353359
void connectUpdateSlot();

src/ui/qgscomposermapwidgetbase.ui

+14
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,20 @@
230230
</property>
231231
</widget>
232232
</item>
233+
<item row="6" column="0">
234+
<widget class="QLabel" name="mFrameStyleLabel_2">
235+
<property name="text">
236+
<string>Frame style</string>
237+
</property>
238+
</widget>
239+
</item>
240+
<item row="6" column="1">
241+
<widget class="QPushButton" name="mOverviewFrameStyleButton">
242+
<property name="text">
243+
<string>Change...</string>
244+
</property>
245+
</widget>
246+
</item>
233247
</layout>
234248
</widget>
235249
<widget class="QWidget" name="page_2">

0 commit comments

Comments
 (0)