3333#include < QSettings>
3434
3535QgsComposition::QgsComposition ( QgsMapRenderer* mapRenderer ):
36- QGraphicsScene( 0 ), mMapRenderer( mapRenderer ), mPlotStyle( QgsComposition::Preview ), mPaperItem( 0 ), mPrintAsRaster( false ), mSelectionTolerance( 0.0 ),
36+ QGraphicsScene( 0 ), mMapRenderer( mapRenderer ), mPlotStyle( QgsComposition::Preview ), mPageWidth( 297 ), mPageHeight( 210 ), mPrintAsRaster( false ), mSelectionTolerance( 0.0 ),
3737 mSnapToGrid( false ), mSnapGridResolution( 0.0 ), mSnapGridOffsetX( 0.0 ), mSnapGridOffsetY( 0.0 ), mActiveCommand( 0 )
3838{
3939 setBackgroundBrush ( Qt::gray );
40+ addPaperItem ();
4041
41- // set paper item
42- mPaperItem = new QgsPaperItem ( 0 , 0 , 297 , 210 , this ); // default size A4
43- mPaperItem ->setBrush ( Qt::white );
44- addItem ( mPaperItem );
45- mPaperItem ->setZValue ( 0 );
4642 mPrintResolution = 300 ; // hardcoded default
4743 loadSettings ();
4844}
4945
5046QgsComposition::QgsComposition ():
51- QGraphicsScene( 0 ), mMapRenderer( 0 ), mPlotStyle( QgsComposition::Preview ), mPaperItem( 0 ), mPrintAsRaster( false ),
47+ QGraphicsScene( 0 ), mMapRenderer( 0 ), mPlotStyle( QgsComposition::Preview ), mPageWidth( 297 ), mPageHeight( 210 ), mPrintAsRaster( false ),
5248 mSelectionTolerance( 0.0 ), mSnapToGrid( false ), mSnapGridResolution( 0.0 ), mSnapGridOffsetX( 0.0 ), mSnapGridOffsetY( 0.0 ), mActiveCommand( 0 )
5349{
5450 loadSettings ();
5551}
5652
5753QgsComposition::~QgsComposition ()
5854{
59- delete mPaperItem ;
55+ for ( int i = 0 ; i < mPages .size (); ++i )
56+ {
57+ delete mPages .at ( i );
58+ }
6059
6160 // make sure that all composer items are removed before
6261 // this class is deconstructed - to avoid segfaults
@@ -66,21 +65,47 @@ QgsComposition::~QgsComposition()
6665
6766void QgsComposition::setPaperSize ( double width, double height )
6867{
69- if ( mPaperItem )
68+ for ( int i = 0 ; i < mPages . size (); ++i )
7069 {
71- mPaperItem ->setRect ( QRectF ( 0 , 0 , width, height ) );
72- emit paperSizeChanged ();
70+ mPages .at ( i )->setRect ( QRectF ( 0 , 0 , width, height ) );
7371 }
7472}
7573
7674double QgsComposition::paperHeight () const
7775{
78- return mPaperItem -> rect (). height () ;
76+ return mPageHeight ;
7977}
8078
8179double QgsComposition::paperWidth () const
8280{
83- return mPaperItem ->rect ().width ();
81+ return mPageWidth ;
82+ }
83+
84+ void QgsComposition::setNumPages ( int pages )
85+ {
86+ int currentPages = numPages ();
87+ int diff = pages - currentPages;
88+ if ( diff >= 0 )
89+ {
90+ for ( int i = 0 ; i < diff; ++i )
91+ {
92+ addPaperItem ();
93+ }
94+ }
95+ else
96+ {
97+ diff = -diff;
98+ for ( int i = 0 ; i < diff; ++i )
99+ {
100+ delete mPages .last ();
101+ mPages .removeLast ();
102+ }
103+ }
104+ }
105+
106+ int QgsComposition::numPages () const
107+ {
108+ return mPages .size ();
84109}
85110
86111QgsComposerItem* QgsComposition::composerItemAt ( const QPointF & position )
@@ -100,7 +125,8 @@ QgsComposerItem* QgsComposition::composerItemAt( const QPointF & position )
100125 for ( ; itemIt != itemList.end (); ++itemIt )
101126 {
102127 QgsComposerItem* composerItem = dynamic_cast <QgsComposerItem *>( *itemIt );
103- if ( composerItem && composerItem != mPaperItem )
128+ QgsPaperItem* paperItem = dynamic_cast <QgsPaperItem*>( *itemIt );
129+ if ( composerItem && !paperItem )
104130 {
105131 return composerItem;
106132 }
@@ -187,11 +213,13 @@ bool QgsComposition::writeXML( QDomElement& composerElem, QDomDocument& doc )
187213 }
188214
189215 QDomElement compositionElem = doc.createElement ( " Composition" );
216+ #if 0
190217 if ( mPaperItem )
191218 {
192219 compositionElem.setAttribute( "paperWidth", QString::number( mPaperItem->rect().width() ) );
193220 compositionElem.setAttribute( "paperHeight", QString::number( mPaperItem->rect().height() ) );
194221 }
222+ #endif // 0
195223
196224 // snapping
197225 if ( mSnapToGrid )
@@ -229,11 +257,13 @@ bool QgsComposition::readXML( const QDomElement& compositionElem, const QDomDocu
229257
230258 if ( widthConversionOk && heightConversionOk )
231259 {
260+ #if 0
232261 delete mPaperItem;
233262 mPaperItem = new QgsPaperItem( 0, 0, paperWidth, paperHeight, this );
234263 mPaperItem->setBrush( Qt::white );
235264 addItem( mPaperItem );
236265 mPaperItem->setZValue( 0 );
266+ #endif // 0
237267 }
238268
239269 // snapping
@@ -252,10 +282,12 @@ bool QgsComposition::readXML( const QDomElement& compositionElem, const QDomDocu
252282
253283 mPrintResolution = compositionElem.attribute ( " printResolution" , " 300" ).toInt ();
254284
285+ #if 0
255286 if ( mPaperItem )
256287 {
257288 mPaperItem->update();
258289 }
290+ #endif // 0
259291
260292 return true ;
261293}
@@ -824,60 +856,72 @@ int QgsComposition::boundingRectOfSelectedItems( QRectF& bRect )
824856void QgsComposition::setSnapToGridEnabled ( bool b )
825857{
826858 mSnapToGrid = b;
859+ #if 0
827860 if ( mPaperItem )
828861 {
829862 mPaperItem->update();
830863 }
864+ #endif // 0
831865 saveSettings ();
832866}
833867
834868void QgsComposition::setSnapGridResolution ( double r )
835869{
836870 mSnapGridResolution = r;
871+ #if 0
837872 if ( mPaperItem )
838873 {
839874 mPaperItem->update();
840875 }
876+ #endif // 0
841877 saveSettings ();
842878}
843879
844880void QgsComposition::setSnapGridOffsetX ( double offset )
845881{
846882 mSnapGridOffsetX = offset;
883+ #if 0
847884 if ( mPaperItem )
848885 {
849886 mPaperItem->update();
850887 }
888+ #endif // 0
851889 saveSettings ();
852890}
853891
854892void QgsComposition::setSnapGridOffsetY ( double offset )
855893{
856894 mSnapGridOffsetY = offset;
895+ #if 0
857896 if ( mPaperItem )
858897 {
859898 mPaperItem->update();
860899 }
900+ #endif // 0
861901 saveSettings ();
862902}
863903
864904void QgsComposition::setGridPen ( const QPen& p )
865905{
866906 mGridPen = p;
907+ #if 0
867908 if ( mPaperItem )
868909 {
869910 mPaperItem->update();
870911 }
912+ #endif // 0
871913 saveSettings ();
872914}
873915
874916void QgsComposition::setGridStyle ( GridStyle s )
875917{
876918 mGridStyle = s;
919+ #if 0
877920 if ( mPaperItem )
878921 {
879922 mPaperItem->update();
880923 }
924+ #endif // 0
881925 saveSettings ();
882926}
883927
@@ -1197,3 +1241,15 @@ void QgsComposition::sendItemAddedSignal( QgsComposerItem* item )
11971241 return ;
11981242 }
11991243}
1244+
1245+ void QgsComposition::addPaperItem ()
1246+ {
1247+ double paperHeight = this ->paperHeight ();
1248+ double paperWidth = this ->paperWidth ();
1249+ double currentY = paperHeight * mPages .size ();
1250+ QgsPaperItem* paperItem = new QgsPaperItem ( 0 , currentY, paperWidth, paperHeight, this ); // default size A4
1251+ paperItem->setBrush ( Qt::white );
1252+ addItem ( paperItem );
1253+ paperItem->setZValue ( 0 );
1254+ mPages .push_back ( paperItem );
1255+ }
0 commit comments