Skip to content

Commit 0ec76f1

Browse files
author
jef
committed
[FEATURE] add american paper format to composer and allow custom formats in inch (fixed #1538 and #1858)
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@11235 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 14200c2 commit 0ec76f1

File tree

2 files changed

+125
-60
lines changed

2 files changed

+125
-60
lines changed

src/app/composer/qgscompositionwidget.cpp

Lines changed: 121 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -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

113113
void 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+
219289
void 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

242312
void 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 )

src/app/composer/qgscompositionwidget.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class QgsCompositionWidget: public QWidget, private Ui::QgsCompositionWidgetBase
4141

4242
public slots:
4343
void on_mPaperSizeComboBox_currentIndexChanged( const QString& text );
44+
void on_mPaperUnitsComboBox_currentIndexChanged( const QString& text );
4445
void on_mPaperOrientationComboBox_currentIndexChanged( const QString& text );
4546
void on_mPaperWidthLineEdit_editingFinished();
4647
void on_mPaperHeightLineEdit_editingFinished();
@@ -73,4 +74,7 @@ class QgsCompositionWidget: public QWidget, private Ui::QgsCompositionWidgetBase
7374

7475
void createPaperEntries();
7576
void insertPaperEntries();
77+
78+
double size( QLineEdit *le );
79+
void setSize( QLineEdit *le, double v );
7680
};

0 commit comments

Comments
 (0)