Skip to content

Commit a9be559

Browse files
committed
[composer] Fix item selection after pasting items
1 parent d0719b0 commit a9be559

File tree

2 files changed

+70
-27
lines changed

2 files changed

+70
-27
lines changed

src/core/composer/qgscomposition.cpp

+25-27
Original file line numberDiff line numberDiff line change
@@ -758,6 +758,7 @@ void QgsComposition::addItemsFromXML( const QDomElement& elem, const QDomDocumen
758758
int zOrderOffset = mItemZList.size();
759759

760760
QPointF pasteShiftPos;
761+
QgsComposerItem* lastPastedItem = 0;
761762
if ( pos )
762763
{
763764
//If we are placing items relative to a certain point, then calculate how much we need
@@ -767,6 +768,9 @@ void QgsComposition::addItemsFromXML( const QDomElement& elem, const QDomDocumen
767768
//next, calculate how much each item needs to be shifted from its original position
768769
//so that it's placed at the correct relative position
769770
pasteShiftPos = *pos - minItemPos;
771+
772+
//since we are pasting items, clear the existing selection
773+
clearSelection();
770774
}
771775

772776
if ( pasteInPlace )
@@ -790,6 +794,8 @@ void QgsComposition::addItemsFromXML( const QDomElement& elem, const QDomDocumen
790794
{
791795
newLabel->move( pasteShiftPos.x(), pasteShiftPos.y() );
792796
}
797+
newLabel->setSelected( true );
798+
lastPastedItem = newLabel;
793799
}
794800
addComposerLabel( newLabel );
795801
newLabel->setZValue( newLabel->zValue() + zOrderOffset );
@@ -825,6 +831,8 @@ void QgsComposition::addItemsFromXML( const QDomElement& elem, const QDomDocumen
825831
{
826832
newMap->move( pasteShiftPos.x(), pasteShiftPos.y() );
827833
}
834+
newMap->setSelected( true );
835+
lastPastedItem = newMap;
828836
}
829837

830838
if ( addUndoCommands )
@@ -865,6 +873,8 @@ void QgsComposition::addItemsFromXML( const QDomElement& elem, const QDomDocumen
865873
{
866874
newArrow->move( pasteShiftPos.x(), pasteShiftPos.y() );
867875
}
876+
newArrow->setSelected( true );
877+
lastPastedItem = newArrow;
868878
}
869879
addComposerArrow( newArrow );
870880
newArrow->setZValue( newArrow->zValue() + zOrderOffset );
@@ -891,6 +901,8 @@ void QgsComposition::addItemsFromXML( const QDomElement& elem, const QDomDocumen
891901
{
892902
newScaleBar->move( pasteShiftPos.x(), pasteShiftPos.y() );
893903
}
904+
newScaleBar->setSelected( true );
905+
lastPastedItem = newScaleBar;
894906
}
895907
addComposerScaleBar( newScaleBar );
896908
newScaleBar->setZValue( newScaleBar->zValue() + zOrderOffset );
@@ -919,6 +931,8 @@ void QgsComposition::addItemsFromXML( const QDomElement& elem, const QDomDocumen
919931
{
920932
newShape->move( pasteShiftPos.x(), pasteShiftPos.y() );
921933
}
934+
newShape->setSelected( true );
935+
lastPastedItem = newShape;
922936
}
923937
addComposerShape( newShape );
924938
newShape->setZValue( newShape->zValue() + zOrderOffset );
@@ -945,6 +959,8 @@ void QgsComposition::addItemsFromXML( const QDomElement& elem, const QDomDocumen
945959
{
946960
newPicture->move( pasteShiftPos.x(), pasteShiftPos.y() );
947961
}
962+
newPicture->setSelected( true );
963+
lastPastedItem = newPicture;
948964
}
949965
addComposerPicture( newPicture );
950966
newPicture->setZValue( newPicture->zValue() + zOrderOffset );
@@ -971,6 +987,8 @@ void QgsComposition::addItemsFromXML( const QDomElement& elem, const QDomDocumen
971987
{
972988
newLegend->move( pasteShiftPos.x(), pasteShiftPos.y() );
973989
}
990+
newLegend->setSelected( true );
991+
lastPastedItem = newLegend;
974992
}
975993
addComposerLegend( newLegend );
976994
newLegend->setZValue( newLegend->zValue() + zOrderOffset );
@@ -997,6 +1015,8 @@ void QgsComposition::addItemsFromXML( const QDomElement& elem, const QDomDocumen
9971015
{
9981016
newTable->move( pasteShiftPos.x(), pasteShiftPos.y() );
9991017
}
1018+
newTable->setSelected( true );
1019+
lastPastedItem = newTable;
10001020
}
10011021
addComposerTable( newTable );
10021022
newTable->setZValue( newTable->zValue() + zOrderOffset );
@@ -1042,6 +1062,11 @@ void QgsComposition::addItemsFromXML( const QDomElement& elem, const QDomDocumen
10421062
//Make sure z order list matches the actual order of items in the scene.
10431063
refreshZList();
10441064

1065+
if ( lastPastedItem )
1066+
{
1067+
emit selectedItemChanged( lastPastedItem );
1068+
}
1069+
10451070
delete pasteInPlacePt;
10461071
pasteInPlacePt = 0;
10471072

@@ -1934,18 +1959,12 @@ void QgsComposition::addComposerArrow( QgsComposerArrow* arrow )
19341959
{
19351960
addItem( arrow );
19361961
emit composerArrowAdded( arrow );
1937-
clearSelection();
1938-
arrow->setSelected( true );
1939-
emit selectedItemChanged( arrow );
19401962
}
19411963

19421964
void QgsComposition::addComposerLabel( QgsComposerLabel* label )
19431965
{
19441966
addItem( label );
19451967
emit composerLabelAdded( label );
1946-
clearSelection();
1947-
label->setSelected( true );
1948-
emit selectedItemChanged( label );
19491968
}
19501969

19511970
void QgsComposition::addComposerMap( QgsComposerMap* map, bool setDefaultPreviewStyle )
@@ -1963,63 +1982,42 @@ void QgsComposition::addComposerMap( QgsComposerMap* map, bool setDefaultPreview
19631982
}
19641983

19651984
emit composerMapAdded( map );
1966-
clearSelection();
1967-
map->setSelected( true );
1968-
emit selectedItemChanged( map );
19691985
}
19701986

19711987
void QgsComposition::addComposerScaleBar( QgsComposerScaleBar* scaleBar )
19721988
{
19731989
addItem( scaleBar );
19741990
emit composerScaleBarAdded( scaleBar );
1975-
clearSelection();
1976-
scaleBar->setSelected( true );
1977-
emit selectedItemChanged( scaleBar );
19781991
}
19791992

19801993
void QgsComposition::addComposerLegend( QgsComposerLegend* legend )
19811994
{
19821995
addItem( legend );
19831996
emit composerLegendAdded( legend );
1984-
clearSelection();
1985-
legend->setSelected( true );
1986-
emit selectedItemChanged( legend );
19871997
}
19881998

19891999
void QgsComposition::addComposerPicture( QgsComposerPicture* picture )
19902000
{
19912001
addItem( picture );
19922002
emit composerPictureAdded( picture );
1993-
clearSelection();
1994-
picture->setSelected( true );
1995-
emit selectedItemChanged( picture );
19962003
}
19972004

19982005
void QgsComposition::addComposerShape( QgsComposerShape* shape )
19992006
{
20002007
addItem( shape );
20012008
emit composerShapeAdded( shape );
2002-
clearSelection();
2003-
shape->setSelected( true );
2004-
emit selectedItemChanged( shape );
20052009
}
20062010

20072011
void QgsComposition::addComposerTable( QgsComposerAttributeTable* table )
20082012
{
20092013
addItem( table );
20102014
emit composerTableAdded( table );
2011-
clearSelection();
2012-
table->setSelected( true );
2013-
emit selectedItemChanged( table );
20142015
}
20152016

20162017
void QgsComposition::addComposerHtmlFrame( QgsComposerHtml* html, QgsComposerFrame* frame )
20172018
{
20182019
addItem( frame );
20192020
emit composerHtmlFrameAdded( html, frame );
2020-
clearSelection();
2021-
frame->setSelected( true );
2022-
emit selectedItemChanged( frame );
20232021
}
20242022

20252023
void QgsComposition::removeComposerItem( QgsComposerItem* item, bool createCommand )

src/gui/qgscomposerview.cpp

+45
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,11 @@ void QgsComposerView::mousePressEvent( QMouseEvent* e )
346346
newLabelItem->adjustSizeToText();
347347
newLabelItem->setSceneRect( QRectF( snappedScenePoint.x(), snappedScenePoint.y(), newLabelItem->rect().width(), newLabelItem->rect().height() ) );
348348
composition()->addComposerLabel( newLabelItem );
349+
350+
composition()->clearSelection();
351+
newLabelItem->setSelected( true );
352+
emit selectedItemChanged( newLabelItem );
353+
349354
emit actionFinished();
350355
composition()->pushAddRemoveCommand( newLabelItem, tr( "Label added" ) );
351356
}
@@ -363,6 +368,11 @@ void QgsComposerView::mousePressEvent( QMouseEvent* e )
363368
newScaleBar->setComposerMap( mapItemList.at( 0 ) );
364369
}
365370
newScaleBar->applyDefaultSize(); //4 segments, 1/5 of composer map width
371+
372+
composition()->clearSelection();
373+
newScaleBar->setSelected( true );
374+
emit selectedItemChanged( newScaleBar );
375+
366376
emit actionFinished();
367377
composition()->pushAddRemoveCommand( newScaleBar, tr( "Scale bar added" ) );
368378
}
@@ -376,6 +386,11 @@ void QgsComposerView::mousePressEvent( QMouseEvent* e )
376386
newLegend->setSceneRect( QRectF( snappedScenePoint.x(), snappedScenePoint.y(), newLegend->rect().width(), newLegend->rect().height() ) );
377387
composition()->addComposerLegend( newLegend );
378388
newLegend->updateLegend();
389+
390+
composition()->clearSelection();
391+
newLegend->setSelected( true );
392+
emit selectedItemChanged( newLegend );
393+
379394
emit actionFinished();
380395
composition()->pushAddRemoveCommand( newLegend, tr( "Legend added" ) );
381396
}
@@ -387,6 +402,11 @@ void QgsComposerView::mousePressEvent( QMouseEvent* e )
387402
QgsComposerPicture* newPicture = new QgsComposerPicture( composition() );
388403
newPicture->setSceneRect( QRectF( snappedScenePoint.x(), snappedScenePoint.y(), 30, 30 ) );
389404
composition()->addComposerPicture( newPicture );
405+
406+
composition()->clearSelection();
407+
newPicture->setSelected( true );
408+
emit selectedItemChanged( newPicture );
409+
390410
emit actionFinished();
391411
composition()->pushAddRemoveCommand( newPicture, tr( "Picture added" ) );
392412
}
@@ -397,6 +417,11 @@ void QgsComposerView::mousePressEvent( QMouseEvent* e )
397417
QgsComposerAttributeTable* newTable = new QgsComposerAttributeTable( composition() );
398418
newTable->setSceneRect( QRectF( snappedScenePoint.x(), snappedScenePoint.y(), 50, 50 ) );
399419
composition()->addComposerTable( newTable );
420+
421+
composition()->clearSelection();
422+
newTable->setSelected( true );
423+
emit selectedItemChanged( newTable );
424+
400425
emit actionFinished();
401426
composition()->pushAddRemoveCommand( newTable, tr( "Table added" ) );
402427
}
@@ -428,6 +453,11 @@ void QgsComposerView::addShape( Tool currentTool )
428453
composerShape->setUseSymbolV2( true );
429454
composition()->addComposerShape( composerShape );
430455
removeRubberBand();
456+
457+
composition()->clearSelection();
458+
composerShape->setSelected( true );
459+
emit selectedItemChanged( composerShape );
460+
431461
emit actionFinished();
432462
composition()->pushAddRemoveCommand( composerShape, tr( "Shape added" ) );
433463
}
@@ -703,6 +733,11 @@ void QgsComposerView::mouseReleaseEvent( QMouseEvent* e )
703733
QPointF snappedScenePoint = composition()->snapPointToGrid( scenePoint );
704734
QgsComposerArrow* composerArrow = new QgsComposerArrow( mRubberBandStartPos, QPointF( snappedScenePoint.x(), snappedScenePoint.y() ), composition() );
705735
composition()->addComposerArrow( composerArrow );
736+
737+
composition()->clearSelection();
738+
composerArrow->setSelected( true );
739+
emit selectedItemChanged( composerArrow );
740+
706741
scene()->removeItem( mRubberBandLineItem );
707742
delete mRubberBandLineItem;
708743
mRubberBandLineItem = 0;
@@ -727,6 +762,11 @@ void QgsComposerView::mouseReleaseEvent( QMouseEvent* e )
727762
{
728763
QgsComposerMap* composerMap = new QgsComposerMap( composition(), mRubberBandItem->transform().dx(), mRubberBandItem->transform().dy(), mRubberBandItem->rect().width(), mRubberBandItem->rect().height() );
729764
composition()->addComposerMap( composerMap );
765+
766+
composition()->clearSelection();
767+
composerMap->setSelected( true );
768+
emit selectedItemChanged( composerMap );
769+
730770
removeRubberBand();
731771
emit actionFinished();
732772
composition()->pushAddRemoveCommand( composerMap, tr( "Map added" ) );
@@ -746,6 +786,11 @@ void QgsComposerView::mouseReleaseEvent( QMouseEvent* e )
746786
composition()->beginMultiFrameCommand( composerHtml, tr( "Html frame added" ) );
747787
composerHtml->addFrame( frame );
748788
composition()->endMultiFrameCommand();
789+
790+
composition()->clearSelection();
791+
frame->setSelected( true );
792+
emit selectedItemChanged( frame );
793+
749794
removeRubberBand();
750795
emit actionFinished();
751796
}

0 commit comments

Comments
 (0)