diff --git a/src/core/layout/qgslayoutitemregistry.cpp b/src/core/layout/qgslayoutitemregistry.cpp index 15786965ff5..1d93b13b508 100644 --- a/src/core/layout/qgslayoutitemregistry.cpp +++ b/src/core/layout/qgslayoutitemregistry.cpp @@ -115,7 +115,7 @@ bool QgsLayoutItemRegistry::removeLayoutItemType( int typeId ) if ( !mMetadata.contains( typeId ) ) return false; mMetadata.remove( typeId ); - emit multiFrameTypeRemoved( typeId ); + emit typeRemoved( typeId ); return true; } @@ -139,7 +139,7 @@ bool QgsLayoutItemRegistry::removeLayoutMultiFrameType( int typeId ) if ( !mMultiFrameMetadata.contains( typeId ) ) return false; mMultiFrameMetadata.remove( typeId ); - emit typeRemoved( typeId ); + emit multiFrameTypeRemoved( typeId ); return true; } diff --git a/tests/src/core/testqgslayoutitem.cpp b/tests/src/core/testqgslayoutitem.cpp index 3fee07b227b..774a9bebe52 100644 --- a/tests/src/core/testqgslayoutitem.cpp +++ b/tests/src/core/testqgslayoutitem.cpp @@ -244,7 +244,7 @@ void TestQgsLayoutItem::registry() QVERIFY( !registry.addLayoutItemType( metadata ) ); QCOMPARE( spyTypeAdded.count(), 1 ); - //retrieve metadata + // retrieve metadata QVERIFY( !registry.itemMetadata( -1 ) ); QCOMPARE( registry.itemMetadata( 2 )->visibleName(), QStringLiteral( "my type" ) ); QCOMPARE( registry.itemMetadata( 2 )->visiblePluralName(), QStringLiteral( "my types" ) ); @@ -261,7 +261,24 @@ void TestQgsLayoutItem::registry() registry.resolvePaths( 2, props, QgsPathResolver(), true ); QVERIFY( props.isEmpty() ); - //test populate + // Test remove item type + QgsLayoutItemMetadata *metadata_42 = new QgsLayoutItemMetadata( 42, QStringLiteral( "my other type" ), QStringLiteral( "my other types" ), create, resolve ); + QVERIFY( registry.addLayoutItemType( metadata_42 ) ); + QCOMPARE( registry.itemTypes().count(), 2 ); + QCOMPARE( spyTypeAdded.value( 1 ).at( 0 ).toInt(), 42 ); + + const QSignalSpy spyTypeRemoved( ®istry, &QgsLayoutItemRegistry::typeRemoved ); + QVERIFY( registry.removeLayoutItemType( 2 ) ); // Remove by id + QCOMPARE( spyTypeRemoved.count(), 1 ); + QCOMPARE( spyTypeRemoved.value( 0 ).at( 0 ).toInt(), 2 ); + QCOMPARE( registry.itemTypes().count(), 1 ); + + QVERIFY( registry.removeLayoutItemType( metadata_42 ) ); // Remove by metadata + QCOMPARE( spyTypeRemoved.count(), 2 ); + QCOMPARE( spyTypeRemoved.value( 1 ).at( 0 ).toInt(), 42 ); + QCOMPARE( registry.itemTypes().count(), 0 ); + + // test populate QgsLayoutItemRegistry reg2; QVERIFY( reg2.itemTypes().isEmpty() ); QVERIFY( reg2.populate() ); diff --git a/tests/src/core/testqgslayoutmultiframe.cpp b/tests/src/core/testqgslayoutmultiframe.cpp index ae400718cbf..b124b8b3612 100644 --- a/tests/src/core/testqgslayoutmultiframe.cpp +++ b/tests/src/core/testqgslayoutmultiframe.cpp @@ -538,6 +538,23 @@ void TestQgsLayoutMultiFrame::registry() QCOMPARE( props.size(), 1 ); registry.resolvePaths( QgsLayoutItemRegistry::PluginItem + 1, props, QgsPathResolver(), true ); QVERIFY( props.isEmpty() ); + + // Test remove multi frame type + QgsLayoutMultiFrameMetadata *metadata_42 = new QgsLayoutMultiFrameMetadata( QgsLayoutItemRegistry::PluginItem + 42, QStringLiteral( "TestMultiFrame42" ), create, resolve ); + QVERIFY( registry.addLayoutMultiFrameType( metadata_42 ) ); + QCOMPARE( registry.itemTypes().count(), 2 ); + QCOMPARE( spyTypeAdded.value( 1 ).at( 0 ).toInt(), QgsLayoutItemRegistry::PluginItem + 42 ); + + const QSignalSpy spyTypeRemoved( ®istry, &QgsLayoutItemRegistry::multiFrameTypeRemoved ); + QVERIFY( registry.removeLayoutMultiFrameType( QgsLayoutItemRegistry::PluginItem + 1 ) ); // Remove by id + QCOMPARE( spyTypeRemoved.count(), 1 ); + QCOMPARE( spyTypeRemoved.value( 0 ).at( 0 ).toInt(), QgsLayoutItemRegistry::PluginItem + 1 ); + QCOMPARE( registry.itemTypes().count(), 1 ); + + QVERIFY( registry.removeLayoutMultiFrameType( metadata_42 ) ); // Remove by metadata + QCOMPARE( spyTypeRemoved.count(), 2 ); + QCOMPARE( spyTypeRemoved.value( 1 ).at( 0 ).toInt(), QgsLayoutItemRegistry::PluginItem + 42 ); + QCOMPARE( registry.itemTypes().count(), 0 ); } void TestQgsLayoutMultiFrame::deleteFrame() diff --git a/tests/src/gui/testqgslayoutview.cpp b/tests/src/gui/testqgslayoutview.cpp index 3a52fc10196..de94a32567a 100644 --- a/tests/src/gui/testqgslayoutview.cpp +++ b/tests/src/gui/testqgslayoutview.cpp @@ -328,6 +328,27 @@ void TestQgsLayoutView::guiRegistry() QCOMPARE( item->type(), QgsLayoutItemRegistry::LayoutItem + 101 ); QCOMPARE( static_cast( item )->mFlag, 2 ); delete item; + + // test removing item metadata + QCOMPARE( registry.itemMetadataIds().count(), 3 ); + const QSignalSpy spyTypeRemoved( ®istry, &QgsLayoutItemGuiRegistry::typeRemoved ); + QVERIFY( registry.removeLayoutItemGuiMetadata( QgsLayoutItemRegistry::LayoutItem + 101 ) ); + QCOMPARE( registry.itemMetadataIds().count(), 2 ); + QVERIFY( registry.removeLayoutItemGuiMetadata( QgsLayoutItemRegistry::LayoutItem + 101 ) ); + QCOMPARE( registry.itemMetadataIds().count(), 1 ); + QVERIFY( registry.removeLayoutItemGuiMetadata( QgsLayoutItemRegistry::LayoutItem + 101 ) ); + QCOMPARE( registry.itemMetadataIds().count(), 0 ); + QCOMPARE( registry.removeLayoutItemGuiMetadata( QgsLayoutItemRegistry::LayoutItem + 101 ), false ); + QCOMPARE( spyTypeRemoved.count(), 3 ); + QCOMPARE( registry.itemMetadataIds().count(), 0 ); + + // test removing item group + const QSignalSpy spyGroupRemoved( ®istry, &QgsLayoutItemGuiRegistry::groupRemoved ); + QVERIFY( registry.removeItemGroup( QStringLiteral( "g1" ) ) ); + QCOMPARE( spyGroupRemoved.count(), 1 ); + QCOMPARE( spyGroupRemoved.at( 0 ).at( 0 ).toString(), QStringLiteral( "g1" ) ); + // can't remove group again + QVERIFY( !registry.removeItemGroup( QStringLiteral( "g1" ) ) ); } void TestQgsLayoutView::rubberBand()