update dev300-m58
[ooovba.git] / sw / source / core / inc / layact.hxx
blob0a4be4c7630fb993aa4a8eff1566374a4addac42
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: layact.hxx,v $
10 * $Revision: 1.10 $
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 _LAYACT_HXX
31 #define _LAYACT_HXX
32 #include "swtypes.hxx"
33 #include "swrect.hxx"
35 class SwRootFrm;
36 class SwLayoutFrm;
37 class SwPageFrm;
38 class SwFlyFrm;
39 class SwCntntFrm;
40 class SwTabFrm;
41 class SwViewImp;
42 class SwCntntNode;
43 class SwWait;
44 // --> OD 2004-06-28 #i28701#
45 class SfxProgress;
47 //Die Verwendung der LayAction laeuft immer gleich ab:
49 // 1. Erzeugen des LayAction-Objektes.
50 // 2. Einstellen des gewuenschten Verhaltens mittels der Set-Methoden
51 // 3. Aufruf von Action()
52 // 4. Baldiges Zerstoeren des Objektes.
54 // Das Objekt meldet sich im CTor beim SwViewImp an und erst im DTor
55 // wieder ab! Es handelt sich mithin um ein typisches Stackobjekt.
58 class SwLayAction
60 SwRootFrm *pRoot;
61 SwViewImp *pImp; //Hier Meldet sich die Action an und ab.
63 //Zur Optimierung, damit die Tabellen etwas besser am Crsr kleben beim
64 //Return/Backspace davor.
65 //Wenn der erste TabFrm, der sich Paintet (pro Seite) traegt sich im
66 //Pointer ein. Die CntntFrms unterhalb der Seite brauchen sich
67 //dann nicht mehr bei der Shell zum Painten anmelden.
68 const SwTabFrm *pOptTab;
70 SwWait *pWait;
72 SfxProgress * pProgress;
74 //Wenn ein Absatz - oder was auch immer - bei der Formatierung mehr
75 //als eine Seite rueckwaerts floss traegt er seine neue Seitennummer
76 //hier ein. Die Steuerung der InternalAction kann dann geeignet reagieren.
77 USHORT nPreInvaPage;
79 ULONG nStartTicks; //Startzeitpunkt der Aktion, vergeht zu viel Zeit kann
80 //der WaitCrsr per CheckWaitCrsr() eingeschaltet werden.
82 USHORT nInputType; //Bei welchem Input soll die Verarbeitung abgebrochen
83 //werden?
84 USHORT nEndPage; //StatBar Steuerung.
85 USHORT nCheckPageNum; //CheckPageDesc() wurde verzoegert wenn != USHRT_MAX
86 //ab dieser Seite Checken.
88 BOOL bPaint; //Painten oder nur Formatieren?
89 BOOL bComplete; //Alles bis zum sichtbaren Bereich Formatieren oder
90 //oder nur den sichtbaren Bereich?
91 BOOL bCalcLayout; //Vollstaendige Reformatierung?
92 BOOL bAgain; //Zur automatisch wiederholten Action wenn Seiten
93 //geloscht werden.
94 BOOL bNextCycle; //Wiederaufsetzen bei der ersten Ungueltigen Seite.
95 BOOL bInput; //Zum Abbrechen der Verarbeitung wenn ein Input anliegt.
96 BOOL bIdle; //True wenn die Layaction vom Idler ausgeloest wurde.
97 BOOL bReschedule; //Soll das Reschedule - abhaengig vom Progress -
98 //gerufen werden?
99 BOOL bCheckPages; //CheckPageDescs() ausfuehren oder verzoegern.
100 BOOL bUpdateExpFlds;//Wird gesetzt wenn nach dem Formatierien noch eine
101 //Runde fuer den ExpFld laufen muss.
102 BOOL bBrowseActionStop; //Action fruehzeitig beenden (per bInput) und den
103 //Rest dem Idler ueberlassen.
104 BOOL bWaitAllowed; //Wartecursor erlaubt?
105 BOOL bPaintExtraData; //Anzeige von Zeilennumerierung o. ae. eingeschaltet?
106 BOOL bActionInProgress; // wird in Action() anfangs gesetzt und zum Schluss geloescht
108 // OD 14.04.2003 #106346# - new flag for content formatting on interrupt.
109 sal_Bool mbFormatCntntOnInterrupt;
111 // --> OD 2004-06-14 #i28701# - new flag, indicating, if scrolling is
112 // allowed during page format
113 bool mbScrollingAllowed;
115 #ifdef _LAYACT_CXX
117 void _AddScrollRect( const SwCntntFrm *, const SwPageFrm *,
118 const SwTwips, const SwTwips );
119 void PaintCntnt( const SwCntntFrm *, const SwPageFrm *,
120 const SwRect &rOldRect, long nOldBottom );
121 BOOL PaintWithoutFlys( const SwRect &, const SwCntntFrm *,
122 const SwPageFrm * );
123 inline BOOL _PaintCntnt( const SwCntntFrm *, const SwPageFrm *,
124 const SwRect & );
126 BOOL FormatLayout( SwLayoutFrm *, BOOL bAddRect = TRUE );
127 BOOL FormatLayoutTab( SwTabFrm *, BOOL bAddRect = TRUE );
128 BOOL FormatCntnt( const SwPageFrm* pPage );
129 void _FormatCntnt( const SwCntntFrm* pCntnt,
130 const SwPageFrm* pPage );
131 BOOL IsShortCut( SwPageFrm *& );
133 BOOL TurboAction();
134 BOOL _TurboAction( const SwCntntFrm * );
135 void InternalAction();
137 SwPageFrm *CheckFirstVisPage( SwPageFrm *pPage );
139 BOOL RemoveEmptyBrowserPages();
141 inline void CheckIdleEnd();
142 inline ULONG GetStartTicks() { return nStartTicks; }
144 #endif
146 public:
147 SwLayAction( SwRootFrm *pRt, SwViewImp *pImp );
148 ~SwLayAction();
150 #ifdef _LAYACT_CXX
151 void SetIdle ( BOOL bNew ) { bIdle = bNew; }
152 void SetCheckPages ( BOOL bNew ) { bCheckPages = bNew; }
153 void SetBrowseActionStop(BOOL bNew ) { bBrowseActionStop = bNew; }
154 void SetNextCycle ( BOOL bNew ) { bNextCycle = bNew; }
156 BOOL IsWaitAllowed() const { return bWaitAllowed; }
157 BOOL IsNextCycle() const { return bNextCycle; }
158 BOOL IsInput() const { return bInput; }
159 BOOL IsWait() const { return 0 != pWait; }
160 BOOL IsPaint() const { return bPaint; }
161 BOOL IsIdle() const { return bIdle; }
162 BOOL IsReschedule() const { return bReschedule; }
163 BOOL IsPaintExtraData() const { return bPaintExtraData;}
164 BOOL IsStopPrt() const;
165 BOOL IsInterrupt() const { return IsInput() || IsStopPrt(); }
167 USHORT GetInputType() const { return nInputType; }
168 #endif
170 //Einstellen der Action auf das gewuenschte Verhalten.
171 void SetPaint ( BOOL bNew ) { bPaint = bNew; }
172 void SetComplete ( BOOL bNew ) { bComplete = bNew; }
173 void SetStatBar ( BOOL bNew );
174 void SetInputType ( USHORT nNew ) { nInputType = nNew; }
175 void SetCalcLayout ( BOOL bNew ) { bCalcLayout = bNew; }
176 void SetReschedule ( BOOL bNew ) { bReschedule = bNew; }
177 void SetWaitAllowed ( BOOL bNew ) { bWaitAllowed = bNew; }
179 void SetAgain() { bAgain = TRUE; }
180 void SetUpdateExpFlds() {bUpdateExpFlds = TRUE; }
181 void SetProgress(SfxProgress * _pProgress = NULL)
182 { pProgress = _pProgress; }
184 inline void SetCheckPageNum( USHORT nNew );
185 inline void SetCheckPageNumDirect( USHORT nNew ) { nCheckPageNum = nNew; }
187 void Action(); //Jetzt gehts loos...
188 void Reset(); //Zurueck auf CTor-Defaults.
190 BOOL IsAgain() const { return bAgain; }
191 BOOL IsComplete() const { return bComplete; }
192 BOOL IsExpFlds() const { return bUpdateExpFlds; }
193 BOOL IsCalcLayout() const { return bCalcLayout; }
194 BOOL IsCheckPages() const { return bCheckPages; }
195 BOOL IsBrowseActionStop() const { return bBrowseActionStop; }
196 BOOL IsActionInProgress() const { return bActionInProgress; }
198 USHORT GetCheckPageNum() const { return nCheckPageNum; }
200 //Auch andere sollen den Wartecrsr einschalten koennen.
201 void CheckWaitCrsr();
203 // --> OD 2004-06-09 #i28701# - method is now public;
204 // delete 2nd parameter, because its not used;
205 BOOL FormatLayoutFly( SwFlyFrm * );
206 // --> OD 2004-06-09 #i28701# - method is now public
207 BOOL _FormatFlyCntnt( const SwFlyFrm * );
211 class SwLayIdle
214 SwRootFrm *pRoot;
215 SwViewImp *pImp; // Hier Meldet sich der Idler an und ab.
216 SwCntntNode *pCntntNode; // Hier wird die aktuelle Cursorposition
217 xub_StrLen nTxtPos; // zwischengespeichert.
218 BOOL bPageValid; // Konnte die Seite alles validiert werden?
219 BOOL bAllValid; // Konnte alles validiert werden?
221 #ifndef PRODUCT
222 BOOL bIndicator;
223 #endif
225 #ifdef _LAYACT_CXX
227 #ifndef PRODUCT
228 void ShowIdle( ColorData eName );
229 #endif
231 enum IdleJobType{ ONLINE_SPELLING, AUTOCOMPLETE_WORDS, WORD_COUNT, SMART_TAGS }; // SMARTTAGS
232 BOOL _DoIdleJob( const SwCntntFrm*, IdleJobType );
233 BOOL DoIdleJob( IdleJobType, BOOL bVisAreaOnly );
235 #endif
237 public:
238 SwLayIdle( SwRootFrm *pRt, SwViewImp *pImp );
239 ~SwLayIdle();
242 inline void SwLayAction::SetCheckPageNum( USHORT nNew )
244 if ( nNew < nCheckPageNum )
245 nCheckPageNum = nNew;
248 #endif //_LAYACT_HXX