Update ooo320-m1
[ooovba.git] / binfilter / inc / bf_sw / viewsh.hxx
blobb8e7d8603b0fdf20fd930a44ff2c4a513d9ed197
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: viewsh.hxx,v $
10 * $Revision: 1.11 $
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 ************************************************************************/
30 #ifndef _VIEWSH_HXX
31 #define _VIEWSH_HXX
33 #ifndef _RTTI_HXX //autogen
34 #include <tools/rtti.hxx>
35 #endif
37 #ifndef _RING_HXX
38 #include <ring.hxx>
39 #endif
40 #ifndef _SWRECT_HXX
41 #include <swrect.hxx>
42 #endif
43 /*N*/ #include <tools/debug.hxx> //for stripping
44 #ifdef ACCESSIBLE_LAYOUT
45 namespace com { namespace sun { namespace star { namespace accessibility {
46 class XAccessible; } } } }
47 #endif
48 class VirtualDevice;
49 class Window;
50 class OutputDevice;
51 class SvtAccessibilityOptions;
52 class Fraction;
53 class SvEmbeddedObjectRef;
55 namespace binfilter {
57 class SfxItemPool;
58 class SwDoc;
59 class SfxPrinter;
61 class SfxProgress;
62 class SwRootFrm;
63 class SwNodes;
64 class SdrView;
66 class SfxViewShell;
67 class SwViewOption;
68 class SwViewImp;
69 class SwPrtOptions;
70 class SwPagePreViewPrtData;
71 class SwLayIdle;
72 struct ShellResource;
73 class SwRegionRects;
74 class SwFrm;
75 struct SwPrintData;
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
84 // benoetigt werden.
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
101 //werden kann.
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
112 SwRect aInvalidRect;
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)
126 SwViewOption *pOpt;
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
161 //ergaben.
165 protected:
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.
175 public:
176 TYPEINFO();
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
205 //Ring arbeiten.
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;
234 //erzeugt?
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.
262 //All about fields.
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
274 void LayoutIdle();
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;
323 void MakeDrawView();
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 -------------------
349 class CurrShell
351 public:
352 ViewShell *pPrev;
353 SwRootFrm *pRoot;
355 CurrShell( ViewShell *pNew );
356 ~CurrShell();
359 inline void ViewShell::ResetInvalidRect()
361 aInvalidRect.Clear();
363 inline void ViewShell::StartAction()
365 if ( !nStartAction++ )
366 ImplStartAction();
368 inline void ViewShell::EndAction( const sal_Bool bIdleEnd )
370 if( 0 == (nStartAction - 1) )
371 ImplEndAction( bIdleEnd );
372 --nStartAction;
375 } //namespace binfilter
376 #endif //_VIEWSH_HXX