@@ -328,6 +328,7 @@ void QgsComposerView::mousePressEvent( QMouseEvent* e )
328
328
return ;
329
329
}
330
330
331
+ // create rubber band for adding line items
331
332
case AddArrow:
332
333
{
333
334
mRubberBandStartPos = QPointF ( snappedScenePoint.x (), snappedScenePoint.y () );
@@ -338,12 +339,16 @@ void QgsComposerView::mousePressEvent( QMouseEvent* e )
338
339
break ;
339
340
}
340
341
341
- // create rubber band for map and ellipse items
342
+ // create rubber band for adding rectangular items
342
343
case AddMap:
343
344
case AddRectangle:
344
345
case AddTriangle:
345
346
case AddEllipse:
346
347
case AddHtml:
348
+ case AddPicture:
349
+ case AddLabel:
350
+ case AddLegend:
351
+ case AddTable:
347
352
{
348
353
QTransform t;
349
354
mRubberBandItem = new QGraphicsRectItem ( 0 , 0 , 0 , 0 );
@@ -356,24 +361,6 @@ void QgsComposerView::mousePressEvent( QMouseEvent* e )
356
361
}
357
362
break ;
358
363
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
-
377
364
case AddScalebar:
378
365
if ( composition () )
379
366
{
@@ -396,54 +383,6 @@ void QgsComposerView::mousePressEvent( QMouseEvent* e )
396
383
}
397
384
break ;
398
385
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 ;
447
386
default :
448
387
break ;
449
388
}
@@ -794,7 +733,14 @@ void QgsComposerView::mouseReleaseEvent( QMouseEvent* e )
794
733
break ;
795
734
}
796
735
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
798
744
{
799
745
QPointF scenePoint = mapToScene ( e->pos () );
800
746
QPointF snappedScenePoint = composition ()->snapPointToGrid ( scenePoint );
@@ -820,12 +766,12 @@ void QgsComposerView::mouseReleaseEvent( QMouseEvent* e )
820
766
break ;
821
767
822
768
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 ) )
824
770
{
825
771
removeRubberBand ();
826
772
return ;
827
773
}
828
- if ( composition () )
774
+ else
829
775
{
830
776
QgsComposerMap* composerMap = new QgsComposerMap ( composition (), mRubberBandItem ->transform ().dx (), mRubberBandItem ->transform ().dy (), mRubberBandItem ->rect ().width (), mRubberBandItem ->rect ().height () );
831
777
composition ()->addComposerMap ( composerMap );
@@ -840,8 +786,119 @@ void QgsComposerView::mouseReleaseEvent( QMouseEvent* e )
840
786
}
841
787
break ;
842
788
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
+
843
895
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
845
902
{
846
903
QgsComposerHtml* composerHtml = new QgsComposerHtml ( composition (), true );
847
904
QgsAddRemoveMultiFrameCommand* command = new QgsAddRemoveMultiFrameCommand ( QgsAddRemoveMultiFrameCommand::Added,
@@ -932,6 +989,10 @@ void QgsComposerView::mouseMoveEvent( QMouseEvent* e )
932
989
case AddTriangle:
933
990
case AddEllipse:
934
991
case AddHtml:
992
+ case AddPicture:
993
+ case AddLabel:
994
+ case AddLegend:
995
+ case AddTable:
935
996
// adjust rubber band item
936
997
{
937
998
updateRubberBand ( scenePoint );
0 commit comments