Branch data Line data Source code
1 : : /***************************************************************************
2 : : qgspagesizeregistry.cpp
3 : : ------------------------
4 : : begin : June 2017
5 : : copyright : (C) 2017 by Nyall Dawson
6 : : email : nyall dot dawson at gmail dot com
7 : : ***************************************************************************/
8 : : /***************************************************************************
9 : : * *
10 : : * This program is free software; you can redistribute it and/or modify *
11 : : * it under the terms of the GNU General Public License as published by *
12 : : * the Free Software Foundation; either version 2 of the License, or *
13 : : * (at your option) any later version. *
14 : : * *
15 : : ***************************************************************************/
16 : :
17 : : #include "qgspagesizeregistry.h"
18 : : #include "qgslayoutmeasurementconverter.h"
19 : : #include "qgis.h"
20 : :
21 : : //
22 : : // QgsPageSizeRegistry
23 : : //
24 : :
25 : 5 : QgsPageSizeRegistry::QgsPageSizeRegistry()
26 : : {
27 : 10 : add( QgsPageSize( QStringLiteral( "A6" ), QgsLayoutSize( 105, 148 ), QObject::tr( "A6" ) ) );
28 : 10 : add( QgsPageSize( QStringLiteral( "A5" ), QgsLayoutSize( 148, 210 ), QObject::tr( "A5" ) ) );
29 : 10 : add( QgsPageSize( QStringLiteral( "A4" ), QgsLayoutSize( 210, 297 ), QObject::tr( "A4" ) ) );
30 : 10 : add( QgsPageSize( QStringLiteral( "A3" ), QgsLayoutSize( 297, 420 ), QObject::tr( "A3" ) ) );
31 : 10 : add( QgsPageSize( QStringLiteral( "A2" ), QgsLayoutSize( 420, 594 ), QObject::tr( "A2" ) ) );
32 : 10 : add( QgsPageSize( QStringLiteral( "A1" ), QgsLayoutSize( 594, 841 ), QObject::tr( "A1" ) ) );
33 : 10 : add( QgsPageSize( QStringLiteral( "A0" ), QgsLayoutSize( 841, 1189 ), QObject::tr( "A0" ) ) );
34 : 10 : add( QgsPageSize( QStringLiteral( "B6" ), QgsLayoutSize( 125, 176 ), QObject::tr( "B6" ) ) );
35 : 10 : add( QgsPageSize( QStringLiteral( "B5" ), QgsLayoutSize( 176, 250 ), QObject::tr( "B5" ) ) );
36 : 10 : add( QgsPageSize( QStringLiteral( "B4" ), QgsLayoutSize( 250, 353 ), QObject::tr( "B4" ) ) );
37 : 10 : add( QgsPageSize( QStringLiteral( "B3" ), QgsLayoutSize( 353, 500 ), QObject::tr( "B3" ) ) );
38 : 10 : add( QgsPageSize( QStringLiteral( "B2" ), QgsLayoutSize( 500, 707 ), QObject::tr( "B2" ) ) );
39 : 10 : add( QgsPageSize( QStringLiteral( "B1" ), QgsLayoutSize( 707, 1000 ), QObject::tr( "B1" ) ) );
40 : 10 : add( QgsPageSize( QStringLiteral( "B0" ), QgsLayoutSize( 1000, 1414 ), QObject::tr( "B0" ) ) );
41 : 10 : add( QgsPageSize( QStringLiteral( "Legal" ), QgsLayoutSize( 215.9, 355.6 ), QObject::tr( "Legal" ) ) );
42 : 10 : add( QgsPageSize( QStringLiteral( "Letter" ), QgsLayoutSize( 215.9, 279.4 ), QObject::tr( "Letter" ) ) );
43 : 10 : add( QgsPageSize( QStringLiteral( "ANSI A" ), QgsLayoutSize( 215.9, 279.4 ), QObject::tr( "ANSI A" ) ) );
44 : 10 : add( QgsPageSize( QStringLiteral( "ANSI B" ), QgsLayoutSize( 279.4, 431.8 ), QObject::tr( "ANSI B" ) ) );
45 : 10 : add( QgsPageSize( QStringLiteral( "ANSI C" ), QgsLayoutSize( 431.8, 558.8 ), QObject::tr( "ANSI C" ) ) );
46 : 10 : add( QgsPageSize( QStringLiteral( "ANSI D" ), QgsLayoutSize( 558.8, 863.6 ), QObject::tr( "ANSI D" ) ) );
47 : 10 : add( QgsPageSize( QStringLiteral( "ANSI E" ), QgsLayoutSize( 863.6, 1117.6 ), QObject::tr( "ANSI E" ) ) );
48 : 10 : add( QgsPageSize( QStringLiteral( "Arch A" ), QgsLayoutSize( 228.6, 304.8 ), QObject::tr( "Arch A" ) ) );
49 : 10 : add( QgsPageSize( QStringLiteral( "Arch B" ), QgsLayoutSize( 304.8, 457.2 ), QObject::tr( "Arch B" ) ) );
50 : 10 : add( QgsPageSize( QStringLiteral( "Arch C" ), QgsLayoutSize( 457.2, 609.6 ), QObject::tr( "Arch C" ) ) );
51 : 10 : add( QgsPageSize( QStringLiteral( "Arch D" ), QgsLayoutSize( 609.6, 914.4 ), QObject::tr( "Arch D" ) ) );
52 : 10 : add( QgsPageSize( QStringLiteral( "Arch E" ), QgsLayoutSize( 914.4, 1219.2 ), QObject::tr( "Arch E" ) ) );
53 : 10 : add( QgsPageSize( QStringLiteral( "Arch E1" ), QgsLayoutSize( 762, 1066.8 ), QObject::tr( "Arch E1" ) ) );
54 : 10 : add( QgsPageSize( QStringLiteral( "Arch E2" ), QgsLayoutSize( 660, 965 ), QObject::tr( "Arch E2" ) ) );
55 : 10 : add( QgsPageSize( QStringLiteral( "Arch E3" ), QgsLayoutSize( 686, 991 ), QObject::tr( "Arch E3" ) ) );
56 : 10 : add( QgsPageSize( QStringLiteral( "1920x1080" ), QgsLayoutSize( 1080, 1920, QgsUnitTypes::LayoutPixels ), QObject::tr( "1920×1080" ) ) );
57 : 10 : add( QgsPageSize( QStringLiteral( "1280x800" ), QgsLayoutSize( 800, 1280, QgsUnitTypes::LayoutPixels ), QObject::tr( "1280×800" ) ) );
58 : 10 : add( QgsPageSize( QStringLiteral( "1024x768" ), QgsLayoutSize( 768, 1024, QgsUnitTypes::LayoutPixels ), QObject::tr( "1024×768" ) ) );
59 : 5 : }
60 : :
61 : 160 : void QgsPageSizeRegistry::add( const QgsPageSize &size )
62 : : {
63 : 160 : mPageSizes.append( size );
64 : 160 : }
65 : :
66 : 0 : QList<QgsPageSize> QgsPageSizeRegistry::entries() const
67 : : {
68 : 0 : QList< QgsPageSize > result;
69 : 0 : QList< QgsPageSize >::const_iterator it = mPageSizes.constBegin();
70 : 0 : for ( ; it != mPageSizes.constEnd(); ++it )
71 : : {
72 : 0 : result.push_back( *it );
73 : 0 : }
74 : 0 : return result;
75 : 0 : }
76 : :
77 : 0 : QList<QgsPageSize> QgsPageSizeRegistry::find( const QString &name ) const
78 : : {
79 : 0 : QList< QgsPageSize > result;
80 : 0 : QList< QgsPageSize >::const_iterator it = mPageSizes.constBegin();
81 : 0 : for ( ; it != mPageSizes.constEnd(); ++it )
82 : : {
83 : 0 : if ( ( *it ).name.compare( name, Qt::CaseInsensitive ) == 0 )
84 : : {
85 : 0 : result.push_back( *it );
86 : 0 : }
87 : 0 : }
88 : 0 : return result;
89 : 0 : }
90 : :
91 : 0 : QString QgsPageSizeRegistry::find( const QgsLayoutSize &size ) const
92 : : {
93 : : //try to match to existing page size
94 : 0 : QgsLayoutMeasurementConverter converter;
95 : 0 : const auto constMPageSizes = mPageSizes;
96 : 0 : for ( const QgsPageSize &pageSize : constMPageSizes )
97 : : {
98 : : // convert passed size to same units
99 : 0 : QgsLayoutSize xSize = converter.convert( size, pageSize.size.units() );
100 : :
101 : : //consider width and height values may be exchanged
102 : 0 : if ( ( qgsDoubleNear( xSize.width(), pageSize.size.width(), 0.01 ) && qgsDoubleNear( xSize.height(), pageSize.size.height(), 0.01 ) )
103 : 0 : || ( qgsDoubleNear( xSize.height(), pageSize.size.width(), 0.01 ) && qgsDoubleNear( xSize.width(), pageSize.size.height(), 0.01 ) ) )
104 : : {
105 : 0 : return pageSize.name;
106 : : }
107 : : }
108 : 0 : return QString();
109 : 0 : }
110 : :
111 : 0 : bool QgsPageSizeRegistry::decodePageSize( const QString &pageSizeName, QgsPageSize &pageSize )
112 : : {
113 : 0 : QList< QgsPageSize > matches = find( pageSizeName.trimmed() );
114 : 0 : if ( matches.length() > 0 )
115 : : {
116 : 0 : pageSize = matches.at( 0 );
117 : 0 : return true;
118 : : }
119 : 0 : return false;
120 : 0 : }
121 : :
122 : : //
123 : : // QgsPageSize
124 : : //
125 : :
126 : 0 : QgsPageSize::QgsPageSize()
127 : 0 : : size( QgsLayoutSize( 0.0, 0.0 ) )
128 : : {
129 : 0 : }
130 : :
131 : 160 : QgsPageSize::QgsPageSize( const QString &pageName, const QgsLayoutSize &pageSize, const QString &displayName )
132 : 160 : : name( pageName )
133 : 160 : , size( pageSize )
134 : 160 : , displayName( displayName )
135 : : {
136 : 160 : }
137 : :
138 : 0 : QgsPageSize::QgsPageSize( const QgsLayoutSize &pageSize )
139 : 0 : : size( pageSize )
140 : : {
141 : :
142 : 0 : }
143 : :
144 : 0 : bool QgsPageSize::operator==( const QgsPageSize &other ) const
145 : : {
146 : 0 : return ( name == other.name && size == other.size );
147 : : }
148 : :
149 : 0 : bool QgsPageSize::operator!=( const QgsPageSize &other ) const
150 : : {
151 : 0 : return ( ! operator==( other ) );
152 : : }
|