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: layact.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 ************************************************************************/
32 #include "swtypes.hxx"
44 // --> OD 2004-06-28 #i28701#
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.
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
;
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.
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
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
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 -
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
;
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
*,
123 inline BOOL
_PaintCntnt( const SwCntntFrm
*, const SwPageFrm
*,
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
*& );
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
; }
147 SwLayAction( SwRootFrm
*pRt
, SwViewImp
*pImp
);
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
; }
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
* );
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?
228 void ShowIdle( ColorData eName
);
231 enum IdleJobType
{ ONLINE_SPELLING
, AUTOCOMPLETE_WORDS
, WORD_COUNT
, SMART_TAGS
}; // SMARTTAGS
232 BOOL
_DoIdleJob( const SwCntntFrm
*, IdleJobType
);
233 BOOL
DoIdleJob( IdleJobType
, BOOL bVisAreaOnly
);
238 SwLayIdle( SwRootFrm
*pRt
, SwViewImp
*pImp
);
242 inline void SwLayAction::SetCheckPageNum( USHORT nNew
)
244 if ( nNew
< nCheckPageNum
)
245 nCheckPageNum
= nNew
;