@@ -43,14 +43,21 @@ void QgsComposerMultiFrame::recalculateFrameSizes()
4343 double currentHeight = 0 ;
4444 QgsComposerFrame* currentItem = 0 ;
4545
46- QList<QgsComposerFrame*>::iterator frameIt = mFrameItems .begin ();
47- for ( ; frameIt != mFrameItems .end (); ++frameIt )
46+ for ( int i = 0 ; i < mFrameItems .size (); ++i )
4847 {
4948 if ( currentY >= totalHeight )
5049 {
50+ if ( mResizeMode == ExtendToNextPage ) // remove unneeded frames in extent mode
51+ {
52+ for ( int j = mFrameItems .size (); j > i; --j )
53+ {
54+ removeFrame ( j - 1 );
55+ }
56+ }
5157 return ;
5258 }
53- currentItem = *frameIt;
59+
60+ currentItem = mFrameItems .value ( i );
5461 currentHeight = currentItem->rect ().height ();
5562 currentItem->setContentSection ( QRectF ( 0 , currentY, currentItem->rect ().width (), currentHeight ) );
5663 currentItem->update ();
@@ -64,9 +71,8 @@ void QgsComposerMultiFrame::recalculateFrameSizes()
6471 {
6572 // find out on which page the lower left point of the last frame is
6673 int page = currentItem->transform ().dy () / ( mComposition ->paperHeight () + mComposition ->spaceBetweenPages () );
67- // double offset = currentItem->transform().dy() - page * ( mComposition->paperHeight() + mComposition->spaceBetweenPages() );
6874
69- // e.v. add a new page
75+ // add new pages if necessary
7076 if ( mComposition ->numPages () < ( page + 2 ) )
7177 {
7278 mComposition ->setNumPages ( page + 2 );
@@ -79,22 +85,27 @@ void QgsComposerMultiFrame::recalculateFrameSizes()
7985 currentY += newFrame->rect ().height ();
8086 currentItem = newFrame;
8187 addFrame ( newFrame );
82- mComposition ->addItem ( newFrame );
8388 }
8489 }
85-
86- #if 0
87- if ( mFrameItems.size() > 0 )
88- {
89- QSizeF size = totalSize();
90- QgsComposerFrame* item = mFrameItems[0];
91- item->setContentSection( QRectF( 0, 0, item->rect().width(), item->rect().height() ) );
92- }
93- #endif // 0
9490}
9591
9692void QgsComposerMultiFrame::addFrame ( QgsComposerFrame* frame )
9793{
9894 mFrameItems .push_back ( frame );
9995 QObject::connect ( frame, SIGNAL ( sizeChanged () ), this , SLOT ( recalculateFrameSizes () ) );
96+ QObject::connect ( frame, SIGNAL ( destroyed () ), this , SLOT ( recalculateFrameSizes () ) );
97+ if ( mComposition )
98+ {
99+ mComposition ->addItem ( frame );
100+ }
101+ }
102+
103+ void QgsComposerMultiFrame::removeFrame ( int i )
104+ {
105+ QgsComposerFrame* frameItem = mFrameItems [i];
106+ if ( mComposition )
107+ {
108+ mComposition ->removeComposerItem ( frameItem );
109+ }
110+ mFrameItems .removeAt ( i );
100111}
0 commit comments