@@ -25,9 +25,9 @@ QgsCompositionWidget::QgsCompositionWidget( QWidget* parent, QgsComposition* c )
2525 setupUi ( this );
2626 createPaperEntries ();
2727
28- // unit (only mm at the moment, therefore disabled)
29- mPaperUnitsComboBox ->addItem ( " mm" );
30- mPaperUnitsComboBox ->setEnabled ( false );
28+ // unit
29+ mPaperUnitsComboBox ->addItem ( tr ( " mm" ) );
30+ mPaperUnitsComboBox ->addItem ( tr ( " inch " ) );
3131
3232 // orientation
3333 mPaperOrientationComboBox ->blockSignals ( true );
@@ -112,36 +112,44 @@ QgsCompositionWidget::~QgsCompositionWidget()
112112
113113void QgsCompositionWidget::createPaperEntries ()
114114{
115+ QList<QgsCompositionPaper> formats;
116+
117+ formats
118+ << QgsCompositionPaper ( tr ( " A5 (148x210 mm)" ), 148 , 210 )
119+ << QgsCompositionPaper ( tr ( " A4 (210x297 mm)" ), 210 , 297 )
120+ << QgsCompositionPaper ( tr ( " A3 (297x420 mm)" ), 297 , 420 )
121+ << QgsCompositionPaper ( tr ( " A2 (420x594 mm)" ), 420 , 594 )
122+ << QgsCompositionPaper ( tr ( " A1 (594x841 mm)" ), 594 , 841 )
123+ << QgsCompositionPaper ( tr ( " A0 (841x1189 mm)" ), 841 , 1189 )
124+ << QgsCompositionPaper ( tr ( " B5 (176 x 250 mm)" ), 176 , 250 )
125+ << QgsCompositionPaper ( tr ( " B4 (250 x 353 mm)" ), 250 , 353 )
126+ << QgsCompositionPaper ( tr ( " B3 (353 x 500 mm)" ), 353 , 500 )
127+ << QgsCompositionPaper ( tr ( " B2 (500 x 707 mm)" ), 500 , 707 )
128+ << QgsCompositionPaper ( tr ( " B1 (707 x 1000 mm)" ), 707 , 1000 )
129+ << QgsCompositionPaper ( tr ( " B0 (1000 x 1414 mm)" ), 1000 , 1414 )
130+ << QgsCompositionPaper ( tr ( " Legal (8.5x14 inches)" ), 216 , 356 )
131+ << QgsCompositionPaper ( tr ( " ANSI A (Letter; 8.5x11 inches)" ), 216 , 279 )
132+ << QgsCompositionPaper ( tr ( " ANSI B (Tabloid; 11x17 inches)" ), 279 , 432 )
133+ << QgsCompositionPaper ( tr ( " ANSI C (17x22 inches)" ), 432 , 559 )
134+ << QgsCompositionPaper ( tr ( " ANSI D (22x34 inches)" ), 559 , 864 )
135+ << QgsCompositionPaper ( tr ( " ANSI E (34x44 inches)" ), 864 , 1118 )
136+ << QgsCompositionPaper ( tr ( " Arch A (9x12 inches)" ), 229 , 305 )
137+ << QgsCompositionPaper ( tr ( " Arch B (12x18 inches)" ), 305 , 457 )
138+ << QgsCompositionPaper ( tr ( " Arch C (18x24 inches)" ), 457 , 610 )
139+ << QgsCompositionPaper ( tr ( " Arch D (24x36 inches)" ), 610 , 914 )
140+ << QgsCompositionPaper ( tr ( " Arch E (36x48 inches)" ), 914 , 1219 )
141+ << QgsCompositionPaper ( tr ( " Arch E1 (30x42 inches)" ), 762 , 1067 )
142+ ;
143+
115144 mPaperSizeComboBox ->blockSignals ( true );
116- mPaperSizeComboBox ->insertItem ( 0 , tr ( " Custom" ) );
117- mPaperMap .insert ( tr ( " A5 (148x210 mm)" ), QgsCompositionPaper ( tr ( " A5 (148x210 mm)" ), 148 , 210 ) );
118- mPaperSizeComboBox ->insertItem ( 1 , tr ( " A5 (148x210 mm)" ) );
119- mPaperMap .insert ( tr ( " A4 (210x297 mm)" ), QgsCompositionPaper ( tr ( " A4 (210x297 mm)" ), 210 , 297 ) );
120- mPaperSizeComboBox ->insertItem ( 2 , tr ( " A4 (210x297 mm)" ) );
121- mPaperMap .insert ( tr ( " A3 (297x420 mm)" ), QgsCompositionPaper ( tr ( " A3 (297x420 mm)" ), 297 , 420 ) );
122- mPaperSizeComboBox ->insertItem ( 3 , tr ( " A3 (297x420 mm)" ) );
123- mPaperMap .insert ( tr ( " A2 (420x594 mm)" ), QgsCompositionPaper ( tr ( " A2 (420x594 mm)" ), 420 , 594 ) );
124- mPaperSizeComboBox ->insertItem ( 4 , tr ( " A2 (420x594 mm)" ) );
125- mPaperMap .insert ( tr ( " A1 (594x841 mm)" ), QgsCompositionPaper ( tr ( " A1 (594x841 mm)" ), 594 , 841 ) );
126- mPaperSizeComboBox ->insertItem ( 5 , tr ( " A1 (594x841 mm)" ) );
127- mPaperMap .insert ( tr ( " A0 (841x1189 mm)" ), QgsCompositionPaper ( tr ( " A0 (841x1189 mm)" ), 841 , 1189 ) );
128- mPaperSizeComboBox ->insertItem ( 6 , tr ( " A0 (841x1189 mm)" ) );
129- mPaperMap .insert ( tr ( " B5 (176 x 250 mm)" ), QgsCompositionPaper ( tr ( " B5 (176 x 250 mm)" ), 176 , 250 ) );
130- mPaperSizeComboBox ->insertItem ( 7 , tr ( " B5 (176 x 250 mm)" ) );
131- mPaperMap .insert ( tr ( " B4 (250 x 353 mm)" ), QgsCompositionPaper ( tr ( " B4 (250 x 353 mm)" ), 250 , 353 ) );
132- mPaperSizeComboBox ->insertItem ( 8 , tr ( " B4 (250 x 353 mm)" ) );
133- mPaperMap .insert ( tr ( " B3 (353 x 500 mm)" ), QgsCompositionPaper ( tr ( " B3 (353 x 500 mm)" ), 353 , 500 ) );
134- mPaperSizeComboBox ->insertItem ( 9 , tr ( " B3 (353 x 500 mm)" ) );
135- mPaperMap .insert ( tr ( " B2 (500 x 707 mm)" ), QgsCompositionPaper ( tr ( " B2 (500 x 707 mm)" ), 500 , 707 ) );
136- mPaperSizeComboBox ->insertItem ( 10 , tr ( " B2 (500 x 707 mm)" ) );
137- mPaperMap .insert ( tr ( " B1 (707 x 1000 mm)" ), QgsCompositionPaper ( tr ( " B1 (707 x 1000 mm)" ), 707 , 1000 ) );
138- mPaperSizeComboBox ->insertItem ( 11 , tr ( " B1 (707 x 1000 mm)" ) );
139- mPaperMap .insert ( tr ( " B0 (1000 x 1414 mm)" ), QgsCompositionPaper ( tr ( " B0 (1000 x 1414 mm)" ), 1000 , 1414 ) );
140- mPaperSizeComboBox ->insertItem ( 12 , tr ( " B0 (1000 x 1414 mm)" ) );
141- mPaperMap .insert ( tr ( " Letter (8.5x11 inches)" ), QgsCompositionPaper ( tr ( " Letter (8.5x11 inches)" ), 216 , 279 ) );
142- mPaperSizeComboBox ->insertItem ( 13 , tr ( " Letter (8.5x11 inches)" ) );
143- mPaperMap .insert ( tr ( " Legal (8.5x14 inches)" ), QgsCompositionPaper ( tr ( " Legal (8.5x14 inches)" ), 216 , 356 ) );
144- mPaperSizeComboBox ->insertItem ( 14 , tr ( " Legal (8.5x14 inches)" ) );
145+ mPaperSizeComboBox ->addItem ( tr ( " Custom" ) );
146+
147+ for ( QList<QgsCompositionPaper>::const_iterator it = formats.begin (); it != formats.end (); it++ )
148+ {
149+ mPaperSizeComboBox ->addItem ( it->mName );
150+ mPaperMap .insert ( it->mName , *it );
151+ }
152+
145153 mPaperSizeComboBox ->blockSignals ( false );
146154}
147155
@@ -151,11 +159,13 @@ void QgsCompositionWidget::on_mPaperSizeComboBox_currentIndexChanged( const QStr
151159 {
152160 mPaperWidthLineEdit ->setEnabled ( true );
153161 mPaperHeightLineEdit ->setEnabled ( true );
162+ mPaperUnitsComboBox ->setEnabled ( true );
154163 }
155164 else
156165 {
157166 mPaperWidthLineEdit ->setEnabled ( false );
158167 mPaperHeightLineEdit ->setEnabled ( false );
168+ mPaperUnitsComboBox ->setEnabled ( false );
159169 }
160170 applyCurrentPaperSettings ();
161171}
@@ -174,19 +184,45 @@ void QgsCompositionWidget::on_mPaperOrientationComboBox_currentIndexChanged( con
174184 }
175185}
176186
177- void QgsCompositionWidget::adjustOrientation ( )
187+ void QgsCompositionWidget::on_mPaperUnitsComboBox_currentIndexChanged ( const QString& text )
178188{
179- double width, height ;
180- bool conversionSuccess ;
189+ double width = size ( mPaperWidthLineEdit ) ;
190+ double height = size ( mPaperHeightLineEdit ) ;
181191
182- width = mPaperWidthLineEdit ->text ().toDouble ( &conversionSuccess );
183- if ( !conversionSuccess )
192+ if ( mPaperUnitsComboBox ->currentIndex () == 0 )
184193 {
185- return ;
194+ // mm, value was inch
195+ width *= 25.4 ;
196+ height *= 25.4 ;
197+ }
198+ else
199+ {
200+ // inch, values was mm,
201+ width /= 25.4 ;
202+ height /= 25.4 ;
186203 }
187204
188- height = mPaperHeightLineEdit ->text ().toDouble ( &conversionSuccess );
189- if ( !conversionSuccess )
205+ setSize ( mPaperWidthLineEdit , width );
206+ setSize ( mPaperHeightLineEdit , height );
207+
208+ if ( mPaperSizeComboBox ->currentText () == tr ( " Custom" ) )
209+ {
210+ adjustOrientation ();
211+ applyWidthHeight ();
212+ }
213+ else
214+ {
215+ adjustOrientation ();
216+ applyCurrentPaperSettings ();
217+ }
218+ }
219+
220+ void QgsCompositionWidget::adjustOrientation ()
221+ {
222+ double width = size ( mPaperWidthLineEdit );
223+ double height = size ( mPaperHeightLineEdit );
224+
225+ if ( width < 0 || height < 0 )
190226 {
191227 return ;
192228 }
@@ -204,18 +240,52 @@ void QgsCompositionWidget::adjustOrientation()
204240 mPaperHeightLineEdit ->setEnabled ( true );
205241 if ( mPaperOrientationComboBox ->currentText () == tr ( " Landscape" ) )
206242 {
207- mPaperWidthLineEdit -> setText ( QString::number ( width ) );
208- mPaperHeightLineEdit -> setText ( QString::number ( height ) );
243+ setSize ( mPaperWidthLineEdit , width );
244+ setSize ( mPaperHeightLineEdit , height );
209245 }
210246 else
211247 {
212- mPaperWidthLineEdit -> setText ( QString::number ( height ) );
213- mPaperHeightLineEdit -> setText ( QString::number ( width ) );
248+ setSize ( mPaperWidthLineEdit , height );
249+ setSize ( mPaperHeightLineEdit , width );
214250 }
215251 mPaperWidthLineEdit ->setEnabled ( lineEditsEnabled );
216252 mPaperHeightLineEdit ->setEnabled ( lineEditsEnabled );
217253}
218254
255+ void QgsCompositionWidget::setSize ( QLineEdit *le, double v )
256+ {
257+ if ( mPaperUnitsComboBox ->currentIndex () == 0 )
258+ {
259+ // mm
260+ le->setText ( QString::number ( v ) );
261+ }
262+ else
263+ {
264+ // inch (show width in inch)
265+ le->setText ( QString::number ( v / 25.4 ) );
266+ }
267+ }
268+
269+ double QgsCompositionWidget::size ( QLineEdit *le )
270+ {
271+ bool conversionSuccess;
272+
273+ double size = le->text ().toDouble ( &conversionSuccess );
274+ if ( !conversionSuccess )
275+ return -1.0 ;
276+
277+ if ( mPaperUnitsComboBox ->currentIndex () == 0 )
278+ {
279+ // mm
280+ return size;
281+ }
282+ else
283+ {
284+ // inch return in mm
285+ return size * 25.4 ;
286+ }
287+ }
288+
219289void QgsCompositionWidget::applyCurrentPaperSettings ()
220290{
221291 if ( mComposition )
@@ -229,8 +299,8 @@ void QgsCompositionWidget::applyCurrentPaperSettings()
229299
230300 mPaperWidthLineEdit ->setEnabled ( true );
231301 mPaperHeightLineEdit ->setEnabled ( true );
232- mPaperWidthLineEdit -> setText ( QString::number ( it->mWidth ) );
233- mPaperHeightLineEdit -> setText ( QString::number ( it->mHeight ) );
302+ setSize ( mPaperWidthLineEdit , it->mWidth );
303+ setSize ( mPaperHeightLineEdit , it->mHeight );
234304 mPaperWidthLineEdit ->setEnabled ( false );
235305 mPaperHeightLineEdit ->setEnabled ( false );
236306
@@ -241,20 +311,11 @@ void QgsCompositionWidget::applyCurrentPaperSettings()
241311
242312void QgsCompositionWidget::applyWidthHeight ()
243313{
244- double width, height;
245- bool conversionSuccess;
246-
247- width = mPaperWidthLineEdit ->text ().toDouble ( &conversionSuccess );
248- if ( !conversionSuccess )
249- {
250- return ;
251- }
314+ double width = size ( mPaperWidthLineEdit );
315+ double height = size ( mPaperHeightLineEdit );
252316
253- height = mPaperHeightLineEdit ->text ().toDouble ( &conversionSuccess );
254- if ( !conversionSuccess )
255- {
317+ if ( width < 0 || height < 0 )
256318 return ;
257- }
258319
259320 mComposition ->setPaperSize ( width, height );
260321}
@@ -285,10 +346,10 @@ void QgsCompositionWidget::displayCompositionWidthHeight()
285346 mResolutionLineEdit ->blockSignals ( true );
286347
287348 double paperWidth = mComposition ->paperWidth ();
288- mPaperWidthLineEdit -> setText ( QString::number ( paperWidth ) );
349+ setSize ( mPaperWidthLineEdit , paperWidth );
289350
290351 double paperHeight = mComposition ->paperHeight ();
291- mPaperHeightLineEdit -> setText ( QString::number ( paperHeight ) );
352+ setSize ( mPaperHeightLineEdit , paperHeight );
292353
293354 // set orientation
294355 if ( paperWidth > paperHeight )
0 commit comments