xref: /aoo4110/main/svx/source/dialog/pagectrl.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_svx.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski // include ---------------------------------------------------------------
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski 
30*b1cdbd2cSJim Jagielski #include <vcl/bitmap.hxx>
31*b1cdbd2cSJim Jagielski #include <editeng/frmdiritem.hxx>
32*b1cdbd2cSJim Jagielski #include <svx/pageitem.hxx>
33*b1cdbd2cSJim Jagielski #include <svx/pagectrl.hxx>
34*b1cdbd2cSJim Jagielski #include <editeng/boxitem.hxx>
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski #include <algorithm>
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski // struct PageWindow_Impl ------------------------------------------------
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski struct PageWindow_Impl
41*b1cdbd2cSJim Jagielski {
42*b1cdbd2cSJim Jagielski 	SvxBoxItem*		pBorder;
43*b1cdbd2cSJim Jagielski 	Bitmap			aBitmap;
44*b1cdbd2cSJim Jagielski 	FASTBOOL		bBitmap;
45*b1cdbd2cSJim Jagielski     sal_Bool        bResetBackground;
46*b1cdbd2cSJim Jagielski     sal_Bool        bFrameDirection;
47*b1cdbd2cSJim Jagielski     sal_Int32       nFrameDirection;
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski 
PageWindow_ImplPageWindow_Impl50*b1cdbd2cSJim Jagielski     PageWindow_Impl() :
51*b1cdbd2cSJim Jagielski         pBorder(0),
52*b1cdbd2cSJim Jagielski         bBitmap(sal_False),
53*b1cdbd2cSJim Jagielski         bResetBackground(sal_False),
54*b1cdbd2cSJim Jagielski         bFrameDirection(sal_False),
55*b1cdbd2cSJim Jagielski         nFrameDirection(0) {}
56*b1cdbd2cSJim Jagielski 
EnableFrameDirectionPageWindow_Impl57*b1cdbd2cSJim Jagielski     void        EnableFrameDirection(sal_Bool bEnable){bFrameDirection = bEnable;}
SetFrameDirectionPageWindow_Impl58*b1cdbd2cSJim Jagielski     void        SetFrameDirection(sal_Int32 nDirection){nFrameDirection = nDirection;}
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski };
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski // STATIC DATA -----------------------------------------------------------
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski #define CELL_WIDTH		1600L
65*b1cdbd2cSJim Jagielski #define CELL_HEIGHT		 800L
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski // class SvxPageWindow ---------------------------------------------------
68*b1cdbd2cSJim Jagielski 
SvxPageWindow(Window * pParent,const ResId & rId)69*b1cdbd2cSJim Jagielski SvxPageWindow::SvxPageWindow( Window* pParent, const ResId& rId ) :
70*b1cdbd2cSJim Jagielski 
71*b1cdbd2cSJim Jagielski 	Window( pParent, rId ),
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski 	nTop		( 0 ),
74*b1cdbd2cSJim Jagielski 	nBottom		( 0 ),
75*b1cdbd2cSJim Jagielski 	nLeft		( 0 ),
76*b1cdbd2cSJim Jagielski 	nRight		( 0 ),
77*b1cdbd2cSJim Jagielski     aColor      ( COL_TRANSPARENT ),
78*b1cdbd2cSJim Jagielski 	nHdLeft		( 0 ),
79*b1cdbd2cSJim Jagielski 	nHdRight	( 0 ),
80*b1cdbd2cSJim Jagielski 	nHdDist		( 0 ),
81*b1cdbd2cSJim Jagielski 	nHdHeight	( 0 ),
82*b1cdbd2cSJim Jagielski     aHdColor    ( COL_TRANSPARENT ),
83*b1cdbd2cSJim Jagielski 	pHdBorder	( 0 ),
84*b1cdbd2cSJim Jagielski 	nFtLeft		( 0 ),
85*b1cdbd2cSJim Jagielski 	nFtRight	( 0 ),
86*b1cdbd2cSJim Jagielski 	nFtDist		( 0 ),
87*b1cdbd2cSJim Jagielski 	nFtHeight	( 0 ),
88*b1cdbd2cSJim Jagielski     aFtColor    ( COL_TRANSPARENT ),
89*b1cdbd2cSJim Jagielski 	pFtBorder 	( 0 ),
90*b1cdbd2cSJim Jagielski 	bFooter		( sal_False ),
91*b1cdbd2cSJim Jagielski 	bHeader		( sal_False ),
92*b1cdbd2cSJim Jagielski 	bTable		( sal_False ),
93*b1cdbd2cSJim Jagielski 	bHorz		( sal_False ),
94*b1cdbd2cSJim Jagielski 	bVert		( sal_False ),
95*b1cdbd2cSJim Jagielski 	eUsage		( SVX_PAGE_ALL )
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski {
98*b1cdbd2cSJim Jagielski 	pImpl = new PageWindow_Impl;
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski 	// defaultmaessing in Twips rechnen
101*b1cdbd2cSJim Jagielski 	SetMapMode( MapMode( MAP_TWIP ) );
102*b1cdbd2cSJim Jagielski 	aWinSize = GetOutputSizePixel();
103*b1cdbd2cSJim Jagielski 	aWinSize.Height() -= 4;
104*b1cdbd2cSJim Jagielski 	aWinSize.Width() -= 4;
105*b1cdbd2cSJim Jagielski 
106*b1cdbd2cSJim Jagielski 	aWinSize = PixelToLogic( aWinSize );
107*b1cdbd2cSJim Jagielski     SetBackground();
108*b1cdbd2cSJim Jagielski }
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
111*b1cdbd2cSJim Jagielski 
~SvxPageWindow()112*b1cdbd2cSJim Jagielski SvxPageWindow::~SvxPageWindow()
113*b1cdbd2cSJim Jagielski {
114*b1cdbd2cSJim Jagielski 	delete pImpl;
115*b1cdbd2cSJim Jagielski 	delete pHdBorder;
116*b1cdbd2cSJim Jagielski 	delete pFtBorder;
117*b1cdbd2cSJim Jagielski }
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
120*b1cdbd2cSJim Jagielski 
Paint(const Rectangle &)121*b1cdbd2cSJim Jagielski void __EXPORT SvxPageWindow::Paint( const Rectangle& )
122*b1cdbd2cSJim Jagielski {
123*b1cdbd2cSJim Jagielski 	Fraction aXScale( aWinSize.Width(), std::max( (long) (aSize.Width() * 2 + aSize.Width() / 8), 1L ) );
124*b1cdbd2cSJim Jagielski 	Fraction aYScale( aWinSize.Height(), std::max( aSize.Height(), 1L ) );
125*b1cdbd2cSJim Jagielski 	MapMode aMapMode( GetMapMode() );
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski 	if ( aYScale < aXScale )
128*b1cdbd2cSJim Jagielski 	{
129*b1cdbd2cSJim Jagielski 		aMapMode.SetScaleX( aYScale );
130*b1cdbd2cSJim Jagielski 		aMapMode.SetScaleY( aYScale );
131*b1cdbd2cSJim Jagielski 	}
132*b1cdbd2cSJim Jagielski 	else
133*b1cdbd2cSJim Jagielski 	{
134*b1cdbd2cSJim Jagielski 		aMapMode.SetScaleX( aXScale );
135*b1cdbd2cSJim Jagielski 		aMapMode.SetScaleY( aXScale );
136*b1cdbd2cSJim Jagielski 	}
137*b1cdbd2cSJim Jagielski 	SetMapMode( aMapMode );
138*b1cdbd2cSJim Jagielski 	Size aSz( PixelToLogic( GetSizePixel() ) );
139*b1cdbd2cSJim Jagielski 	long nYPos = ( aSz.Height() - aSize.Height() ) / 2;
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski 	if ( eUsage == SVX_PAGE_ALL )
142*b1cdbd2cSJim Jagielski 	{
143*b1cdbd2cSJim Jagielski 		// alle Seiten gleich -> eine Seite malen
144*b1cdbd2cSJim Jagielski 		if ( aSize.Width() > aSize.Height() )
145*b1cdbd2cSJim Jagielski 		{
146*b1cdbd2cSJim Jagielski 			// Querformat in gleicher Gr"osse zeichnen
147*b1cdbd2cSJim Jagielski 			Fraction aX = aMapMode.GetScaleX();
148*b1cdbd2cSJim Jagielski 			Fraction aY = aMapMode.GetScaleY();
149*b1cdbd2cSJim Jagielski 			Fraction a2( 1.5 );
150*b1cdbd2cSJim Jagielski 			aX *= a2;
151*b1cdbd2cSJim Jagielski 			aY *= a2;
152*b1cdbd2cSJim Jagielski 			aMapMode.SetScaleX( aX );
153*b1cdbd2cSJim Jagielski 			aMapMode.SetScaleY( aY );
154*b1cdbd2cSJim Jagielski 			SetMapMode( aMapMode );
155*b1cdbd2cSJim Jagielski 			aSz = PixelToLogic( GetSizePixel() );
156*b1cdbd2cSJim Jagielski 			nYPos = ( aSz.Height() - aSize.Height() ) / 2;
157*b1cdbd2cSJim Jagielski 			long nXPos = ( aSz.Width() - aSize.Width() ) / 2;
158*b1cdbd2cSJim Jagielski 			DrawPage( Point( nXPos, nYPos ), sal_True, sal_True );
159*b1cdbd2cSJim Jagielski 		}
160*b1cdbd2cSJim Jagielski 		else
161*b1cdbd2cSJim Jagielski 			// Hochformat
162*b1cdbd2cSJim Jagielski 			DrawPage( Point( ( aSz.Width() - aSize.Width() ) / 2, nYPos ), sal_True, sal_True );
163*b1cdbd2cSJim Jagielski 	}
164*b1cdbd2cSJim Jagielski 	else
165*b1cdbd2cSJim Jagielski 	{
166*b1cdbd2cSJim Jagielski 		// Linke und rechte Seite unterschiedlich -> ggf. zwei Seiten malen
167*b1cdbd2cSJim Jagielski 		DrawPage( Point( 0, nYPos ), sal_False, (sal_Bool)( eUsage & SVX_PAGE_LEFT ) );
168*b1cdbd2cSJim Jagielski 		DrawPage( Point( aSize.Width() + aSize.Width() / 8, nYPos ), sal_True,
169*b1cdbd2cSJim Jagielski 				  (sal_Bool)( eUsage & SVX_PAGE_RIGHT ) );
170*b1cdbd2cSJim Jagielski 	}
171*b1cdbd2cSJim Jagielski }
172*b1cdbd2cSJim Jagielski 
173*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
DrawPage(const Point & rOrg,const sal_Bool bSecond,const sal_Bool bEnabled)174*b1cdbd2cSJim Jagielski void SvxPageWindow::DrawPage( const Point& rOrg, const sal_Bool bSecond, const sal_Bool bEnabled )
175*b1cdbd2cSJim Jagielski {
176*b1cdbd2cSJim Jagielski     const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
177*b1cdbd2cSJim Jagielski     const Color& rFieldColor = rStyleSettings.GetFieldColor();
178*b1cdbd2cSJim Jagielski     const Color& rFieldTextColor = rStyleSettings.GetFieldTextColor();
179*b1cdbd2cSJim Jagielski     const Color& rDisableColor = rStyleSettings.GetDisableColor();
180*b1cdbd2cSJim Jagielski     const Color& rDlgColor = rStyleSettings.GetDialogColor();
181*b1cdbd2cSJim Jagielski 
182*b1cdbd2cSJim Jagielski     // background
183*b1cdbd2cSJim Jagielski     if(!bSecond || pImpl->bResetBackground)
184*b1cdbd2cSJim Jagielski     {
185*b1cdbd2cSJim Jagielski         SetLineColor( Color(COL_TRANSPARENT) );
186*b1cdbd2cSJim Jagielski         SetFillColor( rDlgColor );
187*b1cdbd2cSJim Jagielski         Size winSize(GetOutputSize());
188*b1cdbd2cSJim Jagielski         DrawRect( Rectangle( Point(0,0), winSize ) );
189*b1cdbd2cSJim Jagielski 
190*b1cdbd2cSJim Jagielski         if ( pImpl->bResetBackground )
191*b1cdbd2cSJim Jagielski             pImpl->bResetBackground = sal_False;
192*b1cdbd2cSJim Jagielski     }
193*b1cdbd2cSJim Jagielski     SetLineColor( rFieldTextColor );
194*b1cdbd2cSJim Jagielski     // Schatten
195*b1cdbd2cSJim Jagielski     Size aTempSize = aSize;
196*b1cdbd2cSJim Jagielski     // Seite
197*b1cdbd2cSJim Jagielski 	if ( !bEnabled )
198*b1cdbd2cSJim Jagielski 	{
199*b1cdbd2cSJim Jagielski         SetFillColor( rDisableColor );
200*b1cdbd2cSJim Jagielski 		DrawRect( Rectangle( rOrg, aTempSize ) );
201*b1cdbd2cSJim Jagielski 		return;
202*b1cdbd2cSJim Jagielski 	}
203*b1cdbd2cSJim Jagielski     SetFillColor( rFieldColor );
204*b1cdbd2cSJim Jagielski 	DrawRect( Rectangle( rOrg, aTempSize ) );
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski 	// Border Top Bottom Left Right
207*b1cdbd2cSJim Jagielski 	Point aBegin( rOrg );
208*b1cdbd2cSJim Jagielski 	Point aEnd( rOrg );
209*b1cdbd2cSJim Jagielski 
210*b1cdbd2cSJim Jagielski 	long nL = nLeft;
211*b1cdbd2cSJim Jagielski 	long nR = nRight;
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski 	if ( eUsage == SVX_PAGE_MIRROR && !bSecond )
214*b1cdbd2cSJim Jagielski 	{
215*b1cdbd2cSJim Jagielski 		// f"ur gespiegelt drehen
216*b1cdbd2cSJim Jagielski 		nL = nRight;
217*b1cdbd2cSJim Jagielski 		nR = nLeft;
218*b1cdbd2cSJim Jagielski 	}
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski 	Rectangle aRect;
221*b1cdbd2cSJim Jagielski 
222*b1cdbd2cSJim Jagielski 	aRect.Left()  = rOrg.X() + nL;
223*b1cdbd2cSJim Jagielski 	aRect.Right() = rOrg.X() + aTempSize.Width() - nR;
224*b1cdbd2cSJim Jagielski 	aRect.Top()	  = rOrg.Y() + nTop;
225*b1cdbd2cSJim Jagielski 	aRect.Bottom()= rOrg.Y() + aTempSize.Height() - nBottom;
226*b1cdbd2cSJim Jagielski 
227*b1cdbd2cSJim Jagielski 	Rectangle aHdRect( aRect );
228*b1cdbd2cSJim Jagielski 	Rectangle aFtRect( aRect );
229*b1cdbd2cSJim Jagielski 
230*b1cdbd2cSJim Jagielski 	if ( bHeader )
231*b1cdbd2cSJim Jagielski 	{
232*b1cdbd2cSJim Jagielski 		// ggf. Header anzeigen
233*b1cdbd2cSJim Jagielski 		aHdRect.Left() += nHdLeft;
234*b1cdbd2cSJim Jagielski 		aHdRect.Right() -= nHdRight;
235*b1cdbd2cSJim Jagielski 		aHdRect.Bottom() = aRect.Top() + nHdHeight;
236*b1cdbd2cSJim Jagielski 		aRect.Top() += nHdHeight + nHdDist;
237*b1cdbd2cSJim Jagielski 		SetFillColor( aHdColor );
238*b1cdbd2cSJim Jagielski 		DrawRect( aHdRect );
239*b1cdbd2cSJim Jagielski 	}
240*b1cdbd2cSJim Jagielski 
241*b1cdbd2cSJim Jagielski 	if ( bFooter )
242*b1cdbd2cSJim Jagielski 	{
243*b1cdbd2cSJim Jagielski 		// ggf. Footer anzeigen
244*b1cdbd2cSJim Jagielski 		aFtRect.Left() += nFtLeft;
245*b1cdbd2cSJim Jagielski 		aFtRect.Right() -= nFtRight;
246*b1cdbd2cSJim Jagielski 		aFtRect.Top() = aRect.Bottom() - nFtHeight;
247*b1cdbd2cSJim Jagielski 		aRect.Bottom() -= nFtHeight + nFtDist;
248*b1cdbd2cSJim Jagielski 		SetFillColor( aFtColor );
249*b1cdbd2cSJim Jagielski 		DrawRect( aFtRect );
250*b1cdbd2cSJim Jagielski 	}
251*b1cdbd2cSJim Jagielski 
252*b1cdbd2cSJim Jagielski 	// Body malen
253*b1cdbd2cSJim Jagielski 	SetFillColor( aColor );
254*b1cdbd2cSJim Jagielski 	if ( pImpl->bBitmap )
255*b1cdbd2cSJim Jagielski 	{
256*b1cdbd2cSJim Jagielski 		DrawRect( aRect );
257*b1cdbd2cSJim Jagielski 		Point aBmpPnt = aRect.TopLeft();
258*b1cdbd2cSJim Jagielski 		Size aBmpSiz = aRect.GetSize();
259*b1cdbd2cSJim Jagielski 		long nDeltaX = aBmpSiz.Width() / 15;
260*b1cdbd2cSJim Jagielski 		long nDeltaY = aBmpSiz.Height() / 15;
261*b1cdbd2cSJim Jagielski 		aBmpPnt.X() += nDeltaX;
262*b1cdbd2cSJim Jagielski 		aBmpPnt.Y() += nDeltaY;
263*b1cdbd2cSJim Jagielski 		aBmpSiz.Width() -= nDeltaX * 2;
264*b1cdbd2cSJim Jagielski 		aBmpSiz.Height() -= nDeltaY * 2;
265*b1cdbd2cSJim Jagielski 		DrawBitmap( aBmpPnt, aBmpSiz, pImpl->aBitmap );
266*b1cdbd2cSJim Jagielski 	}
267*b1cdbd2cSJim Jagielski 	else
268*b1cdbd2cSJim Jagielski 		DrawRect( aRect );
269*b1cdbd2cSJim Jagielski 
270*b1cdbd2cSJim Jagielski     if(pImpl->bFrameDirection && !bTable)
271*b1cdbd2cSJim Jagielski     {
272*b1cdbd2cSJim Jagielski        //pImpl->nFrameDirection
273*b1cdbd2cSJim Jagielski         Point aPos;
274*b1cdbd2cSJim Jagielski         Font aFont(GetFont());
275*b1cdbd2cSJim Jagielski         const Size aSaveSize = aFont.GetSize();
276*b1cdbd2cSJim Jagielski         Size aDrawSize( 0, aRect.GetHeight() / 6);
277*b1cdbd2cSJim Jagielski         aFont.SetSize(aDrawSize);
278*b1cdbd2cSJim Jagielski         SetFont(aFont);
279*b1cdbd2cSJim Jagielski         String sText(String::CreateFromAscii("ABC"));
280*b1cdbd2cSJim Jagielski         Point aMove(1, GetTextHeight());
281*b1cdbd2cSJim Jagielski         sal_Unicode cArrow = 0x2193;
282*b1cdbd2cSJim Jagielski         long nAWidth = GetTextWidth(String(sText.GetChar(0)));
283*b1cdbd2cSJim Jagielski         switch(pImpl->nFrameDirection)
284*b1cdbd2cSJim Jagielski         {
285*b1cdbd2cSJim Jagielski             case FRMDIR_HORI_LEFT_TOP:
286*b1cdbd2cSJim Jagielski                 aPos = aRect.TopLeft();
287*b1cdbd2cSJim Jagielski                 aPos.X() += PixelToLogic(Point(1,1)).X();
288*b1cdbd2cSJim Jagielski                 aMove.Y() = 0;
289*b1cdbd2cSJim Jagielski                 cArrow = 0x2192;
290*b1cdbd2cSJim Jagielski             break;
291*b1cdbd2cSJim Jagielski             case FRMDIR_HORI_RIGHT_TOP:
292*b1cdbd2cSJim Jagielski                 aPos = aRect.TopRight();
293*b1cdbd2cSJim Jagielski                 aPos.X() -= nAWidth;
294*b1cdbd2cSJim Jagielski                 aMove.Y() = 0;
295*b1cdbd2cSJim Jagielski                 aMove.X() *= -1;
296*b1cdbd2cSJim Jagielski                 cArrow = 0x2190;
297*b1cdbd2cSJim Jagielski             break;
298*b1cdbd2cSJim Jagielski             case FRMDIR_VERT_TOP_LEFT:
299*b1cdbd2cSJim Jagielski                 aPos = aRect.TopLeft();
300*b1cdbd2cSJim Jagielski                 aPos.X() += PixelToLogic(Point(1,1)).X();
301*b1cdbd2cSJim Jagielski                 aMove.X() = 0;
302*b1cdbd2cSJim Jagielski             break;
303*b1cdbd2cSJim Jagielski             case FRMDIR_VERT_TOP_RIGHT:
304*b1cdbd2cSJim Jagielski                 aPos = aRect.TopRight();
305*b1cdbd2cSJim Jagielski                 aPos.X() -= nAWidth;
306*b1cdbd2cSJim Jagielski                 aMove.X() = 0;
307*b1cdbd2cSJim Jagielski             break;
308*b1cdbd2cSJim Jagielski         }
309*b1cdbd2cSJim Jagielski         sText.Append(cArrow);
310*b1cdbd2cSJim Jagielski         for(sal_uInt16 i = 0; i < sText.Len(); i++)
311*b1cdbd2cSJim Jagielski         {
312*b1cdbd2cSJim Jagielski             String sDraw(sText.GetChar(i));
313*b1cdbd2cSJim Jagielski             long nHDiff = 0;
314*b1cdbd2cSJim Jagielski             long nCharWidth = GetTextWidth(sDraw);
315*b1cdbd2cSJim Jagielski             sal_Bool bHorizontal = 0 == aMove.Y();
316*b1cdbd2cSJim Jagielski             if(!bHorizontal)
317*b1cdbd2cSJim Jagielski             {
318*b1cdbd2cSJim Jagielski                 nHDiff = (nAWidth - nCharWidth)/2;
319*b1cdbd2cSJim Jagielski                 aPos.X() += nHDiff;
320*b1cdbd2cSJim Jagielski             }
321*b1cdbd2cSJim Jagielski             DrawText(aPos, sDraw);
322*b1cdbd2cSJim Jagielski             if(bHorizontal)
323*b1cdbd2cSJim Jagielski             {
324*b1cdbd2cSJim Jagielski                 aPos.X() += aMove.X() < 0 ? - nCharWidth : nCharWidth;
325*b1cdbd2cSJim Jagielski             }
326*b1cdbd2cSJim Jagielski             else
327*b1cdbd2cSJim Jagielski             {
328*b1cdbd2cSJim Jagielski                 aPos.X() -= nHDiff;
329*b1cdbd2cSJim Jagielski                 aPos.Y() += aMove.Y();
330*b1cdbd2cSJim Jagielski             }
331*b1cdbd2cSJim Jagielski         }
332*b1cdbd2cSJim Jagielski         aFont.SetSize(aSaveSize);
333*b1cdbd2cSJim Jagielski         SetFont(aFont);
334*b1cdbd2cSJim Jagielski 
335*b1cdbd2cSJim Jagielski     }
336*b1cdbd2cSJim Jagielski 	if ( bTable )
337*b1cdbd2cSJim Jagielski 	{
338*b1cdbd2cSJim Jagielski 		// Tabelle malen, ggf. zentrieren
339*b1cdbd2cSJim Jagielski 		SetLineColor( Color(COL_LIGHTGRAY) );
340*b1cdbd2cSJim Jagielski 
341*b1cdbd2cSJim Jagielski 		long nW = aRect.GetWidth(), nH = aRect.GetHeight();
342*b1cdbd2cSJim Jagielski 		long nTW = CELL_WIDTH * 3, nTH = CELL_HEIGHT * 3;
343*b1cdbd2cSJim Jagielski         long _nLeft = bHorz ? aRect.Left() + ((nW - nTW) / 2) : aRect.Left();
344*b1cdbd2cSJim Jagielski         long _nTop = bVert ? aRect.Top() + ((nH - nTH) / 2) : aRect.Top();
345*b1cdbd2cSJim Jagielski         Rectangle aCellRect( Point( _nLeft, _nTop ), Size( CELL_WIDTH, CELL_HEIGHT ) );
346*b1cdbd2cSJim Jagielski 
347*b1cdbd2cSJim Jagielski 		for ( sal_uInt16 i = 0; i < 3; ++i )
348*b1cdbd2cSJim Jagielski 		{
349*b1cdbd2cSJim Jagielski             aCellRect.Left() = _nLeft;
350*b1cdbd2cSJim Jagielski             aCellRect.Right() = _nLeft + CELL_WIDTH;
351*b1cdbd2cSJim Jagielski 			if ( i > 0 )
352*b1cdbd2cSJim Jagielski 				aCellRect.Move( 0, CELL_HEIGHT );
353*b1cdbd2cSJim Jagielski 
354*b1cdbd2cSJim Jagielski 			for ( sal_uInt16 j = 0; j < 3; ++j )
355*b1cdbd2cSJim Jagielski 			{
356*b1cdbd2cSJim Jagielski 				if ( j > 0 )
357*b1cdbd2cSJim Jagielski 					aCellRect.Move( CELL_WIDTH, 0 );
358*b1cdbd2cSJim Jagielski 				DrawRect( aCellRect );
359*b1cdbd2cSJim Jagielski 			}
360*b1cdbd2cSJim Jagielski 		}
361*b1cdbd2cSJim Jagielski 	}
362*b1cdbd2cSJim Jagielski }
363*b1cdbd2cSJim Jagielski 
364*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
365*b1cdbd2cSJim Jagielski 
SetBorder(const SvxBoxItem & rNew)366*b1cdbd2cSJim Jagielski void SvxPageWindow::SetBorder( const SvxBoxItem& rNew )
367*b1cdbd2cSJim Jagielski {
368*b1cdbd2cSJim Jagielski 	delete pImpl->pBorder;
369*b1cdbd2cSJim Jagielski 	pImpl->pBorder = new SvxBoxItem( rNew );
370*b1cdbd2cSJim Jagielski }
371*b1cdbd2cSJim Jagielski 
372*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
373*b1cdbd2cSJim Jagielski 
SetBitmap(Bitmap * pBmp)374*b1cdbd2cSJim Jagielski void SvxPageWindow::SetBitmap( Bitmap* pBmp )
375*b1cdbd2cSJim Jagielski {
376*b1cdbd2cSJim Jagielski 	if ( pBmp )
377*b1cdbd2cSJim Jagielski 	{
378*b1cdbd2cSJim Jagielski 		pImpl->aBitmap = *pBmp;
379*b1cdbd2cSJim Jagielski 		pImpl->bBitmap = sal_True;
380*b1cdbd2cSJim Jagielski 	}
381*b1cdbd2cSJim Jagielski 	else
382*b1cdbd2cSJim Jagielski 		pImpl->bBitmap = sal_False;
383*b1cdbd2cSJim Jagielski }
384*b1cdbd2cSJim Jagielski 
385*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
386*b1cdbd2cSJim Jagielski 
SetHdBorder(const SvxBoxItem & rNew)387*b1cdbd2cSJim Jagielski void SvxPageWindow::SetHdBorder( const SvxBoxItem& rNew )
388*b1cdbd2cSJim Jagielski {
389*b1cdbd2cSJim Jagielski 	delete pHdBorder;
390*b1cdbd2cSJim Jagielski 	pHdBorder = new SvxBoxItem( rNew );
391*b1cdbd2cSJim Jagielski }
392*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
393*b1cdbd2cSJim Jagielski 
SetFtBorder(const SvxBoxItem & rNew)394*b1cdbd2cSJim Jagielski void SvxPageWindow::SetFtBorder( const SvxBoxItem& rNew )
395*b1cdbd2cSJim Jagielski {
396*b1cdbd2cSJim Jagielski 	delete pFtBorder;
397*b1cdbd2cSJim Jagielski 	pFtBorder = new SvxBoxItem( rNew );
398*b1cdbd2cSJim Jagielski }
399*b1cdbd2cSJim Jagielski /* -----------------------------13.06.2002 16:16------------------------------
400*b1cdbd2cSJim Jagielski 
401*b1cdbd2cSJim Jagielski  ---------------------------------------------------------------------------*/
EnableFrameDirection(sal_Bool bEnable)402*b1cdbd2cSJim Jagielski void  SvxPageWindow::EnableFrameDirection(sal_Bool bEnable)
403*b1cdbd2cSJim Jagielski {
404*b1cdbd2cSJim Jagielski     pImpl->EnableFrameDirection(bEnable);
405*b1cdbd2cSJim Jagielski }
406*b1cdbd2cSJim Jagielski /* -----------------------------13.06.2002 16:16------------------------------
407*b1cdbd2cSJim Jagielski 
408*b1cdbd2cSJim Jagielski  ---------------------------------------------------------------------------*/
SetFrameDirection(sal_Int32 nFrameDirection)409*b1cdbd2cSJim Jagielski void  SvxPageWindow::SetFrameDirection(sal_Int32 nFrameDirection)
410*b1cdbd2cSJim Jagielski {
411*b1cdbd2cSJim Jagielski     pImpl->SetFrameDirection(nFrameDirection);
412*b1cdbd2cSJim Jagielski }
413*b1cdbd2cSJim Jagielski 
ResetBackground()414*b1cdbd2cSJim Jagielski void SvxPageWindow::ResetBackground()
415*b1cdbd2cSJim Jagielski {
416*b1cdbd2cSJim Jagielski     pImpl->bResetBackground = sal_True;
417*b1cdbd2cSJim Jagielski }
418