Skip to content

Commit 94362fe

Browse files
committed
Add signal when page is about to be deleted
1 parent 04e6529 commit 94362fe

File tree

4 files changed

+27
-0
lines changed

4 files changed

+27
-0
lines changed

python/core/layout/qgslayoutpagecollection.sip

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,14 @@ class QgsLayoutPageCollection : QObject
225225
Emitted when pages are added or removed from the collection.
226226
%End
227227

228+
void pageAboutToBeRemoved( int pageNumber );
229+
%Docstring
230+
Emitted just before a page is removed from the collection.
231+
232+
Page numbers in collections begin at 0 - so a page number of 0 indicates the
233+
first page.
234+
%End
235+
228236
};
229237

230238
/************************************************************************

src/core/layout/qgslayoutpagecollection.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ void QgsLayoutPageCollection::deletePage( int pageNumber )
221221
if ( pageNumber < 0 || pageNumber >= mPages.count() )
222222
return;
223223

224+
emit pageAboutToBeRemoved( pageNumber );
224225
QgsLayoutItemPage *page = mPages.takeAt( pageNumber );
225226
mLayout->removeItem( page );
226227
page->deleteLater();
@@ -232,6 +233,7 @@ void QgsLayoutPageCollection::deletePage( QgsLayoutItemPage *page )
232233
if ( !mPages.contains( page ) )
233234
return;
234235

236+
emit pageAboutToBeRemoved( mPages.indexOf( page ) );
235237
mPages.removeAll( page );
236238
page->deleteLater();
237239
reflow();

src/core/layout/qgslayoutpagecollection.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,14 @@ class CORE_EXPORT QgsLayoutPageCollection : public QObject
225225
*/
226226
void changed();
227227

228+
/**
229+
* Emitted just before a page is removed from the collection.
230+
*
231+
* Page numbers in collections begin at 0 - so a page number of 0 indicates the
232+
* first page.
233+
*/
234+
void pageAboutToBeRemoved( int pageNumber );
235+
228236
private:
229237

230238
QgsLayout *mLayout = nullptr;

tests/src/python/test_qgslayoutpagecollection.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
QgsSimpleFillSymbolLayer,
2727
QgsFillSymbol)
2828
from qgis.PyQt.QtCore import Qt, QCoreApplication, QEvent, QPointF, QRectF
29+
from qgis.PyQt.QtTest import QSignalSpy
2930

3031
from qgis.testing import start_app, unittest
3132

@@ -152,28 +153,36 @@ def testDeletePages(self):
152153
page2.setPageSize('A5')
153154
collection.addPage(page2)
154155

156+
page_about_to_be_removed_spy = QSignalSpy(collection.pageAboutToBeRemoved)
157+
155158
# delete page
156159
collection.deletePage(None)
157160
self.assertEqual(collection.pageCount(), 2)
161+
self.assertEqual(len(page_about_to_be_removed_spy), 0)
158162

159163
page3 = QgsLayoutItemPage(l)
160164
# try deleting a page not in collection
161165
collection.deletePage(page3)
162166
QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
163167
self.assertFalse(sip.isdeleted(page3))
164168
self.assertEqual(collection.pageCount(), 2)
169+
self.assertEqual(len(page_about_to_be_removed_spy), 0)
165170

166171
collection.deletePage(page)
167172
self.assertEqual(collection.pageCount(), 1)
168173
self.assertFalse(page in collection.pages())
169174
QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
170175
self.assertTrue(sip.isdeleted(page))
176+
self.assertEqual(len(page_about_to_be_removed_spy), 1)
177+
self.assertEqual(page_about_to_be_removed_spy[-1][0], 0)
171178

172179
collection.deletePage(page2)
173180
self.assertEqual(collection.pageCount(), 0)
174181
self.assertFalse(collection.pages())
175182
QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
176183
self.assertTrue(sip.isdeleted(page2))
184+
self.assertEqual(len(page_about_to_be_removed_spy), 2)
185+
self.assertEqual(page_about_to_be_removed_spy[-1][0], 0)
177186

178187
def testMaxPageWidth(self):
179188
"""

0 commit comments

Comments
 (0)