Skip to content

Commit 4fb64be

Browse files
committed
Improve overview map frame in composer map
1 parent 30f63f4 commit 4fb64be

4 files changed

Lines changed: 47 additions & 107 deletions

File tree

‎src/app/composer/qgscomposermapwidget.cpp‎

Lines changed: 11 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ QgsComposerMapWidget::QgsComposerMapWidget( QgsComposerMap* composerMap ): QWidg
6767
if ( mComposerMap )
6868
{
6969
//insert available maps into mMapComboBox
70+
mOverviewFrameMapComboBox->addItem( tr( "None" ), -1 );
7071
const QgsComposition* composition = mComposerMap->composition();
7172
if ( composition )
7273
{
@@ -341,6 +342,10 @@ void QgsComposerMapWidget::updateGuiElements()
341342
mDrawCanvasItemsCheckBox->setCheckState( Qt::Unchecked );
342343
}
343344

345+
//overview frame
346+
int overviewMapFrameId = mComposerMap->overviewFrameMapId();
347+
mOverviewFrameMapComboBox->setCurrentIndex( mOverviewFrameMapComboBox->findData( overviewMapFrameId ) );
348+
344349
//grid
345350
if ( mComposerMap->gridEnabled() )
346351
{
@@ -539,13 +544,18 @@ void QgsComposerMapWidget::on_mDrawCanvasItemsCheckBox_stateChanged( int state )
539544
mComposerMap->endCommand();
540545
}
541546

542-
void QgsComposerMapWidget::on_mOverviewFrameMapComboBox_activated( const QString& text )
547+
void QgsComposerMapWidget::on_mOverviewFrameMapComboBox_currentIndexChanged( const QString& text )
543548
{
544549
if ( !mComposerMap )
545550
{
546551
return;
547552
}
548553

554+
if ( text == tr( "None" ) )
555+
{
556+
mComposerMap->setOverviewFrameMap( -1 );
557+
}
558+
549559
//get composition
550560
const QgsComposition* composition = mComposerMap->composition();
551561
if ( !composition )
@@ -578,47 +588,6 @@ void QgsComposerMapWidget::on_mOverviewFrameMapComboBox_activated( const QString
578588

579589
mComposerMap->setOverviewFrameMap( id );
580590
mComposerMap->update();
581-
582-
#if 0
583-
f( !mPicture || text.isEmpty() || !mPicture->useRotationMap() )
584-
{
585-
return;
586-
}
587-
588-
//get composition
589-
const QgsComposition* composition = mPicture->composition();
590-
if ( !composition )
591-
{
592-
return;
593-
}
594-
595-
//extract id
596-
int id;
597-
bool conversionOk;
598-
QStringList textSplit = text.split( " " );
599-
if ( textSplit.size() < 1 )
600-
{
601-
return;
602-
}
603-
604-
QString idString = textSplit.at( textSplit.size() - 1 );
605-
id = idString.toInt( &conversionOk );
606-
607-
if ( !conversionOk )
608-
{
609-
return;
610-
}
611-
612-
const QgsComposerMap* composerMap = composition->getComposerMapById( id );
613-
if ( !composerMap )
614-
{
615-
return;
616-
}
617-
mPicture->beginCommand( tr( "Rotation map changed" ) );
618-
mPicture->setRotationMap( id );
619-
mPicture->update();
620-
mPicture->endCommand();
621-
#endif //0
622591
}
623592

624593
void QgsComposerMapWidget::on_mGridCheckBox_toggled( bool state )

‎src/app/composer/qgscomposermapwidget.h‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class QgsComposerMapWidget: public QWidget, private Ui::QgsComposerMapWidgetBase
4343
void on_mUpdatePreviewButton_clicked();
4444
void on_mKeepLayerListCheckBox_stateChanged( int state );
4545
void on_mDrawCanvasItemsCheckBox_stateChanged( int state );
46-
void on_mOverviewFrameMapComboBox_activated( const QString& text );
46+
void on_mOverviewFrameMapComboBox_currentIndexChanged( const QString& text );
4747

4848
void on_mXMinLineEdit_editingFinished();
4949
void on_mXMaxLineEdit_editingFinished();

‎src/core/composer/qgscomposermap.cpp‎

Lines changed: 32 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
#include <cmath>
3939

4040
QgsComposerMap::QgsComposerMap( QgsComposition *composition, int x, int y, int width, int height )
41-
: QgsComposerItem( x, y, width, height, composition ), mKeepLayerSet( false ), mOverviewFrameMap( 0 ), mGridEnabled( false ), mGridStyle( Solid ),
41+
: QgsComposerItem( x, y, width, height, composition ), mKeepLayerSet( false ), mOverviewFrameMapId( -1 ), mGridEnabled( false ), mGridStyle( Solid ),
4242
mGridIntervalX( 0.0 ), mGridIntervalY( 0.0 ), mGridOffsetX( 0.0 ), mGridOffsetY( 0.0 ), mGridAnnotationPrecision( 3 ), mShowGridAnnotation( false ),
4343
mLeftGridAnnotationPosition( OutsideMapFrame ), mRightGridAnnotationPosition( OutsideMapFrame ), mTopGridAnnotationPosition( OutsideMapFrame ),
4444
mBottomGridAnnotationPosition( OutsideMapFrame ), mAnnotationFrameDistance( 1.0 ), mLeftGridAnnotationDirection( Horizontal ), mRightGridAnnotationDirection( Horizontal ),
@@ -85,7 +85,7 @@ QgsComposerMap::QgsComposerMap( QgsComposition *composition, int x, int y, int w
8585
}
8686

8787
QgsComposerMap::QgsComposerMap( QgsComposition *composition )
88-
: QgsComposerItem( 0, 0, 10, 10, composition ), mKeepLayerSet( false ), mOverviewFrameMap( 0 ), mGridEnabled( false ), mGridStyle( Solid ),
88+
: QgsComposerItem( 0, 0, 10, 10, composition ), mKeepLayerSet( false ), mOverviewFrameMapId( -1 ), mGridEnabled( false ), mGridStyle( Solid ),
8989
mGridIntervalX( 0.0 ), mGridIntervalY( 0.0 ), mGridOffsetX( 0.0 ), mGridOffsetY( 0.0 ), mGridAnnotationPrecision( 3 ), mShowGridAnnotation( false ),
9090
mLeftGridAnnotationPosition( OutsideMapFrame ), mRightGridAnnotationPosition( OutsideMapFrame ), mTopGridAnnotationPosition( OutsideMapFrame ),
9191
mBottomGridAnnotationPosition( OutsideMapFrame ), mAnnotationFrameDistance( 1.0 ), mLeftGridAnnotationDirection( Horizontal ), mRightGridAnnotationDirection( Horizontal ),
@@ -364,7 +364,7 @@ void QgsComposerMap::paint( QPainter* painter, const QStyleOptionGraphicsItem* i
364364
drawSelectionBoxes( painter );
365365
}
366366

367-
if ( mOverviewFrameMap )
367+
if ( mOverviewFrameMapId != -1 )
368368
{
369369
drawOverviewMapExtent( painter );
370370
}
@@ -663,6 +663,9 @@ bool QgsComposerMap::writeXML( QDomElement& elem, QDomDocument & doc ) const
663663
composerMapElem.setAttribute( "drawCanvasItems", "false" );
664664
}
665665

666+
//overview map frame
667+
composerMapElem.setAttribute( "overviewMapFrame", mOverviewFrameMapId );
668+
666669
//extent
667670
QDomElement extentElem = doc.createElement( "Extent" );
668671
extentElem.setAttribute( "xmin", QString::number( mExtent.xMinimum() ) );
@@ -683,12 +686,8 @@ bool QgsComposerMap::writeXML( QDomElement& elem, QDomDocument & doc ) const
683686
}
684687
composerMapElem.appendChild( layerSetElem );
685688

686-
int overviewMapId = -1;
687-
if ( mOverviewFrameMap )
688-
{
689-
overviewMapId = mOverviewFrameMap->id();
690-
}
691-
composerMapElem.setAttribute( "overviewFrameMap", overviewMapId );
689+
//overview map frame
690+
composerMapElem.setAttribute( "overviewFrameMap", mOverviewFrameMapId );
692691

693692
//grid
694693
QDomElement gridElem = doc.createElement( "Grid" );
@@ -757,6 +756,8 @@ bool QgsComposerMap::readXML( const QDomElement& itemElem, const QDomDocument& d
757756
mPreviewMode = Rectangle;
758757
}
759758

759+
mOverviewFrameMapId = itemElem.attribute( "overviewFrameMap", "-1" ).toInt();
760+
760761
//extent
761762
QDomNodeList extentNodeList = itemElem.elementsByTagName( "Extent" );
762763
if ( extentNodeList.size() > 0 )
@@ -810,26 +811,6 @@ bool QgsComposerMap::readXML( const QDomElement& itemElem, const QDomDocument& d
810811
mNumCachedLayers = 0;
811812
mCacheUpdated = false;
812813

813-
//todo: overview frame map
814-
#if 0
815-
//rotation map
816-
int rotationMapId = itemElem.attribute( "mapId", "-1" ).toInt();
817-
if ( rotationMapId == -1 )
818-
{
819-
mRotationMap = 0;
820-
}
821-
else if ( mComposition )
822-
{
823-
824-
if ( mRotationMap )
825-
{
826-
QObject::disconnect( mRotationMap, SIGNAL( rotationChanged( double ) ), this, SLOT( setRotation( double ) ) );
827-
}
828-
mRotationMap = mComposition->getComposerMapById( rotationMapId );
829-
QObject::connect( mRotationMap, SIGNAL( rotationChanged( double ) ), this, SLOT( setRotation( double ) ) );
830-
}
831-
#endif //0
832-
833814
//grid
834815
QDomNodeList gridNodeList = itemElem.elementsByTagName( "Grid" );
835816
if ( gridNodeList.size() > 0 )
@@ -1569,40 +1550,24 @@ double QgsComposerMap::mapUnitsToMM() const
15691550

15701551
void QgsComposerMap::setOverviewFrameMap( int mapId )
15711552
{
1572-
if ( !mComposition )
1573-
{
1574-
return;
1575-
}
1576-
1577-
if ( mapId == -1 ) //disable overview map frame
1578-
{
1579-
QObject::disconnect( mOverviewFrameMap, SIGNAL( extentChanged() ), this, SLOT( repaint() ) );
1580-
mOverviewFrameMap = 0;
1581-
}
1582-
1583-
const QgsComposerMap* map = mComposition->getComposerMapById( mapId );
1584-
if ( !map )
1553+
if ( mOverviewFrameMapId != -1 )
15851554
{
1586-
return;
1587-
}
1588-
if ( mOverviewFrameMap )
1589-
{
1590-
QObject::disconnect( mOverviewFrameMap, SIGNAL( extentChanged() ), this, SLOT( repaint() ) );
1591-
}
1592-
QObject::connect( mOverviewFrameMap, SIGNAL( extentChanged() ), this, SLOT( repaint() ) );
1593-
mOverviewFrameMap = map;
1594-
}
1595-
1596-
int QgsComposerMap::overviewFrameMapId() const
1597-
{
1598-
if ( !mOverviewFrameMap )
1599-
{
1600-
return -1;
1555+
const QgsComposerMap* map = mComposition->getComposerMapById( mapId );
1556+
if ( map )
1557+
{
1558+
QObject::disconnect( map, SIGNAL( extentChanged() ), this, SLOT( repaint() ) );
1559+
}
16011560
}
1602-
else
1561+
mOverviewFrameMapId = mapId;
1562+
if ( mOverviewFrameMapId != -1 )
16031563
{
1604-
return mOverviewFrameMap->id();
1564+
const QgsComposerMap* map = mComposition->getComposerMapById( mapId );
1565+
if ( map )
1566+
{
1567+
QObject::connect( map, SIGNAL( extentChanged() ), this, SLOT( repaint() ) );
1568+
}
16051569
}
1570+
update();
16061571
}
16071572

16081573
void QgsComposerMap::transformShift( double& xShift, double& yShift ) const
@@ -1916,12 +1881,18 @@ void QgsComposerMap::sortGridLinesOnBorders( const QList< QPair< double, QLineF
19161881

19171882
void QgsComposerMap::drawOverviewMapExtent( QPainter* p )
19181883
{
1919-
if ( !mOverviewFrameMap )
1884+
if ( mOverviewFrameMapId == -1 )
1885+
{
1886+
return;
1887+
}
1888+
1889+
const QgsComposerMap* overviewFrameMap = mComposition->getComposerMapById( mOverviewFrameMapId );
1890+
if ( !overviewFrameMap )
19201891
{
19211892
return;
19221893
}
19231894

1924-
QgsRectangle otherExtent = mOverviewFrameMap->extent();
1895+
QgsRectangle otherExtent = overviewFrameMap->extent();
19251896
QgsRectangle thisExtent = extent();
19261897
QgsRectangle intersectRect = thisExtent.intersect( &otherExtent );
19271898

‎src/core/composer/qgscomposermap.h‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ class CORE_EXPORT QgsComposerMap : public QgsComposerItem
292292
/**Sets overview frame map. -1 disables the overview frame*/
293293
void setOverviewFrameMap( int mapId );
294294
/**Returns id of overview frame (or -1 if no overfiew frame)*/
295-
int overviewFrameMapId() const;
295+
int overviewFrameMapId() const { return mOverviewFrameMapId; }
296296

297297
signals:
298298
void extentChanged();
@@ -344,8 +344,8 @@ class CORE_EXPORT QgsComposerMap : public QgsComposerItem
344344
/**Stored layer list (used if layer live-link mKeepLayerSet is disabled)*/
345345
QStringList mLayerSet;
346346

347-
/**Map that displays its rectangle into this composer map (or 0 if no frame of another map)*/
348-
const QgsComposerMap* mOverviewFrameMap;
347+
/**Id of map which displays its extent rectangle into this composer map (overview map functionality). -1 if not present*/
348+
int mOverviewFrameMapId;
349349

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

0 commit comments

Comments
 (0)