@@ -43,14 +43,21 @@ void QgsComposerMultiFrame::recalculateFrameSizes()
43
43
double currentHeight = 0 ;
44
44
QgsComposerFrame* currentItem = 0 ;
45
45
46
- QList<QgsComposerFrame*>::iterator frameIt = mFrameItems .begin ();
47
- for ( ; frameIt != mFrameItems .end (); ++frameIt )
46
+ for ( int i = 0 ; i < mFrameItems .size (); ++i )
48
47
{
49
48
if ( currentY >= totalHeight )
50
49
{
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
+ }
51
57
return ;
52
58
}
53
- currentItem = *frameIt;
59
+
60
+ currentItem = mFrameItems .value ( i );
54
61
currentHeight = currentItem->rect ().height ();
55
62
currentItem->setContentSection ( QRectF ( 0 , currentY, currentItem->rect ().width (), currentHeight ) );
56
63
currentItem->update ();
@@ -64,9 +71,8 @@ void QgsComposerMultiFrame::recalculateFrameSizes()
64
71
{
65
72
// find out on which page the lower left point of the last frame is
66
73
int page = currentItem->transform ().dy () / ( mComposition ->paperHeight () + mComposition ->spaceBetweenPages () );
67
- // double offset = currentItem->transform().dy() - page * ( mComposition->paperHeight() + mComposition->spaceBetweenPages() );
68
74
69
- // e.v. add a new page
75
+ // add new pages if necessary
70
76
if ( mComposition ->numPages () < ( page + 2 ) )
71
77
{
72
78
mComposition ->setNumPages ( page + 2 );
@@ -79,22 +85,27 @@ void QgsComposerMultiFrame::recalculateFrameSizes()
79
85
currentY += newFrame->rect ().height ();
80
86
currentItem = newFrame;
81
87
addFrame ( newFrame );
82
- mComposition ->addItem ( newFrame );
83
88
}
84
89
}
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
94
90
}
95
91
96
92
void QgsComposerMultiFrame::addFrame ( QgsComposerFrame* frame )
97
93
{
98
94
mFrameItems .push_back ( frame );
99
95
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 );
100
111
}
0 commit comments