Skip to content

Commit 72f01ba

Browse files
committedJun 4, 2014
[composer] Allow clicking-dragging to set size of labels, pictures, legends ands tables when adding them to a composition (fix #9821)
1 parent b98c2fe commit 72f01ba

File tree

1 file changed

+132
-71
lines changed

1 file changed

+132
-71
lines changed
 

‎src/gui/qgscomposerview.cpp

Lines changed: 132 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,7 @@ void QgsComposerView::mousePressEvent( QMouseEvent* e )
328328
return;
329329
}
330330

331+
//create rubber band for adding line items
331332
case AddArrow:
332333
{
333334
mRubberBandStartPos = QPointF( snappedScenePoint.x(), snappedScenePoint.y() );
@@ -338,12 +339,16 @@ void QgsComposerView::mousePressEvent( QMouseEvent* e )
338339
break;
339340
}
340341

341-
//create rubber band for map and ellipse items
342+
//create rubber band for adding rectangular items
342343
case AddMap:
343344
case AddRectangle:
344345
case AddTriangle:
345346
case AddEllipse:
346347
case AddHtml:
348+
case AddPicture:
349+
case AddLabel:
350+
case AddLegend:
351+
case AddTable:
347352
{
348353
QTransform t;
349354
mRubberBandItem = new QGraphicsRectItem( 0, 0, 0, 0 );
@@ -356,24 +361,6 @@ void QgsComposerView::mousePressEvent( QMouseEvent* e )
356361
}
357362
break;
358363

359-
case AddLabel:
360-
if ( composition() )
361-
{
362-
QgsComposerLabel* newLabelItem = new QgsComposerLabel( composition() );
363-
newLabelItem->setText( tr( "QGIS" ) );
364-
newLabelItem->adjustSizeToText();
365-
newLabelItem->setSceneRect( QRectF( snappedScenePoint.x(), snappedScenePoint.y(), newLabelItem->rect().width(), newLabelItem->rect().height() ) );
366-
composition()->addComposerLabel( newLabelItem );
367-
368-
composition()->clearSelection();
369-
newLabelItem->setSelected( true );
370-
emit selectedItemChanged( newLabelItem );
371-
372-
emit actionFinished();
373-
composition()->pushAddRemoveCommand( newLabelItem, tr( "Label added" ) );
374-
}
375-
break;
376-
377364
case AddScalebar:
378365
if ( composition() )
379366
{
@@ -396,54 +383,6 @@ void QgsComposerView::mousePressEvent( QMouseEvent* e )
396383
}
397384
break;
398385

399-
case AddLegend:
400-
{
401-
if ( composition() )
402-
{
403-
QgsComposerLegend* newLegend = new QgsComposerLegend( composition() );
404-
newLegend->setSceneRect( QRectF( snappedScenePoint.x(), snappedScenePoint.y(), newLegend->rect().width(), newLegend->rect().height() ) );
405-
composition()->addComposerLegend( newLegend );
406-
newLegend->updateLegend();
407-
408-
composition()->clearSelection();
409-
newLegend->setSelected( true );
410-
emit selectedItemChanged( newLegend );
411-
412-
emit actionFinished();
413-
composition()->pushAddRemoveCommand( newLegend, tr( "Legend added" ) );
414-
}
415-
break;
416-
}
417-
case AddPicture:
418-
if ( composition() )
419-
{
420-
QgsComposerPicture* newPicture = new QgsComposerPicture( composition() );
421-
newPicture->setSceneRect( QRectF( snappedScenePoint.x(), snappedScenePoint.y(), 30, 30 ) );
422-
composition()->addComposerPicture( newPicture );
423-
424-
composition()->clearSelection();
425-
newPicture->setSelected( true );
426-
emit selectedItemChanged( newPicture );
427-
428-
emit actionFinished();
429-
composition()->pushAddRemoveCommand( newPicture, tr( "Picture added" ) );
430-
}
431-
break;
432-
case AddTable:
433-
if ( composition() )
434-
{
435-
QgsComposerAttributeTable* newTable = new QgsComposerAttributeTable( composition() );
436-
newTable->setSceneRect( QRectF( snappedScenePoint.x(), snappedScenePoint.y(), 50, 50 ) );
437-
composition()->addComposerTable( newTable );
438-
439-
composition()->clearSelection();
440-
newTable->setSelected( true );
441-
emit selectedItemChanged( newTable );
442-
443-
emit actionFinished();
444-
composition()->pushAddRemoveCommand( newTable, tr( "Table added" ) );
445-
}
446-
break;
447386
default:
448387
break;
449388
}
@@ -794,7 +733,14 @@ void QgsComposerView::mouseReleaseEvent( QMouseEvent* e )
794733
break;
795734
}
796735
case AddArrow:
797-
if ( composition() )
736+
if ( !composition() || !mRubberBandLineItem )
737+
{
738+
scene()->removeItem( mRubberBandLineItem );
739+
delete mRubberBandLineItem;
740+
mRubberBandLineItem = 0;
741+
return;
742+
}
743+
else
798744
{
799745
QPointF scenePoint = mapToScene( e->pos() );
800746
QPointF snappedScenePoint = composition()->snapPointToGrid( scenePoint );
@@ -820,12 +766,12 @@ void QgsComposerView::mouseReleaseEvent( QMouseEvent* e )
820766
break;
821767

822768
case AddMap:
823-
if ( !mRubberBandItem || ( mRubberBandItem->rect().width() < 0.1 && mRubberBandItem->rect().height() < 0.1 ) )
769+
if ( !composition() || !mRubberBandItem || ( mRubberBandItem->rect().width() < 0.1 && mRubberBandItem->rect().height() < 0.1 ) )
824770
{
825771
removeRubberBand();
826772
return;
827773
}
828-
if ( composition() )
774+
else
829775
{
830776
QgsComposerMap* composerMap = new QgsComposerMap( composition(), mRubberBandItem->transform().dx(), mRubberBandItem->transform().dy(), mRubberBandItem->rect().width(), mRubberBandItem->rect().height() );
831777
composition()->addComposerMap( composerMap );
@@ -840,8 +786,119 @@ void QgsComposerView::mouseReleaseEvent( QMouseEvent* e )
840786
}
841787
break;
842788

789+
case AddPicture:
790+
if ( !composition() || !mRubberBandItem || ( mRubberBandItem->rect().width() < 0.1 && mRubberBandItem->rect().height() < 0.1 ) )
791+
{
792+
removeRubberBand();
793+
return;
794+
}
795+
else
796+
{
797+
QgsComposerPicture* newPicture = new QgsComposerPicture( composition() );
798+
newPicture->setSceneRect( QRectF( mRubberBandItem->transform().dx(), mRubberBandItem->transform().dy(), mRubberBandItem->rect().width(), mRubberBandItem->rect().height() ) );
799+
composition()->addComposerPicture( newPicture );
800+
801+
composition()->clearSelection();
802+
newPicture->setSelected( true );
803+
emit selectedItemChanged( newPicture );
804+
805+
removeRubberBand();
806+
emit actionFinished();
807+
composition()->pushAddRemoveCommand( newPicture, tr( "Picture added" ) );
808+
}
809+
break;
810+
811+
case AddLabel:
812+
if ( !composition() || !mRubberBandItem )
813+
{
814+
removeRubberBand();
815+
return;
816+
}
817+
else
818+
{
819+
QgsComposerLabel* newLabelItem = new QgsComposerLabel( composition() );
820+
newLabelItem->setText( tr( "QGIS" ) );
821+
newLabelItem->adjustSizeToText();
822+
823+
//make sure label size is sufficient to fit text
824+
double labelWidth = qMax( mRubberBandItem->rect().width(), newLabelItem->rect().width() );
825+
double labelHeight = qMax( mRubberBandItem->rect().height(), newLabelItem->rect().height() );
826+
newLabelItem->setSceneRect( QRectF( mRubberBandItem->transform().dx(), mRubberBandItem->transform().dy(), labelWidth, labelHeight ) );
827+
828+
composition()->addComposerLabel( newLabelItem );
829+
830+
composition()->clearSelection();
831+
newLabelItem->setSelected( true );
832+
emit selectedItemChanged( newLabelItem );
833+
834+
removeRubberBand();
835+
emit actionFinished();
836+
composition()->pushAddRemoveCommand( newLabelItem, tr( "Label added" ) );
837+
}
838+
break;
839+
840+
case AddLegend:
841+
if ( !composition() || !mRubberBandItem )
842+
{
843+
removeRubberBand();
844+
return;
845+
}
846+
else
847+
{
848+
QgsComposerLegend* newLegend = new QgsComposerLegend( composition() );
849+
newLegend->setSceneRect( QRectF( mRubberBandItem->transform().dx(), mRubberBandItem->transform().dy(), mRubberBandItem->rect().width(), mRubberBandItem->rect().height() ) );
850+
composition()->addComposerLegend( newLegend );
851+
newLegend->updateLegend();
852+
853+
composition()->clearSelection();
854+
newLegend->setSelected( true );
855+
emit selectedItemChanged( newLegend );
856+
857+
removeRubberBand();
858+
emit actionFinished();
859+
composition()->pushAddRemoveCommand( newLegend, tr( "Legend added" ) );
860+
}
861+
break;
862+
863+
case AddTable:
864+
if ( !composition() || !mRubberBandItem )
865+
{
866+
removeRubberBand();
867+
return;
868+
}
869+
else
870+
{
871+
QgsComposerAttributeTable* newTable = new QgsComposerAttributeTable( composition() );
872+
newTable->setSceneRect( QRectF( mRubberBandItem->transform().dx(), mRubberBandItem->transform().dy(), mRubberBandItem->rect().width(), qMax( mRubberBandItem->rect().height(), 15.0 ) ) );
873+
QList<const QgsComposerMap*> mapItemList = composition()->composerMapItems();
874+
if ( mapItemList.size() > 0 )
875+
{
876+
newTable->setComposerMap( mapItemList.at( 0 ) );
877+
newTable->setDisplayOnlyVisibleFeatures( true );
878+
}
879+
else
880+
{
881+
newTable->setDisplayOnlyVisibleFeatures( false );
882+
}
883+
composition()->addComposerTable( newTable );
884+
885+
composition()->clearSelection();
886+
newTable->setSelected( true );
887+
emit selectedItemChanged( newTable );
888+
889+
removeRubberBand();
890+
emit actionFinished();
891+
composition()->pushAddRemoveCommand( newTable, tr( "Table added" ) );
892+
}
893+
break;
894+
843895
case AddHtml:
844-
if ( composition() )
896+
if ( !composition() || !mRubberBandItem || ( mRubberBandItem->rect().width() < 0.1 && mRubberBandItem->rect().height() < 0.1 ) )
897+
{
898+
removeRubberBand();
899+
return;
900+
}
901+
else
845902
{
846903
QgsComposerHtml* composerHtml = new QgsComposerHtml( composition(), true );
847904
QgsAddRemoveMultiFrameCommand* command = new QgsAddRemoveMultiFrameCommand( QgsAddRemoveMultiFrameCommand::Added,
@@ -932,6 +989,10 @@ void QgsComposerView::mouseMoveEvent( QMouseEvent* e )
932989
case AddTriangle:
933990
case AddEllipse:
934991
case AddHtml:
992+
case AddPicture:
993+
case AddLabel:
994+
case AddLegend:
995+
case AddTable:
935996
//adjust rubber band item
936997
{
937998
updateRubberBand( scenePoint );

0 commit comments

Comments
 (0)
Please sign in to comment.