xref: /aoo4110/main/sw/source/core/view/viewsh.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 // MARKER(update_precomp.py): autogen include statement, do not remove
23*b1cdbd2cSJim Jagielski #include "precompiled_sw.hxx"
24*b1cdbd2cSJim Jagielski 
25*b1cdbd2cSJim Jagielski #define _SVX_PARAITEM_HXX
26*b1cdbd2cSJim Jagielski #define _SVX_TEXTITEM_HXX
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/XAccessible.hpp>
29*b1cdbd2cSJim Jagielski #include <sfx2/viewfrm.hxx>
30*b1cdbd2cSJim Jagielski #include <sfx2/progress.hxx>
31*b1cdbd2cSJim Jagielski #include <svx/srchdlg.hxx>
32*b1cdbd2cSJim Jagielski #include <svx/svdobj.hxx>
33*b1cdbd2cSJim Jagielski #include <sfx2/viewsh.hxx>
34*b1cdbd2cSJim Jagielski #include <swwait.hxx>
35*b1cdbd2cSJim Jagielski #include <swmodule.hxx>
36*b1cdbd2cSJim Jagielski #include <fesh.hxx>
37*b1cdbd2cSJim Jagielski #include <doc.hxx>
38*b1cdbd2cSJim Jagielski #include <rootfrm.hxx>
39*b1cdbd2cSJim Jagielski #include <pagefrm.hxx>
40*b1cdbd2cSJim Jagielski #include <cntfrm.hxx>
41*b1cdbd2cSJim Jagielski #include <viewimp.hxx>
42*b1cdbd2cSJim Jagielski #include <frmtool.hxx>
43*b1cdbd2cSJim Jagielski #include <viewopt.hxx>
44*b1cdbd2cSJim Jagielski #include <dview.hxx>
45*b1cdbd2cSJim Jagielski #include <swregion.hxx>
46*b1cdbd2cSJim Jagielski #include <hints.hxx>
47*b1cdbd2cSJim Jagielski #include <fmtfsize.hxx>
48*b1cdbd2cSJim Jagielski #include <docufld.hxx>
49*b1cdbd2cSJim Jagielski #include <txtfrm.hxx>
50*b1cdbd2cSJim Jagielski #include <layact.hxx>
51*b1cdbd2cSJim Jagielski #include <mdiexp.hxx>
52*b1cdbd2cSJim Jagielski #include <fntcache.hxx>
53*b1cdbd2cSJim Jagielski #include <ptqueue.hxx>
54*b1cdbd2cSJim Jagielski #include <tabfrm.hxx>
55*b1cdbd2cSJim Jagielski #include <docsh.hxx>
56*b1cdbd2cSJim Jagielski #include <pagedesc.hxx>
57*b1cdbd2cSJim Jagielski #include <ndole.hxx>
58*b1cdbd2cSJim Jagielski #include <ndindex.hxx>
59*b1cdbd2cSJim Jagielski #include <accmap.hxx>
60*b1cdbd2cSJim Jagielski #include <svtools/colorcfg.hxx>
61*b1cdbd2cSJim Jagielski #include <svtools/accessibilityoptions.hxx>
62*b1cdbd2cSJim Jagielski #include <accessibilityoptions.hxx>
63*b1cdbd2cSJim Jagielski #include <statstr.hrc>
64*b1cdbd2cSJim Jagielski #include <comcore.hrc>
65*b1cdbd2cSJim Jagielski #include <pagepreviewlayout.hxx>
66*b1cdbd2cSJim Jagielski #include <sortedobjs.hxx>
67*b1cdbd2cSJim Jagielski #include <anchoredobject.hxx>
68*b1cdbd2cSJim Jagielski #include "../../ui/inc/view.hxx"
69*b1cdbd2cSJim Jagielski #include <PostItMgr.hxx>
70*b1cdbd2cSJim Jagielski #include <vcl/virdev.hxx>
71*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
72*b1cdbd2cSJim Jagielski #include <svx/sdrpaintwindow.hxx>
73*b1cdbd2cSJim Jagielski #include <vcl/dibtools.hxx>
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski sal_Bool ViewShell::bLstAct = sal_False;
76*b1cdbd2cSJim Jagielski ShellResource *ViewShell::pShellRes = 0;
77*b1cdbd2cSJim Jagielski Window *ViewShell::pCareWindow = 0;
78*b1cdbd2cSJim Jagielski BitmapEx* ViewShell::pErrorBmp = NULL;
79*b1cdbd2cSJim Jagielski BitmapEx* ViewShell::pReplaceBmp = NULL;
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski sal_Bool bInSizeNotify = sal_False;
82*b1cdbd2cSJim Jagielski 
83*b1cdbd2cSJim Jagielski DBG_NAME(LayoutIdle)
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski TYPEINIT0(ViewShell);
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////////////
90*b1cdbd2cSJim Jagielski // #i72754# 2nd set of Pre/PostPaints
91*b1cdbd2cSJim Jagielski // This time it uses the lock counter mnPrePostPaintCount to allow only one activation
92*b1cdbd2cSJim Jagielski // and deactivation and mpPrePostOutDev to remember the OutDev from the BeginDrawLayers
93*b1cdbd2cSJim Jagielski // call. That way, all places where paint take place can be handled the same way, even
94*b1cdbd2cSJim Jagielski // when calling other paint methods. This is the case at the places where SW paints
95*b1cdbd2cSJim Jagielski // buffered into VDevs to avoid flicker. Tis is in general problematic and should be
96*b1cdbd2cSJim Jagielski // solved once using the BufferedOutput functionality of the DrawView.
97*b1cdbd2cSJim Jagielski 
PrePaint()98*b1cdbd2cSJim Jagielski void ViewShell::PrePaint()
99*b1cdbd2cSJim Jagielski {
100*b1cdbd2cSJim Jagielski     // forward PrePaint event from VCL Window to DrawingLayer
101*b1cdbd2cSJim Jagielski     if(HasDrawView())
102*b1cdbd2cSJim Jagielski     {
103*b1cdbd2cSJim Jagielski         Imp()->GetDrawView()->PrePaint();
104*b1cdbd2cSJim Jagielski     }
105*b1cdbd2cSJim Jagielski }
106*b1cdbd2cSJim Jagielski 
DLPrePaint2(const Region & rRegion)107*b1cdbd2cSJim Jagielski void ViewShell::DLPrePaint2(const Region& rRegion)
108*b1cdbd2cSJim Jagielski {
109*b1cdbd2cSJim Jagielski 	if(0L == mnPrePostPaintCount)
110*b1cdbd2cSJim Jagielski 	{
111*b1cdbd2cSJim Jagielski 		// #i75172# ensure DrawView to use DrawingLayer bufferings
112*b1cdbd2cSJim Jagielski 		if ( !HasDrawView() )
113*b1cdbd2cSJim Jagielski 			MakeDrawView();
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski 		// Prefer window; if tot available, get pOut (e.g. printer)
116*b1cdbd2cSJim Jagielski 		mpPrePostOutDev = (GetWin() ? GetWin() : GetOut());
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski 		// #i74769# use SdrPaintWindow now direct
119*b1cdbd2cSJim Jagielski 		mpTargetPaintWindow = Imp()->GetDrawView()->BeginDrawLayers(mpPrePostOutDev, rRegion);
120*b1cdbd2cSJim Jagielski 		OSL_ENSURE(mpTargetPaintWindow, "BeginDrawLayers: Got no SdrPaintWindow (!)");
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski 		// #i74769# if prerender, save OutDev and redirect to PreRenderDevice
123*b1cdbd2cSJim Jagielski 		if(mpTargetPaintWindow->GetPreRenderDevice())
124*b1cdbd2cSJim Jagielski 		{
125*b1cdbd2cSJim Jagielski 			mpBufferedOut = pOut;
126*b1cdbd2cSJim Jagielski 			pOut = &(mpTargetPaintWindow->GetTargetOutputDevice());
127*b1cdbd2cSJim Jagielski 		}
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski 		// remember original paint MapMode for wrapped FlyFrame paints
130*b1cdbd2cSJim Jagielski 		maPrePostMapMode = pOut->GetMapMode();
131*b1cdbd2cSJim Jagielski 	}
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski 	mnPrePostPaintCount++;
134*b1cdbd2cSJim Jagielski }
135*b1cdbd2cSJim Jagielski 
DLPostPaint2(bool bPaintFormLayer)136*b1cdbd2cSJim Jagielski void ViewShell::DLPostPaint2(bool bPaintFormLayer)
137*b1cdbd2cSJim Jagielski {
138*b1cdbd2cSJim Jagielski 	OSL_ENSURE(mnPrePostPaintCount > 0L, "ViewShell::DLPostPaint2: Pre/PostPaint encapsulation broken (!)");
139*b1cdbd2cSJim Jagielski 	mnPrePostPaintCount--;
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski 	if((0L == mnPrePostPaintCount) && (0 != mpTargetPaintWindow))
142*b1cdbd2cSJim Jagielski 	{
143*b1cdbd2cSJim Jagielski 		// #i74769# restore buffered OutDev
144*b1cdbd2cSJim Jagielski 		if(mpTargetPaintWindow->GetPreRenderDevice())
145*b1cdbd2cSJim Jagielski 		{
146*b1cdbd2cSJim Jagielski 			pOut = mpBufferedOut;
147*b1cdbd2cSJim Jagielski 		}
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski 		// #i74769# use SdrPaintWindow now direct
150*b1cdbd2cSJim Jagielski 		Imp()->GetDrawView()->EndDrawLayers(*mpTargetPaintWindow, bPaintFormLayer);
151*b1cdbd2cSJim Jagielski 		mpTargetPaintWindow = 0;
152*b1cdbd2cSJim Jagielski 	}
153*b1cdbd2cSJim Jagielski }
154*b1cdbd2cSJim Jagielski 
155*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////////////
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski /******************************************************************************
158*b1cdbd2cSJim Jagielski |*
159*b1cdbd2cSJim Jagielski |*	ViewShell::ImplEndAction()
160*b1cdbd2cSJim Jagielski |*
161*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	MA 04. Sep. 96
162*b1cdbd2cSJim Jagielski |*
163*b1cdbd2cSJim Jagielski ******************************************************************************/
164*b1cdbd2cSJim Jagielski 
ImplEndAction(const sal_Bool bIdleEnd)165*b1cdbd2cSJim Jagielski void ViewShell::ImplEndAction( const sal_Bool bIdleEnd )
166*b1cdbd2cSJim Jagielski {
167*b1cdbd2cSJim Jagielski 	//Fuer den Drucker gibt es hier nichts zu tun.
168*b1cdbd2cSJim Jagielski 	if ( !GetWin() || IsPreView() )
169*b1cdbd2cSJim Jagielski 	{
170*b1cdbd2cSJim Jagielski 		bPaintWorks = sal_True;
171*b1cdbd2cSJim Jagielski 		UISizeNotify();
172*b1cdbd2cSJim Jagielski 		return;
173*b1cdbd2cSJim Jagielski 	}
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski 	bInEndAction = sal_True;
176*b1cdbd2cSJim Jagielski 
177*b1cdbd2cSJim Jagielski 	//Laeuft hiermit das EndAction der Letzten Shell im Ring?
178*b1cdbd2cSJim Jagielski 	ViewShell::bLstAct = sal_True;
179*b1cdbd2cSJim Jagielski 	ViewShell *pSh = (ViewShell*)this->GetNext();
180*b1cdbd2cSJim Jagielski 	while ( pSh != this )
181*b1cdbd2cSJim Jagielski 	{	if ( pSh->ActionPend() )
182*b1cdbd2cSJim Jagielski 		{	ViewShell::bLstAct = sal_False;
183*b1cdbd2cSJim Jagielski 			pSh = this;
184*b1cdbd2cSJim Jagielski 		}
185*b1cdbd2cSJim Jagielski 		else
186*b1cdbd2cSJim Jagielski 			pSh = (ViewShell*)pSh->GetNext();
187*b1cdbd2cSJim Jagielski 	}
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski     const bool bIsShellForCheckViewLayout = ( this == GetLayout()->GetCurrShell() );
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski 	SET_CURR_SHELL( this );
192*b1cdbd2cSJim Jagielski 	if ( Imp()->HasDrawView() && !Imp()->GetDrawView()->areMarkHandlesHidden() )
193*b1cdbd2cSJim Jagielski 		Imp()->StartAction();
194*b1cdbd2cSJim Jagielski 
195*b1cdbd2cSJim Jagielski 	if ( Imp()->GetRegion() && Imp()->GetRegion()->GetOrigin() != VisArea() )
196*b1cdbd2cSJim Jagielski         Imp()->DelRegion();
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski 	const sal_Bool bExtraData = ::IsExtraData( GetDoc() );
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski 	if ( !bIdleEnd )
201*b1cdbd2cSJim Jagielski 	{
202*b1cdbd2cSJim Jagielski 		SwLayAction aAction( GetLayout(), Imp() );
203*b1cdbd2cSJim Jagielski 		aAction.SetComplete( sal_False );
204*b1cdbd2cSJim Jagielski 		if ( nLockPaint )
205*b1cdbd2cSJim Jagielski 			aAction.SetPaint( sal_False );
206*b1cdbd2cSJim Jagielski 		aAction.SetInputType( INPUT_KEYBOARD );
207*b1cdbd2cSJim Jagielski 		aAction.Action();
208*b1cdbd2cSJim Jagielski 	}
209*b1cdbd2cSJim Jagielski 
210*b1cdbd2cSJim Jagielski     if ( bIsShellForCheckViewLayout )
211*b1cdbd2cSJim Jagielski         GetLayout()->CheckViewLayout( GetViewOptions(), &aVisArea );
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski 	//Wenn wir selbst keine Paints erzeugen, so warten wir auf das Paint
214*b1cdbd2cSJim Jagielski 	//vom System. Dann ist das Clipping korrekt gesetzt; Beispiel: verschieben
215*b1cdbd2cSJim Jagielski 	//eines DrawObjektes.
216*b1cdbd2cSJim Jagielski     if ( Imp()->GetRegion()     ||
217*b1cdbd2cSJim Jagielski          aInvalidRect.HasArea() ||
218*b1cdbd2cSJim Jagielski          bExtraData )
219*b1cdbd2cSJim Jagielski 	{
220*b1cdbd2cSJim Jagielski 		if ( !nLockPaint )
221*b1cdbd2cSJim Jagielski 		{
222*b1cdbd2cSJim Jagielski 			sal_Bool bPaintsFromSystem = aInvalidRect.HasArea();
223*b1cdbd2cSJim Jagielski 			GetWin()->Update();
224*b1cdbd2cSJim Jagielski 			if ( aInvalidRect.HasArea() )
225*b1cdbd2cSJim Jagielski 			{
226*b1cdbd2cSJim Jagielski 				if ( bPaintsFromSystem )
227*b1cdbd2cSJim Jagielski 					Imp()->AddPaintRect( aInvalidRect );
228*b1cdbd2cSJim Jagielski 
229*b1cdbd2cSJim Jagielski 				ResetInvalidRect();
230*b1cdbd2cSJim Jagielski 				bPaintsFromSystem = sal_True;
231*b1cdbd2cSJim Jagielski 			}
232*b1cdbd2cSJim Jagielski 			bPaintWorks = sal_True;
233*b1cdbd2cSJim Jagielski 
234*b1cdbd2cSJim Jagielski 			SwRegionRects *pRegion = Imp()->GetRegion();
235*b1cdbd2cSJim Jagielski 
236*b1cdbd2cSJim Jagielski 			//JP 27.11.97: wer die Selection hided, muss sie aber auch
237*b1cdbd2cSJim Jagielski 			//				wieder Showen. Sonst gibt es Paintfehler!
238*b1cdbd2cSJim Jagielski 			//	z.B.: addional Mode, Seite vertikal hab zu sehen, in der
239*b1cdbd2cSJim Jagielski 			// Mitte eine Selektion und mit einem anderen Cursor an linken
240*b1cdbd2cSJim Jagielski 			// rechten Rand springen. Ohne ShowCrsr verschwindet die
241*b1cdbd2cSJim Jagielski 			// Selektion
242*b1cdbd2cSJim Jagielski             sal_Bool bShowCrsr = pRegion && IsA( TYPE(SwCrsrShell) );
243*b1cdbd2cSJim Jagielski 			if( bShowCrsr )
244*b1cdbd2cSJim Jagielski 				((SwCrsrShell*)this)->HideCrsrs();
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski 			if ( pRegion )
247*b1cdbd2cSJim Jagielski 			{
248*b1cdbd2cSJim Jagielski 				SwRootFrm* pCurrentLayout = GetLayout();
249*b1cdbd2cSJim Jagielski 
250*b1cdbd2cSJim Jagielski                 Imp()->pRegion = NULL;
251*b1cdbd2cSJim Jagielski 
252*b1cdbd2cSJim Jagielski                 //Erst Invert dann Compress, niemals andersherum!
253*b1cdbd2cSJim Jagielski 				pRegion->Invert();
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski                 pRegion->Compress();
256*b1cdbd2cSJim Jagielski 
257*b1cdbd2cSJim Jagielski 				VirtualDevice *pVout = 0;
258*b1cdbd2cSJim Jagielski 				while ( pRegion->Count() )
259*b1cdbd2cSJim Jagielski 				{
260*b1cdbd2cSJim Jagielski 					SwRect aRect( (*pRegion)[ pRegion->Count() - 1 ] );
261*b1cdbd2cSJim Jagielski 					pRegion->Remove( pRegion->Count() - 1 );
262*b1cdbd2cSJim Jagielski 
263*b1cdbd2cSJim Jagielski 					sal_Bool bPaint = sal_True;
264*b1cdbd2cSJim Jagielski 					if ( IsEndActionByVirDev() )
265*b1cdbd2cSJim Jagielski 					{
266*b1cdbd2cSJim Jagielski 						//virtuelles device erzeugen und einstellen.
267*b1cdbd2cSJim Jagielski 						if ( !pVout )
268*b1cdbd2cSJim Jagielski 							pVout = new VirtualDevice( *GetOut() );
269*b1cdbd2cSJim Jagielski 						MapMode aMapMode( GetOut()->GetMapMode() );
270*b1cdbd2cSJim Jagielski 						pVout->SetMapMode( aMapMode );
271*b1cdbd2cSJim Jagielski 
272*b1cdbd2cSJim Jagielski 						sal_Bool bSizeOK = sal_True;
273*b1cdbd2cSJim Jagielski 
274*b1cdbd2cSJim Jagielski 						Rectangle aTmp1( aRect.SVRect() );
275*b1cdbd2cSJim Jagielski 						aTmp1 = GetOut()->LogicToPixel( aTmp1 );
276*b1cdbd2cSJim Jagielski 						Rectangle aTmp2( GetOut()->PixelToLogic( aTmp1 ) );
277*b1cdbd2cSJim Jagielski 						if ( aTmp2.Left() > aRect.Left() )
278*b1cdbd2cSJim Jagielski 							aTmp1.Left() = Max( 0L, aTmp1.Left() - 1L );
279*b1cdbd2cSJim Jagielski 						if ( aTmp2.Top() > aRect.Top() )
280*b1cdbd2cSJim Jagielski 							aTmp1.Top() = Max( 0L, aTmp1.Top() - 1L );
281*b1cdbd2cSJim Jagielski 						aTmp1.Right() += 1;
282*b1cdbd2cSJim Jagielski 						aTmp1.Bottom() += 1;
283*b1cdbd2cSJim Jagielski 						aTmp1 = GetOut()->PixelToLogic( aTmp1 );
284*b1cdbd2cSJim Jagielski 						aRect = SwRect( aTmp1 );
285*b1cdbd2cSJim Jagielski 
286*b1cdbd2cSJim Jagielski 						const Size aTmp( pVout->GetOutputSize() );
287*b1cdbd2cSJim Jagielski 						if ( aTmp.Height() < aRect.Height() ||
288*b1cdbd2cSJim Jagielski 							 aTmp.Width()  < aRect.Width() )
289*b1cdbd2cSJim Jagielski 						{
290*b1cdbd2cSJim Jagielski 							bSizeOK = pVout->SetOutputSize( aRect.SSize() );
291*b1cdbd2cSJim Jagielski 						}
292*b1cdbd2cSJim Jagielski 						if ( bSizeOK )
293*b1cdbd2cSJim Jagielski 						{
294*b1cdbd2cSJim Jagielski 							bPaint = sal_False;
295*b1cdbd2cSJim Jagielski 
296*b1cdbd2cSJim Jagielski                             // --> OD 2007-07-26 #i79947#
297*b1cdbd2cSJim Jagielski                             // #i72754# start Pre/PostPaint encapsulation before pOut is changed to the buffering VDev
298*b1cdbd2cSJim Jagielski                             const Region aRepaintRegion(aRect.SVRect());
299*b1cdbd2cSJim Jagielski                             DLPrePaint2(aRepaintRegion);
300*b1cdbd2cSJim Jagielski                             // <--
301*b1cdbd2cSJim Jagielski 
302*b1cdbd2cSJim Jagielski                             OutputDevice  *pOld = GetOut();
303*b1cdbd2cSJim Jagielski 							pVout->SetLineColor( pOld->GetLineColor() );
304*b1cdbd2cSJim Jagielski 							pVout->SetFillColor( pOld->GetFillColor() );
305*b1cdbd2cSJim Jagielski 							Point aOrigin( aRect.Pos() );
306*b1cdbd2cSJim Jagielski 							aOrigin.X() = -aOrigin.X(); aOrigin.Y() = -aOrigin.Y();
307*b1cdbd2cSJim Jagielski 							aMapMode.SetOrigin( aOrigin );
308*b1cdbd2cSJim Jagielski 							pVout->SetMapMode( aMapMode );
309*b1cdbd2cSJim Jagielski 
310*b1cdbd2cSJim Jagielski 							pOut = pVout;
311*b1cdbd2cSJim Jagielski                             if ( bPaintsFromSystem )
312*b1cdbd2cSJim Jagielski                                 PaintDesktop( aRect );
313*b1cdbd2cSJim Jagielski 							pCurrentLayout->Paint( aRect );
314*b1cdbd2cSJim Jagielski 							pOld->DrawOutDev( aRect.Pos(), aRect.SSize(),
315*b1cdbd2cSJim Jagielski 											  aRect.Pos(), aRect.SSize(), *pVout );
316*b1cdbd2cSJim Jagielski 							pOut = pOld;
317*b1cdbd2cSJim Jagielski 
318*b1cdbd2cSJim Jagielski 							// #i72754# end Pre/PostPaint encapsulation when pOut is back and content is painted
319*b1cdbd2cSJim Jagielski 							DLPostPaint2(true);
320*b1cdbd2cSJim Jagielski 						}
321*b1cdbd2cSJim Jagielski 					}
322*b1cdbd2cSJim Jagielski 					if ( bPaint )
323*b1cdbd2cSJim Jagielski                     {
324*b1cdbd2cSJim Jagielski 						// #i75172# begin DrawingLayer paint
325*b1cdbd2cSJim Jagielski 						// need to do begin/end DrawingLayer preparation for each single rectangle of the
326*b1cdbd2cSJim Jagielski 						// repaint region. I already tried to prepare only once for the whole Region. This
327*b1cdbd2cSJim Jagielski 						// seems to work (and does technically) but fails with transparent objects. Since the
328*b1cdbd2cSJim Jagielski 						// region given to BeginDarwLayers() defines the clip region for DrawingLayer paint,
329*b1cdbd2cSJim Jagielski 						// transparent objects in the single rectangles will indeed be painted multiple times.
330*b1cdbd2cSJim Jagielski 						DLPrePaint2(Region(aRect.SVRect()));
331*b1cdbd2cSJim Jagielski 
332*b1cdbd2cSJim Jagielski                         if ( bPaintsFromSystem )
333*b1cdbd2cSJim Jagielski                             PaintDesktop( aRect );
334*b1cdbd2cSJim Jagielski 						pCurrentLayout->Paint( aRect );
335*b1cdbd2cSJim Jagielski 
336*b1cdbd2cSJim Jagielski 						// #i75172# end DrawingLayer paint
337*b1cdbd2cSJim Jagielski 						DLPostPaint2(true);
338*b1cdbd2cSJim Jagielski                     }
339*b1cdbd2cSJim Jagielski 
340*b1cdbd2cSJim Jagielski                     // --> OD 2009-12-03 #i107365#
341*b1cdbd2cSJim Jagielski                     // Direct paint has been performed. Thus, take care of
342*b1cdbd2cSJim Jagielski                     // transparent child windows.
343*b1cdbd2cSJim Jagielski                     if ( GetWin() )
344*b1cdbd2cSJim Jagielski                     {
345*b1cdbd2cSJim Jagielski                         Window& rWindow = *(GetWin());
346*b1cdbd2cSJim Jagielski                         if(rWindow.IsChildTransparentModeEnabled() && rWindow.GetChildCount())
347*b1cdbd2cSJim Jagielski                         {
348*b1cdbd2cSJim Jagielski                             const Rectangle aRectanglePixel(rWindow.LogicToPixel(aRect.SVRect()));
349*b1cdbd2cSJim Jagielski 
350*b1cdbd2cSJim Jagielski                             for ( sal_uInt16 a(0); a < rWindow.GetChildCount(); a++ )
351*b1cdbd2cSJim Jagielski                             {
352*b1cdbd2cSJim Jagielski                                 Window* pCandidate = rWindow.GetChild(a);
353*b1cdbd2cSJim Jagielski 
354*b1cdbd2cSJim Jagielski                                 if ( pCandidate && pCandidate->IsPaintTransparent() )
355*b1cdbd2cSJim Jagielski                                 {
356*b1cdbd2cSJim Jagielski                                     const Rectangle aCandidatePosSizePixel(
357*b1cdbd2cSJim Jagielski                                                     pCandidate->GetPosPixel(),
358*b1cdbd2cSJim Jagielski                                                     pCandidate->GetSizePixel());
359*b1cdbd2cSJim Jagielski 
360*b1cdbd2cSJim Jagielski                                     if ( aCandidatePosSizePixel.IsOver(aRectanglePixel) )
361*b1cdbd2cSJim Jagielski                                     {
362*b1cdbd2cSJim Jagielski                                         pCandidate->Invalidate( INVALIDATE_NOTRANSPARENT|INVALIDATE_CHILDREN );
363*b1cdbd2cSJim Jagielski                                         pCandidate->Update();
364*b1cdbd2cSJim Jagielski 				}
365*b1cdbd2cSJim Jagielski                                 }
366*b1cdbd2cSJim Jagielski                             }
367*b1cdbd2cSJim Jagielski                         }
368*b1cdbd2cSJim Jagielski                     }
369*b1cdbd2cSJim Jagielski                     // <--
370*b1cdbd2cSJim Jagielski 				}
371*b1cdbd2cSJim Jagielski 
372*b1cdbd2cSJim Jagielski 				delete pVout;
373*b1cdbd2cSJim Jagielski                 delete pRegion;
374*b1cdbd2cSJim Jagielski                 Imp()->DelRegion();
375*b1cdbd2cSJim Jagielski 			}
376*b1cdbd2cSJim Jagielski 			if( bShowCrsr )
377*b1cdbd2cSJim Jagielski 				((SwCrsrShell*)this)->ShowCrsrs( sal_True );
378*b1cdbd2cSJim Jagielski 		}
379*b1cdbd2cSJim Jagielski 		else
380*b1cdbd2cSJim Jagielski 		{
381*b1cdbd2cSJim Jagielski             Imp()->DelRegion();
382*b1cdbd2cSJim Jagielski 			bPaintWorks =  sal_True;
383*b1cdbd2cSJim Jagielski 		}
384*b1cdbd2cSJim Jagielski 	}
385*b1cdbd2cSJim Jagielski 	else
386*b1cdbd2cSJim Jagielski 		bPaintWorks = sal_True;
387*b1cdbd2cSJim Jagielski 
388*b1cdbd2cSJim Jagielski 	bInEndAction = sal_False;
389*b1cdbd2cSJim Jagielski 	ViewShell::bLstAct = sal_False;
390*b1cdbd2cSJim Jagielski 	Imp()->EndAction();
391*b1cdbd2cSJim Jagielski 
392*b1cdbd2cSJim Jagielski 
393*b1cdbd2cSJim Jagielski 	//Damit sich die automatischen Scrollbars auch richtig anordnen k?nnen
394*b1cdbd2cSJim Jagielski 	//muessen wir die Aktion hier kuenstlich beenden (EndAction loesst ein
395*b1cdbd2cSJim Jagielski 	//Notify aus, und das muss Start-/EndAction rufen um die  Scrollbars
396*b1cdbd2cSJim Jagielski 	//klarzubekommen.
397*b1cdbd2cSJim Jagielski 	--nStartAction;
398*b1cdbd2cSJim Jagielski 	UISizeNotify();
399*b1cdbd2cSJim Jagielski 	++nStartAction;
400*b1cdbd2cSJim Jagielski 
401*b1cdbd2cSJim Jagielski 	if( Imp()->IsAccessible() )
402*b1cdbd2cSJim Jagielski 		Imp()->FireAccessibleEvents();
403*b1cdbd2cSJim Jagielski }
404*b1cdbd2cSJim Jagielski 
405*b1cdbd2cSJim Jagielski /******************************************************************************
406*b1cdbd2cSJim Jagielski |*
407*b1cdbd2cSJim Jagielski |*	ViewShell::ImplStartAction()
408*b1cdbd2cSJim Jagielski |*
409*b1cdbd2cSJim Jagielski |*	Ersterstellung		MA 25. Jul. 94
410*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	MA 25. Jul. 94
411*b1cdbd2cSJim Jagielski |*
412*b1cdbd2cSJim Jagielski ******************************************************************************/
413*b1cdbd2cSJim Jagielski 
ImplStartAction()414*b1cdbd2cSJim Jagielski void ViewShell::ImplStartAction()
415*b1cdbd2cSJim Jagielski {
416*b1cdbd2cSJim Jagielski 	bPaintWorks = sal_False;
417*b1cdbd2cSJim Jagielski 	Imp()->StartAction();
418*b1cdbd2cSJim Jagielski }
419*b1cdbd2cSJim Jagielski 
420*b1cdbd2cSJim Jagielski 
421*b1cdbd2cSJim Jagielski /******************************************************************************
422*b1cdbd2cSJim Jagielski |*
423*b1cdbd2cSJim Jagielski |*	ViewShell::ImplLockPaint(), ImplUnlockPaint()
424*b1cdbd2cSJim Jagielski |*
425*b1cdbd2cSJim Jagielski |*	Ersterstellung		MA 11. Jun. 96
426*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	MA 11. Jun. 96
427*b1cdbd2cSJim Jagielski |*
428*b1cdbd2cSJim Jagielski ******************************************************************************/
429*b1cdbd2cSJim Jagielski 
ImplLockPaint()430*b1cdbd2cSJim Jagielski void ViewShell::ImplLockPaint()
431*b1cdbd2cSJim Jagielski {
432*b1cdbd2cSJim Jagielski 	if ( GetWin() && GetWin()->IsVisible() )
433*b1cdbd2cSJim Jagielski 		GetWin()->EnablePaint( sal_False );	//Auch die Controls abklemmen.
434*b1cdbd2cSJim Jagielski 	Imp()->LockPaint();
435*b1cdbd2cSJim Jagielski }
436*b1cdbd2cSJim Jagielski 
437*b1cdbd2cSJim Jagielski 
ImplUnlockPaint(sal_Bool bVirDev)438*b1cdbd2cSJim Jagielski void ViewShell::ImplUnlockPaint( sal_Bool bVirDev )
439*b1cdbd2cSJim Jagielski {
440*b1cdbd2cSJim Jagielski 	SET_CURR_SHELL( this );
441*b1cdbd2cSJim Jagielski 	if ( GetWin() && GetWin()->IsVisible() )
442*b1cdbd2cSJim Jagielski 	{
443*b1cdbd2cSJim Jagielski 		if ( (bInSizeNotify || bVirDev ) && VisArea().HasArea() )
444*b1cdbd2cSJim Jagielski 		{
445*b1cdbd2cSJim Jagielski 			//Refresh mit virtuellem Device um das Flackern zu verhindern.
446*b1cdbd2cSJim Jagielski 			VirtualDevice *pVout = new VirtualDevice( *pOut );
447*b1cdbd2cSJim Jagielski 			pVout->SetMapMode( pOut->GetMapMode() );
448*b1cdbd2cSJim Jagielski 			Size aSize( VisArea().SSize() );
449*b1cdbd2cSJim Jagielski 			aSize.Width() += 20;
450*b1cdbd2cSJim Jagielski 			aSize.Height()+= 20;
451*b1cdbd2cSJim Jagielski 			if( pVout->SetOutputSize( aSize ) )
452*b1cdbd2cSJim Jagielski 			{
453*b1cdbd2cSJim Jagielski 				GetWin()->EnablePaint( sal_True );
454*b1cdbd2cSJim Jagielski 				GetWin()->Validate();
455*b1cdbd2cSJim Jagielski 
456*b1cdbd2cSJim Jagielski 				Imp()->UnlockPaint();
457*b1cdbd2cSJim Jagielski 				pVout->SetLineColor( pOut->GetLineColor() );
458*b1cdbd2cSJim Jagielski 				pVout->SetFillColor( pOut->GetFillColor() );
459*b1cdbd2cSJim Jagielski 
460*b1cdbd2cSJim Jagielski 				// #i72754# start Pre/PostPaint encapsulation before pOut is changed to the buffering VDev
461*b1cdbd2cSJim Jagielski 				const Region aRepaintRegion(VisArea().SVRect());
462*b1cdbd2cSJim Jagielski 				DLPrePaint2(aRepaintRegion);
463*b1cdbd2cSJim Jagielski 
464*b1cdbd2cSJim Jagielski 				OutputDevice *pOld = pOut;
465*b1cdbd2cSJim Jagielski 				pOut = pVout;
466*b1cdbd2cSJim Jagielski 				Paint( VisArea().SVRect() );
467*b1cdbd2cSJim Jagielski 				pOut = pOld;
468*b1cdbd2cSJim Jagielski 				pOut->DrawOutDev( VisArea().Pos(), aSize,
469*b1cdbd2cSJim Jagielski 								  VisArea().Pos(), aSize, *pVout );
470*b1cdbd2cSJim Jagielski 
471*b1cdbd2cSJim Jagielski 				// #i72754# end Pre/PostPaint encapsulation when pOut is back and content is painted
472*b1cdbd2cSJim Jagielski 				DLPostPaint2(true);
473*b1cdbd2cSJim Jagielski 			}
474*b1cdbd2cSJim Jagielski 			else
475*b1cdbd2cSJim Jagielski 			{
476*b1cdbd2cSJim Jagielski 				Imp()->UnlockPaint();
477*b1cdbd2cSJim Jagielski 				GetWin()->EnablePaint( sal_True );
478*b1cdbd2cSJim Jagielski 				GetWin()->Invalidate( INVALIDATE_CHILDREN );
479*b1cdbd2cSJim Jagielski 			}
480*b1cdbd2cSJim Jagielski 			delete pVout;
481*b1cdbd2cSJim Jagielski 		}
482*b1cdbd2cSJim Jagielski 		else
483*b1cdbd2cSJim Jagielski 		{
484*b1cdbd2cSJim Jagielski 			Imp()->UnlockPaint();
485*b1cdbd2cSJim Jagielski 			GetWin()->EnablePaint( sal_True );
486*b1cdbd2cSJim Jagielski 			GetWin()->Invalidate( INVALIDATE_CHILDREN );
487*b1cdbd2cSJim Jagielski 		}
488*b1cdbd2cSJim Jagielski 	}
489*b1cdbd2cSJim Jagielski 	else
490*b1cdbd2cSJim Jagielski 		Imp()->UnlockPaint();
491*b1cdbd2cSJim Jagielski }
492*b1cdbd2cSJim Jagielski 
493*b1cdbd2cSJim Jagielski /******************************************************************************
494*b1cdbd2cSJim Jagielski |*
495*b1cdbd2cSJim Jagielski |*	ViewShell::AddPaintRect()
496*b1cdbd2cSJim Jagielski |*
497*b1cdbd2cSJim Jagielski |*	Ersterstellung		MA ??
498*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	MA 09. Feb. 97
499*b1cdbd2cSJim Jagielski |*
500*b1cdbd2cSJim Jagielski ******************************************************************************/
501*b1cdbd2cSJim Jagielski 
AddPaintRect(const SwRect & rRect)502*b1cdbd2cSJim Jagielski sal_Bool ViewShell::AddPaintRect( const SwRect & rRect )
503*b1cdbd2cSJim Jagielski {
504*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_False;
505*b1cdbd2cSJim Jagielski 	ViewShell *pSh = this;
506*b1cdbd2cSJim Jagielski 	do
507*b1cdbd2cSJim Jagielski 	{
508*b1cdbd2cSJim Jagielski         if( pSh->Imp() )
509*b1cdbd2cSJim Jagielski         {
510*b1cdbd2cSJim Jagielski 		if ( pSh->IsPreView() && pSh->GetWin() )
511*b1cdbd2cSJim Jagielski 			::RepaintPagePreview( pSh, rRect );
512*b1cdbd2cSJim Jagielski 		else
513*b1cdbd2cSJim Jagielski                 bRet |= pSh->Imp()->AddPaintRect( rRect );//swmod 080111
514*b1cdbd2cSJim Jagielski         }
515*b1cdbd2cSJim Jagielski 		pSh = (ViewShell*)pSh->GetNext();
516*b1cdbd2cSJim Jagielski 	} while ( pSh != this );
517*b1cdbd2cSJim Jagielski 	return bRet;
518*b1cdbd2cSJim Jagielski }
519*b1cdbd2cSJim Jagielski 
520*b1cdbd2cSJim Jagielski /******************************************************************************
521*b1cdbd2cSJim Jagielski |*
522*b1cdbd2cSJim Jagielski |*	ViewShell::InvalidateWindows()
523*b1cdbd2cSJim Jagielski |*
524*b1cdbd2cSJim Jagielski |*	Ersterstellung		MA ??
525*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	MA 09. Feb. 97
526*b1cdbd2cSJim Jagielski |*
527*b1cdbd2cSJim Jagielski ******************************************************************************/
528*b1cdbd2cSJim Jagielski 
InvalidateWindows(const SwRect & rRect)529*b1cdbd2cSJim Jagielski void ViewShell::InvalidateWindows( const SwRect &rRect )
530*b1cdbd2cSJim Jagielski {
531*b1cdbd2cSJim Jagielski 	if ( !Imp()->IsCalcLayoutProgress() )
532*b1cdbd2cSJim Jagielski 	{
533*b1cdbd2cSJim Jagielski 		ViewShell *pSh = this;
534*b1cdbd2cSJim Jagielski 		do
535*b1cdbd2cSJim Jagielski 		{
536*b1cdbd2cSJim Jagielski 			if ( pSh->GetWin() )
537*b1cdbd2cSJim Jagielski 			{
538*b1cdbd2cSJim Jagielski 				if ( pSh->IsPreView() )
539*b1cdbd2cSJim Jagielski 					::RepaintPagePreview( pSh, rRect );
540*b1cdbd2cSJim Jagielski 				else if ( pSh->VisArea().IsOver( rRect ) )
541*b1cdbd2cSJim Jagielski 					pSh->GetWin()->Invalidate( rRect.SVRect() );
542*b1cdbd2cSJim Jagielski 			}
543*b1cdbd2cSJim Jagielski 			pSh = (ViewShell*)pSh->GetNext();
544*b1cdbd2cSJim Jagielski 
545*b1cdbd2cSJim Jagielski 		} while ( pSh != this );
546*b1cdbd2cSJim Jagielski 	}
547*b1cdbd2cSJim Jagielski }
548*b1cdbd2cSJim Jagielski 
549*b1cdbd2cSJim Jagielski /******************************************************************************
550*b1cdbd2cSJim Jagielski |*
551*b1cdbd2cSJim Jagielski |*	ViewShell::MakeVisible()
552*b1cdbd2cSJim Jagielski |*
553*b1cdbd2cSJim Jagielski |*	Ersterstellung		MA ??
554*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	AMA 10. Okt. 95
555*b1cdbd2cSJim Jagielski |*
556*b1cdbd2cSJim Jagielski ******************************************************************************/
557*b1cdbd2cSJim Jagielski 
MakeVisible(const SwRect & rRect)558*b1cdbd2cSJim Jagielski void ViewShell::MakeVisible( const SwRect &rRect )
559*b1cdbd2cSJim Jagielski {
560*b1cdbd2cSJim Jagielski 	if ( !VisArea().IsInside( rRect ) || IsScrollMDI( this, rRect ) || GetCareWin(*this) )
561*b1cdbd2cSJim Jagielski 	{
562*b1cdbd2cSJim Jagielski 		if ( !IsViewLocked() )
563*b1cdbd2cSJim Jagielski 		{
564*b1cdbd2cSJim Jagielski 			if( pWin )
565*b1cdbd2cSJim Jagielski 			{
566*b1cdbd2cSJim Jagielski 				const SwFrm* pRoot = GetLayout();
567*b1cdbd2cSJim Jagielski 				int nLoopCnt = 3;
568*b1cdbd2cSJim Jagielski 				long nOldH;
569*b1cdbd2cSJim Jagielski 				do{
570*b1cdbd2cSJim Jagielski 					nOldH = pRoot->Frm().Height();
571*b1cdbd2cSJim Jagielski 					StartAction();
572*b1cdbd2cSJim Jagielski 					ScrollMDI( this, rRect, USHRT_MAX, USHRT_MAX );
573*b1cdbd2cSJim Jagielski 					EndAction();
574*b1cdbd2cSJim Jagielski 				} while( nOldH != pRoot->Frm().Height() && nLoopCnt-- );	//swmod 071108//swmod 071225
575*b1cdbd2cSJim Jagielski 			}
576*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
577*b1cdbd2cSJim Jagielski 			else
578*b1cdbd2cSJim Jagielski 			{
579*b1cdbd2cSJim Jagielski 				//MA: 04. Nov. 94, braucht doch keiner oder??
580*b1cdbd2cSJim Jagielski 				ASSERT( !this, "MakeVisible fuer Drucker wird doch gebraucht?" );
581*b1cdbd2cSJim Jagielski 			}
582*b1cdbd2cSJim Jagielski 
583*b1cdbd2cSJim Jagielski #endif
584*b1cdbd2cSJim Jagielski 		}
585*b1cdbd2cSJim Jagielski 	}
586*b1cdbd2cSJim Jagielski }
587*b1cdbd2cSJim Jagielski 
588*b1cdbd2cSJim Jagielski /******************************************************************************
589*b1cdbd2cSJim Jagielski |*
590*b1cdbd2cSJim Jagielski |*	ViewShell::CareChildWindow()
591*b1cdbd2cSJim Jagielski |*
592*b1cdbd2cSJim Jagielski |*	Ersterstellung		AMA 10. Okt. 95
593*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	AMA 10. Okt. 95
594*b1cdbd2cSJim Jagielski |*
595*b1cdbd2cSJim Jagielski ******************************************************************************/
596*b1cdbd2cSJim Jagielski 
CareChildWin(ViewShell & rVSh)597*b1cdbd2cSJim Jagielski Window* ViewShell::CareChildWin(ViewShell& rVSh)
598*b1cdbd2cSJim Jagielski {
599*b1cdbd2cSJim Jagielski 	if(rVSh.pSfxViewShell)
600*b1cdbd2cSJim Jagielski 	{
601*b1cdbd2cSJim Jagielski 		const sal_uInt16 nId = SvxSearchDialogWrapper::GetChildWindowId();
602*b1cdbd2cSJim Jagielski 		SfxViewFrame* pVFrame = rVSh.pSfxViewShell->GetViewFrame();
603*b1cdbd2cSJim Jagielski 		const SfxChildWindow* pChWin = pVFrame->GetChildWindow( nId );
604*b1cdbd2cSJim Jagielski 		Window *pWin = pChWin ? pChWin->GetWindow() : NULL;
605*b1cdbd2cSJim Jagielski 		if ( pWin && pWin->IsVisible() )
606*b1cdbd2cSJim Jagielski 			return pWin;
607*b1cdbd2cSJim Jagielski 	}
608*b1cdbd2cSJim Jagielski 	return NULL;
609*b1cdbd2cSJim Jagielski }
610*b1cdbd2cSJim Jagielski 
611*b1cdbd2cSJim Jagielski /******************************************************************************
612*b1cdbd2cSJim Jagielski |*
613*b1cdbd2cSJim Jagielski |*	ViewShell::GetPagePos()
614*b1cdbd2cSJim Jagielski |*
615*b1cdbd2cSJim Jagielski |*	Ersterstellung		MA ??
616*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	MA 04. Aug. 93
617*b1cdbd2cSJim Jagielski |*
618*b1cdbd2cSJim Jagielski ******************************************************************************/
619*b1cdbd2cSJim Jagielski 
GetPagePos(sal_uInt16 nPageNum) const620*b1cdbd2cSJim Jagielski Point ViewShell::GetPagePos( sal_uInt16 nPageNum ) const
621*b1cdbd2cSJim Jagielski {
622*b1cdbd2cSJim Jagielski 	return GetLayout()->GetPagePos( nPageNum );
623*b1cdbd2cSJim Jagielski }
624*b1cdbd2cSJim Jagielski 
625*b1cdbd2cSJim Jagielski /******************************************************************************
626*b1cdbd2cSJim Jagielski |*
627*b1cdbd2cSJim Jagielski |*	ViewShell::GetNumPages()
628*b1cdbd2cSJim Jagielski |*
629*b1cdbd2cSJim Jagielski |*	Ersterstellung		MA ??
630*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	MA 20. Apr. 94
631*b1cdbd2cSJim Jagielski |*
632*b1cdbd2cSJim Jagielski ******************************************************************************/
633*b1cdbd2cSJim Jagielski 
GetNumPages()634*b1cdbd2cSJim Jagielski sal_uInt16 ViewShell::GetNumPages()
635*b1cdbd2cSJim Jagielski {
636*b1cdbd2cSJim Jagielski 	//Es kann sein, das noch kein Layout existiert weil die Methode vom
637*b1cdbd2cSJim Jagielski 	//Root-Ctor gerufen wird.
638*b1cdbd2cSJim Jagielski 	return GetLayout() ? GetLayout()->GetPageNum() : 0;
639*b1cdbd2cSJim Jagielski }
640*b1cdbd2cSJim Jagielski 
IsDummyPage(sal_uInt16 nPageNum) const641*b1cdbd2cSJim Jagielski sal_Bool ViewShell::IsDummyPage( sal_uInt16 nPageNum ) const
642*b1cdbd2cSJim Jagielski {
643*b1cdbd2cSJim Jagielski     return GetLayout() ? GetLayout()->IsDummyPage( nPageNum ) : 0;
644*b1cdbd2cSJim Jagielski }
645*b1cdbd2cSJim Jagielski 
646*b1cdbd2cSJim Jagielski /*************************************************************************
647*b1cdbd2cSJim Jagielski |*
648*b1cdbd2cSJim Jagielski |*					ViewShell::UpdateFlds()
649*b1cdbd2cSJim Jagielski |*
650*b1cdbd2cSJim Jagielski |*	  Ersterstellung	BP 04.05.92
651*b1cdbd2cSJim Jagielski |*	  Beschreibung		erzwingt ein Update fuer jedes Feld
652*b1cdbd2cSJim Jagielski |*
653*b1cdbd2cSJim Jagielski |*	UpdateFlds benachrichtigt alle Felder mit pNewHt.
654*b1cdbd2cSJim Jagielski |*	Wenn pNewHt == 0 ist (default), wird der Feldtyp verschickt.
655*b1cdbd2cSJim Jagielski |*
656*b1cdbd2cSJim Jagielski *************************************************************************/
657*b1cdbd2cSJim Jagielski 
UpdateFlds(sal_Bool bCloseDB)658*b1cdbd2cSJim Jagielski void ViewShell::UpdateFlds(sal_Bool bCloseDB)
659*b1cdbd2cSJim Jagielski {
660*b1cdbd2cSJim Jagielski 	SET_CURR_SHELL( this );
661*b1cdbd2cSJim Jagielski 
662*b1cdbd2cSJim Jagielski 	sal_Bool bCrsr = ISA(SwCrsrShell);
663*b1cdbd2cSJim Jagielski 	if ( bCrsr )
664*b1cdbd2cSJim Jagielski 		((SwCrsrShell*)this)->StartAction();
665*b1cdbd2cSJim Jagielski 	else
666*b1cdbd2cSJim Jagielski 		StartAction();
667*b1cdbd2cSJim Jagielski 
668*b1cdbd2cSJim Jagielski 	GetDoc()->UpdateFlds(0, bCloseDB);
669*b1cdbd2cSJim Jagielski 
670*b1cdbd2cSJim Jagielski 	if ( bCrsr )
671*b1cdbd2cSJim Jagielski 		((SwCrsrShell*)this)->EndAction();
672*b1cdbd2cSJim Jagielski 	else
673*b1cdbd2cSJim Jagielski 		EndAction();
674*b1cdbd2cSJim Jagielski }
675*b1cdbd2cSJim Jagielski 
676*b1cdbd2cSJim Jagielski // update all charts, for that exists any table
UpdateAllCharts()677*b1cdbd2cSJim Jagielski void ViewShell::UpdateAllCharts()
678*b1cdbd2cSJim Jagielski {
679*b1cdbd2cSJim Jagielski 	SET_CURR_SHELL( this );
680*b1cdbd2cSJim Jagielski 	// Start-/EndAction handled in the SwDoc-Method!
681*b1cdbd2cSJim Jagielski 	GetDoc()->UpdateAllCharts();
682*b1cdbd2cSJim Jagielski }
683*b1cdbd2cSJim Jagielski 
HasCharts() const684*b1cdbd2cSJim Jagielski sal_Bool ViewShell::HasCharts() const
685*b1cdbd2cSJim Jagielski {
686*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_False;
687*b1cdbd2cSJim Jagielski 	const SwStartNode *pStNd;
688*b1cdbd2cSJim Jagielski 	SwNodeIndex aIdx( *GetDoc()->GetNodes().GetEndOfAutotext().
689*b1cdbd2cSJim Jagielski 						StartOfSectionNode(), 1 );
690*b1cdbd2cSJim Jagielski 	while ( 0 != (pStNd = aIdx.GetNode().GetStartNode()) )
691*b1cdbd2cSJim Jagielski 	{
692*b1cdbd2cSJim Jagielski 		aIdx++;
693*b1cdbd2cSJim Jagielski 		const SwOLENode *pNd = aIdx.GetNode().GetOLENode();
694*b1cdbd2cSJim Jagielski 		if( pNd && pNd->GetChartTblName().Len() )
695*b1cdbd2cSJim Jagielski 		{
696*b1cdbd2cSJim Jagielski 			bRet = sal_True;
697*b1cdbd2cSJim Jagielski 			break;
698*b1cdbd2cSJim Jagielski 		}
699*b1cdbd2cSJim Jagielski 	}
700*b1cdbd2cSJim Jagielski 	return bRet;
701*b1cdbd2cSJim Jagielski }
702*b1cdbd2cSJim Jagielski 
703*b1cdbd2cSJim Jagielski /*************************************************************************
704*b1cdbd2cSJim Jagielski |*
705*b1cdbd2cSJim Jagielski |*	  ViewShell::LayoutIdle()
706*b1cdbd2cSJim Jagielski |*
707*b1cdbd2cSJim Jagielski |*	  Ersterstellung	MA 26. May. 92
708*b1cdbd2cSJim Jagielski |*	  Letzte Aenderung	OG 19. Mar. 96
709*b1cdbd2cSJim Jagielski |*
710*b1cdbd2cSJim Jagielski *************************************************************************/
711*b1cdbd2cSJim Jagielski 
LayoutIdle()712*b1cdbd2cSJim Jagielski void ViewShell::LayoutIdle()
713*b1cdbd2cSJim Jagielski {
714*b1cdbd2cSJim Jagielski #ifdef TCOVER
715*b1cdbd2cSJim Jagielski 	//fuer TCV-Version: Ende der Startphase des Programmes
716*b1cdbd2cSJim Jagielski 	TCovCall::Idle();
717*b1cdbd2cSJim Jagielski #endif
718*b1cdbd2cSJim Jagielski 	if( !pOpt->IsIdle() || !GetWin() ||
719*b1cdbd2cSJim Jagielski 		( Imp()->HasDrawView() && Imp()->GetDrawView()->IsDragObj() ) )
720*b1cdbd2cSJim Jagielski 		return;
721*b1cdbd2cSJim Jagielski 
722*b1cdbd2cSJim Jagielski 	//Kein Idle wenn gerade gedruckt wird.
723*b1cdbd2cSJim Jagielski 	ViewShell *pSh = this;
724*b1cdbd2cSJim Jagielski 	do
725*b1cdbd2cSJim Jagielski 	{	if ( !pSh->GetWin() )
726*b1cdbd2cSJim Jagielski 			return;
727*b1cdbd2cSJim Jagielski 		pSh = (ViewShell*)pSh->GetNext();
728*b1cdbd2cSJim Jagielski 
729*b1cdbd2cSJim Jagielski 	} while ( pSh != this );
730*b1cdbd2cSJim Jagielski 
731*b1cdbd2cSJim Jagielski 	SET_CURR_SHELL( this );
732*b1cdbd2cSJim Jagielski 
733*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
734*b1cdbd2cSJim Jagielski 	// Wenn Test5 gedrueckt ist, wird der IdleFormatierer abgeknipst.
735*b1cdbd2cSJim Jagielski 	if( pOpt->IsTest5() )
736*b1cdbd2cSJim Jagielski 		return;
737*b1cdbd2cSJim Jagielski #endif
738*b1cdbd2cSJim Jagielski 
739*b1cdbd2cSJim Jagielski 	{
740*b1cdbd2cSJim Jagielski 		DBG_PROFSTART( LayoutIdle );
741*b1cdbd2cSJim Jagielski 
742*b1cdbd2cSJim Jagielski 		//Cache vorbereiten und restaurieren, damit er nicht versaut wird.
743*b1cdbd2cSJim Jagielski 		SwSaveSetLRUOfst aSave( *SwTxtFrm::GetTxtCache(),
744*b1cdbd2cSJim Jagielski 							 SwTxtFrm::GetTxtCache()->GetCurMax() - 50 );
745*b1cdbd2cSJim Jagielski         // #125243# there are lots of stacktraces indicating that Imp() returns NULL
746*b1cdbd2cSJim Jagielski         // this ViewShell seems to be invalid - but it's not clear why
747*b1cdbd2cSJim Jagielski         // this return is only a workaround!
748*b1cdbd2cSJim Jagielski         DBG_ASSERT(Imp(), "ViewShell already deleted?");
749*b1cdbd2cSJim Jagielski         if(!Imp())
750*b1cdbd2cSJim Jagielski             return;
751*b1cdbd2cSJim Jagielski         SwLayIdle aIdle( GetLayout(), Imp() );
752*b1cdbd2cSJim Jagielski 		DBG_PROFSTOP( LayoutIdle );
753*b1cdbd2cSJim Jagielski 	}
754*b1cdbd2cSJim Jagielski }
755*b1cdbd2cSJim Jagielski 
756*b1cdbd2cSJim Jagielski /*************************************************************************
757*b1cdbd2cSJim Jagielski |*
758*b1cdbd2cSJim Jagielski |*    DOCUMENT COMPATIBILITY FLAGS
759*b1cdbd2cSJim Jagielski |*
760*b1cdbd2cSJim Jagielski *************************************************************************/
761*b1cdbd2cSJim Jagielski 
lcl_InvalidateAllCntnt(ViewShell & rSh,sal_uInt8 nInv)762*b1cdbd2cSJim Jagielski void lcl_InvalidateAllCntnt( ViewShell& rSh, sal_uInt8 nInv )
763*b1cdbd2cSJim Jagielski {
764*b1cdbd2cSJim Jagielski     sal_Bool bCrsr = rSh.ISA(SwCrsrShell);
765*b1cdbd2cSJim Jagielski     if ( bCrsr )
766*b1cdbd2cSJim Jagielski         ((SwCrsrShell&)rSh).StartAction();
767*b1cdbd2cSJim Jagielski     else
768*b1cdbd2cSJim Jagielski         rSh.StartAction();
769*b1cdbd2cSJim Jagielski     rSh.GetLayout()->InvalidateAllCntnt( nInv );
770*b1cdbd2cSJim Jagielski     if ( bCrsr )
771*b1cdbd2cSJim Jagielski         ((SwCrsrShell&)rSh).EndAction();
772*b1cdbd2cSJim Jagielski     else
773*b1cdbd2cSJim Jagielski         rSh.EndAction();
774*b1cdbd2cSJim Jagielski 
775*b1cdbd2cSJim Jagielski     rSh.GetDoc()->SetModified();
776*b1cdbd2cSJim Jagielski }
777*b1cdbd2cSJim Jagielski 
778*b1cdbd2cSJim Jagielski /** local method to invalidate/re-calculate positions of floating screen
779*b1cdbd2cSJim Jagielski     objects (Writer fly frame and drawing objects), which are anchored
780*b1cdbd2cSJim Jagielski     to paragraph or to character.
781*b1cdbd2cSJim Jagielski 
782*b1cdbd2cSJim Jagielski     OD 2004-03-16 #i11860#
783*b1cdbd2cSJim Jagielski 
784*b1cdbd2cSJim Jagielski     @author OD
785*b1cdbd2cSJim Jagielski */
lcl_InvalidateAllObjPos(ViewShell & _rSh)786*b1cdbd2cSJim Jagielski void lcl_InvalidateAllObjPos( ViewShell &_rSh )
787*b1cdbd2cSJim Jagielski {
788*b1cdbd2cSJim Jagielski     const bool bIsCrsrShell = _rSh.ISA(SwCrsrShell);
789*b1cdbd2cSJim Jagielski     if ( bIsCrsrShell )
790*b1cdbd2cSJim Jagielski         static_cast<SwCrsrShell&>(_rSh).StartAction();
791*b1cdbd2cSJim Jagielski     else
792*b1cdbd2cSJim Jagielski         _rSh.StartAction();
793*b1cdbd2cSJim Jagielski 
794*b1cdbd2cSJim Jagielski     _rSh.GetLayout()->InvalidateAllObjPos();
795*b1cdbd2cSJim Jagielski 
796*b1cdbd2cSJim Jagielski     if ( bIsCrsrShell )
797*b1cdbd2cSJim Jagielski         static_cast<SwCrsrShell&>(_rSh).EndAction();
798*b1cdbd2cSJim Jagielski     else
799*b1cdbd2cSJim Jagielski         _rSh.EndAction();
800*b1cdbd2cSJim Jagielski 
801*b1cdbd2cSJim Jagielski     _rSh.GetDoc()->SetModified();
802*b1cdbd2cSJim Jagielski }
803*b1cdbd2cSJim Jagielski 
SetParaSpaceMax(bool bNew)804*b1cdbd2cSJim Jagielski void ViewShell::SetParaSpaceMax( bool bNew )
805*b1cdbd2cSJim Jagielski {
806*b1cdbd2cSJim Jagielski     IDocumentSettingAccess* pIDSA = getIDocumentSettingAccess();
807*b1cdbd2cSJim Jagielski     if( pIDSA->get(IDocumentSettingAccess::PARA_SPACE_MAX) != bNew )
808*b1cdbd2cSJim Jagielski     {
809*b1cdbd2cSJim Jagielski 		SwWait aWait( *GetDoc()->GetDocShell(), true );
810*b1cdbd2cSJim Jagielski         pIDSA->set(IDocumentSettingAccess::PARA_SPACE_MAX, bNew );
811*b1cdbd2cSJim Jagielski         const sal_uInt8 nInv = INV_PRTAREA | INV_TABLE | INV_SECTION;
812*b1cdbd2cSJim Jagielski         lcl_InvalidateAllCntnt( *this,  nInv );
813*b1cdbd2cSJim Jagielski     }
814*b1cdbd2cSJim Jagielski }
815*b1cdbd2cSJim Jagielski 
SetParaSpaceMaxAtPages(bool bNew)816*b1cdbd2cSJim Jagielski void ViewShell::SetParaSpaceMaxAtPages( bool bNew )
817*b1cdbd2cSJim Jagielski {
818*b1cdbd2cSJim Jagielski     IDocumentSettingAccess* pIDSA = getIDocumentSettingAccess();
819*b1cdbd2cSJim Jagielski     if( pIDSA->get(IDocumentSettingAccess::PARA_SPACE_MAX_AT_PAGES) != bNew )
820*b1cdbd2cSJim Jagielski     {
821*b1cdbd2cSJim Jagielski         SwWait aWait( *GetDoc()->GetDocShell(), true );
822*b1cdbd2cSJim Jagielski         pIDSA->set(IDocumentSettingAccess::PARA_SPACE_MAX_AT_PAGES, bNew );
823*b1cdbd2cSJim Jagielski         const sal_uInt8 nInv = INV_PRTAREA | INV_TABLE | INV_SECTION;
824*b1cdbd2cSJim Jagielski         lcl_InvalidateAllCntnt( *this,  nInv );
825*b1cdbd2cSJim Jagielski     }
826*b1cdbd2cSJim Jagielski }
827*b1cdbd2cSJim Jagielski 
SetTabCompat(bool bNew)828*b1cdbd2cSJim Jagielski void ViewShell::SetTabCompat( bool bNew )
829*b1cdbd2cSJim Jagielski {
830*b1cdbd2cSJim Jagielski     IDocumentSettingAccess* pIDSA = getIDocumentSettingAccess();
831*b1cdbd2cSJim Jagielski     if( pIDSA->get(IDocumentSettingAccess::TAB_COMPAT) != bNew  )
832*b1cdbd2cSJim Jagielski 	{
833*b1cdbd2cSJim Jagielski 		SwWait aWait( *GetDoc()->GetDocShell(), true );
834*b1cdbd2cSJim Jagielski         pIDSA->set(IDocumentSettingAccess::TAB_COMPAT, bNew );
835*b1cdbd2cSJim Jagielski         const sal_uInt8 nInv = INV_PRTAREA | INV_SIZE | INV_TABLE | INV_SECTION;
836*b1cdbd2cSJim Jagielski         lcl_InvalidateAllCntnt( *this, nInv );
837*b1cdbd2cSJim Jagielski     }
838*b1cdbd2cSJim Jagielski }
839*b1cdbd2cSJim Jagielski 
SetAddExtLeading(bool bNew)840*b1cdbd2cSJim Jagielski void ViewShell::SetAddExtLeading( bool bNew )
841*b1cdbd2cSJim Jagielski {
842*b1cdbd2cSJim Jagielski     IDocumentSettingAccess* pIDSA = getIDocumentSettingAccess();
843*b1cdbd2cSJim Jagielski     if ( pIDSA->get(IDocumentSettingAccess::ADD_EXT_LEADING) != bNew )
844*b1cdbd2cSJim Jagielski     {
845*b1cdbd2cSJim Jagielski         SwWait aWait( *GetDoc()->GetDocShell(), true );
846*b1cdbd2cSJim Jagielski         pIDSA->set(IDocumentSettingAccess::ADD_EXT_LEADING, bNew );
847*b1cdbd2cSJim Jagielski         SdrModel* pTmpDrawModel = getIDocumentDrawModelAccess()->GetDrawModel();
848*b1cdbd2cSJim Jagielski         if ( pTmpDrawModel )
849*b1cdbd2cSJim Jagielski             pTmpDrawModel->SetAddExtLeading( bNew );
850*b1cdbd2cSJim Jagielski         const sal_uInt8 nInv = INV_PRTAREA | INV_SIZE | INV_TABLE | INV_SECTION;
851*b1cdbd2cSJim Jagielski         lcl_InvalidateAllCntnt( *this, nInv );
852*b1cdbd2cSJim Jagielski     }
853*b1cdbd2cSJim Jagielski }
854*b1cdbd2cSJim Jagielski 
SetUseVirDev(bool bNewVirtual)855*b1cdbd2cSJim Jagielski void ViewShell::SetUseVirDev( bool bNewVirtual )
856*b1cdbd2cSJim Jagielski {
857*b1cdbd2cSJim Jagielski     IDocumentSettingAccess* pIDSA = getIDocumentSettingAccess();
858*b1cdbd2cSJim Jagielski     if ( pIDSA->get(IDocumentSettingAccess::USE_VIRTUAL_DEVICE) != bNewVirtual )
859*b1cdbd2cSJim Jagielski     {
860*b1cdbd2cSJim Jagielski         SwWait aWait( *GetDoc()->GetDocShell(), true );
861*b1cdbd2cSJim Jagielski         // this sets the flag at the document and calls PrtDataChanged
862*b1cdbd2cSJim Jagielski         IDocumentDeviceAccess* pIDDA = getIDocumentDeviceAccess();
863*b1cdbd2cSJim Jagielski         pIDDA->setReferenceDeviceType( bNewVirtual, true );
864*b1cdbd2cSJim Jagielski     }
865*b1cdbd2cSJim Jagielski }
866*b1cdbd2cSJim Jagielski 
867*b1cdbd2cSJim Jagielski // OD 2004-02-16 #106629# - control, if paragraph and table spacing is added
868*b1cdbd2cSJim Jagielski // at bottom of table cells
SetAddParaSpacingToTableCells(bool _bAddParaSpacingToTableCells)869*b1cdbd2cSJim Jagielski void ViewShell::SetAddParaSpacingToTableCells( bool _bAddParaSpacingToTableCells )
870*b1cdbd2cSJim Jagielski {
871*b1cdbd2cSJim Jagielski     IDocumentSettingAccess* pIDSA = getIDocumentSettingAccess();
872*b1cdbd2cSJim Jagielski     if ( pIDSA->get(IDocumentSettingAccess::ADD_PARA_SPACING_TO_TABLE_CELLS) != _bAddParaSpacingToTableCells )
873*b1cdbd2cSJim Jagielski     {
874*b1cdbd2cSJim Jagielski         SwWait aWait( *GetDoc()->GetDocShell(), true );
875*b1cdbd2cSJim Jagielski         pIDSA->set(IDocumentSettingAccess::ADD_PARA_SPACING_TO_TABLE_CELLS, _bAddParaSpacingToTableCells );
876*b1cdbd2cSJim Jagielski         const sal_uInt8 nInv = INV_PRTAREA;
877*b1cdbd2cSJim Jagielski         lcl_InvalidateAllCntnt( *this, nInv );
878*b1cdbd2cSJim Jagielski     }
879*b1cdbd2cSJim Jagielski }
880*b1cdbd2cSJim Jagielski 
881*b1cdbd2cSJim Jagielski // OD 06.01.2004 #i11859# - control, if former formatting of text lines with
882*b1cdbd2cSJim Jagielski // proportional line spacing is used or not.
SetUseFormerLineSpacing(bool _bUseFormerLineSpacing)883*b1cdbd2cSJim Jagielski void ViewShell::SetUseFormerLineSpacing( bool _bUseFormerLineSpacing )
884*b1cdbd2cSJim Jagielski {
885*b1cdbd2cSJim Jagielski     IDocumentSettingAccess* pIDSA = getIDocumentSettingAccess();
886*b1cdbd2cSJim Jagielski     if ( pIDSA->get(IDocumentSettingAccess::OLD_LINE_SPACING) != _bUseFormerLineSpacing )
887*b1cdbd2cSJim Jagielski     {
888*b1cdbd2cSJim Jagielski         SwWait aWait( *GetDoc()->GetDocShell(), true );
889*b1cdbd2cSJim Jagielski         pIDSA->set(IDocumentSettingAccess::OLD_LINE_SPACING, _bUseFormerLineSpacing );
890*b1cdbd2cSJim Jagielski         const sal_uInt8 nInv = INV_PRTAREA;
891*b1cdbd2cSJim Jagielski         lcl_InvalidateAllCntnt( *this, nInv );
892*b1cdbd2cSJim Jagielski     }
893*b1cdbd2cSJim Jagielski }
894*b1cdbd2cSJim Jagielski 
895*b1cdbd2cSJim Jagielski // OD 2004-03-12 #i11860# - control, if former object positioning is used or not.
SetUseFormerObjectPositioning(bool _bUseFormerObjPos)896*b1cdbd2cSJim Jagielski void ViewShell::SetUseFormerObjectPositioning( bool _bUseFormerObjPos )
897*b1cdbd2cSJim Jagielski {
898*b1cdbd2cSJim Jagielski     IDocumentSettingAccess* pIDSA = getIDocumentSettingAccess();
899*b1cdbd2cSJim Jagielski     if ( pIDSA->get(IDocumentSettingAccess::USE_FORMER_OBJECT_POS) != _bUseFormerObjPos )
900*b1cdbd2cSJim Jagielski     {
901*b1cdbd2cSJim Jagielski         SwWait aWait( *GetDoc()->GetDocShell(), true );
902*b1cdbd2cSJim Jagielski         pIDSA->set(IDocumentSettingAccess::USE_FORMER_OBJECT_POS, _bUseFormerObjPos );
903*b1cdbd2cSJim Jagielski         lcl_InvalidateAllObjPos( *this );
904*b1cdbd2cSJim Jagielski     }
905*b1cdbd2cSJim Jagielski }
906*b1cdbd2cSJim Jagielski 
907*b1cdbd2cSJim Jagielski // OD 2004-05-05 #i28701#
SetConsiderWrapOnObjPos(bool _bConsiderWrapOnObjPos)908*b1cdbd2cSJim Jagielski void ViewShell::SetConsiderWrapOnObjPos( bool _bConsiderWrapOnObjPos )
909*b1cdbd2cSJim Jagielski {
910*b1cdbd2cSJim Jagielski     IDocumentSettingAccess* pIDSA = getIDocumentSettingAccess();
911*b1cdbd2cSJim Jagielski     if ( pIDSA->get(IDocumentSettingAccess::CONSIDER_WRAP_ON_OBJECT_POSITION) != _bConsiderWrapOnObjPos )
912*b1cdbd2cSJim Jagielski     {
913*b1cdbd2cSJim Jagielski         SwWait aWait( *GetDoc()->GetDocShell(), true );
914*b1cdbd2cSJim Jagielski         pIDSA->set(IDocumentSettingAccess::CONSIDER_WRAP_ON_OBJECT_POSITION, _bConsiderWrapOnObjPos );
915*b1cdbd2cSJim Jagielski         lcl_InvalidateAllObjPos( *this );
916*b1cdbd2cSJim Jagielski     }
917*b1cdbd2cSJim Jagielski }
918*b1cdbd2cSJim Jagielski 
919*b1cdbd2cSJim Jagielski // --> FME #108724#
SetUseFormerTextWrapping(bool _bUseFormerTextWrapping)920*b1cdbd2cSJim Jagielski void ViewShell::SetUseFormerTextWrapping( bool _bUseFormerTextWrapping )
921*b1cdbd2cSJim Jagielski {
922*b1cdbd2cSJim Jagielski     IDocumentSettingAccess* pIDSA = getIDocumentSettingAccess();
923*b1cdbd2cSJim Jagielski     if ( pIDSA->get(IDocumentSettingAccess::USE_FORMER_TEXT_WRAPPING) != _bUseFormerTextWrapping )
924*b1cdbd2cSJim Jagielski     {
925*b1cdbd2cSJim Jagielski         SwWait aWait( *GetDoc()->GetDocShell(), true );
926*b1cdbd2cSJim Jagielski         pIDSA->set(IDocumentSettingAccess::USE_FORMER_TEXT_WRAPPING, _bUseFormerTextWrapping );
927*b1cdbd2cSJim Jagielski         const sal_uInt8 nInv = INV_PRTAREA | INV_SIZE | INV_TABLE | INV_SECTION;
928*b1cdbd2cSJim Jagielski         lcl_InvalidateAllCntnt( *this, nInv );
929*b1cdbd2cSJim Jagielski     }
930*b1cdbd2cSJim Jagielski }
931*b1cdbd2cSJim Jagielski // <--
932*b1cdbd2cSJim Jagielski 
933*b1cdbd2cSJim Jagielski // -> PB 2007-06-11 #i45491#
SetDoNotJustifyLinesWithManualBreak(bool _bDoNotJustifyLinesWithManualBreak)934*b1cdbd2cSJim Jagielski void ViewShell::SetDoNotJustifyLinesWithManualBreak( bool _bDoNotJustifyLinesWithManualBreak )
935*b1cdbd2cSJim Jagielski {
936*b1cdbd2cSJim Jagielski     IDocumentSettingAccess* pIDSA = getIDocumentSettingAccess();
937*b1cdbd2cSJim Jagielski     if ( pIDSA->get(IDocumentSettingAccess::DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK) != _bDoNotJustifyLinesWithManualBreak )
938*b1cdbd2cSJim Jagielski     {
939*b1cdbd2cSJim Jagielski         SwWait aWait( *GetDoc()->GetDocShell(), true );
940*b1cdbd2cSJim Jagielski         pIDSA->set(IDocumentSettingAccess::DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK, _bDoNotJustifyLinesWithManualBreak );
941*b1cdbd2cSJim Jagielski         const sal_uInt8 nInv = INV_PRTAREA | INV_SIZE | INV_TABLE | INV_SECTION;
942*b1cdbd2cSJim Jagielski         lcl_InvalidateAllCntnt( *this, nInv );
943*b1cdbd2cSJim Jagielski     }
944*b1cdbd2cSJim Jagielski }
945*b1cdbd2cSJim Jagielski // <--
946*b1cdbd2cSJim Jagielski 
947*b1cdbd2cSJim Jagielski /******************************************************************************
948*b1cdbd2cSJim Jagielski |*
949*b1cdbd2cSJim Jagielski |*	ViewShell::Reformat
950*b1cdbd2cSJim Jagielski |*
951*b1cdbd2cSJim Jagielski |*	Ersterstellung		BP ???
952*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	MA 13. Feb. 98
953*b1cdbd2cSJim Jagielski |*
954*b1cdbd2cSJim Jagielski ******************************************************************************/
955*b1cdbd2cSJim Jagielski 
Reformat()956*b1cdbd2cSJim Jagielski void ViewShell::Reformat()
957*b1cdbd2cSJim Jagielski {
958*b1cdbd2cSJim Jagielski 	SwWait aWait( *GetDoc()->GetDocShell(), true );
959*b1cdbd2cSJim Jagielski 
960*b1cdbd2cSJim Jagielski 	// Wir gehen auf Nummer sicher:
961*b1cdbd2cSJim Jagielski 	// Wir muessen die alten Fontinformationen wegschmeissen,
962*b1cdbd2cSJim Jagielski 	// wenn die Druckeraufloesung oder der Zoomfaktor sich aendert.
963*b1cdbd2cSJim Jagielski 	// Init() und Reformat() sind die sichersten Stellen.
964*b1cdbd2cSJim Jagielski #ifdef FNTMET
965*b1cdbd2cSJim Jagielski 	aFntMetList.Flush();
966*b1cdbd2cSJim Jagielski #else
967*b1cdbd2cSJim Jagielski 	pFntCache->Flush( );
968*b1cdbd2cSJim Jagielski #endif
969*b1cdbd2cSJim Jagielski 
970*b1cdbd2cSJim Jagielski     if( GetLayout()->IsCallbackActionEnabled() )
971*b1cdbd2cSJim Jagielski     {
972*b1cdbd2cSJim Jagielski 
973*b1cdbd2cSJim Jagielski         StartAction();
974*b1cdbd2cSJim Jagielski         GetLayout()->InvalidateAllCntnt( INV_SIZE | INV_POS | INV_PRTAREA );
975*b1cdbd2cSJim Jagielski         EndAction();
976*b1cdbd2cSJim Jagielski     }
977*b1cdbd2cSJim Jagielski }
978*b1cdbd2cSJim Jagielski 
ChgNumberDigits()979*b1cdbd2cSJim Jagielski  void ViewShell::ChgNumberDigits()
980*b1cdbd2cSJim Jagielski  {
981*b1cdbd2cSJim Jagielski      SdrModel* pTmpDrawModel = getIDocumentDrawModelAccess()->GetDrawModel();
982*b1cdbd2cSJim Jagielski      if ( pTmpDrawModel )
983*b1cdbd2cSJim Jagielski             pTmpDrawModel->ReformatAllTextObjects();
984*b1cdbd2cSJim Jagielski 	 Reformat();
985*b1cdbd2cSJim Jagielski  }
986*b1cdbd2cSJim Jagielski 
987*b1cdbd2cSJim Jagielski /******************************************************************************
988*b1cdbd2cSJim Jagielski |*
989*b1cdbd2cSJim Jagielski |*	ViewShell::CalcLayout()
990*b1cdbd2cSJim Jagielski |*					Vollstaendige Formatierung von Layout und Inhalt.
991*b1cdbd2cSJim Jagielski |*
992*b1cdbd2cSJim Jagielski |*	Ersterstellung		MA 31. Jan. 94
993*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	MA 08. Oct. 96
994*b1cdbd2cSJim Jagielski |*
995*b1cdbd2cSJim Jagielski ******************************************************************************/
996*b1cdbd2cSJim Jagielski 
CalcLayout()997*b1cdbd2cSJim Jagielski void ViewShell::CalcLayout()
998*b1cdbd2cSJim Jagielski {
999*b1cdbd2cSJim Jagielski 	SET_CURR_SHELL( this );
1000*b1cdbd2cSJim Jagielski 	SwWait aWait( *GetDoc()->GetDocShell(), true );
1001*b1cdbd2cSJim Jagielski 
1002*b1cdbd2cSJim Jagielski 	//Cache vorbereiten und restaurieren, damit er nicht versaut wird.
1003*b1cdbd2cSJim Jagielski 	SwSaveSetLRUOfst aSaveLRU( *SwTxtFrm::GetTxtCache(),
1004*b1cdbd2cSJim Jagielski 						  		SwTxtFrm::GetTxtCache()->GetCurMax() - 50 );
1005*b1cdbd2cSJim Jagielski 
1006*b1cdbd2cSJim Jagielski 	//Progress einschalten wenn noch keiner Lauft.
1007*b1cdbd2cSJim Jagielski 	const sal_Bool bEndProgress = SfxProgress::GetActiveProgress( GetDoc()->GetDocShell() ) == 0;
1008*b1cdbd2cSJim Jagielski 	if ( bEndProgress )
1009*b1cdbd2cSJim Jagielski 	{
1010*b1cdbd2cSJim Jagielski 		sal_uInt16 nEndPage = GetLayout()->GetPageNum();
1011*b1cdbd2cSJim Jagielski 		nEndPage += nEndPage * 10 / 100;
1012*b1cdbd2cSJim Jagielski 		::StartProgress( STR_STATSTR_REFORMAT, 0, nEndPage, GetDoc()->GetDocShell() );
1013*b1cdbd2cSJim Jagielski 	}
1014*b1cdbd2cSJim Jagielski 
1015*b1cdbd2cSJim Jagielski 	SwLayAction aAction( GetLayout(), Imp() );
1016*b1cdbd2cSJim Jagielski 	aAction.SetPaint( sal_False );
1017*b1cdbd2cSJim Jagielski 	aAction.SetStatBar( sal_True );
1018*b1cdbd2cSJim Jagielski 	aAction.SetCalcLayout( sal_True );
1019*b1cdbd2cSJim Jagielski 	aAction.SetReschedule( sal_True );
1020*b1cdbd2cSJim Jagielski 	GetDoc()->LockExpFlds();
1021*b1cdbd2cSJim Jagielski 	aAction.Action();
1022*b1cdbd2cSJim Jagielski 	GetDoc()->UnlockExpFlds();
1023*b1cdbd2cSJim Jagielski 
1024*b1cdbd2cSJim Jagielski 	//Das SetNewFldLst() am Doc wurde unterbunden und muss nachgeholt
1025*b1cdbd2cSJim Jagielski 	//werden (siehe flowfrm.cxx, txtfld.cxx)
1026*b1cdbd2cSJim Jagielski 	if ( aAction.IsExpFlds() )
1027*b1cdbd2cSJim Jagielski 	{
1028*b1cdbd2cSJim Jagielski 		aAction.Reset();
1029*b1cdbd2cSJim Jagielski 		aAction.SetPaint( sal_False );
1030*b1cdbd2cSJim Jagielski 		aAction.SetStatBar( sal_True );
1031*b1cdbd2cSJim Jagielski 		aAction.SetReschedule( sal_True );
1032*b1cdbd2cSJim Jagielski 
1033*b1cdbd2cSJim Jagielski 		SwDocPosUpdate aMsgHnt( 0 );
1034*b1cdbd2cSJim Jagielski 		GetDoc()->UpdatePageFlds( &aMsgHnt );
1035*b1cdbd2cSJim Jagielski 		GetDoc()->UpdateExpFlds(NULL, true);
1036*b1cdbd2cSJim Jagielski 
1037*b1cdbd2cSJim Jagielski 		aAction.Action();
1038*b1cdbd2cSJim Jagielski 	}
1039*b1cdbd2cSJim Jagielski 
1040*b1cdbd2cSJim Jagielski 	if ( VisArea().HasArea() )
1041*b1cdbd2cSJim Jagielski 		InvalidateWindows( VisArea() );
1042*b1cdbd2cSJim Jagielski 	if ( bEndProgress )
1043*b1cdbd2cSJim Jagielski 		::EndProgress( GetDoc()->GetDocShell() );
1044*b1cdbd2cSJim Jagielski }
1045*b1cdbd2cSJim Jagielski 
1046*b1cdbd2cSJim Jagielski /******************************************************************************
1047*b1cdbd2cSJim Jagielski |*
1048*b1cdbd2cSJim Jagielski |*	ViewShell::SetFirstVisPageInvalid()
1049*b1cdbd2cSJim Jagielski |*
1050*b1cdbd2cSJim Jagielski |*	Ersterstellung		MA 19. May. 94
1051*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	MA 19. May. 94
1052*b1cdbd2cSJim Jagielski |*
1053*b1cdbd2cSJim Jagielski ******************************************************************************/
1054*b1cdbd2cSJim Jagielski 
SetFirstVisPageInvalid()1055*b1cdbd2cSJim Jagielski void ViewShell::SetFirstVisPageInvalid()
1056*b1cdbd2cSJim Jagielski {
1057*b1cdbd2cSJim Jagielski 	ViewShell *pSh = this;
1058*b1cdbd2cSJim Jagielski 	do
1059*b1cdbd2cSJim Jagielski 	{	pSh->Imp()->SetFirstVisPageInvalid();
1060*b1cdbd2cSJim Jagielski 		pSh = (ViewShell*)pSh->GetNext();
1061*b1cdbd2cSJim Jagielski 
1062*b1cdbd2cSJim Jagielski 	} while ( pSh != this );
1063*b1cdbd2cSJim Jagielski }
1064*b1cdbd2cSJim Jagielski 
1065*b1cdbd2cSJim Jagielski /******************************************************************************
1066*b1cdbd2cSJim Jagielski |*
1067*b1cdbd2cSJim Jagielski |*	ViewShell::SizeChgNotify()
1068*b1cdbd2cSJim Jagielski |*
1069*b1cdbd2cSJim Jagielski |*	Ersterstellung		MA ??
1070*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	MA 17. Sep. 96
1071*b1cdbd2cSJim Jagielski |*
1072*b1cdbd2cSJim Jagielski ******************************************************************************/
1073*b1cdbd2cSJim Jagielski 
SizeChgNotify()1074*b1cdbd2cSJim Jagielski void ViewShell::SizeChgNotify()
1075*b1cdbd2cSJim Jagielski {
1076*b1cdbd2cSJim Jagielski 	if ( !pWin )
1077*b1cdbd2cSJim Jagielski 		bDocSizeChgd = sal_True;
1078*b1cdbd2cSJim Jagielski 	else if( ActionPend() || Imp()->IsCalcLayoutProgress() || bPaintInProgress )
1079*b1cdbd2cSJim Jagielski 	{
1080*b1cdbd2cSJim Jagielski 		bDocSizeChgd = sal_True;
1081*b1cdbd2cSJim Jagielski 
1082*b1cdbd2cSJim Jagielski 		if ( !Imp()->IsCalcLayoutProgress() && ISA( SwCrsrShell ) )
1083*b1cdbd2cSJim Jagielski 		{
1084*b1cdbd2cSJim Jagielski 			const SwFrm *pCnt = ((SwCrsrShell*)this)->GetCurrFrm( sal_False );
1085*b1cdbd2cSJim Jagielski 			const SwPageFrm *pPage;
1086*b1cdbd2cSJim Jagielski 			if ( pCnt && 0 != (pPage = pCnt->FindPageFrm()) )
1087*b1cdbd2cSJim Jagielski 			{
1088*b1cdbd2cSJim Jagielski 				sal_uInt16 nVirtNum = pPage->GetVirtPageNum();
1089*b1cdbd2cSJim Jagielski 		 		const SvxNumberType& rNum = pPage->GetPageDesc()->GetNumType();
1090*b1cdbd2cSJim Jagielski 				String sDisplay = rNum.GetNumStr( nVirtNum );
1091*b1cdbd2cSJim Jagielski 				PageNumNotify( this, pCnt->GetPhyPageNum(), nVirtNum, sDisplay );
1092*b1cdbd2cSJim Jagielski 			}
1093*b1cdbd2cSJim Jagielski 		}
1094*b1cdbd2cSJim Jagielski 	}
1095*b1cdbd2cSJim Jagielski 	else
1096*b1cdbd2cSJim Jagielski 	{
1097*b1cdbd2cSJim Jagielski 		bDocSizeChgd = sal_False;
1098*b1cdbd2cSJim Jagielski 		::SizeNotify( this, GetDocSize() );
1099*b1cdbd2cSJim Jagielski 	}
1100*b1cdbd2cSJim Jagielski }
1101*b1cdbd2cSJim Jagielski 
1102*b1cdbd2cSJim Jagielski /******************************************************************************
1103*b1cdbd2cSJim Jagielski |*
1104*b1cdbd2cSJim Jagielski |*	ViewShell::VisPortChgd()
1105*b1cdbd2cSJim Jagielski |*
1106*b1cdbd2cSJim Jagielski |*	Ersterstellung		MA ??
1107*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	MA 22. Jul. 96
1108*b1cdbd2cSJim Jagielski |*
1109*b1cdbd2cSJim Jagielski ******************************************************************************/
1110*b1cdbd2cSJim Jagielski 
VisPortChgd(const SwRect & rRect)1111*b1cdbd2cSJim Jagielski void ViewShell::VisPortChgd( const SwRect &rRect)
1112*b1cdbd2cSJim Jagielski {
1113*b1cdbd2cSJim Jagielski 	ASSERT( GetWin(), "VisPortChgd ohne Window." );
1114*b1cdbd2cSJim Jagielski 
1115*b1cdbd2cSJim Jagielski 	if ( rRect == VisArea() )
1116*b1cdbd2cSJim Jagielski 		return;
1117*b1cdbd2cSJim Jagielski 
1118*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
1119*b1cdbd2cSJim Jagielski 	if ( bInEndAction )
1120*b1cdbd2cSJim Jagielski 	{
1121*b1cdbd2cSJim Jagielski 		//Da Rescheduled doch schon wieder irgendwo einer?
1122*b1cdbd2cSJim Jagielski 		ASSERT( !this, "Scroll waehrend einer EndAction." );
1123*b1cdbd2cSJim Jagielski 	}
1124*b1cdbd2cSJim Jagielski #endif
1125*b1cdbd2cSJim Jagielski 
1126*b1cdbd2cSJim Jagielski 	//Ersteinmal die alte sichtbare Seite holen, dann braucht nacher nicht
1127*b1cdbd2cSJim Jagielski 	//lange gesucht werden.
1128*b1cdbd2cSJim Jagielski 	const SwFrm *pOldPage = Imp()->GetFirstVisPage();
1129*b1cdbd2cSJim Jagielski 
1130*b1cdbd2cSJim Jagielski 	const SwRect aPrevArea( VisArea() );
1131*b1cdbd2cSJim Jagielski 	const sal_Bool bFull = aPrevArea.IsEmpty();
1132*b1cdbd2cSJim Jagielski 	aVisArea = rRect;
1133*b1cdbd2cSJim Jagielski 	SetFirstVisPageInvalid();
1134*b1cdbd2cSJim Jagielski 
1135*b1cdbd2cSJim Jagielski 	//Wenn noch eine PaintRegion herumsteht und sich die VisArea geaendert hat,
1136*b1cdbd2cSJim Jagielski 	//so ist die PaintRegion spaetestens jetzt obsolete. Die PaintRegion kann
1137*b1cdbd2cSJim Jagielski 	//vom RootFrm::Paint erzeugt worden sein.
1138*b1cdbd2cSJim Jagielski 	if ( !bInEndAction &&
1139*b1cdbd2cSJim Jagielski 		 Imp()->GetRegion() && Imp()->GetRegion()->GetOrigin() != VisArea() )
1140*b1cdbd2cSJim Jagielski         Imp()->DelRegion();
1141*b1cdbd2cSJim Jagielski 
1142*b1cdbd2cSJim Jagielski 	SET_CURR_SHELL( this );
1143*b1cdbd2cSJim Jagielski 
1144*b1cdbd2cSJim Jagielski 	bool bScrolled = false;
1145*b1cdbd2cSJim Jagielski 
1146*b1cdbd2cSJim Jagielski     SwPostItMgr* pPostItMgr = GetPostItMgr();
1147*b1cdbd2cSJim Jagielski 
1148*b1cdbd2cSJim Jagielski     if ( bFull )
1149*b1cdbd2cSJim Jagielski 		GetWin()->Invalidate();
1150*b1cdbd2cSJim Jagielski 	else
1151*b1cdbd2cSJim Jagielski 	{
1152*b1cdbd2cSJim Jagielski 		// Betrag ausrechnen, um den gescrolled werden muss.
1153*b1cdbd2cSJim Jagielski 		const long nXDiff = aPrevArea.Left() - VisArea().Left();
1154*b1cdbd2cSJim Jagielski 		const long nYDiff = aPrevArea.Top()  - VisArea().Top();
1155*b1cdbd2cSJim Jagielski 
1156*b1cdbd2cSJim Jagielski         if( !nXDiff && !GetViewOptions()->getBrowseMode() &&
1157*b1cdbd2cSJim Jagielski 			(!Imp()->HasDrawView() || !Imp()->GetDrawView()->IsGridVisible() ) )
1158*b1cdbd2cSJim Jagielski 		{
1159*b1cdbd2cSJim Jagielski 			//Falls moeglich die Wiese nicht mit Scrollen.
1160*b1cdbd2cSJim Jagielski 			//Also linke und rechte Kante des Scrollbereiches auf die
1161*b1cdbd2cSJim Jagielski 			//Seiten begrenzen.
1162*b1cdbd2cSJim Jagielski 			const SwPageFrm *pPage = (SwPageFrm*)GetLayout()->Lower();	//swmod 071108//swmod 071225
1163*b1cdbd2cSJim Jagielski 			if ( pPage->Frm().Top() > pOldPage->Frm().Top() )
1164*b1cdbd2cSJim Jagielski 				pPage = (SwPageFrm*)pOldPage;
1165*b1cdbd2cSJim Jagielski 			SwRect aBoth( VisArea() );
1166*b1cdbd2cSJim Jagielski 			aBoth.Union( aPrevArea );
1167*b1cdbd2cSJim Jagielski 			const SwTwips nBottom = aBoth.Bottom();
1168*b1cdbd2cSJim Jagielski             SwTwips nMinLeft = LONG_MAX;
1169*b1cdbd2cSJim Jagielski 			SwTwips nMaxRight= 0;
1170*b1cdbd2cSJim Jagielski 
1171*b1cdbd2cSJim Jagielski             const SwTwips nSidebarWidth = pPostItMgr && pPostItMgr->ShowNotes() && pPostItMgr->HasNotes() ?
1172*b1cdbd2cSJim Jagielski                                           pPostItMgr->GetSidebarWidth() + pPostItMgr->GetSidebarBorderWidth() :
1173*b1cdbd2cSJim Jagielski                                           0;
1174*b1cdbd2cSJim Jagielski             const bool bBookMode = GetViewOptions()->IsViewLayoutBookMode();
1175*b1cdbd2cSJim Jagielski 
1176*b1cdbd2cSJim Jagielski             while ( pPage && pPage->Frm().Top() <= nBottom )
1177*b1cdbd2cSJim Jagielski 			{
1178*b1cdbd2cSJim Jagielski                 SwRect aPageRect( pPage->Frm() );
1179*b1cdbd2cSJim Jagielski                 if ( bBookMode )
1180*b1cdbd2cSJim Jagielski                 {
1181*b1cdbd2cSJim Jagielski                     const SwPageFrm& rFormatPage = static_cast<const SwPageFrm*>(pPage)->GetFormatPage();
1182*b1cdbd2cSJim Jagielski                     aPageRect.SSize() = rFormatPage.Frm().SSize();
1183*b1cdbd2cSJim Jagielski                 }
1184*b1cdbd2cSJim Jagielski 
1185*b1cdbd2cSJim Jagielski                 if ( aPageRect.IsOver( aBoth ) )
1186*b1cdbd2cSJim Jagielski 				{
1187*b1cdbd2cSJim Jagielski                     // OD 12.02.2003 #i9719#, #105645# - consider new border
1188*b1cdbd2cSJim Jagielski                     // and shadow width
1189*b1cdbd2cSJim Jagielski                     const SwTwips nBorderWidth =
1190*b1cdbd2cSJim Jagielski                             GetOut()->PixelToLogic( Size( pPage->BorderPxWidth(), 0 ) ).Width();
1191*b1cdbd2cSJim Jagielski                     const SwTwips nShadowWidth =
1192*b1cdbd2cSJim Jagielski                             GetOut()->PixelToLogic( Size( pPage->ShadowPxWidth(), 0 ) ).Width();
1193*b1cdbd2cSJim Jagielski 
1194*b1cdbd2cSJim Jagielski                     SwTwips nPageLeft = 0;
1195*b1cdbd2cSJim Jagielski 					SwTwips nPageRight = 0;
1196*b1cdbd2cSJim Jagielski                     switch ( pPage->SidebarPosition() )
1197*b1cdbd2cSJim Jagielski                     {
1198*b1cdbd2cSJim Jagielski                         case sw::sidebarwindows::SIDEBAR_LEFT:
1199*b1cdbd2cSJim Jagielski                         {
1200*b1cdbd2cSJim Jagielski                             nPageLeft =  aPageRect.Left() - nBorderWidth - nSidebarWidth;
1201*b1cdbd2cSJim Jagielski                             nPageRight = aPageRect.Right() + nBorderWidth + nShadowWidth;
1202*b1cdbd2cSJim Jagielski                         }
1203*b1cdbd2cSJim Jagielski                         break;
1204*b1cdbd2cSJim Jagielski                         case sw::sidebarwindows::SIDEBAR_RIGHT:
1205*b1cdbd2cSJim Jagielski                         {
1206*b1cdbd2cSJim Jagielski                             nPageLeft =  aPageRect.Left() - nBorderWidth;
1207*b1cdbd2cSJim Jagielski                             nPageRight = aPageRect.Right() + nBorderWidth + nShadowWidth + nSidebarWidth;
1208*b1cdbd2cSJim Jagielski                         }
1209*b1cdbd2cSJim Jagielski                         break;
1210*b1cdbd2cSJim Jagielski                         case sw::sidebarwindows::SIDEBAR_NONE:
1211*b1cdbd2cSJim Jagielski                             // nothing to do
1212*b1cdbd2cSJim Jagielski                         break;
1213*b1cdbd2cSJim Jagielski                     }
1214*b1cdbd2cSJim Jagielski 					if( nPageLeft < nMinLeft )
1215*b1cdbd2cSJim Jagielski                         nMinLeft = nPageLeft;
1216*b1cdbd2cSJim Jagielski 					if( nPageRight > nMaxRight )
1217*b1cdbd2cSJim Jagielski                         nMaxRight = nPageRight;
1218*b1cdbd2cSJim Jagielski 					//Zus. auf die Zeichenobjekte abgleichen.
1219*b1cdbd2cSJim Jagielski 					//Einen Ofst beruecksichtigen, weil die Objekte u.U.
1220*b1cdbd2cSJim Jagielski 					//selektiert sind und die Henkel dann hinausstehen.
1221*b1cdbd2cSJim Jagielski 					if ( pPage->GetSortedObjs() )
1222*b1cdbd2cSJim Jagielski 					{
1223*b1cdbd2cSJim Jagielski 						const long nOfst = GetOut()->PixelToLogic(
1224*b1cdbd2cSJim Jagielski 							Size(Imp()->GetDrawView()->GetMarkHdlSizePixel()/2,0)).Width();
1225*b1cdbd2cSJim Jagielski                         for ( sal_uInt16 i = 0;
1226*b1cdbd2cSJim Jagielski 							  i < pPage->GetSortedObjs()->Count(); ++i )
1227*b1cdbd2cSJim Jagielski 						{
1228*b1cdbd2cSJim Jagielski                             SwAnchoredObject* pObj = (*pPage->GetSortedObjs())[i];
1229*b1cdbd2cSJim Jagielski                             const Rectangle &rBound = pObj->GetObjRect().SVRect();
1230*b1cdbd2cSJim Jagielski                             // OD 03.03.2003 #107927# - use correct datatype
1231*b1cdbd2cSJim Jagielski                             const SwTwips nL = Max( 0L, rBound.Left() - nOfst );
1232*b1cdbd2cSJim Jagielski 							if ( nL < nMinLeft )
1233*b1cdbd2cSJim Jagielski 								nMinLeft = nL;
1234*b1cdbd2cSJim Jagielski 							if( rBound.Right() + nOfst > nMaxRight )
1235*b1cdbd2cSJim Jagielski 								nMaxRight = rBound.Right() + nOfst;
1236*b1cdbd2cSJim Jagielski 						}
1237*b1cdbd2cSJim Jagielski 					}
1238*b1cdbd2cSJim Jagielski 				}
1239*b1cdbd2cSJim Jagielski 				pPage = (SwPageFrm*)pPage->GetNext();
1240*b1cdbd2cSJim Jagielski 			}
1241*b1cdbd2cSJim Jagielski 			Rectangle aRect( aPrevArea.SVRect() );
1242*b1cdbd2cSJim Jagielski 			aRect.Left()  = nMinLeft;
1243*b1cdbd2cSJim Jagielski 			aRect.Right() = nMaxRight;
1244*b1cdbd2cSJim Jagielski 			if( VisArea().IsOver( aPrevArea ) && !nLockPaint )
1245*b1cdbd2cSJim Jagielski 			{
1246*b1cdbd2cSJim Jagielski 				bScrolled = true;
1247*b1cdbd2cSJim Jagielski 				aVisArea.Pos() = aPrevArea.Pos();
1248*b1cdbd2cSJim Jagielski 				if ( SmoothScroll( nXDiff, nYDiff, &aRect ) )
1249*b1cdbd2cSJim Jagielski 					return;
1250*b1cdbd2cSJim Jagielski 				aVisArea.Pos() = rRect.Pos();
1251*b1cdbd2cSJim Jagielski 			}
1252*b1cdbd2cSJim Jagielski 			else
1253*b1cdbd2cSJim Jagielski 				GetWin()->Invalidate( aRect );
1254*b1cdbd2cSJim Jagielski 		}
1255*b1cdbd2cSJim Jagielski 		else if ( !nLockPaint ) //Wird im UnLock erledigt
1256*b1cdbd2cSJim Jagielski 		{
1257*b1cdbd2cSJim Jagielski 			if( VisArea().IsOver( aPrevArea ) )
1258*b1cdbd2cSJim Jagielski 			{
1259*b1cdbd2cSJim Jagielski 				bScrolled = true;
1260*b1cdbd2cSJim Jagielski 				aVisArea.Pos() = aPrevArea.Pos();
1261*b1cdbd2cSJim Jagielski 				if ( SmoothScroll( nXDiff, nYDiff, 0 ) )
1262*b1cdbd2cSJim Jagielski 					return;
1263*b1cdbd2cSJim Jagielski 				aVisArea.Pos() = rRect.Pos();
1264*b1cdbd2cSJim Jagielski 			}
1265*b1cdbd2cSJim Jagielski 			else
1266*b1cdbd2cSJim Jagielski 				GetWin()->Invalidate();
1267*b1cdbd2cSJim Jagielski 		}
1268*b1cdbd2cSJim Jagielski 	}
1269*b1cdbd2cSJim Jagielski 
1270*b1cdbd2cSJim Jagielski 	Point aPt( VisArea().Pos() );
1271*b1cdbd2cSJim Jagielski 	aPt.X() = -aPt.X(); aPt.Y() = -aPt.Y();
1272*b1cdbd2cSJim Jagielski 	MapMode aMapMode( GetWin()->GetMapMode() );
1273*b1cdbd2cSJim Jagielski 	aMapMode.SetOrigin( aPt );
1274*b1cdbd2cSJim Jagielski 	GetWin()->SetMapMode( aMapMode );
1275*b1cdbd2cSJim Jagielski 	if ( HasDrawView() )
1276*b1cdbd2cSJim Jagielski 	{
1277*b1cdbd2cSJim Jagielski 		Imp()->GetDrawView()->VisAreaChanged( GetWin() );
1278*b1cdbd2cSJim Jagielski 		Imp()->GetDrawView()->SetActualWin( GetWin() );
1279*b1cdbd2cSJim Jagielski 	}
1280*b1cdbd2cSJim Jagielski 	GetWin()->Update();
1281*b1cdbd2cSJim Jagielski 
1282*b1cdbd2cSJim Jagielski     // --> OD 2010-02-11 #i88070#
1283*b1cdbd2cSJim Jagielski     if ( pPostItMgr )
1284*b1cdbd2cSJim Jagielski     {
1285*b1cdbd2cSJim Jagielski         pPostItMgr->Rescale();
1286*b1cdbd2cSJim Jagielski         pPostItMgr->CalcRects();
1287*b1cdbd2cSJim Jagielski         pPostItMgr->LayoutPostIts();
1288*b1cdbd2cSJim Jagielski     }
1289*b1cdbd2cSJim Jagielski     // <--
1290*b1cdbd2cSJim Jagielski 
1291*b1cdbd2cSJim Jagielski     if ( !bScrolled && pPostItMgr && pPostItMgr->HasNotes() && pPostItMgr->ShowNotes() )
1292*b1cdbd2cSJim Jagielski 		pPostItMgr->CorrectPositions();
1293*b1cdbd2cSJim Jagielski 
1294*b1cdbd2cSJim Jagielski 	if( Imp()->IsAccessible() )
1295*b1cdbd2cSJim Jagielski 		Imp()->UpdateAccessible();
1296*b1cdbd2cSJim Jagielski 
1297*b1cdbd2cSJim Jagielski }
1298*b1cdbd2cSJim Jagielski 
1299*b1cdbd2cSJim Jagielski /******************************************************************************
1300*b1cdbd2cSJim Jagielski |*
1301*b1cdbd2cSJim Jagielski |*	ViewShell::SmoothScroll()
1302*b1cdbd2cSJim Jagielski |*
1303*b1cdbd2cSJim Jagielski |*	Ersterstellung		MA 04. Jul. 96
1304*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	MA 25. Mar. 97
1305*b1cdbd2cSJim Jagielski |*
1306*b1cdbd2cSJim Jagielski ******************************************************************************/
1307*b1cdbd2cSJim Jagielski 
SmoothScroll(long lXDiff,long lYDiff,const Rectangle * pRect)1308*b1cdbd2cSJim Jagielski sal_Bool ViewShell::SmoothScroll( long lXDiff, long lYDiff, const Rectangle *pRect )
1309*b1cdbd2cSJim Jagielski {
1310*b1cdbd2cSJim Jagielski 	const sal_uLong nColCnt = pOut->GetColorCount();
1311*b1cdbd2cSJim Jagielski 	long lMult = 1, lMax = LONG_MAX;
1312*b1cdbd2cSJim Jagielski 	if ( nColCnt == 65536 )
1313*b1cdbd2cSJim Jagielski 	{
1314*b1cdbd2cSJim Jagielski 		lMax = 7000;
1315*b1cdbd2cSJim Jagielski 		lMult = 2;
1316*b1cdbd2cSJim Jagielski 	}
1317*b1cdbd2cSJim Jagielski 	if ( nColCnt == 16777216 )
1318*b1cdbd2cSJim Jagielski 	{
1319*b1cdbd2cSJim Jagielski 		lMax = 5000;
1320*b1cdbd2cSJim Jagielski 		lMult = 6;
1321*b1cdbd2cSJim Jagielski 	}
1322*b1cdbd2cSJim Jagielski 	else if ( nColCnt == 1 )
1323*b1cdbd2cSJim Jagielski 	{
1324*b1cdbd2cSJim Jagielski 		lMax = 3000;
1325*b1cdbd2cSJim Jagielski 		lMult = 12;
1326*b1cdbd2cSJim Jagielski 	}
1327*b1cdbd2cSJim Jagielski 
1328*b1cdbd2cSJim Jagielski 	// #i75172# isolated static conditions
1329*b1cdbd2cSJim Jagielski 	const bool bOnlyYScroll(!lXDiff && Abs(lYDiff) != 0 && Abs(lYDiff) < lMax);
1330*b1cdbd2cSJim Jagielski 	const bool bAllowedWithChildWindows(GetWin()->GetWindowClipRegionPixel(WINDOW_GETCLIPREGION_NOCHILDREN|WINDOW_GETCLIPREGION_NULL).IsNull());
1331*b1cdbd2cSJim Jagielski // --> OD 2009-08-12 #i98766# - disable smooth scrolling for Mac port builds
1332*b1cdbd2cSJim Jagielski #ifdef QUARTZ
1333*b1cdbd2cSJim Jagielski     const bool bSmoothScrollAllowed(false);
1334*b1cdbd2cSJim Jagielski     (void) bOnlyYScroll;
1335*b1cdbd2cSJim Jagielski     (void) bAllowedWithChildWindows;
1336*b1cdbd2cSJim Jagielski #else
1337*b1cdbd2cSJim Jagielski     const bool bSmoothScrollAllowed(bOnlyYScroll && bEnableSmooth && GetViewOptions()->IsSmoothScroll() &&  bAllowedWithChildWindows);
1338*b1cdbd2cSJim Jagielski #endif
1339*b1cdbd2cSJim Jagielski // <-
1340*b1cdbd2cSJim Jagielski 	const bool bIAmCursorShell(ISA(SwCrsrShell));
1341*b1cdbd2cSJim Jagielski     (void) bIAmCursorShell;
1342*b1cdbd2cSJim Jagielski 
1343*b1cdbd2cSJim Jagielski 	// #i75172# with selection on overlay, smooth scroll should be allowed with it
1344*b1cdbd2cSJim Jagielski 	const bool bAllowedForSelection(true || (bIAmCursorShell && !((SwCrsrShell*)this)->HasSelection()));
1345*b1cdbd2cSJim Jagielski 
1346*b1cdbd2cSJim Jagielski 	// #i75172# with cursors on overlay, smooth scroll should be allowed with it
1347*b1cdbd2cSJim Jagielski 	const bool bAllowedForMultipleCursors(true || (bIAmCursorShell && ((SwCrsrShell*)this)->GetCrsrCnt() < 2));
1348*b1cdbd2cSJim Jagielski 
1349*b1cdbd2cSJim Jagielski 	if(bSmoothScrollAllowed  && bAllowedForSelection && bAllowedForMultipleCursors)
1350*b1cdbd2cSJim Jagielski 	{
1351*b1cdbd2cSJim Jagielski 		Imp()->bStopSmooth = sal_False;
1352*b1cdbd2cSJim Jagielski 
1353*b1cdbd2cSJim Jagielski 		const SwRect aOldVis( VisArea() );
1354*b1cdbd2cSJim Jagielski 
1355*b1cdbd2cSJim Jagielski 		//Virtuelles Device erzeugen und einstellen.
1356*b1cdbd2cSJim Jagielski 		const Size aPixSz = GetWin()->PixelToLogic(Size(1,1));
1357*b1cdbd2cSJim Jagielski 		VirtualDevice *pVout = new VirtualDevice( *GetWin() );
1358*b1cdbd2cSJim Jagielski 		pVout->SetLineColor( GetWin()->GetLineColor() );
1359*b1cdbd2cSJim Jagielski 		pVout->SetFillColor( GetWin()->GetFillColor() );
1360*b1cdbd2cSJim Jagielski 		MapMode aMapMode( GetWin()->GetMapMode() );
1361*b1cdbd2cSJim Jagielski 		pVout->SetMapMode( aMapMode );
1362*b1cdbd2cSJim Jagielski 		Size aSize( aVisArea.Width()+2*aPixSz.Width(), Abs(lYDiff)+(2*aPixSz.Height()) );
1363*b1cdbd2cSJim Jagielski 		if ( pRect )
1364*b1cdbd2cSJim Jagielski 			aSize.Width() = Min(aSize.Width(), pRect->GetWidth()+2*aPixSz.Width());
1365*b1cdbd2cSJim Jagielski 		if ( pVout->SetOutputSize( aSize ) )
1366*b1cdbd2cSJim Jagielski 		{
1367*b1cdbd2cSJim Jagielski 			nLockPaint++;
1368*b1cdbd2cSJim Jagielski 
1369*b1cdbd2cSJim Jagielski 			//Ersteinmal alles neue in das VirDev Painten.
1370*b1cdbd2cSJim Jagielski 			SwRect aRect( VisArea() );
1371*b1cdbd2cSJim Jagielski 			aRect.Height( aSize.Height() );
1372*b1cdbd2cSJim Jagielski 			if ( pRect )
1373*b1cdbd2cSJim Jagielski 			{
1374*b1cdbd2cSJim Jagielski 				aRect.Pos().X() = Max(aRect.Left(),pRect->Left()-aPixSz.Width());
1375*b1cdbd2cSJim Jagielski 				aRect.Right( Min(aRect.Right()+2*aPixSz.Width(), pRect->Right()+aPixSz.Width()));
1376*b1cdbd2cSJim Jagielski 			}
1377*b1cdbd2cSJim Jagielski 			else
1378*b1cdbd2cSJim Jagielski 				aRect.SSize().Width() += 2*aPixSz.Width();
1379*b1cdbd2cSJim Jagielski 			aRect.Pos().Y() = lYDiff < 0 ? aOldVis.Bottom() - aPixSz.Height()
1380*b1cdbd2cSJim Jagielski 										 : aRect.Top() - aSize.Height() + aPixSz.Height();
1381*b1cdbd2cSJim Jagielski 			aRect.Pos().X() = Max( 0L, aRect.Left()-aPixSz.Width() );
1382*b1cdbd2cSJim Jagielski 			aRect.Pos()  = GetWin()->PixelToLogic( GetWin()->LogicToPixel( aRect.Pos()));
1383*b1cdbd2cSJim Jagielski 			aRect.SSize()= GetWin()->PixelToLogic( GetWin()->LogicToPixel( aRect.SSize()));
1384*b1cdbd2cSJim Jagielski 			aVisArea = aRect;
1385*b1cdbd2cSJim Jagielski 			const Point aPt( -aRect.Left(), -aRect.Top() );
1386*b1cdbd2cSJim Jagielski 			aMapMode.SetOrigin( aPt );
1387*b1cdbd2cSJim Jagielski 			pVout->SetMapMode( aMapMode );
1388*b1cdbd2cSJim Jagielski 			OutputDevice *pOld = pOut;
1389*b1cdbd2cSJim Jagielski 			pOut = pVout;
1390*b1cdbd2cSJim Jagielski 
1391*b1cdbd2cSJim Jagielski 			{
1392*b1cdbd2cSJim Jagielski 				// #i75172# To get a clean repaint, a new ObjectContact is needed here. Without, the
1393*b1cdbd2cSJim Jagielski 				// repaint would not be correct since it would use the wrong DrawPage visible region.
1394*b1cdbd2cSJim Jagielski 				// This repaint IS about painting something currently outside the visible part (!).
1395*b1cdbd2cSJim Jagielski 				// For that purpose, AddWindowToPaintView is used which creates a new SdrPageViewWindow
1396*b1cdbd2cSJim Jagielski 				// and all the necessary stuff. It's not cheap, but necessary here. Alone because repaint
1397*b1cdbd2cSJim Jagielski 				// target really is NOT the current window.
1398*b1cdbd2cSJim Jagielski 				// Also will automatically NOT use PreRendering and overlay (since target is VirtualDevice)
1399*b1cdbd2cSJim Jagielski 				if(!HasDrawView())
1400*b1cdbd2cSJim Jagielski 					MakeDrawView();
1401*b1cdbd2cSJim Jagielski 				SdrView* pDrawView = GetDrawView();
1402*b1cdbd2cSJim Jagielski 				pDrawView->AddWindowToPaintView(pVout);
1403*b1cdbd2cSJim Jagielski 
1404*b1cdbd2cSJim Jagielski 				// clear pWin during DLPrePaint2 to get paint preparation for pOut, but set it again
1405*b1cdbd2cSJim Jagielski 				// immediately afterwards. There are many decisions in SW which imply that Printing
1406*b1cdbd2cSJim Jagielski 				// is used when pWin == 0 (wrong but widely used).
1407*b1cdbd2cSJim Jagielski 				Window* pOldWin = pWin;
1408*b1cdbd2cSJim Jagielski 				pWin = 0;
1409*b1cdbd2cSJim Jagielski 				DLPrePaint2(Region(aRect.SVRect()));
1410*b1cdbd2cSJim Jagielski 				pWin = pOldWin;
1411*b1cdbd2cSJim Jagielski 
1412*b1cdbd2cSJim Jagielski 				// SW paint stuff
1413*b1cdbd2cSJim Jagielski 				PaintDesktop( aRect );
1414*b1cdbd2cSJim Jagielski 				ViewShell::bLstAct = sal_True;
1415*b1cdbd2cSJim Jagielski 				GetLayout()->Paint( aRect );
1416*b1cdbd2cSJim Jagielski 				ViewShell::bLstAct = sal_False;
1417*b1cdbd2cSJim Jagielski 
1418*b1cdbd2cSJim Jagielski 				// end paint and destroy ObjectContact again
1419*b1cdbd2cSJim Jagielski 				DLPostPaint2(true);
1420*b1cdbd2cSJim Jagielski 				pDrawView->DeleteWindowFromPaintView(pVout);
1421*b1cdbd2cSJim Jagielski 
1422*b1cdbd2cSJim Jagielski 				// temporary debug paint checking...
1423*b1cdbd2cSJim Jagielski 				static bool bDoSaveForVisualControl(false);
1424*b1cdbd2cSJim Jagielski 				if(bDoSaveForVisualControl)
1425*b1cdbd2cSJim Jagielski 				{
1426*b1cdbd2cSJim Jagielski 					const bool bMapModeWasEnabledVDev(pVout->IsMapModeEnabled());
1427*b1cdbd2cSJim Jagielski 					pVout->EnableMapMode(false);
1428*b1cdbd2cSJim Jagielski 					const Bitmap aBitmap(pVout->GetBitmap(Point(), pVout->GetOutputSizePixel()));
1429*b1cdbd2cSJim Jagielski                     const String aTmpString(ByteString( "c:\\test.bmp" ), RTL_TEXTENCODING_UTF8);
1430*b1cdbd2cSJim Jagielski                     SvFileStream aNew(aTmpString, STREAM_WRITE|STREAM_TRUNC);
1431*b1cdbd2cSJim Jagielski                     WriteDIB(aBitmap, aNew, false, true);
1432*b1cdbd2cSJim Jagielski 					pVout->EnableMapMode(bMapModeWasEnabledVDev);
1433*b1cdbd2cSJim Jagielski 				}
1434*b1cdbd2cSJim Jagielski 			}
1435*b1cdbd2cSJim Jagielski 
1436*b1cdbd2cSJim Jagielski 			pOut = pOld;
1437*b1cdbd2cSJim Jagielski 			aVisArea = aOldVis;
1438*b1cdbd2cSJim Jagielski 
1439*b1cdbd2cSJim Jagielski 			//Jetzt Stueckchenweise schieben und die neuen Pixel aus dem
1440*b1cdbd2cSJim Jagielski 			//VirDev  kopieren.
1441*b1cdbd2cSJim Jagielski 
1442*b1cdbd2cSJim Jagielski 			// ??????????????????????
1443*b1cdbd2cSJim Jagielski 			// or is it better to get the scrollfactor from the User
1444*b1cdbd2cSJim Jagielski 			// as option?
1445*b1cdbd2cSJim Jagielski 			// ??????????????????????
1446*b1cdbd2cSJim Jagielski 			long lMaDelta = aPixSz.Height();
1447*b1cdbd2cSJim Jagielski 			if ( Abs(lYDiff) > ( aVisArea.Height() / 3 ) )
1448*b1cdbd2cSJim Jagielski 				lMaDelta *= 6;
1449*b1cdbd2cSJim Jagielski 			else
1450*b1cdbd2cSJim Jagielski 				lMaDelta *= 2;
1451*b1cdbd2cSJim Jagielski 
1452*b1cdbd2cSJim Jagielski 			lMaDelta *= lMult;
1453*b1cdbd2cSJim Jagielski 
1454*b1cdbd2cSJim Jagielski 			if ( lYDiff < 0 )
1455*b1cdbd2cSJim Jagielski 				lMaDelta = -lMaDelta;
1456*b1cdbd2cSJim Jagielski 
1457*b1cdbd2cSJim Jagielski 			long lDiff = lYDiff;
1458*b1cdbd2cSJim Jagielski 			while ( lDiff )
1459*b1cdbd2cSJim Jagielski 			{
1460*b1cdbd2cSJim Jagielski 				long lScroll;
1461*b1cdbd2cSJim Jagielski 				if ( Imp()->bStopSmooth || Abs(lDiff) <= Abs(lMaDelta) )
1462*b1cdbd2cSJim Jagielski 				{
1463*b1cdbd2cSJim Jagielski 					lScroll = lDiff;
1464*b1cdbd2cSJim Jagielski 					lDiff = 0;
1465*b1cdbd2cSJim Jagielski 				}
1466*b1cdbd2cSJim Jagielski 				else
1467*b1cdbd2cSJim Jagielski 				{
1468*b1cdbd2cSJim Jagielski 					lScroll = lMaDelta;
1469*b1cdbd2cSJim Jagielski 					lDiff -= lMaDelta;
1470*b1cdbd2cSJim Jagielski 				}
1471*b1cdbd2cSJim Jagielski 
1472*b1cdbd2cSJim Jagielski                 const SwRect aTmpOldVis = VisArea();
1473*b1cdbd2cSJim Jagielski 				aVisArea.Pos().Y() -= lScroll;
1474*b1cdbd2cSJim Jagielski 				aVisArea.Pos() = GetWin()->PixelToLogic( GetWin()->LogicToPixel( VisArea().Pos()));
1475*b1cdbd2cSJim Jagielski                 lScroll = aTmpOldVis.Top() - VisArea().Top();
1476*b1cdbd2cSJim Jagielski 				if ( pRect )
1477*b1cdbd2cSJim Jagielski 				{
1478*b1cdbd2cSJim Jagielski                     Rectangle aTmp( aTmpOldVis.SVRect() );
1479*b1cdbd2cSJim Jagielski 					aTmp.Left() = pRect->Left();
1480*b1cdbd2cSJim Jagielski 					aTmp.Right()= pRect->Right();
1481*b1cdbd2cSJim Jagielski 					GetWin()->Scroll( 0, lScroll, aTmp, SCROLL_CHILDREN);
1482*b1cdbd2cSJim Jagielski 				}
1483*b1cdbd2cSJim Jagielski 				else
1484*b1cdbd2cSJim Jagielski 					GetWin()->Scroll( 0, lScroll, SCROLL_CHILDREN );
1485*b1cdbd2cSJim Jagielski 
1486*b1cdbd2cSJim Jagielski                 const Point aTmpPt( -VisArea().Left(), -VisArea().Top() );
1487*b1cdbd2cSJim Jagielski                 MapMode aTmpMapMode( GetWin()->GetMapMode() );
1488*b1cdbd2cSJim Jagielski                 aTmpMapMode.SetOrigin( aTmpPt );
1489*b1cdbd2cSJim Jagielski                 GetWin()->SetMapMode( aTmpMapMode );
1490*b1cdbd2cSJim Jagielski 
1491*b1cdbd2cSJim Jagielski 				if ( Imp()->HasDrawView() )
1492*b1cdbd2cSJim Jagielski 					Imp()->GetDrawView()->VisAreaChanged( GetWin() );
1493*b1cdbd2cSJim Jagielski 
1494*b1cdbd2cSJim Jagielski 				SetFirstVisPageInvalid();
1495*b1cdbd2cSJim Jagielski 				if ( !Imp()->bStopSmooth )
1496*b1cdbd2cSJim Jagielski 				{
1497*b1cdbd2cSJim Jagielski 					const bool bScrollDirectionIsUp(lScroll > 0);
1498*b1cdbd2cSJim Jagielski 					Imp()->aSmoothRect = VisArea();
1499*b1cdbd2cSJim Jagielski 
1500*b1cdbd2cSJim Jagielski 					if(bScrollDirectionIsUp)
1501*b1cdbd2cSJim Jagielski 					{
1502*b1cdbd2cSJim Jagielski 						Imp()->aSmoothRect.Bottom( VisArea().Top() + lScroll + aPixSz.Height());
1503*b1cdbd2cSJim Jagielski 					}
1504*b1cdbd2cSJim Jagielski 					else
1505*b1cdbd2cSJim Jagielski 					{
1506*b1cdbd2cSJim Jagielski 						Imp()->aSmoothRect.Top( VisArea().Bottom() + lScroll - aPixSz.Height());
1507*b1cdbd2cSJim Jagielski 					}
1508*b1cdbd2cSJim Jagielski 
1509*b1cdbd2cSJim Jagielski 					Imp()->bSmoothUpdate = sal_True;
1510*b1cdbd2cSJim Jagielski 					GetWin()->Update();
1511*b1cdbd2cSJim Jagielski 					Imp()->bSmoothUpdate = sal_False;
1512*b1cdbd2cSJim Jagielski 
1513*b1cdbd2cSJim Jagielski 					if(!Imp()->bStopSmooth)
1514*b1cdbd2cSJim Jagielski 					{
1515*b1cdbd2cSJim Jagielski 						static bool bDoItOnPixels(true);
1516*b1cdbd2cSJim Jagielski 						if(bDoItOnPixels)
1517*b1cdbd2cSJim Jagielski 						{
1518*b1cdbd2cSJim Jagielski 							// start paint on logic base
1519*b1cdbd2cSJim Jagielski 							const Rectangle aTargetLogic(Imp()->aSmoothRect.SVRect());
1520*b1cdbd2cSJim Jagielski 							DLPrePaint2(Region(aTargetLogic));
1521*b1cdbd2cSJim Jagielski 
1522*b1cdbd2cSJim Jagielski 							// get target rectangle in discrete pixels
1523*b1cdbd2cSJim Jagielski 							OutputDevice& rTargetDevice = mpTargetPaintWindow->GetTargetOutputDevice();
1524*b1cdbd2cSJim Jagielski 							const Rectangle aTargetPixel(rTargetDevice.LogicToPixel(aTargetLogic));
1525*b1cdbd2cSJim Jagielski 
1526*b1cdbd2cSJim Jagielski 							// get source top-left in discrete pixels
1527*b1cdbd2cSJim Jagielski 							const Point aSourceTopLeft(pVout->LogicToPixel(aTargetLogic.TopLeft()));
1528*b1cdbd2cSJim Jagielski 
1529*b1cdbd2cSJim Jagielski 							// switch off MapModes
1530*b1cdbd2cSJim Jagielski 							const bool bMapModeWasEnabledDest(rTargetDevice.IsMapModeEnabled());
1531*b1cdbd2cSJim Jagielski 							const bool bMapModeWasEnabledSource(pVout->IsMapModeEnabled());
1532*b1cdbd2cSJim Jagielski 							rTargetDevice.EnableMapMode(false);
1533*b1cdbd2cSJim Jagielski 							pVout->EnableMapMode(false);
1534*b1cdbd2cSJim Jagielski 
1535*b1cdbd2cSJim Jagielski 							// copy content
1536*b1cdbd2cSJim Jagielski 							static bool bTestDirectToWindowPaint(false);
1537*b1cdbd2cSJim Jagielski 							if(bTestDirectToWindowPaint)
1538*b1cdbd2cSJim Jagielski 							{
1539*b1cdbd2cSJim Jagielski 								const bool bMapModeWasEnabledWin(GetWin()->IsMapModeEnabled());
1540*b1cdbd2cSJim Jagielski 								GetWin()->EnableMapMode(false);
1541*b1cdbd2cSJim Jagielski 
1542*b1cdbd2cSJim Jagielski 								GetWin()->DrawOutDev(
1543*b1cdbd2cSJim Jagielski 									aTargetPixel.TopLeft(), aTargetPixel.GetSize(), // dest
1544*b1cdbd2cSJim Jagielski 									aSourceTopLeft, aTargetPixel.GetSize(), // source
1545*b1cdbd2cSJim Jagielski 									*pVout);
1546*b1cdbd2cSJim Jagielski 
1547*b1cdbd2cSJim Jagielski 								GetWin()->EnableMapMode(bMapModeWasEnabledWin);
1548*b1cdbd2cSJim Jagielski 							}
1549*b1cdbd2cSJim Jagielski 
1550*b1cdbd2cSJim Jagielski 							rTargetDevice.DrawOutDev(
1551*b1cdbd2cSJim Jagielski 								aTargetPixel.TopLeft(), aTargetPixel.GetSize(), // dest
1552*b1cdbd2cSJim Jagielski 								aSourceTopLeft, aTargetPixel.GetSize(), // source
1553*b1cdbd2cSJim Jagielski 								*pVout);
1554*b1cdbd2cSJim Jagielski 
1555*b1cdbd2cSJim Jagielski 							// restore MapModes
1556*b1cdbd2cSJim Jagielski 							rTargetDevice.EnableMapMode(bMapModeWasEnabledDest);
1557*b1cdbd2cSJim Jagielski 							pVout->EnableMapMode(bMapModeWasEnabledSource);
1558*b1cdbd2cSJim Jagielski 
1559*b1cdbd2cSJim Jagielski 							// end paint on logoc base
1560*b1cdbd2cSJim Jagielski 							DLPostPaint2(true);
1561*b1cdbd2cSJim Jagielski 						}
1562*b1cdbd2cSJim Jagielski 						else
1563*b1cdbd2cSJim Jagielski 						{
1564*b1cdbd2cSJim Jagielski 							Rectangle aRectangle(Imp()->aSmoothRect.SVRect());
1565*b1cdbd2cSJim Jagielski 							aRectangle.Left() -= aPixSz.Width();
1566*b1cdbd2cSJim Jagielski 							aRectangle.Right() += aPixSz.Width();
1567*b1cdbd2cSJim Jagielski 							aRectangle.Top() -= aPixSz.Height();
1568*b1cdbd2cSJim Jagielski 							aRectangle.Bottom() += aPixSz.Height();
1569*b1cdbd2cSJim Jagielski 							const Point aUpdateTopLeft(aRectangle.TopLeft());
1570*b1cdbd2cSJim Jagielski 							const Size aUpdateSize(aRectangle.GetSize());
1571*b1cdbd2cSJim Jagielski 
1572*b1cdbd2cSJim Jagielski 							// #i75172# the part getting visible needs to be handled like a repaint.
1573*b1cdbd2cSJim Jagielski 							// For that, start with DLPrePaint2 and the correct Rectangle
1574*b1cdbd2cSJim Jagielski 							DLPrePaint2(Region(aRectangle));
1575*b1cdbd2cSJim Jagielski 
1576*b1cdbd2cSJim Jagielski 							static bool bTestDirectToWindowPaint(false);
1577*b1cdbd2cSJim Jagielski 							if(bTestDirectToWindowPaint)
1578*b1cdbd2cSJim Jagielski 							{
1579*b1cdbd2cSJim Jagielski 								GetWin()->DrawOutDev(aUpdateTopLeft, aUpdateSize, aUpdateTopLeft, aUpdateSize, *pVout);
1580*b1cdbd2cSJim Jagielski 							}
1581*b1cdbd2cSJim Jagielski 
1582*b1cdbd2cSJim Jagielski 							mpTargetPaintWindow->GetTargetOutputDevice().DrawOutDev(aUpdateTopLeft, aUpdateSize, aUpdateTopLeft, aUpdateSize, *pVout);
1583*b1cdbd2cSJim Jagielski 
1584*b1cdbd2cSJim Jagielski 							// #i75172# Corret repaint end
1585*b1cdbd2cSJim Jagielski 							// Note: This also correcty creates the overlay, thus smooth scroll will
1586*b1cdbd2cSJim Jagielski 							// also be allowed now wth selection (see big IF above)
1587*b1cdbd2cSJim Jagielski 							DLPostPaint2(true);
1588*b1cdbd2cSJim Jagielski 						}
1589*b1cdbd2cSJim Jagielski 					}
1590*b1cdbd2cSJim Jagielski 					else
1591*b1cdbd2cSJim Jagielski 						--nLockPaint;
1592*b1cdbd2cSJim Jagielski 				}
1593*b1cdbd2cSJim Jagielski 			}
1594*b1cdbd2cSJim Jagielski 			delete pVout;
1595*b1cdbd2cSJim Jagielski 			GetWin()->Update();
1596*b1cdbd2cSJim Jagielski 			if ( !Imp()->bStopSmooth )
1597*b1cdbd2cSJim Jagielski 				--nLockPaint;
1598*b1cdbd2cSJim Jagielski 			SetFirstVisPageInvalid();
1599*b1cdbd2cSJim Jagielski 			return sal_True;
1600*b1cdbd2cSJim Jagielski 		}
1601*b1cdbd2cSJim Jagielski 		delete pVout;
1602*b1cdbd2cSJim Jagielski 	}
1603*b1cdbd2cSJim Jagielski 
1604*b1cdbd2cSJim Jagielski     aVisArea.Pos().X() -= lXDiff;
1605*b1cdbd2cSJim Jagielski 	aVisArea.Pos().Y() -= lYDiff;
1606*b1cdbd2cSJim Jagielski 	if ( pRect )
1607*b1cdbd2cSJim Jagielski 		GetWin()->Scroll( lXDiff, lYDiff, *pRect, SCROLL_CHILDREN);
1608*b1cdbd2cSJim Jagielski 	else
1609*b1cdbd2cSJim Jagielski 		GetWin()->Scroll( lXDiff, lYDiff, SCROLL_CHILDREN);
1610*b1cdbd2cSJim Jagielski 	return sal_False;
1611*b1cdbd2cSJim Jagielski }
1612*b1cdbd2cSJim Jagielski 
1613*b1cdbd2cSJim Jagielski /******************************************************************************
1614*b1cdbd2cSJim Jagielski |*
1615*b1cdbd2cSJim Jagielski |*	ViewShell::PaintDesktop()
1616*b1cdbd2cSJim Jagielski |*
1617*b1cdbd2cSJim Jagielski |*	Ersterstellung		MA 16. Dec. 93
1618*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	MA 30. Nov. 95
1619*b1cdbd2cSJim Jagielski |*
1620*b1cdbd2cSJim Jagielski ******************************************************************************/
1621*b1cdbd2cSJim Jagielski 
PaintDesktop(const SwRect & rRect)1622*b1cdbd2cSJim Jagielski void ViewShell::PaintDesktop( const SwRect &rRect )
1623*b1cdbd2cSJim Jagielski {
1624*b1cdbd2cSJim Jagielski 	if ( !GetWin() && !GetOut()->GetConnectMetaFile() )
1625*b1cdbd2cSJim Jagielski 		return;						//Fuer den Drucker tun wir hier nix
1626*b1cdbd2cSJim Jagielski 
1627*b1cdbd2cSJim Jagielski 	//Sonderfaelle abfangen, damit es nicht gar so ueberraschend aussieht.
1628*b1cdbd2cSJim Jagielski 	//Kann z.B. waehrend des Idle'ns zwischenzeitlich auftreten.
1629*b1cdbd2cSJim Jagielski 	//Die Rechtecke neben den Seiten muessen wir leider auf jedenfall Painten,
1630*b1cdbd2cSJim Jagielski 	//den diese werden spaeter beim VisPortChgd ausgespart.
1631*b1cdbd2cSJim Jagielski 	sal_Bool bBorderOnly = sal_False;
1632*b1cdbd2cSJim Jagielski 	const SwRootFrm *pRoot = GetLayout();//swmod 080305
1633*b1cdbd2cSJim Jagielski 	if ( rRect.Top() > pRoot->Frm().Bottom() )
1634*b1cdbd2cSJim Jagielski 	{
1635*b1cdbd2cSJim Jagielski 		const SwFrm *pPg = pRoot->Lower();
1636*b1cdbd2cSJim Jagielski 		while ( pPg && pPg->GetNext() )
1637*b1cdbd2cSJim Jagielski 			pPg = pPg->GetNext();
1638*b1cdbd2cSJim Jagielski 		if ( !pPg || !pPg->Frm().IsOver( VisArea() ) )
1639*b1cdbd2cSJim Jagielski 			bBorderOnly = sal_True;
1640*b1cdbd2cSJim Jagielski 	}
1641*b1cdbd2cSJim Jagielski 
1642*b1cdbd2cSJim Jagielski     const bool bBookMode = GetViewOptions()->IsViewLayoutBookMode();
1643*b1cdbd2cSJim Jagielski 
1644*b1cdbd2cSJim Jagielski     SwRegionRects aRegion( rRect );
1645*b1cdbd2cSJim Jagielski 
1646*b1cdbd2cSJim Jagielski 	//mod #i6193: remove sidebar area to avoid flickering
1647*b1cdbd2cSJim Jagielski     const SwPostItMgr* pPostItMgr = GetPostItMgr();
1648*b1cdbd2cSJim Jagielski     const SwTwips nSidebarWidth = pPostItMgr && pPostItMgr->HasNotes() && pPostItMgr->ShowNotes() ?
1649*b1cdbd2cSJim Jagielski                                   pPostItMgr->GetSidebarWidth() + pPostItMgr->GetSidebarBorderWidth() :
1650*b1cdbd2cSJim Jagielski                                   0;
1651*b1cdbd2cSJim Jagielski 
1652*b1cdbd2cSJim Jagielski     if ( bBorderOnly )
1653*b1cdbd2cSJim Jagielski 	{
1654*b1cdbd2cSJim Jagielski 		const SwFrm *pPage =pRoot->Lower();	//swmod 071108//swmod 071225
1655*b1cdbd2cSJim Jagielski 		SwRect aLeft( rRect ), aRight( rRect );
1656*b1cdbd2cSJim Jagielski 		while ( pPage )
1657*b1cdbd2cSJim Jagielski 		{
1658*b1cdbd2cSJim Jagielski 			long nTmp = pPage->Frm().Left();
1659*b1cdbd2cSJim Jagielski 			if ( nTmp < aLeft.Right() )
1660*b1cdbd2cSJim Jagielski 				aLeft.Right( nTmp );
1661*b1cdbd2cSJim Jagielski 			nTmp = pPage->Frm().Right();
1662*b1cdbd2cSJim Jagielski 			if ( nTmp > aRight.Left() )
1663*b1cdbd2cSJim Jagielski 			{
1664*b1cdbd2cSJim Jagielski                 aRight.Left( nTmp + nSidebarWidth );
1665*b1cdbd2cSJim Jagielski             }
1666*b1cdbd2cSJim Jagielski 			pPage = pPage->GetNext();
1667*b1cdbd2cSJim Jagielski 		}
1668*b1cdbd2cSJim Jagielski 		aRegion.Remove( 0, aRegion.Count() );
1669*b1cdbd2cSJim Jagielski 		if ( aLeft.HasArea() )
1670*b1cdbd2cSJim Jagielski 			aRegion.Insert( aLeft, 0 );
1671*b1cdbd2cSJim Jagielski 		if ( aRight.HasArea() )
1672*b1cdbd2cSJim Jagielski 			aRegion.Insert( aRight, 1 );
1673*b1cdbd2cSJim Jagielski 	}
1674*b1cdbd2cSJim Jagielski 	else
1675*b1cdbd2cSJim Jagielski 	{
1676*b1cdbd2cSJim Jagielski 		const SwFrm *pPage = Imp()->GetFirstVisPage();
1677*b1cdbd2cSJim Jagielski 		const SwTwips nBottom = rRect.Bottom();
1678*b1cdbd2cSJim Jagielski         //const SwTwips nRight  = rRect.Right();
1679*b1cdbd2cSJim Jagielski 		while ( pPage && aRegion.Count() &&
1680*b1cdbd2cSJim Jagielski 				(pPage->Frm().Top() <= nBottom) ) // PAGES01 && (pPage->Frm().Left() <= nRight))
1681*b1cdbd2cSJim Jagielski 		{
1682*b1cdbd2cSJim Jagielski             SwRect aPageRect( pPage->Frm() );
1683*b1cdbd2cSJim Jagielski             if ( bBookMode )
1684*b1cdbd2cSJim Jagielski             {
1685*b1cdbd2cSJim Jagielski                 const SwPageFrm& rFormatPage = static_cast<const SwPageFrm*>(pPage)->GetFormatPage();
1686*b1cdbd2cSJim Jagielski                 aPageRect.SSize() = rFormatPage.Frm().SSize();
1687*b1cdbd2cSJim Jagielski             }
1688*b1cdbd2cSJim Jagielski 
1689*b1cdbd2cSJim Jagielski             const bool bSidebarRight =
1690*b1cdbd2cSJim Jagielski                 static_cast<const SwPageFrm*>(pPage)->SidebarPosition() == sw::sidebarwindows::SIDEBAR_RIGHT;
1691*b1cdbd2cSJim Jagielski             aPageRect.Pos().X() -= bSidebarRight ? 0 : nSidebarWidth;
1692*b1cdbd2cSJim Jagielski             aPageRect.SSize().Width() += nSidebarWidth;
1693*b1cdbd2cSJim Jagielski 
1694*b1cdbd2cSJim Jagielski             if ( aPageRect.IsOver( rRect ) )
1695*b1cdbd2cSJim Jagielski                 aRegion -= aPageRect;
1696*b1cdbd2cSJim Jagielski 
1697*b1cdbd2cSJim Jagielski             pPage = pPage->GetNext();
1698*b1cdbd2cSJim Jagielski 		}
1699*b1cdbd2cSJim Jagielski 	}
1700*b1cdbd2cSJim Jagielski 	if ( aRegion.Count() )
1701*b1cdbd2cSJim Jagielski 		_PaintDesktop( aRegion );
1702*b1cdbd2cSJim Jagielski }
1703*b1cdbd2cSJim Jagielski 
1704*b1cdbd2cSJim Jagielski 
1705*b1cdbd2cSJim Jagielski // PaintDesktop gesplittet, dieser Teil wird auch von PreViewPage benutzt
_PaintDesktop(const SwRegionRects & rRegion)1706*b1cdbd2cSJim Jagielski void ViewShell::_PaintDesktop( const SwRegionRects &rRegion )
1707*b1cdbd2cSJim Jagielski {
1708*b1cdbd2cSJim Jagielski     // OD 2004-04-23 #116347#
1709*b1cdbd2cSJim Jagielski     GetOut()->Push( PUSH_FILLCOLOR|PUSH_LINECOLOR );
1710*b1cdbd2cSJim Jagielski     GetOut()->SetLineColor();
1711*b1cdbd2cSJim Jagielski 
1712*b1cdbd2cSJim Jagielski 	for ( sal_uInt16 i = 0; i < rRegion.Count(); ++i )
1713*b1cdbd2cSJim Jagielski 	{
1714*b1cdbd2cSJim Jagielski 		const Rectangle aRectangle(rRegion[i].SVRect());
1715*b1cdbd2cSJim Jagielski 
1716*b1cdbd2cSJim Jagielski         // #i93170#
1717*b1cdbd2cSJim Jagielski         // Here we have a real Problem. On the one hand we have the buffering for paint
1718*b1cdbd2cSJim Jagielski         // and overlay which needs an embracing pair of DLPrePaint2/DLPostPaint2 calls,
1719*b1cdbd2cSJim Jagielski         // on the other hand the MapMode is not set correctly when this code is executed.
1720*b1cdbd2cSJim Jagielski         // This is done in the users of this method, for each SWpage before painting it.
1721*b1cdbd2cSJim Jagielski         // Since the MapMode is not correct here, the call to DLPostPaint2 will paint
1722*b1cdbd2cSJim Jagielski         // existing FormControls due to the current MapMode.
1723*b1cdbd2cSJim Jagielski         //
1724*b1cdbd2cSJim Jagielski         // There are basically three solutions for this:
1725*b1cdbd2cSJim Jagielski         //
1726*b1cdbd2cSJim Jagielski         // (1) Set the MapMode correct, move the background painting to the users of
1727*b1cdbd2cSJim Jagielski         //     this code
1728*b1cdbd2cSJim Jagielski         //
1729*b1cdbd2cSJim Jagielski         // (2) Do no DLPrePaint2/DLPostPaint2 here; no SdrObjects are allowed to lie in
1730*b1cdbd2cSJim Jagielski         //     the desktop region. Disadvantage: the desktop will not be part of the
1731*b1cdbd2cSJim Jagielski         //     buffers, e.g. overlay. Thus, as soon as overlay will be used over the
1732*b1cdbd2cSJim Jagielski         //     desktop, it will not work.
1733*b1cdbd2cSJim Jagielski         //
1734*b1cdbd2cSJim Jagielski         // (3) expand DLPostPaint2 with a flag to signal if FormControl paints shall
1735*b1cdbd2cSJim Jagielski         //     be done or not
1736*b1cdbd2cSJim Jagielski         //
1737*b1cdbd2cSJim Jagielski         // Currently, (3) will be the best possible solution. It will keep overlay and
1738*b1cdbd2cSJim Jagielski 		// buffering intact and work without MapMode for single pages. In the medium
1739*b1cdbd2cSJim Jagielski 		// to long run, (1) will need to be used and the bool bPaintFormLayer needs
1740*b1cdbd2cSJim Jagielski 		// to be removed again
1741*b1cdbd2cSJim Jagielski 
1742*b1cdbd2cSJim Jagielski 		// #i68597# inform Drawinglayer about display change
1743*b1cdbd2cSJim Jagielski 		DLPrePaint2(Region(aRectangle));
1744*b1cdbd2cSJim Jagielski 
1745*b1cdbd2cSJim Jagielski 		// #i75172# needed to move line/Fill color setters into loop since DLPrePaint2
1746*b1cdbd2cSJim Jagielski 		// may exchange GetOut(), that's it's purpose. This happens e.g. at print preview.
1747*b1cdbd2cSJim Jagielski 		GetOut()->SetFillColor( SwViewOption::GetAppBackgroundColor());
1748*b1cdbd2cSJim Jagielski 		GetOut()->SetLineColor();
1749*b1cdbd2cSJim Jagielski 		GetOut()->DrawRect(aRectangle);
1750*b1cdbd2cSJim Jagielski 
1751*b1cdbd2cSJim Jagielski 		DLPostPaint2(false);
1752*b1cdbd2cSJim Jagielski 	}
1753*b1cdbd2cSJim Jagielski 
1754*b1cdbd2cSJim Jagielski 	GetOut()->Pop();
1755*b1cdbd2cSJim Jagielski }
1756*b1cdbd2cSJim Jagielski 
1757*b1cdbd2cSJim Jagielski /******************************************************************************
1758*b1cdbd2cSJim Jagielski |*
1759*b1cdbd2cSJim Jagielski |*	ViewShell::CheckInvalidForPaint()
1760*b1cdbd2cSJim Jagielski |*
1761*b1cdbd2cSJim Jagielski |*	Ersterstellung		MA 19. May. 94
1762*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	MA 09. Jun. 94
1763*b1cdbd2cSJim Jagielski |*
1764*b1cdbd2cSJim Jagielski ******************************************************************************/
1765*b1cdbd2cSJim Jagielski 
CheckInvalidForPaint(const SwRect & rRect)1766*b1cdbd2cSJim Jagielski sal_Bool ViewShell::CheckInvalidForPaint( const SwRect &rRect )
1767*b1cdbd2cSJim Jagielski {
1768*b1cdbd2cSJim Jagielski 	if ( !GetWin() )
1769*b1cdbd2cSJim Jagielski 		return sal_False;
1770*b1cdbd2cSJim Jagielski 
1771*b1cdbd2cSJim Jagielski 	const SwPageFrm *pPage = Imp()->GetFirstVisPage();
1772*b1cdbd2cSJim Jagielski 	const SwTwips nBottom = VisArea().Bottom();
1773*b1cdbd2cSJim Jagielski 	const SwTwips nRight  = VisArea().Right();
1774*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_False;
1775*b1cdbd2cSJim Jagielski 	while ( !bRet && pPage && !((pPage->Frm().Top()  > nBottom) ||
1776*b1cdbd2cSJim Jagielski 					   			(pPage->Frm().Left() > nRight)))
1777*b1cdbd2cSJim Jagielski 	{
1778*b1cdbd2cSJim Jagielski 		if ( pPage->IsInvalid() || pPage->IsInvalidFly() )
1779*b1cdbd2cSJim Jagielski 			bRet = sal_True;
1780*b1cdbd2cSJim Jagielski 		pPage = (SwPageFrm*)pPage->GetNext();
1781*b1cdbd2cSJim Jagielski 	}
1782*b1cdbd2cSJim Jagielski 
1783*b1cdbd2cSJim Jagielski 	if ( bRet )
1784*b1cdbd2cSJim Jagielski 	{
1785*b1cdbd2cSJim Jagielski 		//Start/EndAction wuerden hier leider nix helfen, weil das Paint vom
1786*b1cdbd2cSJim Jagielski 		//GUI 'reinkam und somit ein Clipping gesetzt ist gegen das wir nicht
1787*b1cdbd2cSJim Jagielski 		//nicht ankommen.
1788*b1cdbd2cSJim Jagielski 		//Ergo: Alles selbst machen (siehe ImplEndAction())
1789*b1cdbd2cSJim Jagielski 		if ( Imp()->GetRegion() && Imp()->GetRegion()->GetOrigin() != VisArea())
1790*b1cdbd2cSJim Jagielski              Imp()->DelRegion();
1791*b1cdbd2cSJim Jagielski 
1792*b1cdbd2cSJim Jagielski 		SwLayAction aAction( GetLayout(), Imp() );
1793*b1cdbd2cSJim Jagielski 		aAction.SetComplete( sal_False );
1794*b1cdbd2cSJim Jagielski         // We increment the action counter to avoid a recursive call of actions
1795*b1cdbd2cSJim Jagielski         // e.g. from a SwFEShell::RequestObjectResize(..) in bug 95829.
1796*b1cdbd2cSJim Jagielski         // A recursive call of actions is no good idea because the inner action
1797*b1cdbd2cSJim Jagielski         // can't format frames which are locked by the outer action. This may
1798*b1cdbd2cSJim Jagielski         // cause and endless loop.
1799*b1cdbd2cSJim Jagielski         ++nStartAction;
1800*b1cdbd2cSJim Jagielski 		aAction.Action();
1801*b1cdbd2cSJim Jagielski         --nStartAction;
1802*b1cdbd2cSJim Jagielski 
1803*b1cdbd2cSJim Jagielski 		SwRegionRects *pRegion = Imp()->GetRegion();
1804*b1cdbd2cSJim Jagielski 		if ( pRegion && aAction.IsBrowseActionStop() )
1805*b1cdbd2cSJim Jagielski 		{
1806*b1cdbd2cSJim Jagielski 			//Nur dann interessant, wenn sich im sichtbaren Bereich etwas
1807*b1cdbd2cSJim Jagielski 			//veraendert hat.
1808*b1cdbd2cSJim Jagielski 			sal_Bool bStop = sal_True;
1809*b1cdbd2cSJim Jagielski 			for ( sal_uInt16 i = 0; i < pRegion->Count(); ++i )
1810*b1cdbd2cSJim Jagielski 			{
1811*b1cdbd2cSJim Jagielski 				const SwRect &rTmp = (*pRegion)[i];
1812*b1cdbd2cSJim Jagielski 				if ( sal_False == (bStop = rTmp.IsOver( VisArea() )) )
1813*b1cdbd2cSJim Jagielski 					break;
1814*b1cdbd2cSJim Jagielski 			}
1815*b1cdbd2cSJim Jagielski 			if ( bStop )
1816*b1cdbd2cSJim Jagielski 			{
1817*b1cdbd2cSJim Jagielski                 Imp()->DelRegion();
1818*b1cdbd2cSJim Jagielski 				pRegion = 0;
1819*b1cdbd2cSJim Jagielski 			}
1820*b1cdbd2cSJim Jagielski 		}
1821*b1cdbd2cSJim Jagielski 
1822*b1cdbd2cSJim Jagielski 		if ( pRegion )
1823*b1cdbd2cSJim Jagielski 		{
1824*b1cdbd2cSJim Jagielski 			//Erst Invert dann Compress, niemals andersherum!
1825*b1cdbd2cSJim Jagielski 			pRegion->Invert();
1826*b1cdbd2cSJim Jagielski 			pRegion->Compress();
1827*b1cdbd2cSJim Jagielski 			bRet = sal_False;
1828*b1cdbd2cSJim Jagielski 			if ( pRegion->Count() )
1829*b1cdbd2cSJim Jagielski 			{
1830*b1cdbd2cSJim Jagielski 				SwRegionRects aRegion( rRect );
1831*b1cdbd2cSJim Jagielski 				for ( sal_uInt16 i = 0; i < pRegion->Count(); ++i )
1832*b1cdbd2cSJim Jagielski 				{	const SwRect &rTmp = (*pRegion)[i];
1833*b1cdbd2cSJim Jagielski 					if ( !rRect.IsInside( rTmp ) )
1834*b1cdbd2cSJim Jagielski 					{
1835*b1cdbd2cSJim Jagielski 						InvalidateWindows( rTmp );
1836*b1cdbd2cSJim Jagielski 						if ( rTmp.IsOver( VisArea() ) )
1837*b1cdbd2cSJim Jagielski 						{	aRegion -= rTmp;
1838*b1cdbd2cSJim Jagielski 							bRet = sal_True;
1839*b1cdbd2cSJim Jagielski 						}
1840*b1cdbd2cSJim Jagielski 					}
1841*b1cdbd2cSJim Jagielski 				}
1842*b1cdbd2cSJim Jagielski 				if ( bRet )
1843*b1cdbd2cSJim Jagielski 				{
1844*b1cdbd2cSJim Jagielski 					for ( sal_uInt16 i = 0; i < aRegion.Count(); ++i )
1845*b1cdbd2cSJim Jagielski 						GetWin()->Invalidate( aRegion[i].SVRect() );
1846*b1cdbd2cSJim Jagielski 
1847*b1cdbd2cSJim Jagielski 					if ( rRect != VisArea() )
1848*b1cdbd2cSJim Jagielski 					{
1849*b1cdbd2cSJim Jagielski 						//rRect == VisArea ist der spezialfall fuer neu bzw.
1850*b1cdbd2cSJim Jagielski 						//Shift-Ctrl-R, dafuer sollte es nicht notwendig sein
1851*b1cdbd2cSJim Jagielski 						//das Rechteck nocheinmal in Dokumentkoordinaten v
1852*b1cdbd2cSJim Jagielski 						//vorzuhalten.
1853*b1cdbd2cSJim Jagielski 						if ( aInvalidRect.IsEmpty() )
1854*b1cdbd2cSJim Jagielski 							aInvalidRect = rRect;
1855*b1cdbd2cSJim Jagielski 						else
1856*b1cdbd2cSJim Jagielski 							aInvalidRect.Union( rRect );
1857*b1cdbd2cSJim Jagielski 					}
1858*b1cdbd2cSJim Jagielski 				}
1859*b1cdbd2cSJim Jagielski 			}
1860*b1cdbd2cSJim Jagielski 			else
1861*b1cdbd2cSJim Jagielski 				bRet = sal_False;
1862*b1cdbd2cSJim Jagielski             Imp()->DelRegion();
1863*b1cdbd2cSJim Jagielski 		}
1864*b1cdbd2cSJim Jagielski 		else
1865*b1cdbd2cSJim Jagielski 			bRet = sal_False;
1866*b1cdbd2cSJim Jagielski 	}
1867*b1cdbd2cSJim Jagielski 	return bRet;
1868*b1cdbd2cSJim Jagielski }
1869*b1cdbd2cSJim Jagielski 
1870*b1cdbd2cSJim Jagielski /******************************************************************************
1871*b1cdbd2cSJim Jagielski |*
1872*b1cdbd2cSJim Jagielski |*	ViewShell::Paint()
1873*b1cdbd2cSJim Jagielski |*
1874*b1cdbd2cSJim Jagielski |*	Ersterstellung		MA ??
1875*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	MA 17. Sep. 96
1876*b1cdbd2cSJim Jagielski |*
1877*b1cdbd2cSJim Jagielski ******************************************************************************/
1878*b1cdbd2cSJim Jagielski 
Paint(const Rectangle & rRect)1879*b1cdbd2cSJim Jagielski void ViewShell::Paint(const Rectangle &rRect)
1880*b1cdbd2cSJim Jagielski {
1881*b1cdbd2cSJim Jagielski 	if ( nLockPaint )
1882*b1cdbd2cSJim Jagielski 	{
1883*b1cdbd2cSJim Jagielski 		if ( Imp()->bSmoothUpdate )
1884*b1cdbd2cSJim Jagielski 		{
1885*b1cdbd2cSJim Jagielski 			SwRect aTmp( rRect );
1886*b1cdbd2cSJim Jagielski 			if ( !Imp()->aSmoothRect.IsInside( aTmp ) )
1887*b1cdbd2cSJim Jagielski 				Imp()->bStopSmooth = sal_True;
1888*b1cdbd2cSJim Jagielski 			else
1889*b1cdbd2cSJim Jagielski 			{
1890*b1cdbd2cSJim Jagielski 				Imp()->aSmoothRect = aTmp;
1891*b1cdbd2cSJim Jagielski 				return;
1892*b1cdbd2cSJim Jagielski 			}
1893*b1cdbd2cSJim Jagielski 		}
1894*b1cdbd2cSJim Jagielski 		else
1895*b1cdbd2cSJim Jagielski 			return;
1896*b1cdbd2cSJim Jagielski 	}
1897*b1cdbd2cSJim Jagielski 
1898*b1cdbd2cSJim Jagielski 	if ( SwRootFrm::IsInPaint() )
1899*b1cdbd2cSJim Jagielski 	{
1900*b1cdbd2cSJim Jagielski 		//Waehrend der Ausgabe einer Seite beim Druckvorgang wird das
1901*b1cdbd2cSJim Jagielski 		//Paint gepuffert.
1902*b1cdbd2cSJim Jagielski 		SwPaintQueue::Add( this, SwRect( rRect ) );
1903*b1cdbd2cSJim Jagielski 		return;
1904*b1cdbd2cSJim Jagielski 	}
1905*b1cdbd2cSJim Jagielski 
1906*b1cdbd2cSJim Jagielski 	//MA 30. Jul. 95: fix(16787): mit !nStartAction versuche ich mal mich gegen
1907*b1cdbd2cSJim Jagielski 	//fehlerhaften Code an anderen Stellen zu wehren. Hoffentlich fuehrt das
1908*b1cdbd2cSJim Jagielski 	//nicht zu Problemen!?
1909*b1cdbd2cSJim Jagielski 	if ( bPaintWorks && !nStartAction )
1910*b1cdbd2cSJim Jagielski 	{
1911*b1cdbd2cSJim Jagielski 		if( GetWin() && GetWin()->IsVisible() )
1912*b1cdbd2cSJim Jagielski 		{
1913*b1cdbd2cSJim Jagielski 			SwRect aRect( rRect );
1914*b1cdbd2cSJim Jagielski 			if ( bPaintInProgress ) //Schutz gegen doppelte Paints!
1915*b1cdbd2cSJim Jagielski 			{
1916*b1cdbd2cSJim Jagielski 				GetWin()->Invalidate( rRect );
1917*b1cdbd2cSJim Jagielski 				return;
1918*b1cdbd2cSJim Jagielski 			}
1919*b1cdbd2cSJim Jagielski 
1920*b1cdbd2cSJim Jagielski 			bPaintInProgress = sal_True;
1921*b1cdbd2cSJim Jagielski 			SET_CURR_SHELL( this );
1922*b1cdbd2cSJim Jagielski 			SwRootFrm::SetNoVirDev( sal_True );
1923*b1cdbd2cSJim Jagielski 
1924*b1cdbd2cSJim Jagielski 			//Wir wollen nicht staendig hin und her Clippen, wir verlassen
1925*b1cdbd2cSJim Jagielski 			//uns darauf, das sich alle auf das Rechteck beschraeken und
1926*b1cdbd2cSJim Jagielski 			//brauchen das Clipping hier nur einmalig einkalkulieren. Das
1927*b1cdbd2cSJim Jagielski 			//ClipRect wird hier einmal entfernt und nicht Restauriert, denn
1928*b1cdbd2cSJim Jagielski 			//von aussen braucht es sowieso keiner mehr.
1929*b1cdbd2cSJim Jagielski 			//Nicht wenn wir ein MetaFile aufzeichnen.
1930*b1cdbd2cSJim Jagielski 			if( !GetOut()->GetConnectMetaFile() && GetOut()->IsClipRegion())
1931*b1cdbd2cSJim Jagielski 				GetOut()->SetClipRegion();
1932*b1cdbd2cSJim Jagielski 
1933*b1cdbd2cSJim Jagielski 			if ( IsPreView() )
1934*b1cdbd2cSJim Jagielski 			{
1935*b1cdbd2cSJim Jagielski 				//Falls sinnvoll gleich das alte InvalidRect verarbeiten bzw.
1936*b1cdbd2cSJim Jagielski 				//vernichten.
1937*b1cdbd2cSJim Jagielski 				if ( aRect.IsInside( aInvalidRect ) )
1938*b1cdbd2cSJim Jagielski 					ResetInvalidRect();
1939*b1cdbd2cSJim Jagielski 				ViewShell::bLstAct = sal_True;
1940*b1cdbd2cSJim Jagielski 				GetLayout()->Paint( aRect );
1941*b1cdbd2cSJim Jagielski 				ViewShell::bLstAct = sal_False;
1942*b1cdbd2cSJim Jagielski 			}
1943*b1cdbd2cSJim Jagielski 			else
1944*b1cdbd2cSJim Jagielski 			{
1945*b1cdbd2cSJim Jagielski 				//SwSaveHdl *pSaveHdl = 0;
1946*b1cdbd2cSJim Jagielski 				//if ( Imp()->HasDrawView() )
1947*b1cdbd2cSJim Jagielski 				//	pSaveHdl = new SwSaveHdl( Imp() );
1948*b1cdbd2cSJim Jagielski 
1949*b1cdbd2cSJim Jagielski 				//Wenn eine der sichtbaren Seiten noch irgendetwas zum Repaint
1950*b1cdbd2cSJim Jagielski 				//angemeldet hat, so muessen Repaints ausgeloest werden.
1951*b1cdbd2cSJim Jagielski 				if ( !CheckInvalidForPaint( aRect ) )
1952*b1cdbd2cSJim Jagielski 				{
1953*b1cdbd2cSJim Jagielski                     // --> OD 2009-08-12 #i101192#
1954*b1cdbd2cSJim Jagielski                     // start Pre/PostPaint encapsulation to avoid screen blinking
1955*b1cdbd2cSJim Jagielski                     const Region aRepaintRegion(aRect.SVRect());
1956*b1cdbd2cSJim Jagielski                     DLPrePaint2(aRepaintRegion);
1957*b1cdbd2cSJim Jagielski                     // <--
1958*b1cdbd2cSJim Jagielski 					PaintDesktop( aRect );
1959*b1cdbd2cSJim Jagielski 					//Falls sinnvoll gleich das alte InvalidRect verarbeiten bzw.
1960*b1cdbd2cSJim Jagielski 					//vernichten.
1961*b1cdbd2cSJim Jagielski 					if ( aRect.IsInside( aInvalidRect ) )
1962*b1cdbd2cSJim Jagielski 						ResetInvalidRect();
1963*b1cdbd2cSJim Jagielski 					ViewShell::bLstAct = sal_True;
1964*b1cdbd2cSJim Jagielski 					GetLayout()->Paint( aRect );
1965*b1cdbd2cSJim Jagielski 					ViewShell::bLstAct = sal_False;
1966*b1cdbd2cSJim Jagielski                     // --> OD 2009-08-12 #i101192#
1967*b1cdbd2cSJim Jagielski                     // end Pre/PostPaint encapsulation
1968*b1cdbd2cSJim Jagielski                     DLPostPaint2(true);
1969*b1cdbd2cSJim Jagielski                     // <--
1970*b1cdbd2cSJim Jagielski                 }
1971*b1cdbd2cSJim Jagielski 
1972*b1cdbd2cSJim Jagielski 				//delete pSaveHdl;
1973*b1cdbd2cSJim Jagielski 			}
1974*b1cdbd2cSJim Jagielski 			SwRootFrm::SetNoVirDev( sal_False );
1975*b1cdbd2cSJim Jagielski 			bPaintInProgress = sal_False;
1976*b1cdbd2cSJim Jagielski 			UISizeNotify();
1977*b1cdbd2cSJim Jagielski 		}
1978*b1cdbd2cSJim Jagielski 	}
1979*b1cdbd2cSJim Jagielski 	else
1980*b1cdbd2cSJim Jagielski 	{
1981*b1cdbd2cSJim Jagielski 		if ( aInvalidRect.IsEmpty() )
1982*b1cdbd2cSJim Jagielski 			aInvalidRect = SwRect( rRect );
1983*b1cdbd2cSJim Jagielski 		else
1984*b1cdbd2cSJim Jagielski 			aInvalidRect.Union( SwRect( rRect ) );
1985*b1cdbd2cSJim Jagielski 
1986*b1cdbd2cSJim Jagielski 		if ( bInEndAction && GetWin() )
1987*b1cdbd2cSJim Jagielski 		{
1988*b1cdbd2cSJim Jagielski 			const Region aRegion(GetWin()->GetPaintRegion());
1989*b1cdbd2cSJim Jagielski             RectangleVector aRectangles;
1990*b1cdbd2cSJim Jagielski             aRegion.GetRegionRectangles(aRectangles);
1991*b1cdbd2cSJim Jagielski 
1992*b1cdbd2cSJim Jagielski             for(RectangleVector::const_iterator aRectIter(aRectangles.begin()); aRectIter != aRectangles.end(); aRectIter++)
1993*b1cdbd2cSJim Jagielski             {
1994*b1cdbd2cSJim Jagielski                 Imp()->AddPaintRect(*aRectIter);
1995*b1cdbd2cSJim Jagielski             }
1996*b1cdbd2cSJim Jagielski 
1997*b1cdbd2cSJim Jagielski             //RegionHandle hHdl( aRegion.BeginEnumRects() );
1998*b1cdbd2cSJim Jagielski 			//Rectangle aRect;
1999*b1cdbd2cSJim Jagielski 			//while ( aRegion.GetEnumRects( hHdl, aRect ) )
2000*b1cdbd2cSJim Jagielski 			//	Imp()->AddPaintRect( aRect );
2001*b1cdbd2cSJim Jagielski 			//aRegion.EndEnumRects( hHdl );
2002*b1cdbd2cSJim Jagielski 		}
2003*b1cdbd2cSJim Jagielski 		else if ( SfxProgress::GetActiveProgress( GetDoc()->GetDocShell() ) &&
2004*b1cdbd2cSJim Jagielski 				  GetOut() == GetWin() )
2005*b1cdbd2cSJim Jagielski 		{
2006*b1cdbd2cSJim Jagielski 			// #i68597#
2007*b1cdbd2cSJim Jagielski 			const Region aDLRegion(rRect);
2008*b1cdbd2cSJim Jagielski 			DLPrePaint2(aDLRegion);
2009*b1cdbd2cSJim Jagielski 
2010*b1cdbd2cSJim Jagielski 			// OD 2004-04-23 #116347#
2011*b1cdbd2cSJim Jagielski             pOut->Push( PUSH_FILLCOLOR|PUSH_LINECOLOR );
2012*b1cdbd2cSJim Jagielski 			pOut->SetFillColor( Imp()->GetRetoucheColor() );
2013*b1cdbd2cSJim Jagielski             pOut->SetLineColor();
2014*b1cdbd2cSJim Jagielski 			pOut->DrawRect( rRect );
2015*b1cdbd2cSJim Jagielski 			pOut->Pop();
2016*b1cdbd2cSJim Jagielski 
2017*b1cdbd2cSJim Jagielski 			// #i68597#
2018*b1cdbd2cSJim Jagielski 			DLPostPaint2(true);
2019*b1cdbd2cSJim Jagielski 		}
2020*b1cdbd2cSJim Jagielski 	}
2021*b1cdbd2cSJim Jagielski }
2022*b1cdbd2cSJim Jagielski 
2023*b1cdbd2cSJim Jagielski /******************************************************************************
2024*b1cdbd2cSJim Jagielski |*
2025*b1cdbd2cSJim Jagielski |*	ViewShell::SetBrowseBorder()
2026*b1cdbd2cSJim Jagielski |*
2027*b1cdbd2cSJim Jagielski |*	Ersterstellung		AMA 20. Aug. 96
2028*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	AMA 20. Aug. 96
2029*b1cdbd2cSJim Jagielski |*
2030*b1cdbd2cSJim Jagielski ******************************************************************************/
2031*b1cdbd2cSJim Jagielski 
SetBrowseBorder(const Size & rNew)2032*b1cdbd2cSJim Jagielski void ViewShell::SetBrowseBorder( const Size& rNew )
2033*b1cdbd2cSJim Jagielski {
2034*b1cdbd2cSJim Jagielski 	if( rNew != aBrowseBorder )
2035*b1cdbd2cSJim Jagielski 	{
2036*b1cdbd2cSJim Jagielski 		aBrowseBorder = rNew;
2037*b1cdbd2cSJim Jagielski 		if ( aVisArea.HasArea() )
2038*b1cdbd2cSJim Jagielski 			CheckBrowseView( sal_False );
2039*b1cdbd2cSJim Jagielski 	}
2040*b1cdbd2cSJim Jagielski }
2041*b1cdbd2cSJim Jagielski 
GetBrowseBorder() const2042*b1cdbd2cSJim Jagielski const Size& ViewShell::GetBrowseBorder() const
2043*b1cdbd2cSJim Jagielski {
2044*b1cdbd2cSJim Jagielski 	return aBrowseBorder;
2045*b1cdbd2cSJim Jagielski }
2046*b1cdbd2cSJim Jagielski 
GetBrowseWidth() const2047*b1cdbd2cSJim Jagielski sal_Int32 ViewShell::GetBrowseWidth() const
2048*b1cdbd2cSJim Jagielski {
2049*b1cdbd2cSJim Jagielski     const SwPostItMgr* pPostItMgr = GetPostItMgr();
2050*b1cdbd2cSJim Jagielski 	if ( pPostItMgr && pPostItMgr->HasNotes() && pPostItMgr->ShowNotes() )
2051*b1cdbd2cSJim Jagielski 	{
2052*b1cdbd2cSJim Jagielski 		Size aBorder( aBrowseBorder );
2053*b1cdbd2cSJim Jagielski 		aBorder.Width() += aBrowseBorder.Width();
2054*b1cdbd2cSJim Jagielski 		aBorder.Width() += pPostItMgr->GetSidebarWidth(true) + pPostItMgr->GetSidebarBorderWidth(true);
2055*b1cdbd2cSJim Jagielski 		return aVisArea.Width() - GetOut()->PixelToLogic(aBorder).Width();
2056*b1cdbd2cSJim Jagielski 	}
2057*b1cdbd2cSJim Jagielski 	else
2058*b1cdbd2cSJim Jagielski 		return aVisArea.Width() - 2 * GetOut()->PixelToLogic(aBrowseBorder).Width();
2059*b1cdbd2cSJim Jagielski }
2060*b1cdbd2cSJim Jagielski 
2061*b1cdbd2cSJim Jagielski /******************************************************************************
2062*b1cdbd2cSJim Jagielski |*
2063*b1cdbd2cSJim Jagielski |*	ViewShell::CheckBrowseView()
2064*b1cdbd2cSJim Jagielski |*
2065*b1cdbd2cSJim Jagielski |*	Ersterstellung		MA 04. Mar. 96
2066*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	MA 04. Jul. 96
2067*b1cdbd2cSJim Jagielski |*
2068*b1cdbd2cSJim Jagielski ******************************************************************************/
2069*b1cdbd2cSJim Jagielski 
CheckBrowseView(sal_Bool bBrowseChgd)2070*b1cdbd2cSJim Jagielski void ViewShell::CheckBrowseView( sal_Bool bBrowseChgd )
2071*b1cdbd2cSJim Jagielski {
2072*b1cdbd2cSJim Jagielski     if ( !bBrowseChgd && !GetViewOptions()->getBrowseMode() )
2073*b1cdbd2cSJim Jagielski 		return;
2074*b1cdbd2cSJim Jagielski 
2075*b1cdbd2cSJim Jagielski 	SET_CURR_SHELL( this );
2076*b1cdbd2cSJim Jagielski 
2077*b1cdbd2cSJim Jagielski 	ASSERT( GetLayout(), "Layout not ready" );
2078*b1cdbd2cSJim Jagielski 
2079*b1cdbd2cSJim Jagielski 	// Wenn das Layout noch nicht einmal eine Hoehe hat,
2080*b1cdbd2cSJim Jagielski 	// ist sowieso nichts formatiert.
2081*b1cdbd2cSJim Jagielski 	// Dann eruebrigt sich die Invalidierung
2082*b1cdbd2cSJim Jagielski 	// Falsch, z.B. beim Anlegen einer neuen View wird der Inhalt eingef?gt
2083*b1cdbd2cSJim Jagielski 	// und formatiert (trotz einer leeren VisArea). Hier muessen deshalb
2084*b1cdbd2cSJim Jagielski 	// die Seiten zur Formatierung angeregt werden.
2085*b1cdbd2cSJim Jagielski 	if( !GetLayout()->Frm().Height() )
2086*b1cdbd2cSJim Jagielski 	{
2087*b1cdbd2cSJim Jagielski 		SwFrm* pPage = GetLayout()->Lower();
2088*b1cdbd2cSJim Jagielski 		while( pPage )
2089*b1cdbd2cSJim Jagielski 		{
2090*b1cdbd2cSJim Jagielski 			pPage->_InvalidateSize();
2091*b1cdbd2cSJim Jagielski 			pPage = pPage->GetNext();
2092*b1cdbd2cSJim Jagielski 		}
2093*b1cdbd2cSJim Jagielski 		return;
2094*b1cdbd2cSJim Jagielski 	}
2095*b1cdbd2cSJim Jagielski 
2096*b1cdbd2cSJim Jagielski     LockPaint();
2097*b1cdbd2cSJim Jagielski 	StartAction();
2098*b1cdbd2cSJim Jagielski 
2099*b1cdbd2cSJim Jagielski 	SwPageFrm *pPg = (SwPageFrm*)GetLayout()->Lower();
2100*b1cdbd2cSJim Jagielski 	do
2101*b1cdbd2cSJim Jagielski 	{	pPg->InvalidateSize();
2102*b1cdbd2cSJim Jagielski 		pPg->_InvalidatePrt();
2103*b1cdbd2cSJim Jagielski 		pPg->InvaPercentLowers();
2104*b1cdbd2cSJim Jagielski 		if ( bBrowseChgd )
2105*b1cdbd2cSJim Jagielski 		{
2106*b1cdbd2cSJim Jagielski 			pPg->PrepareHeader();
2107*b1cdbd2cSJim Jagielski 			pPg->PrepareFooter();
2108*b1cdbd2cSJim Jagielski 		}
2109*b1cdbd2cSJim Jagielski 		pPg = (SwPageFrm*)pPg->GetNext();
2110*b1cdbd2cSJim Jagielski 	} while ( pPg );
2111*b1cdbd2cSJim Jagielski 
2112*b1cdbd2cSJim Jagielski 	// Wenn sich die Groessenverhaeltnise im BrowseModus aendern,
2113*b1cdbd2cSJim Jagielski 	// muss die Position und PrtArea der Cntnt- und Tab-Frames invalidiert werden.
2114*b1cdbd2cSJim Jagielski 	sal_uInt8 nInv = INV_PRTAREA | INV_TABLE | INV_POS;
2115*b1cdbd2cSJim Jagielski 	// Beim BrowseModus-Wechsel benoetigen die CntntFrms
2116*b1cdbd2cSJim Jagielski 	// wg. der Drucker/Bildschirmformatierung eine Size-Invalidierung
2117*b1cdbd2cSJim Jagielski 	if( bBrowseChgd )
2118*b1cdbd2cSJim Jagielski         nInv |= INV_SIZE | INV_DIRECTION;
2119*b1cdbd2cSJim Jagielski 
2120*b1cdbd2cSJim Jagielski 	GetLayout()->InvalidateAllCntnt( nInv );
2121*b1cdbd2cSJim Jagielski 
2122*b1cdbd2cSJim Jagielski 	SwFrm::CheckPageDescs( (SwPageFrm*)GetLayout()->Lower() );
2123*b1cdbd2cSJim Jagielski 
2124*b1cdbd2cSJim Jagielski 	EndAction();
2125*b1cdbd2cSJim Jagielski 	UnlockPaint();
2126*b1cdbd2cSJim Jagielski }
2127*b1cdbd2cSJim Jagielski 
2128*b1cdbd2cSJim Jagielski /*************************************************************************
2129*b1cdbd2cSJim Jagielski |*
2130*b1cdbd2cSJim Jagielski |* 	  ViewShell::GetLayout()
2131*b1cdbd2cSJim Jagielski |*	  ViewShell::GetNodes()
2132*b1cdbd2cSJim Jagielski |*
2133*b1cdbd2cSJim Jagielski |*	  Ersterstellung	OK 26. May. 92
2134*b1cdbd2cSJim Jagielski |*	  Letzte Aenderung	MA 16. Sep. 93
2135*b1cdbd2cSJim Jagielski |*
2136*b1cdbd2cSJim Jagielski *************************************************************************/
2137*b1cdbd2cSJim Jagielski 
GetLayout() const2138*b1cdbd2cSJim Jagielski SwRootFrm *ViewShell::GetLayout() const
2139*b1cdbd2cSJim Jagielski {
2140*b1cdbd2cSJim Jagielski 	return pLayout.get();	//swmod 080116
2141*b1cdbd2cSJim Jagielski }
2142*b1cdbd2cSJim Jagielski /***********************************************************************/
2143*b1cdbd2cSJim Jagielski 
GetRefDev() const2144*b1cdbd2cSJim Jagielski OutputDevice& ViewShell::GetRefDev() const
2145*b1cdbd2cSJim Jagielski {
2146*b1cdbd2cSJim Jagielski     OutputDevice* pTmpOut = 0;
2147*b1cdbd2cSJim Jagielski     if (  GetWin() &&
2148*b1cdbd2cSJim Jagielski           GetViewOptions()->getBrowseMode() &&
2149*b1cdbd2cSJim Jagielski          !GetViewOptions()->IsPrtFormat() )
2150*b1cdbd2cSJim Jagielski         pTmpOut = GetWin();
2151*b1cdbd2cSJim Jagielski     else if ( 0 != mpTmpRef )
2152*b1cdbd2cSJim Jagielski         pTmpOut = mpTmpRef;
2153*b1cdbd2cSJim Jagielski     else
2154*b1cdbd2cSJim Jagielski         pTmpOut = GetDoc()->getReferenceDevice( true );
2155*b1cdbd2cSJim Jagielski 
2156*b1cdbd2cSJim Jagielski     return *pTmpOut;
2157*b1cdbd2cSJim Jagielski }
2158*b1cdbd2cSJim Jagielski 
GetNodes() const2159*b1cdbd2cSJim Jagielski const SwNodes& ViewShell::GetNodes() const
2160*b1cdbd2cSJim Jagielski {
2161*b1cdbd2cSJim Jagielski     return pDoc->GetNodes();
2162*b1cdbd2cSJim Jagielski }
2163*b1cdbd2cSJim Jagielski 
2164*b1cdbd2cSJim Jagielski 
DrawSelChanged()2165*b1cdbd2cSJim Jagielski void ViewShell::DrawSelChanged()
2166*b1cdbd2cSJim Jagielski {
2167*b1cdbd2cSJim Jagielski }
2168*b1cdbd2cSJim Jagielski 
2169*b1cdbd2cSJim Jagielski 
GetDocSize() const2170*b1cdbd2cSJim Jagielski Size ViewShell::GetDocSize() const
2171*b1cdbd2cSJim Jagielski {
2172*b1cdbd2cSJim Jagielski 	Size aSz;
2173*b1cdbd2cSJim Jagielski 	const SwRootFrm* pRoot = GetLayout();
2174*b1cdbd2cSJim Jagielski 	if( pRoot )
2175*b1cdbd2cSJim Jagielski 		aSz = pRoot->Frm().SSize();
2176*b1cdbd2cSJim Jagielski 
2177*b1cdbd2cSJim Jagielski 	return aSz;
2178*b1cdbd2cSJim Jagielski }
2179*b1cdbd2cSJim Jagielski 
2180*b1cdbd2cSJim Jagielski 
GetAttrPool()2181*b1cdbd2cSJim Jagielski SfxItemPool& ViewShell::GetAttrPool()
2182*b1cdbd2cSJim Jagielski {
2183*b1cdbd2cSJim Jagielski 	return GetDoc()->GetAttrPool();
2184*b1cdbd2cSJim Jagielski }
2185*b1cdbd2cSJim Jagielski 
2186*b1cdbd2cSJim Jagielski /******************************************************************************
2187*b1cdbd2cSJim Jagielski |*
2188*b1cdbd2cSJim Jagielski |*	ViewShell::ApplyViewOptions(), ImplApplyViewOptions()
2189*b1cdbd2cSJim Jagielski |*
2190*b1cdbd2cSJim Jagielski |*	Ersterstellung		??
2191*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	MA 03. Mar. 98
2192*b1cdbd2cSJim Jagielski |*
2193*b1cdbd2cSJim Jagielski ******************************************************************************/
2194*b1cdbd2cSJim Jagielski 
ApplyViewOptions(const SwViewOption & rOpt)2195*b1cdbd2cSJim Jagielski void ViewShell::ApplyViewOptions( const SwViewOption &rOpt )
2196*b1cdbd2cSJim Jagielski {
2197*b1cdbd2cSJim Jagielski 
2198*b1cdbd2cSJim Jagielski 	ViewShell *pSh = this;
2199*b1cdbd2cSJim Jagielski 	do
2200*b1cdbd2cSJim Jagielski 	{	pSh->StartAction();
2201*b1cdbd2cSJim Jagielski 		pSh = (ViewShell*)pSh->GetNext();
2202*b1cdbd2cSJim Jagielski 	} while ( pSh != this );
2203*b1cdbd2cSJim Jagielski 
2204*b1cdbd2cSJim Jagielski 	ImplApplyViewOptions( rOpt );
2205*b1cdbd2cSJim Jagielski 
2206*b1cdbd2cSJim Jagielski     // swmod 080115
2207*b1cdbd2cSJim Jagielski 	// With one layout per view it is not longer necessary
2208*b1cdbd2cSJim Jagielski     // to sync these "layout related" view options
2209*b1cdbd2cSJim Jagielski     // But as long as we have to disable "multiple layout"
2210*b1cdbd2cSJim Jagielski 	pSh = (ViewShell*)this->GetNext();
2211*b1cdbd2cSJim Jagielski 	while ( pSh != this )
2212*b1cdbd2cSJim Jagielski 	{
2213*b1cdbd2cSJim Jagielski 		SwViewOption aOpt( *pSh->GetViewOptions() );
2214*b1cdbd2cSJim Jagielski 		aOpt.SetFldName( rOpt.IsFldName() );
2215*b1cdbd2cSJim Jagielski         	aOpt.SetShowHiddenField( rOpt.IsShowHiddenField() );
2216*b1cdbd2cSJim Jagielski 		aOpt.SetShowHiddenPara( rOpt.IsShowHiddenPara() );
2217*b1cdbd2cSJim Jagielski         	aOpt.SetShowHiddenChar( rOpt.IsShowHiddenChar() );
2218*b1cdbd2cSJim Jagielski         	aOpt.SetViewLayoutBookMode( rOpt.IsViewLayoutBookMode() );
2219*b1cdbd2cSJim Jagielski         	aOpt.SetViewLayoutColumns( rOpt.GetViewLayoutColumns() );
2220*b1cdbd2cSJim Jagielski 		aOpt.SetPostIts(rOpt.IsPostIts());
2221*b1cdbd2cSJim Jagielski 		if ( !(aOpt == *pSh->GetViewOptions()) )
2222*b1cdbd2cSJim Jagielski 			pSh->ImplApplyViewOptions( aOpt );
2223*b1cdbd2cSJim Jagielski 		pSh = (ViewShell*)pSh->GetNext();
2224*b1cdbd2cSJim Jagielski 	}
2225*b1cdbd2cSJim Jagielski     // End of disabled multiple window
2226*b1cdbd2cSJim Jagielski 
2227*b1cdbd2cSJim Jagielski 	pSh = this;
2228*b1cdbd2cSJim Jagielski 	do
2229*b1cdbd2cSJim Jagielski 	{	pSh->EndAction();
2230*b1cdbd2cSJim Jagielski 		pSh = (ViewShell*)pSh->GetNext();
2231*b1cdbd2cSJim Jagielski 	} while ( pSh != this );
2232*b1cdbd2cSJim Jagielski 
2233*b1cdbd2cSJim Jagielski }
2234*b1cdbd2cSJim Jagielski 
ImplApplyViewOptions(const SwViewOption & rOpt)2235*b1cdbd2cSJim Jagielski void ViewShell::ImplApplyViewOptions( const SwViewOption &rOpt )
2236*b1cdbd2cSJim Jagielski {
2237*b1cdbd2cSJim Jagielski     if (*pOpt == rOpt)
2238*b1cdbd2cSJim Jagielski         return;
2239*b1cdbd2cSJim Jagielski 
2240*b1cdbd2cSJim Jagielski     Window *pMyWin = GetWin();
2241*b1cdbd2cSJim Jagielski     if( !pMyWin )
2242*b1cdbd2cSJim Jagielski 	{
2243*b1cdbd2cSJim Jagielski         ASSERT( pMyWin, "ViewShell::ApplyViewOptions: no window" );
2244*b1cdbd2cSJim Jagielski 		return;
2245*b1cdbd2cSJim Jagielski 	}
2246*b1cdbd2cSJim Jagielski 
2247*b1cdbd2cSJim Jagielski 	SET_CURR_SHELL( this );
2248*b1cdbd2cSJim Jagielski 
2249*b1cdbd2cSJim Jagielski 	sal_Bool bReformat	 = sal_False;
2250*b1cdbd2cSJim Jagielski 
2251*b1cdbd2cSJim Jagielski     if( pOpt->IsShowHiddenField() != rOpt.IsShowHiddenField() )
2252*b1cdbd2cSJim Jagielski 	{
2253*b1cdbd2cSJim Jagielski 		((SwHiddenTxtFieldType*)pDoc->GetSysFldType( RES_HIDDENTXTFLD ))->
2254*b1cdbd2cSJim Jagielski                                             SetHiddenFlag( !rOpt.IsShowHiddenField() );
2255*b1cdbd2cSJim Jagielski 		bReformat = sal_True;
2256*b1cdbd2cSJim Jagielski 	}
2257*b1cdbd2cSJim Jagielski     if ( pOpt->IsShowHiddenPara() != rOpt.IsShowHiddenPara() )
2258*b1cdbd2cSJim Jagielski 	{
2259*b1cdbd2cSJim Jagielski 		SwHiddenParaFieldType* pFldType = (SwHiddenParaFieldType*)GetDoc()->
2260*b1cdbd2cSJim Jagielski 										  GetSysFldType(RES_HIDDENPARAFLD);
2261*b1cdbd2cSJim Jagielski 		if( pFldType && pFldType->GetDepends() )
2262*b1cdbd2cSJim Jagielski 		{
2263*b1cdbd2cSJim Jagielski 			SwMsgPoolItem aHnt( RES_HIDDENPARA_PRINT );
2264*b1cdbd2cSJim Jagielski 			pFldType->ModifyNotification( &aHnt, 0);
2265*b1cdbd2cSJim Jagielski 		}
2266*b1cdbd2cSJim Jagielski 		bReformat = sal_True;
2267*b1cdbd2cSJim Jagielski 	}
2268*b1cdbd2cSJim Jagielski     if ( !bReformat && pOpt->IsShowHiddenChar() != rOpt.IsShowHiddenChar() )
2269*b1cdbd2cSJim Jagielski     {
2270*b1cdbd2cSJim Jagielski         bReformat = GetDoc()->ContainsHiddenChars();
2271*b1cdbd2cSJim Jagielski     }
2272*b1cdbd2cSJim Jagielski 
2273*b1cdbd2cSJim Jagielski 	// bReformat wird sal_True, wenn ...
2274*b1cdbd2cSJim Jagielski 	// - Feldnamen anzeigen oder nicht ...
2275*b1cdbd2cSJim Jagielski 	// ( - SwEndPortion muessen _nicht_ mehr generiert werden. )
2276*b1cdbd2cSJim Jagielski 	// - Das Window ist natuerlich was ganz anderes als der Drucker...
2277*b1cdbd2cSJim Jagielski     bReformat = bReformat || pOpt->IsFldName() != rOpt.IsFldName();
2278*b1cdbd2cSJim Jagielski 
2279*b1cdbd2cSJim Jagielski 	// Der Mapmode wird veraendert, Minima/Maxima werden von der UI beachtet
2280*b1cdbd2cSJim Jagielski 	if( pOpt->GetZoom() != rOpt.GetZoom() && !IsPreView() )
2281*b1cdbd2cSJim Jagielski 	{
2282*b1cdbd2cSJim Jagielski         MapMode aMode( pMyWin->GetMapMode() );
2283*b1cdbd2cSJim Jagielski 		Fraction aNewFactor( rOpt.GetZoom(), 100 );
2284*b1cdbd2cSJim Jagielski 		aMode.SetScaleX( aNewFactor );
2285*b1cdbd2cSJim Jagielski 		aMode.SetScaleY( aNewFactor );
2286*b1cdbd2cSJim Jagielski         pMyWin->SetMapMode( aMode );
2287*b1cdbd2cSJim Jagielski 		// Wenn kein ReferenzDevice (Drucker) zum Formatieren benutzt wird,
2288*b1cdbd2cSJim Jagielski 		// sondern der Bildschirm, muss bei Zoomfaktoraenderung neu formatiert
2289*b1cdbd2cSJim Jagielski 		// werden.
2290*b1cdbd2cSJim Jagielski         if( pOpt->getBrowseMode() )
2291*b1cdbd2cSJim Jagielski 			bReformat = sal_True;
2292*b1cdbd2cSJim Jagielski     }
2293*b1cdbd2cSJim Jagielski 
2294*b1cdbd2cSJim Jagielski     bool bBrowseModeChanged = false;
2295*b1cdbd2cSJim Jagielski     if( pOpt->getBrowseMode() != rOpt.getBrowseMode() )
2296*b1cdbd2cSJim Jagielski     {
2297*b1cdbd2cSJim Jagielski         bBrowseModeChanged = true;
2298*b1cdbd2cSJim Jagielski         bReformat = sal_True;
2299*b1cdbd2cSJim Jagielski     }
2300*b1cdbd2cSJim Jagielski     else if( pOpt->getBrowseMode() && pOpt->IsPrtFormat() != rOpt.IsPrtFormat() )
2301*b1cdbd2cSJim Jagielski         bReformat = sal_True;
2302*b1cdbd2cSJim Jagielski 
2303*b1cdbd2cSJim Jagielski 	if ( HasDrawView() || rOpt.IsGridVisible() )
2304*b1cdbd2cSJim Jagielski 	{
2305*b1cdbd2cSJim Jagielski 		if ( !HasDrawView() )
2306*b1cdbd2cSJim Jagielski 			MakeDrawView();
2307*b1cdbd2cSJim Jagielski 
2308*b1cdbd2cSJim Jagielski 		SwDrawView *pDView = Imp()->GetDrawView();
2309*b1cdbd2cSJim Jagielski 		if ( pDView->IsDragStripes() != rOpt.IsCrossHair() )
2310*b1cdbd2cSJim Jagielski 			pDView->SetDragStripes( rOpt.IsCrossHair() );
2311*b1cdbd2cSJim Jagielski 
2312*b1cdbd2cSJim Jagielski 		if ( pDView->IsGridSnap() != rOpt.IsSnap() )
2313*b1cdbd2cSJim Jagielski 			pDView->SetGridSnap( rOpt.IsSnap() );
2314*b1cdbd2cSJim Jagielski 
2315*b1cdbd2cSJim Jagielski 		if ( pDView->IsGridVisible() != rOpt.IsGridVisible() )
2316*b1cdbd2cSJim Jagielski 			pDView->SetGridVisible( rOpt.IsGridVisible() );
2317*b1cdbd2cSJim Jagielski 
2318*b1cdbd2cSJim Jagielski 		const Size &rSz = rOpt.GetSnapSize();
2319*b1cdbd2cSJim Jagielski 		pDView->SetGridCoarse( rSz );
2320*b1cdbd2cSJim Jagielski 
2321*b1cdbd2cSJim Jagielski 		const Size aFSize
2322*b1cdbd2cSJim Jagielski 			( rSz.Width() ? rSz.Width() / (rOpt.GetDivisionX()+1) : 0,
2323*b1cdbd2cSJim Jagielski 			  rSz.Height()? rSz.Height()/ (rOpt.GetDivisionY()+1) : 0);
2324*b1cdbd2cSJim Jagielski 		pDView->SetGridFine( aFSize );
2325*b1cdbd2cSJim Jagielski 		Fraction aSnGrWdtX(rSz.Width(), rOpt.GetDivisionX() + 1);
2326*b1cdbd2cSJim Jagielski 		Fraction aSnGrWdtY(rSz.Height(), rOpt.GetDivisionY() + 1);
2327*b1cdbd2cSJim Jagielski 		pDView->SetSnapGridWidth( aSnGrWdtX, aSnGrWdtY );
2328*b1cdbd2cSJim Jagielski 
2329*b1cdbd2cSJim Jagielski 		if ( pOpt->IsSolidMarkHdl() != rOpt.IsSolidMarkHdl() )
2330*b1cdbd2cSJim Jagielski 			pDView->SetSolidMarkHdl( rOpt.IsSolidMarkHdl() );
2331*b1cdbd2cSJim Jagielski 
2332*b1cdbd2cSJim Jagielski 			// it's a JOE interface !
2333*b1cdbd2cSJim Jagielski 		if ( pOpt->IsBigMarkHdl() != rOpt.IsBigMarkHdl() )
2334*b1cdbd2cSJim Jagielski 			pDView->SetMarkHdlSizePixel(rOpt.IsBigMarkHdl() ? 9 : 7);
2335*b1cdbd2cSJim Jagielski 	}
2336*b1cdbd2cSJim Jagielski 
2337*b1cdbd2cSJim Jagielski 	sal_Bool bOnlineSpellChgd = pOpt->IsOnlineSpell() != rOpt.IsOnlineSpell();
2338*b1cdbd2cSJim Jagielski 
2339*b1cdbd2cSJim Jagielski 	*pOpt = rOpt;	// Erst jetzt werden die Options uebernommen.
2340*b1cdbd2cSJim Jagielski 	pOpt->SetUIOptions(rOpt);
2341*b1cdbd2cSJim Jagielski 
2342*b1cdbd2cSJim Jagielski 	pDoc->set(IDocumentSettingAccess::HTML_MODE, 0 != ::GetHtmlMode(pDoc->GetDocShell()));
2343*b1cdbd2cSJim Jagielski 
2344*b1cdbd2cSJim Jagielski     if( bBrowseModeChanged )
2345*b1cdbd2cSJim Jagielski     {
2346*b1cdbd2cSJim Jagielski         // --> FME 2005-03-16 #i44963# Good occasion to check if page sizes in
2347*b1cdbd2cSJim Jagielski         // page descriptions are still set to (LONG_MAX, LONG_MAX) (html import)
2348*b1cdbd2cSJim Jagielski         pDoc->CheckDefaultPageFmt();
2349*b1cdbd2cSJim Jagielski         // <--
2350*b1cdbd2cSJim Jagielski         CheckBrowseView( sal_True );
2351*b1cdbd2cSJim Jagielski     }
2352*b1cdbd2cSJim Jagielski 
2353*b1cdbd2cSJim Jagielski     pMyWin->Invalidate();
2354*b1cdbd2cSJim Jagielski 	if ( bReformat )
2355*b1cdbd2cSJim Jagielski 	{
2356*b1cdbd2cSJim Jagielski 		// Es hilft alles nichts, wir muessen an alle CntntFrms ein
2357*b1cdbd2cSJim Jagielski 		// Prepare verschicken, wir formatieren neu:
2358*b1cdbd2cSJim Jagielski 		StartAction();
2359*b1cdbd2cSJim Jagielski 		Reformat();
2360*b1cdbd2cSJim Jagielski 		EndAction();
2361*b1cdbd2cSJim Jagielski 	}
2362*b1cdbd2cSJim Jagielski 
2363*b1cdbd2cSJim Jagielski 	if( bOnlineSpellChgd )
2364*b1cdbd2cSJim Jagielski 	{
2365*b1cdbd2cSJim Jagielski 		ViewShell *pSh = (ViewShell*)this->GetNext();
2366*b1cdbd2cSJim Jagielski 		sal_Bool bOnlineSpl = rOpt.IsOnlineSpell();
2367*b1cdbd2cSJim Jagielski 		while( pSh != this )
2368*b1cdbd2cSJim Jagielski 		{	pSh->pOpt->SetOnlineSpell( bOnlineSpl );
2369*b1cdbd2cSJim Jagielski 			Window *pTmpWin = pSh->GetWin();
2370*b1cdbd2cSJim Jagielski 			if( pTmpWin )
2371*b1cdbd2cSJim Jagielski 				pTmpWin->Invalidate();
2372*b1cdbd2cSJim Jagielski 			pSh = (ViewShell*)pSh->GetNext();
2373*b1cdbd2cSJim Jagielski 		}
2374*b1cdbd2cSJim Jagielski 	}
2375*b1cdbd2cSJim Jagielski 
2376*b1cdbd2cSJim Jagielski }
2377*b1cdbd2cSJim Jagielski 
2378*b1cdbd2cSJim Jagielski /******************************************************************************
2379*b1cdbd2cSJim Jagielski |*
2380*b1cdbd2cSJim Jagielski |*	ViewShell::SetUIOptions()
2381*b1cdbd2cSJim Jagielski |*
2382*b1cdbd2cSJim Jagielski |*	Ersterstellung		OS 29.07.96
2383*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	OS 29.07.96
2384*b1cdbd2cSJim Jagielski |*
2385*b1cdbd2cSJim Jagielski ******************************************************************************/
2386*b1cdbd2cSJim Jagielski 
SetUIOptions(const SwViewOption & rOpt)2387*b1cdbd2cSJim Jagielski void ViewShell::SetUIOptions( const SwViewOption &rOpt )
2388*b1cdbd2cSJim Jagielski {
2389*b1cdbd2cSJim Jagielski 	pOpt->SetUIOptions(rOpt);
2390*b1cdbd2cSJim Jagielski 	//the API-Flag of the view options is set but never reset
2391*b1cdbd2cSJim Jagielski 	//it is required to set scroll bars in readonly documents
2392*b1cdbd2cSJim Jagielski 	if(rOpt.IsStarOneSetting())
2393*b1cdbd2cSJim Jagielski 		pOpt->SetStarOneSetting(sal_True);
2394*b1cdbd2cSJim Jagielski 
2395*b1cdbd2cSJim Jagielski 	pOpt->SetSymbolFont(rOpt.GetSymbolFont());
2396*b1cdbd2cSJim Jagielski }
2397*b1cdbd2cSJim Jagielski 
2398*b1cdbd2cSJim Jagielski /******************************************************************************
2399*b1cdbd2cSJim Jagielski |*
2400*b1cdbd2cSJim Jagielski |*	ViewShell::SetReadonly()
2401*b1cdbd2cSJim Jagielski |*
2402*b1cdbd2cSJim Jagielski |*	Ersterstellung		OS 05.09.96
2403*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	MA 12. Feb. 97
2404*b1cdbd2cSJim Jagielski |*
2405*b1cdbd2cSJim Jagielski ******************************************************************************/
2406*b1cdbd2cSJim Jagielski 
SetReadonlyOption(sal_Bool bSet)2407*b1cdbd2cSJim Jagielski void ViewShell::SetReadonlyOption(sal_Bool bSet)
2408*b1cdbd2cSJim Jagielski {
2409*b1cdbd2cSJim Jagielski 	//JP 01.02.99: bei ReadOnly Flag richtig abfragen und ggfs. neu
2410*b1cdbd2cSJim Jagielski 	//				formatieren; Bug 61335
2411*b1cdbd2cSJim Jagielski 
2412*b1cdbd2cSJim Jagielski 	// Schalten wir gerade von Readonly auf Bearbeiten um?
2413*b1cdbd2cSJim Jagielski 	if( bSet != pOpt->IsReadonly() )
2414*b1cdbd2cSJim Jagielski 	{
2415*b1cdbd2cSJim Jagielski 		// damit die Flags richtig erfragt werden koennen.
2416*b1cdbd2cSJim Jagielski 		pOpt->SetReadonly( sal_False );
2417*b1cdbd2cSJim Jagielski 
2418*b1cdbd2cSJim Jagielski 		sal_Bool bReformat = pOpt->IsFldName();
2419*b1cdbd2cSJim Jagielski 
2420*b1cdbd2cSJim Jagielski 		pOpt->SetReadonly( bSet );
2421*b1cdbd2cSJim Jagielski 
2422*b1cdbd2cSJim Jagielski 		if( bReformat )
2423*b1cdbd2cSJim Jagielski 		{
2424*b1cdbd2cSJim Jagielski 			StartAction();
2425*b1cdbd2cSJim Jagielski 			Reformat();
2426*b1cdbd2cSJim Jagielski 			if ( GetWin() )
2427*b1cdbd2cSJim Jagielski 				GetWin()->Invalidate();
2428*b1cdbd2cSJim Jagielski 			EndAction();
2429*b1cdbd2cSJim Jagielski 		}
2430*b1cdbd2cSJim Jagielski 		else if ( GetWin() )
2431*b1cdbd2cSJim Jagielski 			GetWin()->Invalidate();
2432*b1cdbd2cSJim Jagielski 		if( Imp()->IsAccessible() )
2433*b1cdbd2cSJim Jagielski 			Imp()->InvalidateAccessibleEditableState( sal_False );
2434*b1cdbd2cSJim Jagielski 	}
2435*b1cdbd2cSJim Jagielski }
2436*b1cdbd2cSJim Jagielski /* -----------------28.08.2003 15:45-----------------
2437*b1cdbd2cSJim Jagielski 
2438*b1cdbd2cSJim Jagielski  --------------------------------------------------*/
SetPDFExportOption(sal_Bool bSet)2439*b1cdbd2cSJim Jagielski void  ViewShell::SetPDFExportOption(sal_Bool bSet)
2440*b1cdbd2cSJim Jagielski {
2441*b1cdbd2cSJim Jagielski     if( bSet != pOpt->IsPDFExport() )
2442*b1cdbd2cSJim Jagielski     {
2443*b1cdbd2cSJim Jagielski         if( bSet && pOpt->getBrowseMode() )
2444*b1cdbd2cSJim Jagielski             pOpt->SetPrtFormat( sal_True );
2445*b1cdbd2cSJim Jagielski         pOpt->SetPDFExport(bSet);
2446*b1cdbd2cSJim Jagielski     }
2447*b1cdbd2cSJim Jagielski }
2448*b1cdbd2cSJim Jagielski /* -----------------------------2002/07/31 17:06------------------------------
2449*b1cdbd2cSJim Jagielski 
2450*b1cdbd2cSJim Jagielski  ---------------------------------------------------------------------------*/
SetReadonlySelectionOption(sal_Bool bSet)2451*b1cdbd2cSJim Jagielski void  ViewShell::SetReadonlySelectionOption(sal_Bool bSet)
2452*b1cdbd2cSJim Jagielski {
2453*b1cdbd2cSJim Jagielski     if( bSet != pOpt->IsSelectionInReadonly() )
2454*b1cdbd2cSJim Jagielski     {
2455*b1cdbd2cSJim Jagielski         pOpt->SetSelectionInReadonly(bSet);
2456*b1cdbd2cSJim Jagielski     }
2457*b1cdbd2cSJim Jagielski }
2458*b1cdbd2cSJim Jagielski /******************************************************************************
2459*b1cdbd2cSJim Jagielski |*
2460*b1cdbd2cSJim Jagielski |*	ViewShell::SetPrtFormatOption()
2461*b1cdbd2cSJim Jagielski |*
2462*b1cdbd2cSJim Jagielski |*	Ersterstellung		AMA 10. Sep. 97
2463*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	AMA 10. Sep. 97
2464*b1cdbd2cSJim Jagielski |*
2465*b1cdbd2cSJim Jagielski ******************************************************************************/
2466*b1cdbd2cSJim Jagielski 
SetPrtFormatOption(sal_Bool bSet)2467*b1cdbd2cSJim Jagielski void ViewShell::SetPrtFormatOption( sal_Bool bSet )
2468*b1cdbd2cSJim Jagielski {
2469*b1cdbd2cSJim Jagielski 	pOpt->SetPrtFormat( bSet );
2470*b1cdbd2cSJim Jagielski }
2471*b1cdbd2cSJim Jagielski 
2472*b1cdbd2cSJim Jagielski /******************************************************************************
2473*b1cdbd2cSJim Jagielski |*
2474*b1cdbd2cSJim Jagielski |*	ViewShell::UISizeNotify()
2475*b1cdbd2cSJim Jagielski |*
2476*b1cdbd2cSJim Jagielski |*	Ersterstellung		MA 14. Jan. 97
2477*b1cdbd2cSJim Jagielski |*	Letzte Aenderung	MA 14. Jan. 97
2478*b1cdbd2cSJim Jagielski |*
2479*b1cdbd2cSJim Jagielski ******************************************************************************/
2480*b1cdbd2cSJim Jagielski 
2481*b1cdbd2cSJim Jagielski 
UISizeNotify()2482*b1cdbd2cSJim Jagielski void ViewShell::UISizeNotify()
2483*b1cdbd2cSJim Jagielski {
2484*b1cdbd2cSJim Jagielski 	if ( bDocSizeChgd )
2485*b1cdbd2cSJim Jagielski 	{
2486*b1cdbd2cSJim Jagielski 		bDocSizeChgd = sal_False;
2487*b1cdbd2cSJim Jagielski 		sal_Bool bOld = bInSizeNotify;
2488*b1cdbd2cSJim Jagielski 		bInSizeNotify = sal_True;
2489*b1cdbd2cSJim Jagielski 		::SizeNotify( this, GetDocSize() );
2490*b1cdbd2cSJim Jagielski 		bInSizeNotify = bOld;
2491*b1cdbd2cSJim Jagielski 	}
2492*b1cdbd2cSJim Jagielski }
2493*b1cdbd2cSJim Jagielski 
2494*b1cdbd2cSJim Jagielski 
SetRestoreActions(sal_uInt16 nSet)2495*b1cdbd2cSJim Jagielski void    ViewShell::SetRestoreActions(sal_uInt16 nSet)
2496*b1cdbd2cSJim Jagielski {
2497*b1cdbd2cSJim Jagielski 	DBG_ASSERT(!GetRestoreActions()||!nSet, "mehrfaches Restore der Actions ?");
2498*b1cdbd2cSJim Jagielski 	Imp()->SetRestoreActions(nSet);
2499*b1cdbd2cSJim Jagielski }
GetRestoreActions() const2500*b1cdbd2cSJim Jagielski sal_uInt16 	ViewShell::GetRestoreActions() const
2501*b1cdbd2cSJim Jagielski {
2502*b1cdbd2cSJim Jagielski 	return Imp()->GetRestoreActions();
2503*b1cdbd2cSJim Jagielski }
2504*b1cdbd2cSJim Jagielski 
IsNewLayout() const2505*b1cdbd2cSJim Jagielski sal_Bool ViewShell::IsNewLayout() const
2506*b1cdbd2cSJim Jagielski {
2507*b1cdbd2cSJim Jagielski 	return GetLayout()->IsNewLayout();
2508*b1cdbd2cSJim Jagielski }
2509*b1cdbd2cSJim Jagielski 
CreateAccessible()2510*b1cdbd2cSJim Jagielski uno::Reference< ::com::sun::star::accessibility::XAccessible > ViewShell::CreateAccessible()
2511*b1cdbd2cSJim Jagielski {
2512*b1cdbd2cSJim Jagielski     uno::Reference< ::com::sun::star::accessibility::XAccessible > xAcc;
2513*b1cdbd2cSJim Jagielski 
2514*b1cdbd2cSJim Jagielski 	// We require a layout and an XModel to be accessible.
2515*b1cdbd2cSJim Jagielski     ASSERT( pLayout, "no layout, no access" );
2516*b1cdbd2cSJim Jagielski 	ASSERT( GetWin(), "no window, no access" );
2517*b1cdbd2cSJim Jagielski 
2518*b1cdbd2cSJim Jagielski 	if( pDoc->GetCurrentViewShell() && GetWin() )	//swmod 071108
2519*b1cdbd2cSJim Jagielski 		xAcc = Imp()->GetAccessibleMap().GetDocumentView();
2520*b1cdbd2cSJim Jagielski 
2521*b1cdbd2cSJim Jagielski 	return xAcc;
2522*b1cdbd2cSJim Jagielski }
2523*b1cdbd2cSJim Jagielski 
2524*b1cdbd2cSJim Jagielski uno::Reference< ::com::sun::star::accessibility::XAccessible >
CreateAccessiblePreview()2525*b1cdbd2cSJim Jagielski ViewShell::CreateAccessiblePreview()
2526*b1cdbd2cSJim Jagielski {
2527*b1cdbd2cSJim Jagielski     DBG_ASSERT( IsPreView(),
2528*b1cdbd2cSJim Jagielski                 "Can't create accessible preview for non-preview ViewShell" );
2529*b1cdbd2cSJim Jagielski 
2530*b1cdbd2cSJim Jagielski 	// We require a layout and an XModel to be accessible.
2531*b1cdbd2cSJim Jagielski 	ASSERT( pLayout, "no layout, no access" );
2532*b1cdbd2cSJim Jagielski 	ASSERT( GetWin(), "no window, no access" );
2533*b1cdbd2cSJim Jagielski 
2534*b1cdbd2cSJim Jagielski     // OD 15.01.2003 #103492# - add condition <IsPreView()>
2535*b1cdbd2cSJim Jagielski     if ( IsPreView() && GetLayout()&& GetWin() )
2536*b1cdbd2cSJim Jagielski     {
2537*b1cdbd2cSJim Jagielski         // OD 14.01.2003 #103492# - adjustment for new method signature
2538*b1cdbd2cSJim Jagielski         return Imp()->GetAccessibleMap().GetDocumentPreview(
2539*b1cdbd2cSJim Jagielski                     PagePreviewLayout()->maPrevwPages,
2540*b1cdbd2cSJim Jagielski                     GetWin()->GetMapMode().GetScaleX(),
2541*b1cdbd2cSJim Jagielski                     GetLayout()->GetPageByPageNum( PagePreviewLayout()->mnSelectedPageNum ),
2542*b1cdbd2cSJim Jagielski                     PagePreviewLayout()->maWinSize );	//swmod 080305
2543*b1cdbd2cSJim Jagielski     }
2544*b1cdbd2cSJim Jagielski 	return NULL;
2545*b1cdbd2cSJim Jagielski }
2546*b1cdbd2cSJim Jagielski 
InvalidateAccessibleFocus()2547*b1cdbd2cSJim Jagielski void ViewShell::InvalidateAccessibleFocus()
2548*b1cdbd2cSJim Jagielski {
2549*b1cdbd2cSJim Jagielski 	if( Imp()->IsAccessible() )
2550*b1cdbd2cSJim Jagielski 		Imp()->GetAccessibleMap().InvalidateFocus();
2551*b1cdbd2cSJim Jagielski }
2552*b1cdbd2cSJim Jagielski 
2553*b1cdbd2cSJim Jagielski /** invalidate CONTENT_FLOWS_FROM/_TO relation for paragraphs
2554*b1cdbd2cSJim Jagielski 
2555*b1cdbd2cSJim Jagielski     OD 2005-12-01 #i27138#
2556*b1cdbd2cSJim Jagielski 
2557*b1cdbd2cSJim Jagielski     @author OD
2558*b1cdbd2cSJim Jagielski */
InvalidateAccessibleParaFlowRelation(const SwTxtFrm * _pFromTxtFrm,const SwTxtFrm * _pToTxtFrm)2559*b1cdbd2cSJim Jagielski void ViewShell::InvalidateAccessibleParaFlowRelation( const SwTxtFrm* _pFromTxtFrm,
2560*b1cdbd2cSJim Jagielski                                                       const SwTxtFrm* _pToTxtFrm )
2561*b1cdbd2cSJim Jagielski {
2562*b1cdbd2cSJim Jagielski     if ( GetLayout() && GetLayout()->IsAnyShellAccessible() )
2563*b1cdbd2cSJim Jagielski     {
2564*b1cdbd2cSJim Jagielski         Imp()->_InvalidateAccessibleParaFlowRelation( _pFromTxtFrm, _pToTxtFrm );
2565*b1cdbd2cSJim Jagielski     }
2566*b1cdbd2cSJim Jagielski }
2567*b1cdbd2cSJim Jagielski 
2568*b1cdbd2cSJim Jagielski /** invalidate text selection for paragraphs
2569*b1cdbd2cSJim Jagielski 
2570*b1cdbd2cSJim Jagielski     OD 2005-12-12 #i27301#
2571*b1cdbd2cSJim Jagielski 
2572*b1cdbd2cSJim Jagielski     @author OD
2573*b1cdbd2cSJim Jagielski */
InvalidateAccessibleParaTextSelection()2574*b1cdbd2cSJim Jagielski void ViewShell::InvalidateAccessibleParaTextSelection()
2575*b1cdbd2cSJim Jagielski {
2576*b1cdbd2cSJim Jagielski     if ( GetLayout() && GetLayout()->IsAnyShellAccessible() )
2577*b1cdbd2cSJim Jagielski     {
2578*b1cdbd2cSJim Jagielski         Imp()->_InvalidateAccessibleParaTextSelection();
2579*b1cdbd2cSJim Jagielski     }
2580*b1cdbd2cSJim Jagielski }
2581*b1cdbd2cSJim Jagielski 
2582*b1cdbd2cSJim Jagielski /** invalidate attributes for paragraphs
2583*b1cdbd2cSJim Jagielski 
2584*b1cdbd2cSJim Jagielski     OD 2009-01-06 #i88069#
2585*b1cdbd2cSJim Jagielski 
2586*b1cdbd2cSJim Jagielski     @author OD
2587*b1cdbd2cSJim Jagielski */
InvalidateAccessibleParaAttrs(const SwTxtFrm & rTxtFrm)2588*b1cdbd2cSJim Jagielski void ViewShell::InvalidateAccessibleParaAttrs( const SwTxtFrm& rTxtFrm )
2589*b1cdbd2cSJim Jagielski {
2590*b1cdbd2cSJim Jagielski     if ( GetLayout() && GetLayout()->IsAnyShellAccessible() )
2591*b1cdbd2cSJim Jagielski     {
2592*b1cdbd2cSJim Jagielski         Imp()->_InvalidateAccessibleParaAttrs( rTxtFrm );
2593*b1cdbd2cSJim Jagielski     }
2594*b1cdbd2cSJim Jagielski }
2595*b1cdbd2cSJim Jagielski 
GetAccessibleMap()2596*b1cdbd2cSJim Jagielski SwAccessibleMap* ViewShell::GetAccessibleMap()
2597*b1cdbd2cSJim Jagielski {
2598*b1cdbd2cSJim Jagielski     if ( Imp()->IsAccessible() )
2599*b1cdbd2cSJim Jagielski     {
2600*b1cdbd2cSJim Jagielski         return &(Imp()->GetAccessibleMap());
2601*b1cdbd2cSJim Jagielski     }
2602*b1cdbd2cSJim Jagielski 
2603*b1cdbd2cSJim Jagielski     return 0;
2604*b1cdbd2cSJim Jagielski }
2605*b1cdbd2cSJim Jagielski /* -----------------------------06.05.2002 13:23------------------------------
2606*b1cdbd2cSJim Jagielski 
2607*b1cdbd2cSJim Jagielski  ---------------------------------------------------------------------------*/
ApplyAccessiblityOptions(SvtAccessibilityOptions & rAccessibilityOptions)2608*b1cdbd2cSJim Jagielski void ViewShell::ApplyAccessiblityOptions(SvtAccessibilityOptions& rAccessibilityOptions)
2609*b1cdbd2cSJim Jagielski {
2610*b1cdbd2cSJim Jagielski     if(pOpt->IsPagePreview() && !rAccessibilityOptions.GetIsForPagePreviews())
2611*b1cdbd2cSJim Jagielski     {
2612*b1cdbd2cSJim Jagielski         pAccOptions->SetAlwaysAutoColor(sal_False);
2613*b1cdbd2cSJim Jagielski         pAccOptions->SetStopAnimatedGraphics(sal_False);
2614*b1cdbd2cSJim Jagielski         pAccOptions->SetStopAnimatedText(sal_False);
2615*b1cdbd2cSJim Jagielski     }
2616*b1cdbd2cSJim Jagielski     else
2617*b1cdbd2cSJim Jagielski     {
2618*b1cdbd2cSJim Jagielski         pAccOptions->SetAlwaysAutoColor(rAccessibilityOptions.GetIsAutomaticFontColor());
2619*b1cdbd2cSJim Jagielski         pAccOptions->SetStopAnimatedGraphics(! rAccessibilityOptions.GetIsAllowAnimatedGraphics());
2620*b1cdbd2cSJim Jagielski         pAccOptions->SetStopAnimatedText(! rAccessibilityOptions.GetIsAllowAnimatedText());
2621*b1cdbd2cSJim Jagielski 
2622*b1cdbd2cSJim Jagielski         // --> FME 2004-06-29 #114856# Formular view
2623*b1cdbd2cSJim Jagielski         // Always set this option, not only if document is read-only:
2624*b1cdbd2cSJim Jagielski         pOpt->SetSelectionInReadonly(rAccessibilityOptions.IsSelectionInReadonly());
2625*b1cdbd2cSJim Jagielski     }
2626*b1cdbd2cSJim Jagielski }
2627*b1cdbd2cSJim Jagielski 
GetShellRes()2628*b1cdbd2cSJim Jagielski ShellResource* ViewShell::GetShellRes()
2629*b1cdbd2cSJim Jagielski {
2630*b1cdbd2cSJim Jagielski 	return pShellRes;
2631*b1cdbd2cSJim Jagielski }
2632*b1cdbd2cSJim Jagielski 
SetCareWin(Window * pNew)2633*b1cdbd2cSJim Jagielski void ViewShell::SetCareWin( Window* pNew )
2634*b1cdbd2cSJim Jagielski {
2635*b1cdbd2cSJim Jagielski 	pCareWindow = pNew;
2636*b1cdbd2cSJim Jagielski }
2637*b1cdbd2cSJim Jagielski 
GetPageCount() const2638*b1cdbd2cSJim Jagielski sal_uInt16 ViewShell::GetPageCount() const
2639*b1cdbd2cSJim Jagielski {
2640*b1cdbd2cSJim Jagielski     return GetLayout() ? GetLayout()->GetPageNum() : 1;
2641*b1cdbd2cSJim Jagielski }
2642*b1cdbd2cSJim Jagielski 
GetPageSize(sal_uInt16 nPageNum,bool bSkipEmptyPages) const2643*b1cdbd2cSJim Jagielski const Size ViewShell::GetPageSize( sal_uInt16 nPageNum, bool bSkipEmptyPages ) const
2644*b1cdbd2cSJim Jagielski {
2645*b1cdbd2cSJim Jagielski     Size aSize;
2646*b1cdbd2cSJim Jagielski 	const SwRootFrm* pTmpRoot = GetLayout();
2647*b1cdbd2cSJim Jagielski     if( pTmpRoot && nPageNum )
2648*b1cdbd2cSJim Jagielski     {
2649*b1cdbd2cSJim Jagielski         const SwPageFrm* pPage = static_cast<const SwPageFrm*>
2650*b1cdbd2cSJim Jagielski                                  (pTmpRoot->Lower());
2651*b1cdbd2cSJim Jagielski 
2652*b1cdbd2cSJim Jagielski         while( --nPageNum && pPage->GetNext() )
2653*b1cdbd2cSJim Jagielski             pPage = static_cast<const SwPageFrm*>( pPage->GetNext() );
2654*b1cdbd2cSJim Jagielski 
2655*b1cdbd2cSJim Jagielski         if( !bSkipEmptyPages && pPage->IsEmptyPage() && pPage->GetNext() )
2656*b1cdbd2cSJim Jagielski             pPage = static_cast<const SwPageFrm*>( pPage->GetNext() );
2657*b1cdbd2cSJim Jagielski 
2658*b1cdbd2cSJim Jagielski         aSize = pPage->Frm().SSize();
2659*b1cdbd2cSJim Jagielski     }
2660*b1cdbd2cSJim Jagielski     return aSize;
2661*b1cdbd2cSJim Jagielski }
2662*b1cdbd2cSJim Jagielski 
2663*b1cdbd2cSJim Jagielski // --> FME 2004-06-15 #i12836# enhanced pdf export
GetPageNumAndSetOffsetForPDF(OutputDevice & rOut,const SwRect & rRect) const2664*b1cdbd2cSJim Jagielski sal_Int32 ViewShell::GetPageNumAndSetOffsetForPDF( OutputDevice& rOut, const SwRect& rRect ) const
2665*b1cdbd2cSJim Jagielski {
2666*b1cdbd2cSJim Jagielski     ASSERT( GetLayout(), "GetPageNumAndSetOffsetForPDF assumes presence of layout" )
2667*b1cdbd2cSJim Jagielski 
2668*b1cdbd2cSJim Jagielski     sal_Int32 nRet = -1;
2669*b1cdbd2cSJim Jagielski 
2670*b1cdbd2cSJim Jagielski     // --> FME 2005-01-07 #i40059# Position out of bounds:
2671*b1cdbd2cSJim Jagielski     SwRect aRect( rRect );
2672*b1cdbd2cSJim Jagielski     aRect.Pos().X() = Max( aRect.Left(), GetLayout()->Frm().Left() );
2673*b1cdbd2cSJim Jagielski     // <--
2674*b1cdbd2cSJim Jagielski 
2675*b1cdbd2cSJim Jagielski     const SwPageFrm* pPage = GetLayout()->GetPageAtPos( aRect.Center() );
2676*b1cdbd2cSJim Jagielski     if ( pPage )
2677*b1cdbd2cSJim Jagielski     {
2678*b1cdbd2cSJim Jagielski         ASSERT( pPage, "GetPageNumAndSetOffsetForPDF: No page found" )
2679*b1cdbd2cSJim Jagielski 
2680*b1cdbd2cSJim Jagielski         Point aOffset( pPage->Frm().Pos() );
2681*b1cdbd2cSJim Jagielski         aOffset.X() = -aOffset.X();
2682*b1cdbd2cSJim Jagielski         aOffset.Y() = -aOffset.Y();
2683*b1cdbd2cSJim Jagielski 
2684*b1cdbd2cSJim Jagielski         MapMode aMapMode( rOut.GetMapMode() );
2685*b1cdbd2cSJim Jagielski         aMapMode.SetOrigin( aOffset );
2686*b1cdbd2cSJim Jagielski         rOut.SetMapMode( aMapMode );
2687*b1cdbd2cSJim Jagielski 
2688*b1cdbd2cSJim Jagielski         nRet = pPage->GetPhyPageNum() - 1;
2689*b1cdbd2cSJim Jagielski     }
2690*b1cdbd2cSJim Jagielski 
2691*b1cdbd2cSJim Jagielski     return nRet;
2692*b1cdbd2cSJim Jagielski }
2693*b1cdbd2cSJim Jagielski // <--
2694*b1cdbd2cSJim Jagielski 
2695*b1cdbd2cSJim Jagielski // --> PB 2007-05-30 #146850#
GetReplacementBitmap(bool bIsErrorState)2696*b1cdbd2cSJim Jagielski const BitmapEx& ViewShell::GetReplacementBitmap( bool bIsErrorState )
2697*b1cdbd2cSJim Jagielski {
2698*b1cdbd2cSJim Jagielski     BitmapEx** ppRet;
2699*b1cdbd2cSJim Jagielski     sal_uInt16 nResId = 0, nHCResId = 0;
2700*b1cdbd2cSJim Jagielski     if( bIsErrorState )
2701*b1cdbd2cSJim Jagielski     {
2702*b1cdbd2cSJim Jagielski         ppRet = &pErrorBmp;
2703*b1cdbd2cSJim Jagielski         nResId = RID_GRAPHIC_ERRORBMP;
2704*b1cdbd2cSJim Jagielski         nHCResId = RID_GRAPHIC_ERRORBMP_HC;
2705*b1cdbd2cSJim Jagielski     }
2706*b1cdbd2cSJim Jagielski     else
2707*b1cdbd2cSJim Jagielski     {
2708*b1cdbd2cSJim Jagielski         ppRet = &pReplaceBmp;
2709*b1cdbd2cSJim Jagielski         nResId = RID_GRAPHIC_REPLACEBMP;
2710*b1cdbd2cSJim Jagielski         nHCResId = RID_GRAPHIC_REPLACEBMP_HC;
2711*b1cdbd2cSJim Jagielski     }
2712*b1cdbd2cSJim Jagielski 
2713*b1cdbd2cSJim Jagielski     if( !*ppRet )
2714*b1cdbd2cSJim Jagielski     {
2715*b1cdbd2cSJim Jagielski         sal_uInt16 nBmpResId =
2716*b1cdbd2cSJim Jagielski             Application::GetSettings().GetStyleSettings().GetHighContrastMode()
2717*b1cdbd2cSJim Jagielski                 ? nHCResId : nResId;
2718*b1cdbd2cSJim Jagielski         *ppRet = new BitmapEx( SW_RES( nBmpResId ) );
2719*b1cdbd2cSJim Jagielski     }
2720*b1cdbd2cSJim Jagielski     return **ppRet;
2721*b1cdbd2cSJim Jagielski }
2722*b1cdbd2cSJim Jagielski 
DeleteReplacementBitmaps()2723*b1cdbd2cSJim Jagielski void ViewShell::DeleteReplacementBitmaps()
2724*b1cdbd2cSJim Jagielski {
2725*b1cdbd2cSJim Jagielski     DELETEZ( pErrorBmp );
2726*b1cdbd2cSJim Jagielski     DELETEZ( pReplaceBmp );
2727*b1cdbd2cSJim Jagielski }
2728*b1cdbd2cSJim Jagielski // <--
2729*b1cdbd2cSJim Jagielski 
GetPostItMgr()2730*b1cdbd2cSJim Jagielski SwPostItMgr* ViewShell::GetPostItMgr()
2731*b1cdbd2cSJim Jagielski {
2732*b1cdbd2cSJim Jagielski     SwView* pView =  GetDoc()->GetDocShell() ? GetDoc()->GetDocShell()->GetView() : 0;
2733*b1cdbd2cSJim Jagielski     if ( pView )
2734*b1cdbd2cSJim Jagielski         return pView->GetPostItMgr();
2735*b1cdbd2cSJim Jagielski 
2736*b1cdbd2cSJim Jagielski     return 0;
2737*b1cdbd2cSJim Jagielski }
2738*b1cdbd2cSJim Jagielski 
2739*b1cdbd2cSJim Jagielski /*
2740*b1cdbd2cSJim Jagielski  * Document Interface Access
2741*b1cdbd2cSJim Jagielski  */
getIDocumentSettingAccess() const2742*b1cdbd2cSJim Jagielski const IDocumentSettingAccess* ViewShell::getIDocumentSettingAccess() const { return pDoc; }
getIDocumentSettingAccess()2743*b1cdbd2cSJim Jagielski IDocumentSettingAccess* ViewShell::getIDocumentSettingAccess() { return pDoc; }
getIDocumentDeviceAccess() const2744*b1cdbd2cSJim Jagielski const IDocumentDeviceAccess* ViewShell::getIDocumentDeviceAccess() const { return pDoc; }
getIDocumentDeviceAccess()2745*b1cdbd2cSJim Jagielski IDocumentDeviceAccess* ViewShell::getIDocumentDeviceAccess() { return pDoc; }
getIDocumentMarkAccess() const2746*b1cdbd2cSJim Jagielski const IDocumentMarkAccess* ViewShell::getIDocumentMarkAccess() const { return pDoc->getIDocumentMarkAccess(); }
getIDocumentMarkAccess()2747*b1cdbd2cSJim Jagielski IDocumentMarkAccess* ViewShell::getIDocumentMarkAccess() { return pDoc->getIDocumentMarkAccess(); }
getIDocumentDrawModelAccess() const2748*b1cdbd2cSJim Jagielski const IDocumentDrawModelAccess* ViewShell::getIDocumentDrawModelAccess() const { return pDoc; }
getIDocumentDrawModelAccess()2749*b1cdbd2cSJim Jagielski IDocumentDrawModelAccess* ViewShell::getIDocumentDrawModelAccess() { return pDoc; }
getIDocumentRedlineAccess() const2750*b1cdbd2cSJim Jagielski const IDocumentRedlineAccess* ViewShell::getIDocumentRedlineAccess() const { return pDoc; }
getIDocumentRedlineAccess()2751*b1cdbd2cSJim Jagielski IDocumentRedlineAccess* ViewShell::getIDocumentRedlineAccess() { return pDoc; }
getIDocumentLayoutAccess() const2752*b1cdbd2cSJim Jagielski const IDocumentLayoutAccess* ViewShell::getIDocumentLayoutAccess() const { return pDoc; }
getIDocumentLayoutAccess()2753*b1cdbd2cSJim Jagielski IDocumentLayoutAccess* ViewShell::getIDocumentLayoutAccess() { return pDoc; }
getIDocumentFieldsAccess() const2754*b1cdbd2cSJim Jagielski const IDocumentFieldsAccess* ViewShell::getIDocumentFieldsAccess() const { return pDoc; }
getIDocumentContentOperations()2755*b1cdbd2cSJim Jagielski IDocumentContentOperations* ViewShell::getIDocumentContentOperations() { return pDoc; }
getIDocumentStylePoolAccess()2756*b1cdbd2cSJim Jagielski IDocumentStylePoolAccess* ViewShell::getIDocumentStylePoolAccess() { return pDoc; }
getIDocumentStatistics() const2757*b1cdbd2cSJim Jagielski const IDocumentStatistics* ViewShell::getIDocumentStatistics() const { return pDoc; }
2758*b1cdbd2cSJim Jagielski 
GetIDocumentUndoRedo()2759*b1cdbd2cSJim Jagielski IDocumentUndoRedo      & ViewShell::GetIDocumentUndoRedo()
2760*b1cdbd2cSJim Jagielski { return pDoc->GetIDocumentUndoRedo(); }
GetIDocumentUndoRedo() const2761*b1cdbd2cSJim Jagielski IDocumentUndoRedo const& ViewShell::GetIDocumentUndoRedo() const
2762*b1cdbd2cSJim Jagielski { return pDoc->GetIDocumentUndoRedo(); }
2763*b1cdbd2cSJim Jagielski 
2764*b1cdbd2cSJim Jagielski // --> OD 2007-11-14 #i83479#
getIDocumentListItemsAccess() const2765*b1cdbd2cSJim Jagielski const IDocumentListItems* ViewShell::getIDocumentListItemsAccess() const
2766*b1cdbd2cSJim Jagielski {
2767*b1cdbd2cSJim Jagielski     return pDoc;
2768*b1cdbd2cSJim Jagielski }
getIDocumentOutlineNodesAccess() const2769*b1cdbd2cSJim Jagielski const IDocumentOutlineNodes* ViewShell::getIDocumentOutlineNodesAccess() const
2770*b1cdbd2cSJim Jagielski {
2771*b1cdbd2cSJim Jagielski     return pDoc;
2772*b1cdbd2cSJim Jagielski }
2773*b1cdbd2cSJim Jagielski // <--
2774