1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     Paper size classes 
   4 // Author:      Julian Smart  
   8 // Copyright:   (c) Julian Smart 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  13 #pragma implementation "paper.h" 
  16 // For compilers that support precompilation, includes "wx.h". 
  17 #include "wx/wxprec.h" 
  25 #if wxUSE_PRINTING_ARCHITECTURE 
  30 #include "wx/settings.h" 
  35 #include "wx/module.h" 
  51 IMPLEMENT_DYNAMIC_CLASS(wxPrintPaperType
, wxObject
) 
  52 IMPLEMENT_DYNAMIC_CLASS(wxPrintPaperDatabase
, wxList
) 
  55  * Paper size database for all platforms 
  58 wxPrintPaperType::wxPrintPaperType() 
  60     m_paperId 
= wxPAPER_NONE
; 
  67 wxPrintPaperType::wxPrintPaperType(wxPaperSize paperId
, int platformId
, const wxString
& name
, int w
, int h
) 
  70     m_platformId 
= platformId
; 
  76 // Get width and height in points (1/72th of an inch) 
  77 wxSize 
wxPrintPaperType::GetSizeDeviceUnits() const 
  79     return wxSize( (int) ((m_width 
/ 10.0) / (25.4 / 72.0)), (int) ((m_height 
/ 10.0) / (25.4 / 72.0)) ); 
  83  * Print paper database for PostScript 
  86 wxPrintPaperDatabase
* wxThePrintPaperDatabase 
= (wxPrintPaperDatabase
*) NULL
; 
  88 wxPrintPaperDatabase::wxPrintPaperDatabase():wxList(wxKEY_STRING
) 
  93 void wxPrintPaperDatabase::CreateDatabase() 
  96   AddPaperType(wxTRANSLATE("A4 210 x 297 mm"), 210, 297); 
  97   AddPaperType(wxTRANSLATE("A3 297 x 420 mm"), 297, 420); 
  98   AddPaperType(wxTRANSLATE("Letter 8 1/2 x 11 in"), 216, 279); 
  99   AddPaperType(wxTRANSLATE("Legal 8 1/2 x 14 in"), 216, 356); 
 102     WXADDPAPER(wxPAPER_LETTER
,             DMPAPER_LETTER
,             wxTRANSLATE("Letter, 8 1/2 x 11 in"), 2159, 2794); 
 103     WXADDPAPER(wxPAPER_LEGAL
,              DMPAPER_LEGAL
,              wxTRANSLATE("Legal, 8 1/2 x 14 in"), 2159, 3556); 
 104     WXADDPAPER(wxPAPER_A4
,                 DMPAPER_A4
,                 wxTRANSLATE("A4 sheet, 210 x 297 mm"), 2100, 2970); 
 105     WXADDPAPER(wxPAPER_CSHEET
,             DMPAPER_CSHEET
,             wxTRANSLATE("C sheet, 17 x 22 in"), 4318, 5588); 
 106     WXADDPAPER(wxPAPER_DSHEET
,             DMPAPER_DSHEET
,             wxTRANSLATE("D sheet, 22 x 34 in"), 5588, 8636); 
 107     WXADDPAPER(wxPAPER_ESHEET
,             DMPAPER_ESHEET
,             wxTRANSLATE("E sheet, 34 x 44 in"), 8636, 11176); 
 108     WXADDPAPER(wxPAPER_LETTERSMALL
,        DMPAPER_LETTERSMALL
,        wxTRANSLATE("Letter Small, 8 1/2 x 11 in"), 2159, 2794); 
 109     WXADDPAPER(wxPAPER_TABLOID
,            DMPAPER_TABLOID
,            wxTRANSLATE("Tabloid, 11 x 17 in"), 2794, 4318); 
 110     WXADDPAPER(wxPAPER_LEDGER
,             DMPAPER_LEDGER
,             wxTRANSLATE("Ledger, 17 x 11 in"), 4318, 2794); 
 111     WXADDPAPER(wxPAPER_STATEMENT
,          DMPAPER_STATEMENT
,          wxTRANSLATE("Statement, 5 1/2 x 8 1/2 in"), 1397, 2159); 
 112     WXADDPAPER(wxPAPER_EXECUTIVE
,          DMPAPER_EXECUTIVE
,          wxTRANSLATE("Executive, 7 1/4 x 10 1/2 in"), 1842, 2667); 
 113     WXADDPAPER(wxPAPER_A3
,                 DMPAPER_A3
,                 wxTRANSLATE("A3 sheet, 297 x 420 mm"), 2970, 4200); 
 114     WXADDPAPER(wxPAPER_A4SMALL
,            DMPAPER_A4SMALL
,            wxTRANSLATE("A4 small sheet, 210 x 297 mm"), 2100, 2970); 
 115     WXADDPAPER(wxPAPER_A5
,                 DMPAPER_A5
,                 wxTRANSLATE("A5 sheet, 148 x 210 mm"), 1480, 2100); 
 116     WXADDPAPER(wxPAPER_B4
,                 DMPAPER_B4
,                 wxTRANSLATE("B4 sheet, 250 x 354 mm"), 2500, 3540); 
 117     WXADDPAPER(wxPAPER_B5
,                 DMPAPER_B5
,                 wxTRANSLATE("B5 sheet, 182 x 257 millimeter"), 1820, 2570); 
 118     WXADDPAPER(wxPAPER_FOLIO
,              DMPAPER_FOLIO
,              wxTRANSLATE("Folio, 8 1/2 x 13 in"), 2159, 3302); 
 119     WXADDPAPER(wxPAPER_QUARTO
,             DMPAPER_QUARTO
,             wxTRANSLATE("Quarto, 215 x 275 mm"), 2150, 2750); 
 120     WXADDPAPER(wxPAPER_10X14
,              DMPAPER_10X14
,              wxTRANSLATE("10 x 14 in"), 2540, 3556); 
 121     WXADDPAPER(wxPAPER_11X17
,              DMPAPER_11X17
,              wxTRANSLATE("11 x 17 in"), 2794, 4318); 
 122     WXADDPAPER(wxPAPER_NOTE
,               DMPAPER_NOTE
,               wxTRANSLATE("Note, 8 1/2 x 11 in"), 2159, 2794); 
 123     WXADDPAPER(wxPAPER_ENV_9
,              DMPAPER_ENV_9
,              wxTRANSLATE("#9 Envelope, 3 7/8 x 8 7/8 in"), 984, 2254); 
 124     WXADDPAPER(wxPAPER_ENV_10
,             DMPAPER_ENV_10
,             wxTRANSLATE("#10 Envelope, 4 1/8 x 9 1/2 in"), 1048, 2413); 
 125     WXADDPAPER(wxPAPER_ENV_11
,             DMPAPER_ENV_11
,             wxTRANSLATE("#11 Envelope, 4 1/2 x 10 3/8 in"), 1143, 2635); 
 126     WXADDPAPER(wxPAPER_ENV_12
,             DMPAPER_ENV_12
,             wxTRANSLATE("#12 Envelope, 4 3/4 x 11 in"), 1206, 2794); 
 127     WXADDPAPER(wxPAPER_ENV_14
,             DMPAPER_ENV_14
,             wxTRANSLATE("#14 Envelope, 5 x 11 1/2 in"), 1270, 2921); 
 128     WXADDPAPER(wxPAPER_ENV_DL
,             DMPAPER_ENV_DL
,             wxTRANSLATE("DL Envelope, 110 x 220 mm"), 1100, 2200); 
 129     WXADDPAPER(wxPAPER_ENV_C5
,             DMPAPER_ENV_C5
,             wxTRANSLATE("C5 Envelope, 162 x 229 mm"), 1620, 2290); 
 130     WXADDPAPER(wxPAPER_ENV_C3
,             DMPAPER_ENV_C3
,             wxTRANSLATE("C3 Envelope, 324 x 458 mm"), 3240, 4580); 
 131     WXADDPAPER(wxPAPER_ENV_C4
,             DMPAPER_ENV_C4
,             wxTRANSLATE("C4 Envelope, 229 x 324 mm"), 2290, 3240); 
 132     WXADDPAPER(wxPAPER_ENV_C6
,             DMPAPER_ENV_C6
,             wxTRANSLATE("C6 Envelope, 114 x 162 mm"), 1140, 1620); 
 133     WXADDPAPER(wxPAPER_ENV_C65
,            DMPAPER_ENV_C65
,            wxTRANSLATE("C65 Envelope, 114 x 229 mm"), 1140, 2290); 
 134     WXADDPAPER(wxPAPER_ENV_B4
,             DMPAPER_ENV_B4
,             wxTRANSLATE("B4 Envelope, 250 x 353 mm"), 2500, 3530); 
 135     WXADDPAPER(wxPAPER_ENV_B5
,             DMPAPER_ENV_B5
,             wxTRANSLATE("B5 Envelope, 176 x 250 mm"), 1760, 2500); 
 136     WXADDPAPER(wxPAPER_ENV_B6
,             DMPAPER_ENV_B6
,             wxTRANSLATE("B6 Envelope, 176 x 125 mm"), 1760, 1250); 
 137     WXADDPAPER(wxPAPER_ENV_ITALY
,          DMPAPER_ENV_ITALY
,          wxTRANSLATE("Italy Envelope, 110 x 230 mm"), 1100, 2300); 
 138     WXADDPAPER(wxPAPER_ENV_MONARCH
,        DMPAPER_ENV_MONARCH
,        wxTRANSLATE("Monarch Envelope, 3 7/8 x 7 1/2 in"), 984, 1905); 
 139     WXADDPAPER(wxPAPER_ENV_PERSONAL
,       DMPAPER_ENV_PERSONAL
,       wxTRANSLATE("6 3/4 Envelope, 3 5/8 x 6 1/2 in"), 921, 1651); 
 140     WXADDPAPER(wxPAPER_FANFOLD_US
,         DMPAPER_FANFOLD_US
,         wxTRANSLATE("US Std Fanfold, 14 7/8 x 11 in"), 3778, 2794); 
 141     WXADDPAPER(wxPAPER_FANFOLD_STD_GERMAN
, DMPAPER_FANFOLD_STD_GERMAN
, wxTRANSLATE("German Std Fanfold, 8 1/2 x 12 in"), 2159, 3048); 
 142     WXADDPAPER(wxPAPER_FANFOLD_LGL_GERMAN
, DMPAPER_FANFOLD_LGL_GERMAN
, wxTRANSLATE("German Legal Fanfold, 8 1/2 x 13 in"), 2159, 3302); 
 146     WXADDPAPER(wxPAPER_ISO_B4,             DMPAPER_ISO_B4,             "B4 (ISO) 250 x 353 mm", 
 147     WXADDPAPER(wxPAPER_JAPANESE_POSTCARD,  DMPAPER_JAPANESE_POSTCARD,  "Japanese Postcard 100 x 148 mm", 
 148     WXADDPAPER(wxPAPER_9X11,               DMPAPER_9X11,               "9 x 11 in", 
 149     WXADDPAPER(wxPAPER_10X11,              DMPAPER_10X11,              "10 x 11 in", 
 150     WXADDPAPER(wxPAPER_15X11,              DMPAPER_15X11,              "15 x 11 in", 
 151     WXADDPAPER(wxPAPER_ENV_INVITE,         DMPAPER_ENV_INVITE,         "Envelope Invite 220 x 220 mm", 
 152     // What does \275 mean? 
 153 //    WXADDPAPER(wxPAPER_LETTER_EXTRA,       DMPAPER_LETTER_EXTRA,       "Letter Extra 9 \275 x 12 in", 
 154 //    WXADDPAPER(wxPAPER_LEGAL_EXTRA,        DMPAPER_LEGAL_EXTRA,        "Legal Extra 9 \275 x 15 in", 
 155     WXADDPAPER(wxPAPER_TABLOID_EXTRA,      DMPAPER_TABLOID_EXTRA,      "Tabloid Extra 11.69 x 18 in", 
 156     WXADDPAPER(wxPAPER_A4_EXTRA,           DMPAPER_A4_EXTRA,           "A4 Extra 9.27 x 12.69 in", 
 157 //    WXADDPAPER(wxPAPER_LETTER_TRANSVERSE,  DMPAPER_LETTER_TRANSVERSE,  "Letter Transverse 8 \275 x 11 in", 
 158     WXADDPAPER(wxPAPER_A4_TRANSVERSE,      DMPAPER_A4_TRANSVERSE,      "A4 Transverse 210 x 297 mm", 
 159 //    WXADDPAPER(wxPAPER_LETTER_EXTRA_TRANSVERSE, DMPAPER_LETTER_EXTRA_TRANSVERSE, "Letter Extra Transverse 9\275 x 12 in", 
 160     WXADDPAPER(wxPAPER_A_PLUS,             DMPAPER_A_PLUS,             "SuperA/SuperA/A4 227 x 356 mm", 
 161     WXADDPAPER(wxPAPER_B_PLUS,             DMPAPER_B_PLUS,             "SuperB/SuperB/A3 305 x 487 mm", 
 162     WXADDPAPER(wxPAPER_LETTER_PLUS,        DMPAPER_LETTER_PLUS,        "Letter Plus 8.5 x 12.69 in", 
 163     WXADDPAPER(wxPAPER_A4_PLUS,            DMPAPER_A4_PLUS,            "A4 Plus 210 x 330 mm", 
 164     WXADDPAPER(wxPAPER_A5_TRANSVERSE,      DMPAPER_A5_TRANSVERSE,      "A5 Transverse 148 x 210 mm", 
 165     WXADDPAPER(wxPAPER_B5_TRANSVERSE,      DMPAPER_B5_TRANSVERSE,      "B5 (JIS) Transverse 182 x 257 mm", 
 166     WXADDPAPER(wxPAPER_A3_EXTRA,           DMPAPER_A3_EXTRA,           "A3 Extra 322 x 445 mm", 
 167     WXADDPAPER(wxPAPER_A5_EXTRA,           DMPAPER_A5_EXTRA,           "A5 Extra 174 x 235 mm", 
 168     WXADDPAPER(wxPAPER_B5_EXTRA,           DMPAPER_B5_EXTRA,           "B5 (ISO) Extra 201 x 276 mm", 
 169     WXADDPAPER(wxPAPER_A2,                 DMPAPER_A2,                 "A2 420 x 594 mm", 
 170     WXADDPAPER(wxPAPER_A3_TRANSVERSE,      DMPAPER_A3_TRANSVERSE,      "A3 Transverse 297 x 420 mm", 
 171     WXADDPAPER(wxPAPER_A3_EXTRA_TRANSVERSE DMPAPER_A3_EXTRA_TRANSVERSE "A3 Extra Transverse 322 x 445 mm", 
 176 void wxPrintPaperDatabase::ClearDatabase() 
 181 void wxPrintPaperDatabase::AddPaperType(wxPaperSize paperId
, const wxString
& name
, int w
, int h
) 
 183     Append(name
, new wxPrintPaperType(paperId
, 0, name
, w
, h
)); 
 186 void wxPrintPaperDatabase::AddPaperType(wxPaperSize paperId
, int platformId
, const wxString
& name
, int w
, int h
) 
 188     Append(name
, new wxPrintPaperType(paperId
, platformId
, name
, w
, h
)); 
 191 wxPrintPaperType 
*wxPrintPaperDatabase::FindPaperType(const wxString
& name
) 
 193     wxNode 
*node 
= Find(name
); 
 195         return (wxPrintPaperType 
*)node
->Data(); 
 197         return (wxPrintPaperType 
*) NULL
; 
 200 wxPrintPaperType 
*wxPrintPaperDatabase::FindPaperType(wxPaperSize id
) 
 202     wxNode 
*node 
= First(); 
 205         wxPrintPaperType
* paperType 
= (wxPrintPaperType
*) node
->Data(); 
 206         if (paperType
->GetId() == id
) 
 210     return (wxPrintPaperType 
*) NULL
; 
 213 wxPrintPaperType 
*wxPrintPaperDatabase::FindPaperTypeByPlatformId(int id
) 
 215     wxNode 
*node 
= First(); 
 218         wxPrintPaperType
* paperType 
= (wxPrintPaperType
*) node
->Data(); 
 219         if (paperType
->GetPlatformId() == id
) 
 223     return (wxPrintPaperType 
*) NULL
; 
 226 wxPrintPaperType 
*wxPrintPaperDatabase::FindPaperType(const wxSize
& sz
) 
 228     wxNode 
*node 
= First(); 
 231         wxPrintPaperType
* paperType 
= (wxPrintPaperType
*) node
->Data(); 
 232         if (paperType
->GetSize() == sz
) 
 236     return (wxPrintPaperType 
*) NULL
; 
 239 // Convert name to size id 
 240 wxPaperSize 
wxPrintPaperDatabase::ConvertNameToId(const wxString
& name
) 
 242     wxPrintPaperType
* type 
= FindPaperType(name
); 
 244         return type
->GetId(); 
 249 // Convert size id to name 
 250 wxString 
wxPrintPaperDatabase::ConvertIdToName(wxPaperSize paperId
) 
 252     wxPrintPaperType
* type 
= FindPaperType(paperId
); 
 254         return type
->GetName(); 
 256         return wxEmptyString
; 
 259 // Get the paper size 
 260 wxSize 
wxPrintPaperDatabase::GetSize(wxPaperSize paperId
) 
 262     wxPrintPaperType
* type 
= FindPaperType(paperId
); 
 264         return type
->GetSize(); 
 269 // Get the paper size 
 270 wxPaperSize 
wxPrintPaperDatabase::GetSize(const wxSize
& size
) 
 272     wxPrintPaperType
* type 
= FindPaperType(size
); 
 274         return type
->GetId(); 
 279 // A module to allow initialization/cleanup of print paper 
 280 // things without calling these functions from app.cpp. 
 282 class WXDLLEXPORT wxPrintPaperModule
: public wxModule
 
 284 DECLARE_DYNAMIC_CLASS(wxPrintPaperModule
) 
 286     wxPrintPaperModule() {} 
 291 IMPLEMENT_DYNAMIC_CLASS(wxPrintPaperModule
, wxModule
) 
 294  * Initialization/cleanup module 
 297 bool wxPrintPaperModule::OnInit() 
 299     wxThePrintPaperDatabase 
= new wxPrintPaperDatabase
; 
 300     wxThePrintPaperDatabase
->CreateDatabase(); 
 305 void wxPrintPaperModule::OnExit() 
 307     delete wxThePrintPaperDatabase
; 
 308     wxThePrintPaperDatabase 
= NULL
; 
 311 #endif // wxUSE_PRINTING_ARCHITECTURE