xref: /aoo42x/main/editeng/source/items/paperinf.cxx (revision cdf0e10c)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_editeng.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir // include ---------------------------------------------------------------
32*cdf0e10cSrcweir 
33*cdf0e10cSrcweir #include <limits.h>
34*cdf0e10cSrcweir #include <tools/shl.hxx>
35*cdf0e10cSrcweir #include <tools/debug.hxx>
36*cdf0e10cSrcweir #include <vcl/svapp.hxx>
37*cdf0e10cSrcweir #include <editeng/editrids.hrc>
38*cdf0e10cSrcweir #include <editeng/paperinf.hxx>
39*cdf0e10cSrcweir #include <editeng/eerdll.hxx>
40*cdf0e10cSrcweir 
41*cdf0e10cSrcweir /*--------------------------------------------------------------------
42*cdf0e10cSrcweir 	Beschreibung:	Ist der Printer gueltig
43*cdf0e10cSrcweir  --------------------------------------------------------------------*/
44*cdf0e10cSrcweir 
45*cdf0e10cSrcweir inline sal_Bool IsValidPrinter( const Printer* pPtr )
46*cdf0e10cSrcweir {
47*cdf0e10cSrcweir 	return pPtr->GetName().Len() ? sal_True : sal_False;
48*cdf0e10cSrcweir }
49*cdf0e10cSrcweir 
50*cdf0e10cSrcweir //------------------------------------------------------------------------
51*cdf0e10cSrcweir 
52*cdf0e10cSrcweir Size SvxPaperInfo::GetPaperSize( Paper ePaper, MapUnit eUnit )
53*cdf0e10cSrcweir {
54*cdf0e10cSrcweir     PaperInfo aInfo(ePaper);
55*cdf0e10cSrcweir     Size aRet(aInfo.getWidth(), aInfo.getHeight()); // in 100thMM
56*cdf0e10cSrcweir     return eUnit == MAP_100TH_MM ? aRet : OutputDevice::LogicToLogic(aRet, MAP_100TH_MM, eUnit);
57*cdf0e10cSrcweir }
58*cdf0e10cSrcweir 
59*cdf0e10cSrcweir /*------------------------------------------------------------------------
60*cdf0e10cSrcweir  Beschreibung:	Papiergroesse der Druckers liefern, aligned auf
61*cdf0e10cSrcweir 				die eigenen Groessen.
62*cdf0e10cSrcweir 				Falls kein Printer im System eingestellt ist,
63*cdf0e10cSrcweir 				wird DIN A4 Portrait als Defaultpapiergroesse geliefert.
64*cdf0e10cSrcweir ------------------------------------------------------------------------*/
65*cdf0e10cSrcweir 
66*cdf0e10cSrcweir //Is this method may be confused about the units it returns ?
67*cdf0e10cSrcweir //Always returns TWIPS for known paper sizes or on failure.
68*cdf0e10cSrcweir //But in the case of PAPER_USER paper and with a Printer with a mapmode set
69*cdf0e10cSrcweir //will return in those printer units ?
70*cdf0e10cSrcweir Size SvxPaperInfo::GetPaperSize( const Printer* pPrinter )
71*cdf0e10cSrcweir {
72*cdf0e10cSrcweir 	if ( !IsValidPrinter(pPrinter) )
73*cdf0e10cSrcweir 		return GetPaperSize( PAPER_A4 );
74*cdf0e10cSrcweir 	const Paper ePaper = pPrinter->GetPaper();
75*cdf0e10cSrcweir 
76*cdf0e10cSrcweir 	if ( ePaper == PAPER_USER )
77*cdf0e10cSrcweir 	{
78*cdf0e10cSrcweir 		// Orientation nicht beruecksichtigen, da durch SV bereits
79*cdf0e10cSrcweir 		// die richtigen Masze eingestellt worden sind.
80*cdf0e10cSrcweir 		Size aPaperSize = pPrinter->GetPaperSize();
81*cdf0e10cSrcweir 		const Size aInvalidSize;
82*cdf0e10cSrcweir 
83*cdf0e10cSrcweir 		if ( aPaperSize == aInvalidSize )
84*cdf0e10cSrcweir 			return GetPaperSize(PAPER_A4);
85*cdf0e10cSrcweir 		MapMode aMap1 = pPrinter->GetMapMode();
86*cdf0e10cSrcweir 		MapMode aMap2;
87*cdf0e10cSrcweir 
88*cdf0e10cSrcweir 		if ( aMap1 == aMap2 )
89*cdf0e10cSrcweir 			aPaperSize =
90*cdf0e10cSrcweir 				pPrinter->PixelToLogic( aPaperSize, MapMode( MAP_TWIP ) );
91*cdf0e10cSrcweir 		return aPaperSize;
92*cdf0e10cSrcweir 	}
93*cdf0e10cSrcweir 
94*cdf0e10cSrcweir 	const Orientation eOrient = pPrinter->GetOrientation();
95*cdf0e10cSrcweir 	Size aSize( GetPaperSize( ePaper ) );
96*cdf0e10cSrcweir 		// bei Landscape die Seiten tauschen, ist bei SV schon geschehen
97*cdf0e10cSrcweir 	if ( eOrient == ORIENTATION_LANDSCAPE )
98*cdf0e10cSrcweir 		Swap( aSize );
99*cdf0e10cSrcweir 	return aSize;
100*cdf0e10cSrcweir }
101*cdf0e10cSrcweir 
102*cdf0e10cSrcweir // -----------------------------------------------------------------------
103*cdf0e10cSrcweir 
104*cdf0e10cSrcweir Paper SvxPaperInfo::GetSvxPaper( const Size &rSize, MapUnit eUnit, bool bSloppy )
105*cdf0e10cSrcweir {
106*cdf0e10cSrcweir     Size aSize(eUnit == MAP_100TH_MM ? rSize : OutputDevice::LogicToLogic(rSize, eUnit, MAP_100TH_MM));
107*cdf0e10cSrcweir     PaperInfo aInfo(aSize.Width(), aSize.Height());
108*cdf0e10cSrcweir     if (bSloppy)
109*cdf0e10cSrcweir         aInfo.doSloppyFit();
110*cdf0e10cSrcweir     return aInfo.getPaper();
111*cdf0e10cSrcweir }
112*cdf0e10cSrcweir 
113*cdf0e10cSrcweir // -----------------------------------------------------------------------
114*cdf0e10cSrcweir 
115*cdf0e10cSrcweir long SvxPaperInfo::GetSloppyPaperDimension( long nSize, MapUnit eUnit )
116*cdf0e10cSrcweir {
117*cdf0e10cSrcweir     nSize = eUnit == MAP_100TH_MM ? nSize : OutputDevice::LogicToLogic(nSize, eUnit, MAP_100TH_MM);
118*cdf0e10cSrcweir     nSize = PaperInfo::sloppyFitPageDimension(nSize);
119*cdf0e10cSrcweir     return eUnit == MAP_100TH_MM ? nSize : OutputDevice::LogicToLogic(nSize, MAP_100TH_MM, eUnit);
120*cdf0e10cSrcweir }
121*cdf0e10cSrcweir 
122*cdf0e10cSrcweir // -----------------------------------------------------------------------
123*cdf0e10cSrcweir 
124*cdf0e10cSrcweir Size SvxPaperInfo::GetDefaultPaperSize( MapUnit eUnit )
125*cdf0e10cSrcweir {
126*cdf0e10cSrcweir     PaperInfo aInfo(PaperInfo::getSystemDefaultPaper());
127*cdf0e10cSrcweir     Size aRet(aInfo.getWidth(), aInfo.getHeight());
128*cdf0e10cSrcweir     return eUnit == MAP_100TH_MM ? aRet : OutputDevice::LogicToLogic(aRet, MAP_100TH_MM, eUnit);
129*cdf0e10cSrcweir }
130*cdf0e10cSrcweir 
131*cdf0e10cSrcweir /*------------------------------------------------------------------------
132*cdf0e10cSrcweir  Beschreibung:	String Repr"asentation f"ur die SV-Defines f"ur
133*cdf0e10cSrcweir 				Papiergroessen.
134*cdf0e10cSrcweir ------------------------------------------------------------------------*/
135*cdf0e10cSrcweir 
136*cdf0e10cSrcweir String SvxPaperInfo::GetName( Paper ePaper )
137*cdf0e10cSrcweir {
138*cdf0e10cSrcweir     return String( Printer::GetPaperName( ePaper ) );
139*cdf0e10cSrcweir }
140*cdf0e10cSrcweir 
141*cdf0e10cSrcweir 
142