@@ -673,7 +673,6 @@ QgsComposer::QgsComposer( QgsComposition *composition )
673
673
674
674
QgsComposer::~QgsComposer ()
675
675
{
676
- deleteItemWidgets ();
677
676
delete mPrinter ;
678
677
}
679
678
@@ -774,17 +773,7 @@ void QgsComposer::connectCompositionSlots()
774
773
775
774
connect ( mComposition , &QgsComposition::nameChanged, this , &QgsComposer::setWindowTitle );
776
775
connect ( mComposition , &QgsComposition::selectedItemChanged, this , &QgsComposer::showItemOptions );
777
- connect ( mComposition , &QgsComposition::composerArrowAdded, this , &QgsComposer::addComposerArrow );
778
- connect ( mComposition , &QgsComposition::composerPolygonAdded, this , &QgsComposer::addComposerPolygon );
779
- connect ( mComposition , &QgsComposition::composerPolylineAdded, this , &QgsComposer::addComposerPolyline );
780
- connect ( mComposition , &QgsComposition::composerHtmlFrameAdded, this , &QgsComposer::addComposerHtmlFrame );
781
- connect ( mComposition , &QgsComposition::composerLabelAdded, this , &QgsComposer::addComposerLabel );
782
- connect ( mComposition , &QgsComposition::composerMapAdded, this , &QgsComposer::addComposerMap );
783
- connect ( mComposition , &QgsComposition::composerScaleBarAdded, this , &QgsComposer::addComposerScaleBar );
784
- connect ( mComposition , &QgsComposition::composerLegendAdded, this , &QgsComposer::addComposerLegend );
785
- connect ( mComposition , &QgsComposition::composerPictureAdded, this , &QgsComposer::addComposerPicture );
786
- connect ( mComposition , &QgsComposition::composerShapeAdded, this , &QgsComposer::addComposerShape );
787
- connect ( mComposition , &QgsComposition::composerTableFrameAdded, this , &QgsComposer::addComposerTableV2 );
776
+ connect ( mComposition , &QgsComposition::itemAdded, this , &QgsComposer::compositionItemAdded );
788
777
connect ( mComposition , &QgsComposition::itemRemoved, this , &QgsComposer::deleteItem );
789
778
connect ( mComposition , &QgsComposition::paperSizeChanged, this , [ = ]
790
779
{
@@ -847,6 +836,7 @@ bool QgsComposer::loadFromTemplate( const QDomDocument &templateDoc, bool clearE
847
836
848
837
setUpdatesEnabled ( false );
849
838
bool result = mComposition ->loadFromTemplate ( templateDoc, nullptr , false , clearExisting );
839
+ cleanupAfterTemplateRead ();
850
840
setUpdatesEnabled ( true );
851
841
852
842
dlg->close ();
@@ -947,25 +937,19 @@ void QgsComposer::showItemOptions( QgsComposerItem *item )
947
937
{
948
938
if ( !item )
949
939
{
950
- mItemPropertiesStack ->takeMainPanel ();
940
+ delete mItemPropertiesStack ->takeMainPanel ();
951
941
return ;
952
942
}
953
943
954
- QMap<QgsComposerItem *, QgsPanelWidget *>::const_iterator it = mItemWidgetMap . constFind ( item );
955
- if ( it == mItemWidgetMap . constEnd () )
944
+ std::unique_ptr< QgsPanelWidget > widget ( createItemWidget ( item ) );
945
+ if ( ! widget )
956
946
{
957
947
return ;
958
948
}
959
949
960
- QgsPanelWidget *newWidget = it.value ();
961
- if ( !newWidget || newWidget == mItemPropertiesStack ->mainPanel () ) // bail out if new widget does not exist or is already there
962
- {
963
- return ;
964
- }
965
-
966
- ( void ) mItemPropertiesStack ->takeMainPanel ();
967
- newWidget->setDockMode ( true );
968
- mItemPropertiesStack ->setMainPanel ( newWidget );
950
+ delete mItemPropertiesStack ->takeMainPanel ();
951
+ widget->setDockMode ( true );
952
+ mItemPropertiesStack ->setMainPanel ( widget.release () );
969
953
}
970
954
971
955
void QgsComposer::on_mActionOptions_triggered ()
@@ -1039,6 +1023,63 @@ void QgsComposer::atlasFeatureChanged( QgsFeature *feature )
1039
1023
mapCanvas ()->expressionContextScope ().addVariable ( QgsExpressionContextScope::StaticVariable ( QStringLiteral ( " atlas_geometry" ), QVariant::fromValue ( atlasFeature.geometry () ), true ) );
1040
1024
}
1041
1025
1026
+ void QgsComposer::compositionItemAdded ( QgsComposerItem *item )
1027
+ {
1028
+ if ( item && item->type () == QgsComposerItem::ComposerMap )
1029
+ {
1030
+ connect ( this , &QgsComposer::zoomLevelChanged, static_cast < QgsComposerMap *>( item ), &QgsComposerMap::renderModeUpdateCachedImage );
1031
+ }
1032
+ }
1033
+
1034
+ QgsPanelWidget *QgsComposer::createItemWidget ( QgsComposerItem *item )
1035
+ {
1036
+ if ( !item )
1037
+ return nullptr ;
1038
+
1039
+ switch ( item->type () )
1040
+ {
1041
+ case QgsComposerItem::ComposerArrow:
1042
+ return new QgsComposerArrowWidget ( static_cast < QgsComposerArrow * >( item ) );
1043
+
1044
+ case QgsComposerItem::ComposerPolygon:
1045
+ return new QgsComposerPolygonWidget ( static_cast < QgsComposerPolygon * >( item ) );
1046
+
1047
+ case QgsComposerItem::ComposerPolyline:
1048
+ return new QgsComposerPolylineWidget ( static_cast < QgsComposerPolyline * >( item ) );
1049
+
1050
+ case QgsComposerItem::ComposerLabel:
1051
+ return new QgsComposerLabelWidget ( static_cast < QgsComposerLabel * >( item ) );
1052
+
1053
+ case QgsComposerItem::ComposerMap:
1054
+ return new QgsComposerMapWidget ( static_cast < QgsComposerMap * >( item ) );
1055
+
1056
+ case QgsComposerItem::ComposerScaleBar:
1057
+ return new QgsComposerScaleBarWidget ( static_cast < QgsComposerScaleBar * >( item ) );
1058
+
1059
+ case QgsComposerItem::ComposerLegend:
1060
+ return new QgsComposerLegendWidget ( static_cast < QgsComposerLegend * >( item ) );
1061
+
1062
+ case QgsComposerItem::ComposerPicture:
1063
+ return new QgsComposerPictureWidget ( static_cast < QgsComposerPicture * >( item ) );
1064
+
1065
+ case QgsComposerItem::ComposerFrame:
1066
+ {
1067
+ QgsComposerFrame *frame = static_cast < QgsComposerFrame * >( item );
1068
+ if ( QgsComposerHtml *html = dynamic_cast < QgsComposerHtml * >( frame->multiFrame () ) )
1069
+ {
1070
+ return new QgsComposerHtmlWidget ( html, frame );
1071
+ }
1072
+ else if ( QgsComposerAttributeTableV2 *table = dynamic_cast < QgsComposerAttributeTableV2 * >( frame->multiFrame () ) )
1073
+ {
1074
+ return new QgsComposerAttributeTableWidget ( table, frame );
1075
+ }
1076
+ break ;
1077
+ }
1078
+
1079
+ }
1080
+ return nullptr ; // no warnings!
1081
+ }
1082
+
1042
1083
void QgsComposer::on_mActionAtlasPreview_triggered ( bool checked )
1043
1084
{
1044
1085
QgsAtlasComposition *atlasMap = &mComposition ->atlasComposition ();
@@ -3376,145 +3417,9 @@ void QgsComposer::restoreGridSettings()
3376
3417
mActionShowBoxes ->setChecked ( mComposition ->boundingBoxesVisible () );
3377
3418
}
3378
3419
3379
- void QgsComposer::deleteItemWidgets ()
3380
- {
3381
- // delete all the items
3382
- qDeleteAll ( mItemWidgetMap );
3383
- mItemWidgetMap .clear ();
3384
- }
3385
-
3386
- void QgsComposer::addComposerArrow ( QgsComposerArrow *arrow )
3420
+ void QgsComposer::deleteItem ( QgsComposerItem * )
3387
3421
{
3388
- if ( !arrow )
3389
- {
3390
- return ;
3391
- }
3392
-
3393
- QgsComposerArrowWidget *arrowWidget = new QgsComposerArrowWidget ( arrow );
3394
- mItemWidgetMap .insert ( arrow, arrowWidget );
3395
- }
3396
-
3397
- void QgsComposer::addComposerPolygon ( QgsComposerPolygon *polygon )
3398
- {
3399
- if ( !polygon )
3400
- {
3401
- return ;
3402
- }
3403
-
3404
- QgsComposerPolygonWidget *polygonWidget = new QgsComposerPolygonWidget ( polygon );
3405
- mItemWidgetMap .insert ( polygon, polygonWidget );
3406
- }
3407
-
3408
- void QgsComposer::addComposerPolyline ( QgsComposerPolyline *polyline )
3409
- {
3410
- if ( !polyline )
3411
- {
3412
- return ;
3413
- }
3414
-
3415
- QgsComposerPolylineWidget *polylineWidget = new QgsComposerPolylineWidget ( polyline );
3416
- mItemWidgetMap .insert ( polyline, polylineWidget );
3417
- }
3418
-
3419
- void QgsComposer::addComposerMap ( QgsComposerMap *map )
3420
- {
3421
- if ( !map )
3422
- {
3423
- return ;
3424
- }
3425
-
3426
- QgsComposerMapWidget *mapWidget = new QgsComposerMapWidget ( map );
3427
- connect ( this , &QgsComposer::zoomLevelChanged, map, &QgsComposerMap::renderModeUpdateCachedImage );
3428
- mItemWidgetMap .insert ( map, mapWidget );
3429
- }
3430
-
3431
- void QgsComposer::addComposerLabel ( QgsComposerLabel *label )
3432
- {
3433
- if ( !label )
3434
- {
3435
- return ;
3436
- }
3437
-
3438
- QgsComposerLabelWidget *labelWidget = new QgsComposerLabelWidget ( label );
3439
- mItemWidgetMap .insert ( label, labelWidget );
3440
- }
3441
-
3442
- void QgsComposer::addComposerScaleBar ( QgsComposerScaleBar *scalebar )
3443
- {
3444
- if ( !scalebar )
3445
- {
3446
- return ;
3447
- }
3448
-
3449
- QgsComposerScaleBarWidget *sbWidget = new QgsComposerScaleBarWidget ( scalebar );
3450
- mItemWidgetMap .insert ( scalebar, sbWidget );
3451
- }
3452
-
3453
- void QgsComposer::addComposerLegend ( QgsComposerLegend *legend )
3454
- {
3455
- if ( !legend )
3456
- {
3457
- return ;
3458
- }
3459
-
3460
- QgsComposerLegendWidget *lWidget = new QgsComposerLegendWidget ( legend );
3461
- mItemWidgetMap .insert ( legend, lWidget );
3462
- }
3463
-
3464
- void QgsComposer::addComposerPicture ( QgsComposerPicture *picture )
3465
- {
3466
- if ( !picture )
3467
- {
3468
- return ;
3469
- }
3470
-
3471
- QgsComposerPictureWidget *pWidget = new QgsComposerPictureWidget ( picture );
3472
- mItemWidgetMap .insert ( picture, pWidget );
3473
- }
3474
-
3475
- void QgsComposer::addComposerShape ( QgsComposerShape *shape )
3476
- {
3477
- if ( !shape )
3478
- {
3479
- return ;
3480
- }
3481
- QgsComposerShapeWidget *sWidget = new QgsComposerShapeWidget ( shape );
3482
- mItemWidgetMap .insert ( shape, sWidget );
3483
- }
3484
-
3485
- void QgsComposer::addComposerTableV2 ( QgsComposerAttributeTableV2 *table, QgsComposerFrame *frame )
3486
- {
3487
- if ( !table )
3488
- {
3489
- return ;
3490
- }
3491
- QgsComposerAttributeTableWidget *tWidget = new QgsComposerAttributeTableWidget ( table, frame );
3492
- mItemWidgetMap .insert ( frame, tWidget );
3493
- }
3494
-
3495
- void QgsComposer::addComposerHtmlFrame ( QgsComposerHtml *html, QgsComposerFrame *frame )
3496
- {
3497
- if ( !html )
3498
- {
3499
- return ;
3500
- }
3501
-
3502
- QgsComposerHtmlWidget *hWidget = new QgsComposerHtmlWidget ( html, frame );
3503
- mItemWidgetMap .insert ( frame, hWidget );
3504
- }
3505
-
3506
- void QgsComposer::deleteItem ( QgsComposerItem *item )
3507
- {
3508
- QMap<QgsComposerItem *, QgsPanelWidget *>::const_iterator it = mItemWidgetMap .constFind ( item );
3509
-
3510
- if ( it == mItemWidgetMap .constEnd () )
3511
- {
3512
- return ;
3513
- }
3514
-
3515
- // the item itself is not deleted here (usually, this is done in the destructor of QgsAddRemoveItemCommand)
3516
- it.value ()->deleteLater ();
3517
- mItemWidgetMap .remove ( it.key () );
3422
+ showItemOptions ( nullptr );
3518
3423
}
3519
3424
3520
3425
void QgsComposer::setSelectionTool ()
@@ -3608,19 +3513,18 @@ void QgsComposer::showAdvancedEffectsWarning()
3608
3513
3609
3514
void QgsComposer::cleanupAfterTemplateRead ()
3610
3515
{
3611
- QMap<QgsComposerItem *, QgsPanelWidget *>::const_iterator itemIt = mItemWidgetMap .constBegin ();
3612
- for ( ; itemIt != mItemWidgetMap .constEnd (); ++itemIt )
3516
+ Q_FOREACH ( QGraphicsItem *item, mComposition ->items () )
3613
3517
{
3614
3518
// update all legends completely
3615
- QgsComposerLegend *legendItem = dynamic_cast <QgsComposerLegend *>( itemIt. key () );
3519
+ QgsComposerLegend *legendItem = dynamic_cast <QgsComposerLegend *>( item );
3616
3520
if ( legendItem )
3617
3521
{
3618
3522
legendItem->updateLegend ();
3619
3523
continue ;
3620
3524
}
3621
3525
3622
3526
// update composer map extent if it does not intersect the full extent of all layers
3623
- QgsComposerMap *mapItem = dynamic_cast <QgsComposerMap *>( itemIt. key () );
3527
+ QgsComposerMap *mapItem = dynamic_cast <QgsComposerMap *>( item );
3624
3528
if ( mapItem )
3625
3529
{
3626
3530
// test if composer map extent intersects extent of all layers
0 commit comments