33
33
#include < QSettings>
34
34
35
35
QgsComposition::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 ),
37
37
mSnapToGrid( false ), mSnapGridResolution( 0.0 ), mSnapGridOffsetX( 0.0 ), mSnapGridOffsetY( 0.0 ), mActiveCommand( 0 )
38
38
{
39
39
setBackgroundBrush ( Qt::gray );
40
+ addPaperItem ();
40
41
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 );
46
42
mPrintResolution = 300 ; // hardcoded default
47
43
loadSettings ();
48
44
}
49
45
50
46
QgsComposition::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 ),
52
48
mSelectionTolerance( 0.0 ), mSnapToGrid( false ), mSnapGridResolution( 0.0 ), mSnapGridOffsetX( 0.0 ), mSnapGridOffsetY( 0.0 ), mActiveCommand( 0 )
53
49
{
54
50
loadSettings ();
55
51
}
56
52
57
53
QgsComposition::~QgsComposition ()
58
54
{
59
- delete mPaperItem ;
55
+ for ( int i = 0 ; i < mPages .size (); ++i )
56
+ {
57
+ delete mPages .at ( i );
58
+ }
60
59
61
60
// make sure that all composer items are removed before
62
61
// this class is deconstructed - to avoid segfaults
@@ -66,21 +65,47 @@ QgsComposition::~QgsComposition()
66
65
67
66
void QgsComposition::setPaperSize ( double width, double height )
68
67
{
69
- if ( mPaperItem )
68
+ for ( int i = 0 ; i < mPages . size (); ++i )
70
69
{
71
- mPaperItem ->setRect ( QRectF ( 0 , 0 , width, height ) );
72
- emit paperSizeChanged ();
70
+ mPages .at ( i )->setRect ( QRectF ( 0 , 0 , width, height ) );
73
71
}
74
72
}
75
73
76
74
double QgsComposition::paperHeight () const
77
75
{
78
- return mPaperItem -> rect (). height () ;
76
+ return mPageHeight ;
79
77
}
80
78
81
79
double QgsComposition::paperWidth () const
82
80
{
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 ();
84
109
}
85
110
86
111
QgsComposerItem* QgsComposition::composerItemAt ( const QPointF & position )
@@ -100,7 +125,8 @@ QgsComposerItem* QgsComposition::composerItemAt( const QPointF & position )
100
125
for ( ; itemIt != itemList.end (); ++itemIt )
101
126
{
102
127
QgsComposerItem* composerItem = dynamic_cast <QgsComposerItem *>( *itemIt );
103
- if ( composerItem && composerItem != mPaperItem )
128
+ QgsPaperItem* paperItem = dynamic_cast <QgsPaperItem*>( *itemIt );
129
+ if ( composerItem && !paperItem )
104
130
{
105
131
return composerItem;
106
132
}
@@ -187,11 +213,13 @@ bool QgsComposition::writeXML( QDomElement& composerElem, QDomDocument& doc )
187
213
}
188
214
189
215
QDomElement compositionElem = doc.createElement ( " Composition" );
216
+ #if 0
190
217
if ( mPaperItem )
191
218
{
192
219
compositionElem.setAttribute( "paperWidth", QString::number( mPaperItem->rect().width() ) );
193
220
compositionElem.setAttribute( "paperHeight", QString::number( mPaperItem->rect().height() ) );
194
221
}
222
+ #endif // 0
195
223
196
224
// snapping
197
225
if ( mSnapToGrid )
@@ -229,11 +257,13 @@ bool QgsComposition::readXML( const QDomElement& compositionElem, const QDomDocu
229
257
230
258
if ( widthConversionOk && heightConversionOk )
231
259
{
260
+ #if 0
232
261
delete mPaperItem;
233
262
mPaperItem = new QgsPaperItem( 0, 0, paperWidth, paperHeight, this );
234
263
mPaperItem->setBrush( Qt::white );
235
264
addItem( mPaperItem );
236
265
mPaperItem->setZValue( 0 );
266
+ #endif // 0
237
267
}
238
268
239
269
// snapping
@@ -252,10 +282,12 @@ bool QgsComposition::readXML( const QDomElement& compositionElem, const QDomDocu
252
282
253
283
mPrintResolution = compositionElem.attribute ( " printResolution" , " 300" ).toInt ();
254
284
285
+ #if 0
255
286
if ( mPaperItem )
256
287
{
257
288
mPaperItem->update();
258
289
}
290
+ #endif // 0
259
291
260
292
return true ;
261
293
}
@@ -824,60 +856,72 @@ int QgsComposition::boundingRectOfSelectedItems( QRectF& bRect )
824
856
void QgsComposition::setSnapToGridEnabled ( bool b )
825
857
{
826
858
mSnapToGrid = b;
859
+ #if 0
827
860
if ( mPaperItem )
828
861
{
829
862
mPaperItem->update();
830
863
}
864
+ #endif // 0
831
865
saveSettings ();
832
866
}
833
867
834
868
void QgsComposition::setSnapGridResolution ( double r )
835
869
{
836
870
mSnapGridResolution = r;
871
+ #if 0
837
872
if ( mPaperItem )
838
873
{
839
874
mPaperItem->update();
840
875
}
876
+ #endif // 0
841
877
saveSettings ();
842
878
}
843
879
844
880
void QgsComposition::setSnapGridOffsetX ( double offset )
845
881
{
846
882
mSnapGridOffsetX = offset;
883
+ #if 0
847
884
if ( mPaperItem )
848
885
{
849
886
mPaperItem->update();
850
887
}
888
+ #endif // 0
851
889
saveSettings ();
852
890
}
853
891
854
892
void QgsComposition::setSnapGridOffsetY ( double offset )
855
893
{
856
894
mSnapGridOffsetY = offset;
895
+ #if 0
857
896
if ( mPaperItem )
858
897
{
859
898
mPaperItem->update();
860
899
}
900
+ #endif // 0
861
901
saveSettings ();
862
902
}
863
903
864
904
void QgsComposition::setGridPen ( const QPen& p )
865
905
{
866
906
mGridPen = p;
907
+ #if 0
867
908
if ( mPaperItem )
868
909
{
869
910
mPaperItem->update();
870
911
}
912
+ #endif // 0
871
913
saveSettings ();
872
914
}
873
915
874
916
void QgsComposition::setGridStyle ( GridStyle s )
875
917
{
876
918
mGridStyle = s;
919
+ #if 0
877
920
if ( mPaperItem )
878
921
{
879
922
mPaperItem->update();
880
923
}
924
+ #endif // 0
881
925
saveSettings ();
882
926
}
883
927
@@ -1197,3 +1241,15 @@ void QgsComposition::sendItemAddedSignal( QgsComposerItem* item )
1197
1241
return ;
1198
1242
}
1199
1243
}
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