1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: viewsh.hxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
33 #ifndef _RTTI_HXX //autogen
34 #include <tools/rtti.hxx>
43 /*N*/ #include <tools/debug.hxx> //for stripping
44 #ifdef ACCESSIBLE_LAYOUT
45 namespace com
{ namespace sun
{ namespace star
{ namespace accessibility
{
46 class XAccessible
; } } } }
51 class SvtAccessibilityOptions
;
53 class SvEmbeddedObjectRef
;
70 class SwPagePreViewPrtData
;
76 // OD 12.12.2002 #103492#
77 class SwPagePreviewLayout
;
79 struct SwAccessibilityOptions
;
82 //JP 19.07.98: - Bug 52312
83 // define fuer Flags, die im CTOR oder den darunter liegenden Schichten
85 // Zur Zeit wird fuer die DrawPage das PreView Flag benoetigt
86 #define VSHELLFLAG_ISPREVIEW ((long)0x1)
88 class ViewShell
: public Ring
90 friend void SetOutDev( ViewShell
*pSh
, OutputDevice
*pOut
);
91 friend void SetOutDevAndWin( ViewShell
*pSh
, OutputDevice
*pOut
,
92 Window
*pWin
, sal_uInt16 nZoom
);
94 friend class SwViewImp
;
95 friend class SwLayIdle
;
97 // OD 12.12.2002 #103492# - for setting visible area for page preview paint
98 friend class SwPagePreviewLayout
;
100 //Umsetzen der SwVisArea, damit vor dem Drucken sauber formatiert
102 friend void SetSwVisArea( ViewShell
*pSh
, const SwRect
&, BOOL bPDFExport
= FALSE
);
104 static sal_Bool bLstAct
; // sal_True wenn Das EndAction der letzten Shell
105 // laeuft; also die EndActions der
106 // anderen Shells auf das Dokument
107 // abgearbeitet sind.
109 Point aPrtOffst
; //Ofst fuer den Printer,
110 //nicht bedruckbarer Rand.
111 Size aBrowseBorder
; //Rand fuer Framedokumente
114 SfxViewShell
*pSfxViewShell
;
115 SwViewImp
*pImp
; //Core-Interna der ViewShell.
116 //Der Pointer ist niemals 0.
118 Window
*pWin
; // = 0 during printing or pdf export
119 OutputDevice
*pOut
; // Window, Printer, VirtDev, ...
120 OutputDevice
* mpTmpRef
; // Temporariy reference device. Is used
121 // during (printer depending) prospect
122 // and page preview printing
123 // (because a scaling has to be set at
124 // the original printer)
127 SwAccessibilityOptions
* pAccOptions
;
130 sal_Bool bDocSizeChgd
:1; //Fuer DocChgNotify(): Neue DocGroesse bei
131 //EndAction an das DocMDI melden.
132 sal_Bool bPaintWorks
:1; //Normal Painten wenn sal_True,
133 //Paint merken wenn sal_False
134 sal_Bool bPaintInProgress
:1; //Kein zweifaches Paint durchlassen.
135 sal_Bool bViewLocked
:1; //Lockt den sichtbaren Bereich,
136 //MakeVisible laeuft dann in's leere.
137 sal_Bool bInEndAction
:1; //Fiese unstaende vermeiden, siehe viewsh.cxx
138 sal_Bool bPreView
:1; //Ist sal_True wenns eine PreView-ViewShell ist.
139 sal_Bool bFrameView
:1; //sal_True wenn es ein (HTML-)Frame ist.
140 sal_Bool bEnableSmooth
:1; //Disable des SmoothScroll z.B. fuer
141 //Drag der Scrollbars.
142 sal_Bool bEndActionByVirDev
:1; //Paints aus der EndAction immer ueber virtuelles
144 //Device (etwa beim Browsen)
146 //Initialisierung, wird von den verschiedenen Konstruktoren gerufen.
147 void Init( const SwViewOption
*pNewOpt
);
149 inline void ResetInvalidRect();
152 void Reformat(); //Invalidert das ges. Layout (ApplyViewOption)
154 // Malen der Wiese und rufen
155 // PaintDesktop gesplittet, dieser Teil wird auch von PreViewPage benutzt
157 sal_Bool
CheckInvalidForPaint( const SwRect
& );//Direkt Paint oder lieber
158 //eine Aktion ausloesen.
160 void Scroll(); //Scrollen wenn sich aus der LayAction Scrollmoeglichkeiten
166 static ShellResource
* pShellRes
; // Resourcen fuer die Shell
167 static Window
* pCareWindow
; // diesem Fenster ausweichen
169 SwRect aVisArea
; //Die moderne Ausfuerung der VisArea
170 SwDoc
*pDoc
; //Das Dokument, niemals 0
172 sal_uInt16 nStartAction
; //ist != 0 wenn mindestens eine ::com::sun::star::chaos::Action laeuft
173 sal_uInt16 nLockPaint
; //ist != 0 wenn das Paint gelocked ist.
178 SwViewImp
*Imp() { return pImp
; }
179 const SwViewImp
*Imp() const { return pImp
; }
181 //Nach Druckerwechsel, vom Doc
182 //pPDFOut != NULL is used for PDF export.
183 void InitPrt( SfxPrinter
* , OutputDevice
*pPDFOut
= NULL
);
185 //Klammerung von zusammengehoerenden Aktionen.
186 inline void StartAction();
187 void ImplStartAction();
188 inline void EndAction( const sal_Bool bIdleEnd
= sal_False
);
189 void ImplEndAction( const sal_Bool bIdleEnd
= sal_False
);
190 sal_uInt16
ActionCount() const { return nStartAction
; }
191 sal_Bool
ActionPend() const { return nStartAction
!= 0; }
192 sal_Bool
IsInEndAction() const { return bInEndAction
; }
194 void SetEndActionByVirDev( sal_Bool b
) { bEndActionByVirDev
= b
; }
195 sal_Bool
IsEndActionByVirDev() { return bEndActionByVirDev
; }
197 // Per UNO wird am RootFrame fuer alle shells der ActionCount kurzfristig
198 // auf Null gesetzt und wieder restauriert
200 inline sal_Bool
HasInvalidRect() const { return aInvalidRect
.HasArea(); }
201 void ChgHyphenation() { Reformat(); }
202 void ChgNumberDigits() { Reformat(); }
204 //Methoden fuer Paint- und Scrollrects, die auf allen Shells im
206 sal_Bool
AddPaintRect( const SwRect
&rRect
);
207 void AddScrollRect( const SwFrm
*pFrm
, const SwRect
&rRect
, long nOffs
);
208 void SetNoNextScroll();
210 void InvalidateWindows( const SwRect
&rRect
);
211 sal_Bool
IsPaintInProgress() const { return bPaintInProgress
; }
213 //Benachrichtung, dass sich der sichtbare Bereich geaendert hat.
214 //VisArea wird neu gesetzt, anschliessend wird gescrollt.
215 //Das uebergebene Rect liegt auf Pixelgrenzen,
216 //um Pixelfehler beim Scrollen zu vermeiden.
217 void EnableSmooth( sal_Bool b
) { bEnableSmooth
= b
; }
219 const SwRect
&VisArea() const { return aVisArea
; }
220 //Es wird, wenn notwendig, soweit gescrollt, dass das
221 //uebergebene Rect im sichtbaren Ausschnitt liegt.
222 void MakeVisible( const SwRect
& );
224 //Bei naechster Gelegenheit die neue Dokuemntgroesse an das UI weiterreichen.
225 void SizeChgNotify(const Size
&);
226 void UISizeNotify(); //Das weiterreichen der aktuellen groesse.
230 //Invalidierung der ersten Sichtbaren Seite fuer alle Shells im Ring.
231 void SetFirstVisPageInvalid();
233 SwRootFrm
*GetLayout() const;
236 void CalcLayout(); //Durchformatierung des Layouts erzwingen.
238 inline SwDoc
*GetDoc() const { return pDoc
; } //niemals 0.
240 // 1. GetPrt: The printer at the document
241 // 3. GetRefDev: Either the printer or the virtual device from the doc
242 // 2. GetWin: Available if we not printing
243 // 4. GetOut: Printer, Window or Virtual device
244 SfxPrinter
* GetPrt( sal_Bool bCreate
= sal_False
) const;
245 VirtualDevice
* GetVirDev( sal_Bool bCreate
= sal_False
) const;
246 OutputDevice
& GetRefDev() const;
247 inline Window
* GetWin() const { return pWin
; }
248 inline OutputDevice
* GetOut() const { return pOut
; }
250 static inline sal_Bool
IsLstEndAction() { return ViewShell::bLstAct
; }
252 // Setzt Drucker fuer ALLE Sichten im Ring; einschl. Invalidierungen
253 void SetVirDev( VirtualDevice
* );
255 //Andern alle PageDescriptoren
257 // creates temporary doc with selected text for PDF export
258 SwDoc
* CreatePrtDoc( SfxPrinter
* pPrt
, SvEmbeddedObjectRef
&rDocShellRef
);
260 //Wird intern fuer die Shell gerufen die Druckt. Formatiert die Seiten.
263 // update all charts, for that exists any table
265 // Sollen Absatzabstaende addiert oder maximiert werden?
267 // compatible behaviour of tabs
269 //formatting by virtual device or printer
270 sal_Bool
IsUseVirtualDevice()const;
271 void SetUseVirtualDevice(sal_Bool bSet
);
273 //Ruft den Idle-Formatierer des Layouts
276 inline const SwViewOption
*GetViewOptions() const { return pOpt
; }
277 void ApplyViewOptions( const SwViewOption
&rOpt
){DBG_BF_ASSERT(0, "STRIP");} ;//STRIP001 void ApplyViewOptions( const SwViewOption &rOpt );
279 //static void SetShellRes( ShellResource* pRes ) { pShellRes = pRes; }
280 static ShellResource
* GetShellRes();
282 static void SetCareWin( Window
* pNew
) { pCareWindow
= pNew
; }
283 static Window
* GetCareWin(ViewShell
& rVSh
)
284 { return pCareWindow
? pCareWindow
: CareChildWin(rVSh
); }
285 static Window
* CareChildWin(ViewShell
& rVSh
){DBG_BF_ASSERT(0, "STRIP"); return NULL
;} ;//STRIP001 static Window* CareChildWin(ViewShell& rVSh);
287 inline SfxViewShell
*GetSfxViewShell() { return pSfxViewShell
; }
288 inline void SetSfxViewShell(SfxViewShell
*pNew
) { pSfxViewShell
= pNew
; }
290 // Selektion der Draw ::com::sun::star::script::Engine geaendert
291 virtual void DrawSelChanged(SdrView
*);
293 // OD 12.12.2002 #103492#
294 SwPagePreviewLayout
* PagePreviewLayout();
296 /** adjust view options for page preview
298 OD 09.01.2003 #i6467#
299 Because page preview should show the document as it is printed -
300 page preview is print preview -, the view options are adjusted to the
301 same as for printing.
303 @param _rPrintOptions
304 input parameter - constant reference to print options, to which the
305 view option will be adjusted.
307 void AdjustOptionsForPagePreview( const SwPrtOptions
&_rPrintOptions
);
309 // print page/print preview
310 void PrintPreViewPage( SwPrtOptions
& rOptions
, sal_uInt16 nRowCol
,
311 SfxProgress
& rProgress
,
312 const SwPagePreViewPrtData
* = 0 );
314 // Prospekt-Format drucken
316 sal_Bool
IsViewLocked() const { return bViewLocked
; }
317 void LockView( sal_Bool b
) { bViewLocked
= b
; }
319 sal_Bool
IsPaintLocked() const { return nLockPaint
!= 0; }
321 // Abfragen/Erzeugen DrawView + PageView
322 const sal_Bool
HasDrawView() const;
325 //DrawView darf u.U. am UI benutzt werden.
326 SdrView
*GetDrawView();
327 const SdrView
*GetDrawView() const { return ((ViewShell
*)this)->GetDrawView(); }
329 //sorge dafuer, das auf jedenfall die MarkListe aktuell ist (Bug 57153)
331 sal_Bool
IsPreView() const { return bPreView
; }
333 sal_Bool
IsFrameView() const { return bFrameView
; }
334 void SetFrameView( const Size
& rBrowseBorder
)
335 { bFrameView
= sal_True
; aBrowseBorder
= rBrowseBorder
; }
337 //Damit in der UI nicht ueberall das dochxx includet werden muss
338 sal_Bool
IsBrowseMode() const;
341 const Size
& GetBrowseBorder() const{ return aBrowseBorder
; }
343 virtual ~ViewShell();
347 //---- class CurrShell verwaltet den globalen ShellPointer -------------------
355 CurrShell( ViewShell
*pNew
);
359 inline void ViewShell::ResetInvalidRect()
361 aInvalidRect
.Clear();
363 inline void ViewShell::StartAction()
365 if ( !nStartAction
++ )
368 inline void ViewShell::EndAction( const sal_Bool bIdleEnd
)
370 if( 0 == (nStartAction
- 1) )
371 ImplEndAction( bIdleEnd
);
375 } //namespace binfilter