blob: 9fb2e733f50bdc321d039c4efe7ea962a8cdda18 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _LAYACT_HXX
#define _LAYACT_HXX
#include "swtypes.hxx"
#include "swrect.hxx"
class SwRootFrm;
class SwLayoutFrm;
class SwPageFrm;
class SwFlyFrm;
class SwCntntFrm;
class SwTabFrm;
class SwViewImp;
class SwCntntNode;
class SwWait;
// --> OD 2004-06-28 #i28701#
class SfxProgress;
//Die Verwendung der LayAction laeuft immer gleich ab:
//
// 1. Erzeugen des LayAction-Objektes.
// 2. Einstellen des gewuenschten Verhaltens mittels der Set-Methoden
// 3. Aufruf von Action()
// 4. Baldiges Zerstoeren des Objektes.
//
// Das Objekt meldet sich im CTor beim SwViewImp an und erst im DTor
// wieder ab! Es handelt sich mithin um ein typisches Stackobjekt.
class SwLayAction
{
SwRootFrm *pRoot;
SwViewImp *pImp; //Hier Meldet sich die Action an und ab.
//Zur Optimierung, damit die Tabellen etwas besser am Crsr kleben beim
//Return/Backspace davor.
//Wenn der erste TabFrm, der sich Paintet (pro Seite) traegt sich im
//Pointer ein. Die CntntFrms unterhalb der Seite brauchen sich
//dann nicht mehr bei der Shell zum Painten anmelden.
const SwTabFrm *pOptTab;
SwWait *pWait;
SfxProgress * pProgress;
//Wenn ein Absatz - oder was auch immer - bei der Formatierung mehr
//als eine Seite rueckwaerts floss traegt er seine neue Seitennummer
//hier ein. Die Steuerung der InternalAction kann dann geeignet reagieren.
sal_uInt16 nPreInvaPage;
sal_uLong nStartTicks; //Startzeitpunkt der Aktion, vergeht zu viel Zeit kann
//der WaitCrsr per CheckWaitCrsr() eingeschaltet werden.
sal_uInt16 nInputType; //Bei welchem Input soll die Verarbeitung abgebrochen
//werden?
sal_uInt16 nEndPage; //StatBar Steuerung.
sal_uInt16 nCheckPageNum; //CheckPageDesc() wurde verzoegert wenn != USHRT_MAX
//ab dieser Seite Checken.
sal_Bool bPaint; //Painten oder nur Formatieren?
sal_Bool bComplete; //Alles bis zum sichtbaren Bereich Formatieren oder
//oder nur den sichtbaren Bereich?
sal_Bool bCalcLayout; //Vollstaendige Reformatierung?
sal_Bool bAgain; //Zur automatisch wiederholten Action wenn Seiten
//geloscht werden.
sal_Bool bNextCycle; //Wiederaufsetzen bei der ersten Ungueltigen Seite.
sal_Bool bInput; //Zum Abbrechen der Verarbeitung wenn ein Input anliegt.
sal_Bool bIdle; //True wenn die Layaction vom Idler ausgeloest wurde.
sal_Bool bReschedule; //Soll das Reschedule - abhaengig vom Progress -
//gerufen werden?
sal_Bool bCheckPages; //CheckPageDescs() ausfuehren oder verzoegern.
sal_Bool bUpdateExpFlds;//Wird gesetzt wenn nach dem Formatierien noch eine
//Runde fuer den ExpFld laufen muss.
sal_Bool bBrowseActionStop; //Action fruehzeitig beenden (per bInput) und den
//Rest dem Idler ueberlassen.
sal_Bool bWaitAllowed; //Wartecursor erlaubt?
sal_Bool bPaintExtraData; //Anzeige von Zeilennumerierung o. ae. eingeschaltet?
sal_Bool bActionInProgress; // wird in Action() anfangs gesetzt und zum Schluss geloescht
// OD 14.04.2003 #106346# - new flag for content formatting on interrupt.
sal_Bool mbFormatCntntOnInterrupt;
#ifdef _LAYACT_CXX
void PaintCntnt( const SwCntntFrm *, const SwPageFrm *,
const SwRect &rOldRect, long nOldBottom );
sal_Bool PaintWithoutFlys( const SwRect &, const SwCntntFrm *,
const SwPageFrm * );
inline sal_Bool _PaintCntnt( const SwCntntFrm *, const SwPageFrm *,
const SwRect & );
sal_Bool FormatLayout( SwLayoutFrm *, sal_Bool bAddRect = sal_True );
sal_Bool FormatLayoutTab( SwTabFrm *, sal_Bool bAddRect = sal_True );
sal_Bool FormatCntnt( const SwPageFrm* pPage );
void _FormatCntnt( const SwCntntFrm* pCntnt,
const SwPageFrm* pPage );
sal_Bool IsShortCut( SwPageFrm *& );
sal_Bool TurboAction();
sal_Bool _TurboAction( const SwCntntFrm * );
void InternalAction();
SwPageFrm *CheckFirstVisPage( SwPageFrm *pPage );
sal_Bool RemoveEmptyBrowserPages();
inline void CheckIdleEnd();
inline sal_uLong GetStartTicks() { return nStartTicks; }
#endif
public:
SwLayAction( SwRootFrm *pRt, SwViewImp *pImp );
~SwLayAction();
#ifdef _LAYACT_CXX
void SetIdle ( sal_Bool bNew ) { bIdle = bNew; }
void SetCheckPages ( sal_Bool bNew ) { bCheckPages = bNew; }
void SetBrowseActionStop(sal_Bool bNew ) { bBrowseActionStop = bNew; }
void SetNextCycle ( sal_Bool bNew ) { bNextCycle = bNew; }
sal_Bool IsWaitAllowed() const { return bWaitAllowed; }
sal_Bool IsNextCycle() const { return bNextCycle; }
sal_Bool IsInput() const { return bInput; }
sal_Bool IsWait() const { return 0 != pWait; }
sal_Bool IsPaint() const { return bPaint; }
sal_Bool IsIdle() const { return bIdle; }
sal_Bool IsReschedule() const { return bReschedule; }
sal_Bool IsPaintExtraData() const { return bPaintExtraData;}
sal_Bool IsStopPrt() const;
sal_Bool IsInterrupt() const { return IsInput() || IsStopPrt(); }
sal_uInt16 GetInputType() const { return nInputType; }
#endif
//Einstellen der Action auf das gewuenschte Verhalten.
void SetPaint ( sal_Bool bNew ) { bPaint = bNew; }
void SetComplete ( sal_Bool bNew ) { bComplete = bNew; }
void SetStatBar ( sal_Bool bNew );
void SetInputType ( sal_uInt16 nNew ) { nInputType = nNew; }
void SetCalcLayout ( sal_Bool bNew ) { bCalcLayout = bNew; }
void SetReschedule ( sal_Bool bNew ) { bReschedule = bNew; }
void SetWaitAllowed ( sal_Bool bNew ) { bWaitAllowed = bNew; }
void SetAgain() { bAgain = sal_True; }
void SetUpdateExpFlds() {bUpdateExpFlds = sal_True; }
void SetProgress(SfxProgress * _pProgress = NULL)
{ pProgress = _pProgress; }
inline void SetCheckPageNum( sal_uInt16 nNew );
inline void SetCheckPageNumDirect( sal_uInt16 nNew ) { nCheckPageNum = nNew; }
void Action(); //Jetzt gehts loos...
void Reset(); //Zurueck auf CTor-Defaults.
sal_Bool IsAgain() const { return bAgain; }
sal_Bool IsComplete() const { return bComplete; }
sal_Bool IsExpFlds() const { return bUpdateExpFlds; }
sal_Bool IsCalcLayout() const { return bCalcLayout; }
sal_Bool IsCheckPages() const { return bCheckPages; }
sal_Bool IsBrowseActionStop() const { return bBrowseActionStop; }
sal_Bool IsActionInProgress() const { return bActionInProgress; }
sal_uInt16 GetCheckPageNum() const { return nCheckPageNum; }
//Auch andere sollen den Wartecrsr einschalten koennen.
void CheckWaitCrsr();
// --> OD 2004-06-09 #i28701# - method is now public;
// delete 2nd parameter, because its not used;
sal_Bool FormatLayoutFly( SwFlyFrm * );
// --> OD 2004-06-09 #i28701# - method is now public
sal_Bool _FormatFlyCntnt( const SwFlyFrm * );
};
class SwLayIdle
{
SwRootFrm *pRoot;
SwViewImp *pImp; // Hier Meldet sich der Idler an und ab.
SwCntntNode *pCntntNode; // Hier wird die aktuelle Cursorposition
xub_StrLen nTxtPos; // zwischengespeichert.
sal_Bool bPageValid; // Konnte die Seite alles validiert werden?
sal_Bool bAllValid; // Konnte alles validiert werden?
#ifdef DBG_UTIL
sal_Bool bIndicator;
#endif
#ifdef _LAYACT_CXX
#ifdef DBG_UTIL
void ShowIdle( ColorData eName );
#endif
enum IdleJobType{ ONLINE_SPELLING, AUTOCOMPLETE_WORDS, WORD_COUNT, SMART_TAGS }; // SMARTTAGS
sal_Bool _DoIdleJob( const SwCntntFrm*, IdleJobType );
sal_Bool DoIdleJob( IdleJobType, sal_Bool bVisAreaOnly );
#endif
public:
SwLayIdle( SwRootFrm *pRt, SwViewImp *pImp );
~SwLayIdle();
};
inline void SwLayAction::SetCheckPageNum( sal_uInt16 nNew )
{
if ( nNew < nCheckPageNum )
nCheckPageNum = nNew;
}
#endif //_LAYACT_HXX