Translated german code comments to english
This commit is contained in:
committed by
Jan Holesovsky
parent
7ee38e1b53
commit
c589da46bf
@@ -65,14 +65,14 @@
|
||||
#include <ndtxt.hxx>
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
// Move-Methoden
|
||||
// Move methods
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
/*************************************************************************
|
||||
|*
|
||||
|* SwCntntFrm::ShouldBwdMoved()
|
||||
|*
|
||||
|* Beschreibung Returnwert sagt, ob der Frm verschoben werden sollte.
|
||||
|* Description Return value tells whether the Frm should be moved.
|
||||
|*
|
||||
|*************************************************************************/
|
||||
|
||||
@@ -81,27 +81,24 @@ sal_Bool SwCntntFrm::ShouldBwdMoved( SwLayoutFrm *pNewUpper, sal_Bool, sal_Bool
|
||||
{
|
||||
if ( (SwFlowFrm::IsMoveBwdJump() || !IsPrevObjMove()))
|
||||
{
|
||||
//Das zurueckfliessen von Frm's ist leider etwas Zeitintensiv.
|
||||
//Der haufigste Fall ist der, dass dort wo der Frm hinfliessen
|
||||
//moechte die FixSize die gleiche ist, die der Frm selbst hat.
|
||||
//In diesem Fall kann einfach geprueft werden, ob der Frm genug
|
||||
//Platz fuer seine VarSize findet, ist dies nicht der Fall kann
|
||||
//gleich auf das Verschieben verzichtet werden.
|
||||
//Die Pruefung, ob der Frm genug Platz findet fuehrt er selbst
|
||||
//durch, dabei wird beruecksichtigt, dass er sich moeglicherweise
|
||||
//aufspalten kann.
|
||||
//Wenn jedoch die FixSize eine andere ist oder Flys im Spiel sind
|
||||
//(an der alten oder neuen Position) hat alle Prueferei keinen Sinn
|
||||
//der Frm muss dann halt Probehalber verschoben werden (Wenn ueberhaupt
|
||||
//etwas Platz zur Verfuegung steht).
|
||||
// Floating back a frm uses a bit of time unfortunately.
|
||||
// The most common case is the following: The Frm wants to float to
|
||||
// somewhere where the FixSize is the same that the Frm itself has already.
|
||||
// In that case it's pretty easy to check if the Frm has enough space
|
||||
// for it's VarSize. If this is NOT the case, we already know that
|
||||
// we don't need to move.
|
||||
// The Frm checks itself whether it has enough space - respecting the fact
|
||||
// that it could probably split itself if needed.
|
||||
// If, however, the FixSize differs from the Frm or there are Flys involved
|
||||
// (either in the old or the new position), we don't need to check anything,
|
||||
// and we have to move the Frm just to see what happens - if there's
|
||||
// some space available to do it, that is.
|
||||
|
||||
//Die FixSize der Umgebungen in denen Cntnts herumlungern ist immer
|
||||
//Die Breite.
|
||||
// The FixSize of the surroundings of Cntnts is always the width.
|
||||
|
||||
//Wenn mehr als ein Blatt zurueckgegangen wurde (z.B. ueberspringen
|
||||
//von Leerseiten), so muss in jedemfall gemoved werden - sonst wuerde,
|
||||
//falls der Frm nicht in das Blatt passt, nicht mehr auf die
|
||||
//dazwischenliegenden Blaetter geachtet werden.
|
||||
// If we moved more than one sheet back (for example jumping over empty
|
||||
// pages), we have to move either way. Otherwise, if the Frm doesn't fit
|
||||
// into the page, empty pages wouldn't be respected anymore.
|
||||
sal_uInt8 nMoveAnyway = 0;
|
||||
SwPageFrm * const pNewPage = pNewUpper->FindPageFrm();
|
||||
SwPageFrm *pOldPage = FindPageFrm();
|
||||
@@ -126,8 +123,12 @@ sal_Bool SwCntntFrm::ShouldBwdMoved( SwLayoutFrm *pNewUpper, sal_Bool, sal_Bool
|
||||
SWRECTFN( this )
|
||||
SWRECTFNX( pNewUpper )
|
||||
if( Abs( (pNewUpper->Prt().*fnRectX->fnGetWidth)() -
|
||||
(GetUpper()->Prt().*fnRect->fnGetWidth)() ) > 1 )
|
||||
nMoveAnyway = 2; // Damit kommt nur noch ein _WouldFit mit Umhaengen in Frage
|
||||
(GetUpper()->Prt().*fnRect->fnGetWidth)() ) > 1 ) {
|
||||
// In this case, only a _WouldFit with relocating is possible
|
||||
// TODO after translating the comment: what did the original german "umhaengen"
|
||||
// mean? What does actually make sense in context of the code here?
|
||||
nMoveAnyway = 2;
|
||||
}
|
||||
|
||||
// OD 2004-05-26 #i25904# - do *not* move backward,
|
||||
// if <nMoveAnyway> equals 3 and no space is left in new upper.
|
||||
@@ -192,17 +193,16 @@ sal_Bool SwCntntFrm::ShouldBwdMoved( SwLayoutFrm *pNewUpper, sal_Bool, sal_Bool
|
||||
{
|
||||
if ( nSpace )
|
||||
{
|
||||
//Keine Beruecksichtigung der Fussnoten die an dem Absatz
|
||||
//kleben, denn dies wuerde extrem unuebersichtlichen Code
|
||||
//beduerfen (wg. Beruecksichtung der Breiten und vor allem
|
||||
//der Flys, die ja wieder Einfluss auf die Fussnoten nehmen...).
|
||||
// Not respecting footnotes which are stuck to the paragraph:
|
||||
// This would require extremely confusing code, regarding the widths
|
||||
// and Flys, that in turn influence the footnotes, ...
|
||||
|
||||
// _WouldFit kann bei gleicher Breite und _nur_ selbst verankerten Flys
|
||||
// befragt werden.
|
||||
// _WouldFit kann auch gefragt werden, wenn _nur_ fremdverankerte Flys vorliegen,
|
||||
// dabei ist sogar die Breite egal, da ein TestFormat in der neuen Umgebung
|
||||
// vorgenommen wird.
|
||||
//
|
||||
// _WouldFit can only be used if the width is the same and ONLY
|
||||
// with self-anchored Flys.
|
||||
|
||||
// _WouldFit can also be used if ONLY Flys anchored somewhere else are present.
|
||||
// In this case, the width doesn't even matter, because we're running a TestFormat
|
||||
// in the new surrounding.
|
||||
const sal_uInt8 nBwdMoveNecessaryResult =
|
||||
BwdMoveNecessary( pNewPage, aRect);
|
||||
const bool bObjsInNewUpper( nBwdMoveNecessaryResult == 2 ||
|
||||
@@ -211,16 +211,16 @@ sal_Bool SwCntntFrm::ShouldBwdMoved( SwLayoutFrm *pNewUpper, sal_Bool, sal_Bool
|
||||
return _WouldFit( nSpace, pNewUpper, nMoveAnyway == 2,
|
||||
bObjsInNewUpper );
|
||||
}
|
||||
//Bei einem spaltigen Bereichsfrischling kann _WouldFit kein
|
||||
//brauchbares Ergebnis liefern, also muessen wir wirklich
|
||||
//zurueckfliessen
|
||||
// It's impossible for _WouldFit to return a usable result if
|
||||
// we have a fresh multi-column section - so we really have to
|
||||
// float back
|
||||
else if( pNewUpper->IsInSct() && pNewUpper->IsColBodyFrm() &&
|
||||
!(pNewUpper->Prt().*fnRectX->fnGetWidth)() &&
|
||||
( pNewUpper->GetUpper()->GetPrev() ||
|
||||
pNewUpper->GetUpper()->GetNext() ) )
|
||||
return sal_True;
|
||||
else
|
||||
return sal_False; // Kein Platz, dann ist es sinnlos, zurueckzufliessen
|
||||
return sal_False; // No space. No sense in floating back
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -236,27 +236,27 @@ sal_Bool SwCntntFrm::ShouldBwdMoved( SwLayoutFrm *pNewUpper, sal_Bool, sal_Bool
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
// Calc-Methoden
|
||||
// Calc methods
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
/*************************************************************************
|
||||
|*
|
||||
|* SwFrm::Prepare()
|
||||
|*
|
||||
|* Beschreibung Bereitet den Frm auf die 'Formatierung' (MakeAll())
|
||||
|* vor. Diese Methode dient dazu auf dem Stack Platz einzusparen,
|
||||
|* denn zur Positionsberechnung des Frm muss sichergestellt sein, dass
|
||||
|* die Position von Upper und Prev gueltig sind, mithin also ein
|
||||
|* rekursiver Aufruf (Schleife waere relativ teuer, da selten notwendig).
|
||||
|* Jeder Aufruf von MakeAll verbraucht aber ca. 500Byte Stack -
|
||||
|* das Ende ist leicht abzusehen. _Prepare benoetigt nur wenig Stack,
|
||||
|* deshalb solle der Rekursive Aufruf hier kein Problem sein.
|
||||
|* Ein weiterer Vorteil ist, das eines schoenen Tages das _Prepare und
|
||||
|* damit die Formatierung von Vorgaengern umgangen werden kann.
|
||||
|* So kann evtl. mal 'schnell' an's Dokumentende gesprungen werden.
|
||||
|* Description: Prepares the Frm for "formatting" (MakeAll()).
|
||||
|* This method serves to save stack space: To calculate the position
|
||||
|* of the Frm we have to make sure that the positions of Upper and Prev
|
||||
|* respectively are valid. This may require a recursive call (a loop
|
||||
|* would be quite expensive, as it's not required very often).
|
||||
|* Every call of MakeAll requires around 500 bytes on the stack - you
|
||||
|* easily see where this leads. _Prepare requires only a little bit of
|
||||
|* stack space, so the recursive call should not be a problem here.
|
||||
|* Another advantage is that one nice day, _Prepare and with it
|
||||
|* the formatting of predecessors could be avoided. Then it could
|
||||
|* probably be possible to jump "quickly" to the document's end.
|
||||
|*
|
||||
|*************************************************************************/
|
||||
//Zwei kleine Freundschaften werden hier zu einem Geheimbund.
|
||||
// Two little friendships form a secret society
|
||||
inline void PrepareLock( SwFlowFrm *pTab )
|
||||
{
|
||||
pTab->LockJoin();
|
||||
@@ -285,7 +285,7 @@ void SwFrm::PrepareMake()
|
||||
{
|
||||
if ( lcl_IsCalcUpperAllowed( *this ) )
|
||||
GetUpper()->Calc();
|
||||
OSL_ENSURE( GetUpper(), ":-( Layoutgeruest wackelig (Upper wech)." );
|
||||
OSL_ENSURE( GetUpper(), ":-( Layout unstable (Upper gone)." );
|
||||
if ( !GetUpper() )
|
||||
return;
|
||||
|
||||
@@ -330,39 +330,37 @@ void SwFrm::PrepareMake()
|
||||
SwFrm *pFrm = GetUpper()->Lower();
|
||||
while ( pFrm != this )
|
||||
{
|
||||
OSL_ENSURE( pFrm, ":-( Layoutgeruest wackelig (this not found)." );
|
||||
OSL_ENSURE( pFrm, ":-( Layout unstable (this not found)." );
|
||||
if ( !pFrm )
|
||||
return; //Oioioioi ...
|
||||
|
||||
if ( !pFrm->IsValid() )
|
||||
{
|
||||
//Ein kleiner Eingriff der hoffentlich etwas zur Verbesserung
|
||||
//der Stabilitaet beitraegt:
|
||||
//Wenn ich Follow _und_ Nachbar eines Frms vor mir bin,
|
||||
//so wuerde dieser mich beim Formatieren deleten; wie jeder
|
||||
//leicht sehen kann waere dies eine etwas unuebersichtliche
|
||||
//Situation die es zu vermeiden gilt.
|
||||
// A small interference that hopefully improves on the stability:
|
||||
// If I'm Follow AND neighbor of a Frm before me, it would delete
|
||||
// me when formatting. This as you can see could easily become a
|
||||
// confusing situation that we want to avoid.
|
||||
if ( bFoll && pFrm->IsFlowFrm() &&
|
||||
(SwFlowFrm::CastFlowFrm(pFrm))->IsAnFollow( pThis ) )
|
||||
break;
|
||||
|
||||
//MA: 24. Mar. 94, Calc wuerde doch nur wieder in ein _Prepare laufen und so
|
||||
//die ganze Kette nocheinmal abhuenern.
|
||||
//MA: 24. Mar. 94, Calc would run into a _Prepare again and cause the whole chain to
|
||||
// be run again.
|
||||
// pFrm->Calc();
|
||||
pFrm->MakeAll();
|
||||
if( IsSctFrm() && !((SwSectionFrm*)this)->GetSection() )
|
||||
break;
|
||||
}
|
||||
//Die Kette kann bei CntntFrms waehrend des durchlaufens
|
||||
//aufgebrochen werden, deshalb muss der Nachfolger etwas
|
||||
//umstaendlich ermittelt werden. However, irgendwann _muss_
|
||||
//ich wieder bei mir selbst ankommen.
|
||||
// With CntntFrms, the chain may be broken while walking through
|
||||
// it. Therefore we have to figure out the follower in a bit more
|
||||
// complicated way. However, I'll HAVE to get back to myself
|
||||
// sometime again.
|
||||
pFrm = pFrm->FindNext();
|
||||
|
||||
//Wenn wir in einem SectionFrm gestartet sind, koennen wir durch die
|
||||
//MakeAll-Aufrufe in einen Section-Follow gewandert sein.
|
||||
//FindNext liefert allerdings den SectionFrm, nicht seinen Inhalt.
|
||||
// => wir finden uns selbst nicht mehr!
|
||||
// If we started out in a SectionFrm, it might have happened that
|
||||
// we landed in a Section Follow via the MakeAll calls.
|
||||
// FindNext only gives us the SectionFrm, not it's content - we
|
||||
// won't find ourselves anymore!
|
||||
if( bNoSect && pFrm && pFrm->IsSctFrm() )
|
||||
{
|
||||
SwFrm* pCnt = ((SwSectionFrm*)pFrm)->ContainsAny();
|
||||
@@ -370,14 +368,14 @@ void SwFrm::PrepareMake()
|
||||
pFrm = pCnt;
|
||||
}
|
||||
}
|
||||
OSL_ENSURE( GetUpper(), "Layoutgeruest wackelig (Upper wech II)." );
|
||||
OSL_ENSURE( GetUpper(), "Layout unstable (Upper gone II)." );
|
||||
if ( !GetUpper() )
|
||||
return;
|
||||
|
||||
if ( lcl_IsCalcUpperAllowed( *this ) )
|
||||
GetUpper()->Calc();
|
||||
|
||||
OSL_ENSURE( GetUpper(), "Layoutgeruest wackelig (Upper wech III)." );
|
||||
OSL_ENSURE( GetUpper(), "Layout unstable (Upper gone III)." );
|
||||
}
|
||||
|
||||
if ( bTab && !bOldTabLock )
|
||||
@@ -393,7 +391,7 @@ void SwFrm::OptPrepareMake()
|
||||
!GetUpper()->IsFlyFrm() )
|
||||
{
|
||||
GetUpper()->Calc();
|
||||
OSL_ENSURE( GetUpper(), ":-( Layoutgeruest wackelig (Upper wech)." );
|
||||
OSL_ENSURE( GetUpper(), ":-( Layout unstable (Upper gone)." );
|
||||
if ( !GetUpper() )
|
||||
return;
|
||||
}
|
||||
@@ -416,7 +414,7 @@ void SwFrm::PrepareCrsr()
|
||||
GetUpper()->PrepareCrsr();
|
||||
GetUpper()->Calc();
|
||||
|
||||
OSL_ENSURE( GetUpper(), ":-( Layoutgeruest wackelig (Upper wech)." );
|
||||
OSL_ENSURE( GetUpper(), ":-( Layout unstable (Upper gone)." );
|
||||
if ( !GetUpper() )
|
||||
return;
|
||||
|
||||
@@ -443,28 +441,26 @@ void SwFrm::PrepareCrsr()
|
||||
SwFrm *pFrm = GetUpper()->Lower();
|
||||
while ( pFrm != this )
|
||||
{
|
||||
OSL_ENSURE( pFrm, ":-( Layoutgeruest wackelig (this not found)." );
|
||||
OSL_ENSURE( pFrm, ":-( Layout unstable (this not found)." );
|
||||
if ( !pFrm )
|
||||
return; //Oioioioi ...
|
||||
|
||||
if ( !pFrm->IsValid() )
|
||||
{
|
||||
//Ein kleiner Eingriff der hoffentlich etwas zur Verbesserung
|
||||
//der Stabilitaet beitraegt:
|
||||
//Wenn ich Follow _und_ Nachbar eines Frms vor mir bin,
|
||||
//so wuerde dieser mich beim Formatieren deleten; wie jeder
|
||||
//leicht sehen kann waere dies eine etwas unuebersichtliche
|
||||
//Situation die es zu vermeiden gilt.
|
||||
// A small interference that hopefully improves on the stability:
|
||||
// If I'm Follow AND neighbor of a Frm before me, it would delete
|
||||
// me when formatting. This as you can see could easily become a
|
||||
// confusing situation that we want to avoid.
|
||||
if ( bFoll && pFrm->IsFlowFrm() &&
|
||||
(SwFlowFrm::CastFlowFrm(pFrm))->IsAnFollow( pThis ) )
|
||||
break;
|
||||
|
||||
pFrm->MakeAll();
|
||||
}
|
||||
//Die Kette kann bei CntntFrms waehrend des durchlaufens
|
||||
//aufgebrochen werden, deshalb muss der Nachfolger etwas
|
||||
//umstaendlich ermittelt werden. However, irgendwann _muss_
|
||||
//ich wieder bei mir selbst ankommen.
|
||||
// With CntntFrms, the chain may be broken while walking through
|
||||
// it. Therefore we have to figure out the follower in a bit more
|
||||
// complicated way. However, I'll HAVE to get back to myself
|
||||
// sometime again.
|
||||
pFrm = pFrm->FindNext();
|
||||
if( bNoSect && pFrm && pFrm->IsSctFrm() )
|
||||
{
|
||||
@@ -473,13 +469,13 @@ void SwFrm::PrepareCrsr()
|
||||
pFrm = pCnt;
|
||||
}
|
||||
}
|
||||
OSL_ENSURE( GetUpper(), "Layoutgeruest wackelig (Upper wech II)." );
|
||||
OSL_ENSURE( GetUpper(), "Layout unstable (Upper gone II)." );
|
||||
if ( !GetUpper() )
|
||||
return;
|
||||
|
||||
GetUpper()->Calc();
|
||||
|
||||
OSL_ENSURE( GetUpper(), "Layoutgeruest wackelig (Upper wech III)." );
|
||||
OSL_ENSURE( GetUpper(), "Layout unstable (Upper gone III)." );
|
||||
|
||||
if ( bTab && !bOldTabLock )
|
||||
::PrepareUnlock( (SwTabFrm*)this );
|
||||
@@ -493,8 +489,7 @@ void SwFrm::PrepareCrsr()
|
||||
|*
|
||||
|*************************************************************************/
|
||||
|
||||
// Hier wird GetPrev() zurueckgegeben, allerdings werden
|
||||
// dabei leere SectionFrms ueberlesen
|
||||
// Here we return GetPrev(); however we will overlook empty SectionFrms
|
||||
SwFrm* lcl_Prev( SwFrm* pFrm, sal_Bool bSectPrv = sal_True )
|
||||
{
|
||||
SwFrm* pRet = pFrm->GetPrev();
|
||||
@@ -535,7 +530,7 @@ void SwFrm::MakePos()
|
||||
!pPrv->GetAttrSet()->GetKeep().GetValue()
|
||||
)
|
||||
{
|
||||
pPrv->Calc(); //hierbei kann der Prev verschwinden!
|
||||
pPrv->Calc(); // This may cause Prev to vanish!
|
||||
}
|
||||
else if ( pPrv->Frm().Top() == 0 )
|
||||
{
|
||||
@@ -663,8 +658,7 @@ void SwFrm::MakePos()
|
||||
// #i28701# - new type <SwSortedObjs>
|
||||
void lcl_CheckObjects( SwSortedObjs* pSortedObjs, SwFrm* pFrm, long& rBot )
|
||||
{
|
||||
//Und dann kann es natuerlich noch Absatzgebundene
|
||||
//Rahmen geben, die unterhalb ihres Absatzes stehen.
|
||||
// And then there can be paragraph anchored frames that sit below their paragraph.
|
||||
long nMax = 0;
|
||||
for ( sal_uInt16 i = 0; i < pSortedObjs->Count(); ++i )
|
||||
{
|
||||
@@ -688,7 +682,7 @@ void lcl_CheckObjects( SwSortedObjs* pSortedObjs, SwFrm* pFrm, long& rBot )
|
||||
nTmp = pObj->GetObjRect().Bottom();
|
||||
nMax = Max( nTmp, nMax );
|
||||
}
|
||||
++nMax; //Unterkante vs. Hoehe!
|
||||
++nMax; // Lower edge vs. height!
|
||||
rBot = Max( rBot, nMax );
|
||||
}
|
||||
|
||||
@@ -696,8 +690,8 @@ void SwPageFrm::MakeAll()
|
||||
{
|
||||
PROTOCOL_ENTER( this, PROT_MAKEALL, 0, 0 )
|
||||
|
||||
const SwRect aOldRect( Frm() ); //Anpassung der Root-Groesse
|
||||
const SwLayNotify aNotify( this ); //uebernimmt im DTor die Benachrichtigung
|
||||
const SwRect aOldRect( Frm() ); // Adjust root size
|
||||
const SwLayNotify aNotify( this ); // takes care of the notification in the dtor
|
||||
SwBorderAttrAccess *pAccess = 0;
|
||||
const SwBorderAttrs*pAttrs = 0;
|
||||
|
||||
@@ -725,7 +719,7 @@ void SwPageFrm::MakeAll()
|
||||
pAccess = new SwBorderAttrAccess( SwFrm::GetCache(), this );
|
||||
pAttrs = pAccess->Get();
|
||||
}
|
||||
//Bei der BrowseView gelten feste Einstellungen.
|
||||
// In BrowseView, we use fixed settings
|
||||
ViewShell *pSh = getRootFrm()->GetCurrShell();
|
||||
if ( pSh && pSh->GetViewOptions()->getBrowseMode() )
|
||||
{
|
||||
@@ -748,13 +742,12 @@ void SwPageFrm::MakeAll()
|
||||
SwLayoutFrm *pBody = FindBodyCont();
|
||||
if ( pBody && pBody->Lower() && pBody->Lower()->IsColumnFrm() )
|
||||
{
|
||||
//Fuer Spalten gilt eine feste Hoehe
|
||||
// Columns have a fixed height
|
||||
Frm().Height( pAttrs->GetSize().Height() );
|
||||
}
|
||||
else
|
||||
{
|
||||
//Fuer Seiten ohne Spalten bestimmt der Inhalt die
|
||||
//Groesse.
|
||||
// In pages without columns, the content defines the size.
|
||||
long nBot = Frm().Top() + nTop;
|
||||
SwFrm *pFrm = Lower();
|
||||
while ( pFrm )
|
||||
@@ -793,15 +786,15 @@ void SwPageFrm::MakeAll()
|
||||
if ( !pFrm->IsBodyFrm() )
|
||||
nTmp = Min( nTmp, pFrm->Frm().Height() );
|
||||
nBot += nTmp;
|
||||
// Hier werden die absatzgebundenen Objekte ueberprueft,
|
||||
// ob sie ueber den Body/FtnCont hinausragen.
|
||||
// Here we check whether paragraph anchored objects
|
||||
// protrude outside the Body/FtnCont.
|
||||
if( pSortedObjs && !pFrm->IsHeaderFrm() &&
|
||||
!pFrm->IsFooterFrm() )
|
||||
lcl_CheckObjects( pSortedObjs, pFrm, nBot );
|
||||
pFrm = pFrm->GetNext();
|
||||
}
|
||||
nBot += nBottom;
|
||||
//Und die Seitengebundenen
|
||||
// And the page anchored ones
|
||||
if ( pSortedObjs )
|
||||
lcl_CheckObjects( pSortedObjs, this, nBot );
|
||||
nBot -= Frm().Top();
|
||||
@@ -824,8 +817,8 @@ void SwPageFrm::MakeAll()
|
||||
bValidSize = bValidPrtArea = sal_True;
|
||||
}
|
||||
else
|
||||
{ //FixSize einstellen, bei Seiten nicht vom Upper sondern vom
|
||||
//Attribut vorgegeben.
|
||||
{ // Set FixSize. For pages, this is not done from Upper, but from
|
||||
// the attribute.
|
||||
Frm().SSize( pAttrs->GetSize() );
|
||||
Format( pAttrs );
|
||||
}
|
||||
@@ -853,7 +846,7 @@ void SwLayoutFrm::MakeAll()
|
||||
{
|
||||
PROTOCOL_ENTER( this, PROT_MAKEALL, 0, 0 )
|
||||
|
||||
//uebernimmt im DTor die Benachrichtigung
|
||||
// takes care of the notification in the dtor
|
||||
const SwLayNotify aNotify( this );
|
||||
sal_Bool bVert = IsVertical();
|
||||
//Badaa: 2008-04-18 * Support for Classical Mongolian Script (SCMS) joint with Jiayanmin
|
||||
@@ -879,8 +872,7 @@ void SwLayoutFrm::MakeAll()
|
||||
{
|
||||
if ( !bValidSize )
|
||||
{
|
||||
//FixSize einstellen, die VarSize wird von Format() nach
|
||||
//Berechnung der PrtArea eingestellt.
|
||||
// Set FixSize; VarSize is set by Format() after calculating the PrtArea
|
||||
bValidPrtArea = sal_False;
|
||||
|
||||
SwTwips nPrtWidth = (GetUpper()->Prt().*fnRect->fnGetWidth)();
|
||||
@@ -994,10 +986,10 @@ sal_Bool SwCntntFrm::MakePrtArea( const SwBorderAttrs &rAttrs )
|
||||
}
|
||||
else
|
||||
{
|
||||
//Vereinfachung: CntntFrms sind immer in der Hoehe Variabel!
|
||||
// Simplification: CntntFrms are always variable in height!
|
||||
|
||||
//An der FixSize gibt der umgebende Frame die Groesse vor, die
|
||||
//Raender werden einfach abgezogen.
|
||||
// At the FixSize, the surrounding Frame enforces the size;
|
||||
// the borders are simply subtracted.
|
||||
const long nLeft = rAttrs.CalcLeft( this );
|
||||
const long nRight = ((SwBorderAttrs&)rAttrs).CalcRight( this );
|
||||
(this->*fnRect->fnSetXMargins)( nLeft, nRight );
|
||||
@@ -1005,12 +997,12 @@ sal_Bool SwCntntFrm::MakePrtArea( const SwBorderAttrs &rAttrs )
|
||||
ViewShell *pSh = getRootFrm()->GetCurrShell();
|
||||
SwTwips nWidthArea;
|
||||
if( pSh && 0!=(nWidthArea=(pSh->VisArea().*fnRect->fnGetWidth)()) &&
|
||||
GetUpper()->IsPageBodyFrm() && // nicht dagegen bei BodyFrms in Columns
|
||||
GetUpper()->IsPageBodyFrm() && // Not against for BodyFrms in Columns
|
||||
pSh->GetViewOptions()->getBrowseMode() )
|
||||
{
|
||||
//Nicht ueber die Kante des sichbaren Bereiches hinausragen.
|
||||
//Die Seite kann breiter sein, weil es Objekte mit "ueberbreite"
|
||||
//geben kann (RootFrm::ImplCalcBrowseWidth())
|
||||
// Do not protrude the edge of the visible area. The page may be
|
||||
// wider, because there may be objects with excess width
|
||||
// (RootFrm::ImplCalcBrowseWidth())
|
||||
long nMinWidth = 0;
|
||||
|
||||
for (sal_uInt16 i = 0; GetDrawObjs() && i < GetDrawObjs()->Count();++i)
|
||||
@@ -1045,8 +1037,8 @@ sal_Bool SwCntntFrm::MakePrtArea( const SwBorderAttrs &rAttrs )
|
||||
|
||||
if ( (Prt().*fnRect->fnGetWidth)() <= MINLAY )
|
||||
{
|
||||
//Die PrtArea sollte schon wenigstens MINLAY breit sein, passend
|
||||
//zu den Minimalwerten des UI
|
||||
// The PrtArea should already be at least MINLAY wide, matching the
|
||||
// minimal values of the UI
|
||||
(Prt().*fnRect->fnSetWidth)( Min( long(MINLAY),
|
||||
(Frm().*fnRect->fnGetWidth)() ) );
|
||||
SwTwips nTmp = (Frm().*fnRect->fnGetWidth)() -
|
||||
@@ -1055,16 +1047,17 @@ sal_Bool SwCntntFrm::MakePrtArea( const SwBorderAttrs &rAttrs )
|
||||
(Prt().*fnRect->fnSetLeft)( nTmp );
|
||||
}
|
||||
|
||||
//Fuer die VarSize gelten folgende Regeln:
|
||||
//1. Der erste einer Kette hat keinen Rand nach oben
|
||||
//2. Nach unten gibt es nie einen Rand
|
||||
//3. Der Rand nach oben ist das Maximum aus dem Abstand des
|
||||
// Prev nach unten und dem eigenen Abstand nach oben.
|
||||
//Die drei Regeln werden auf die Berechnung der Freiraeume, die von
|
||||
//UL- bzw. LRSpace vorgegeben werden, angewand. Es gibt in alle
|
||||
//Richtungen jedoch ggf. trotzdem einen Abstand; dieser wird durch
|
||||
//Umrandung und/oder Schatten vorgegeben.
|
||||
//4. Der Abstand fuer TextFrms entspricht mindestens dem Durchschuss
|
||||
// The following rules apply for VarSize:
|
||||
// 1. The first entry of a chain has no top border
|
||||
// 2. There is never a bottom border
|
||||
// 3. The top border is the maximum of the distance
|
||||
// of Prev downwards and our own distance upwards
|
||||
// Those three rules apply when calculating spacings
|
||||
// that are given by UL- and LRSpace. There might be a spacing
|
||||
// in all directions however; this may be caused by borders
|
||||
// and / or shadows.
|
||||
// 4. The spacing for TextFrms corresponds to the interline lead,
|
||||
// at a minimum.
|
||||
|
||||
nUpper = CalcUpperSpace( &rAttrs, NULL );
|
||||
|
||||
@@ -1090,8 +1083,8 @@ sal_Bool SwCntntFrm::MakePrtArea( const SwBorderAttrs &rAttrs )
|
||||
nUpper -= (Frm().*fnRect->fnGetHeight)() -
|
||||
(Prt().*fnRect->fnGetHeight)();
|
||||
}
|
||||
//Wenn Unterschiede zwischen Alter und neuer Groesse,
|
||||
//Grow() oder Shrink() rufen
|
||||
// If there's a difference between old and new size, call Grow() or
|
||||
// Shrink() respectively.
|
||||
if ( nUpper )
|
||||
{
|
||||
if ( nUpper > 0 )
|
||||
@@ -1125,7 +1118,7 @@ inline void ValidateSz( SwFrm *pFrm )
|
||||
|
||||
void SwCntntFrm::MakeAll()
|
||||
{
|
||||
OSL_ENSURE( GetUpper(), "keinen Upper?" );
|
||||
OSL_ENSURE( GetUpper(), "no Upper?" );
|
||||
OSL_ENSURE( IsTxtFrm(), "MakeAll(), NoTxt" );
|
||||
|
||||
if ( !IsFollow() && StackHack::IsLocked() )
|
||||
@@ -1140,7 +1133,7 @@ void SwCntntFrm::MakeAll()
|
||||
|
||||
if ( ((SwTxtFrm*)this)->IsLocked() )
|
||||
{
|
||||
OSL_FAIL( "Format fuer gelockten TxtFrm." );
|
||||
OSL_FAIL( "Format for locked TxtFrm." );
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1165,7 +1158,7 @@ void SwCntntFrm::MakeAll()
|
||||
}
|
||||
#endif
|
||||
|
||||
//uebernimmt im DTor die Benachrichtigung
|
||||
// takes care of the notification in the dtor
|
||||
SwCntntNotify *pNotify = new SwCntntNotify( this );
|
||||
|
||||
// as long as bMakePage is true, a new page can be created (exactly once)
|
||||
@@ -1175,28 +1168,24 @@ void SwCntntFrm::MakeAll()
|
||||
// as long as bMovedFwd is false, the Frm may flow backwards (until
|
||||
// it has been moved forward once)
|
||||
bool bMovedFwd = false;
|
||||
sal_Bool bFormatted = sal_False; //Fuer die Witwen und Waisen Regelung
|
||||
//wird der letzte CntntFrm einer Kette
|
||||
//u.U. zum Formatieren angeregt, dies
|
||||
//braucht nur einmal zu passieren.
|
||||
//Immer wenn der Frm gemoved wird muss
|
||||
//das Flag zurueckgesetzt werden.
|
||||
sal_Bool bMustFit = sal_False; //Wenn einmal die Notbremse gezogen wurde,
|
||||
//werden keine anderen Prepares mehr
|
||||
//abgesetzt.
|
||||
sal_Bool bFitPromise = sal_False; //Wenn ein Absatz nicht passte, mit WouldFit
|
||||
//aber verspricht, dass er sich passend
|
||||
//einstellt wird dieses Flag gesetzt.
|
||||
//Wenn er dann sein Versprechen nicht haelt,
|
||||
//kann kontrolliert verfahren werden.
|
||||
sal_Bool bFormatted = sal_False; // For the widow/orphan rules, we encourage the
|
||||
// last CntntFrm of a chain to format. This only
|
||||
// needs to happen once. Every time the Frm is
|
||||
// moved, the flag will have to be reset.
|
||||
sal_Bool bMustFit = sal_False; // Once the emergency brake is pulled,
|
||||
// no other prepares will be triggered
|
||||
sal_Bool bFitPromise = sal_False; // If a paragraph didn't fit, but promises
|
||||
// with WouldFit that it would adjust accordingly,
|
||||
// this flag is set. If it turns out that it
|
||||
// didn't keep it's promise, we can act in a
|
||||
// controlled fashion.
|
||||
sal_Bool bMoveable;
|
||||
const sal_Bool bFly = IsInFly();
|
||||
const sal_Bool bTab = IsInTab();
|
||||
const sal_Bool bFtn = IsInFtn();
|
||||
const sal_Bool bSct = IsInSct();
|
||||
Point aOldFrmPos; //Damit bei Turnarounds jew. mit der
|
||||
Point aOldPrtPos; //letzten Pos verglichen und geprueft
|
||||
//werden kann, ob ein Prepare sinnvoll ist.
|
||||
Point aOldFrmPos; // This is so we can compare with the last pos
|
||||
Point aOldPrtPos; // and determine whether it makes sense to Prepare
|
||||
|
||||
SwBorderAttrAccess aAccess( SwFrm::GetCache(), this );
|
||||
const SwBorderAttrs &rAttrs = *aAccess.Get();
|
||||
@@ -1256,8 +1245,8 @@ void SwCntntFrm::MakeAll()
|
||||
}
|
||||
}
|
||||
|
||||
//Wenn ein Follow neben seinem Master steht und nicht passt, kann er
|
||||
//gleich verschoben werden.
|
||||
// If a Follow sits next to it's Master and doesn't fit, we know it can
|
||||
// be moved right now.
|
||||
if ( lcl_Prev( this ) && ((SwTxtFrm*)this)->IsFollow() && IsMoveable() )
|
||||
{
|
||||
bMovedFwd = true;
|
||||
@@ -1309,11 +1298,10 @@ void SwCntntFrm::MakeAll()
|
||||
bMovedFwd = true;
|
||||
if ( bMovedBwd )
|
||||
{
|
||||
//Beim zurueckfliessen wurde der Upper angeregt sich
|
||||
//vollstaendig zu Painten, dass koennen wir uns jetzt
|
||||
//nach dem hin und her fliessen sparen.
|
||||
// while floating back, the Upper was encouraged to completely
|
||||
// re-paint itself. We can skip this now after floating sideways.
|
||||
GetUpper()->ResetCompletePaint();
|
||||
//Der Vorgaenger wurde Invalidiert, das ist jetzt auch obsolete.
|
||||
// The predecessor was invalidated, so this is obsolete as well now.
|
||||
OSL_ENSURE( pPre, "missing old Prev" );
|
||||
if( !pPre->IsSctFrm() )
|
||||
::ValidateSz( pPre );
|
||||
@@ -1328,7 +1316,7 @@ void SwCntntFrm::MakeAll()
|
||||
if ( !bValidPos )
|
||||
MakePos();
|
||||
|
||||
//FixSize einstellen, die VarSize wird von Format() justiert.
|
||||
//Set FixSize. VarSize is being adjusted by Format().
|
||||
if ( !bValidSize )
|
||||
{
|
||||
// #125452#
|
||||
@@ -1387,11 +1375,10 @@ void SwCntntFrm::MakeAll()
|
||||
}
|
||||
}
|
||||
|
||||
//Damit die Witwen- und Waisen-Regelung eine Change bekommt muss der
|
||||
//CntntFrm benachrichtigt werden.
|
||||
//Kriterium:
|
||||
//- Er muss Moveable sein (sonst mach das Spalten keinen Sinn.)
|
||||
//- Er muss mit der Unterkante der PrtArea des Upper ueberlappen.
|
||||
// To make the widow and orphan rules work, we need to notify the CntntFrm.
|
||||
// Criteria:
|
||||
// - It needs to be movable (otherwise, splitting doesn't make sense)
|
||||
// - It needs to overlap with the lower edge of the PrtArea of the Upper
|
||||
if ( !bMustFit )
|
||||
{
|
||||
sal_Bool bWidow = sal_True;
|
||||
@@ -1405,8 +1392,8 @@ void SwCntntFrm::MakeAll()
|
||||
if( (Frm().*fnRect->fnGetPos)() != aOldFrmPos ||
|
||||
(Prt().*fnRect->fnGetPos)() != aOldPrtPos )
|
||||
{
|
||||
// In diesem Prepare erfolgt ggf. ein _InvalidateSize().
|
||||
// bValidSize wird sal_False und das Format() wird gerufen.
|
||||
// In this Prepare, an _InvalidateSize() might happen.
|
||||
// bValidSize becomes sal_False and Format() gets called.
|
||||
Prepare( PREP_POS_CHGD, (const void*)&bFormatted, sal_False );
|
||||
if ( bWidow && GetFollow() )
|
||||
{ Prepare( PREP_WIDOWS_ORPHANS, 0, sal_False );
|
||||
@@ -1481,7 +1468,7 @@ void SwCntntFrm::MakeAll()
|
||||
}
|
||||
SwFrm *pNxt = HasFollow() ? NULL : FindNext();
|
||||
while( pNxt && pNxt->IsSctFrm() )
|
||||
{ // Leere Bereiche auslassen, in die anderen hinein
|
||||
{ // Leave empty sections out, go into the other ones.
|
||||
if( ((SwSectionFrm*)pNxt)->GetSection() )
|
||||
{
|
||||
SwFrm* pTmp = ((SwSectionFrm*)pNxt)->ContainsAny();
|
||||
@@ -1512,8 +1499,8 @@ void SwCntntFrm::MakeAll()
|
||||
}
|
||||
}
|
||||
|
||||
//Der TxtFrm Validiert sich bei Fussnoten ggf. selbst, dass kann leicht
|
||||
//dazu fuehren, dass seine Position obwohl unrichtig valide ist.
|
||||
// In footnotes, the TxtFrm may validate itself, which can lead to the
|
||||
// situation that it's position is wrong despite being "valid".
|
||||
if ( bValidPos )
|
||||
{
|
||||
// #i59341#
|
||||
@@ -1547,29 +1534,31 @@ void SwCntntFrm::MakeAll()
|
||||
}
|
||||
}
|
||||
|
||||
//Wieder ein Wert ungueltig? - dann nochmal das ganze...
|
||||
// Yet again an invalid value? Repeat from the start...
|
||||
if ( !bValidPos || !bValidSize || !bValidPrtArea )
|
||||
continue;
|
||||
|
||||
//Fertig?
|
||||
// Achtung, wg. Hoehe==0, ist es besser statt Bottom() Top()+Height() zu nehmen
|
||||
// (kommt bei Undersized TxtFrms an der Unterkante eines spaltigen Bereichs vor)
|
||||
// Done?
|
||||
// Attention: because height == 0, it's better to use Top()+Height() instead of
|
||||
// Bottom(). This might happen with undersized TextFrms on the lower edge of a
|
||||
// multi-column section
|
||||
const long nPrtBottom = (GetUpper()->*fnRect->fnGetPrtBottom)();
|
||||
const long nBottomDist = (Frm().*fnRect->fnBottomDist)( nPrtBottom );
|
||||
if( nBottomDist >= 0 )
|
||||
{
|
||||
if ( bKeep && bMoveable )
|
||||
{
|
||||
//Wir sorgen dafuer, dass der Nachfolger gleich mit formatiert
|
||||
//wird. Dadurch halten wir das Heft in der Hand, bis wirklich
|
||||
//(fast) alles stabil ist. So vermeiden wir Endlosschleifen,
|
||||
//die durch staendig wiederholte Versuche entstehen.
|
||||
//Das bMoveFwdInvalid ist fuer #38407# notwendig. War urspruenglich
|
||||
//in flowfrm.cxx rev 1.38 behoben, das unterbrach aber obiges
|
||||
//Schema und spielte lieber Tuerme von Hanoi (#43669#).
|
||||
// We make sure the successor will be formatted the same.
|
||||
// This way, we keep control until (almost) everything is stable,
|
||||
// allowing us to avoid endless loops caused by ever repeating
|
||||
// retries.
|
||||
//
|
||||
// bMoveFwdInvalid is required for #38407#. This was originally solved
|
||||
// in flowfrm.cxx rev 1.38, but broke the above schema and
|
||||
// preferred to play towers of hanoi (#43669#).
|
||||
SwFrm *pNxt = HasFollow() ? NULL : FindNext();
|
||||
// Bei Bereichen nehmen wir lieber den Inhalt, denn nur
|
||||
// dieser kann ggf. die Seite wechseln
|
||||
// For sections we prefer the content, because it can change
|
||||
// the page if required.
|
||||
while( pNxt && pNxt->IsSctFrm() )
|
||||
{
|
||||
if( ((SwSectionFrm*)pNxt)->GetSection() )
|
||||
@@ -1601,13 +1590,12 @@ void SwCntntFrm::MakeAll()
|
||||
continue;
|
||||
}
|
||||
|
||||
//Ich passe nicht mehr in meinen Uebergeordneten, also ist es jetzt
|
||||
//an der Zeit moeglichst konstruktive Veranderungen vorzunehmen
|
||||
// I don't fit into my parents, so it's time to make changes
|
||||
// as constructively as possible.
|
||||
|
||||
//Wenn ich den uebergeordneten Frm nicht verlassen darf, habe
|
||||
//ich ein Problem; Frei nach Artur Dent tun wir das einzige das man
|
||||
//mit einen nicht loesbaren Problem tun kann: wir ignorieren es - und
|
||||
//zwar mit aller Kraft.
|
||||
//If I'm NOT allowed to leave the parent Frm, I've got a problem.
|
||||
// Following Arthur Dent, we do the only thing that you can do with
|
||||
// an unsolvable problem: We ignore it with all our power.
|
||||
if ( !bMoveable || IsUndersized() )
|
||||
{
|
||||
if( !bMoveable && IsInTab() )
|
||||
@@ -1621,15 +1609,15 @@ void SwCntntFrm::MakeAll()
|
||||
break;
|
||||
}
|
||||
|
||||
//Wenn ich nun ueberhaupt ganz und garnicht in meinen Upper passe
|
||||
//so kann die Situation vielleicht doch noch durch Aufbrechen
|
||||
//aufgeklart werden. Diese Situation tritt bei einem frisch
|
||||
//erzeugten Follow auf, der zwar auf die Folgeseite geschoben wurde
|
||||
//aber selbst noch zu gross fuer diese ist; also wiederum
|
||||
//aufgespalten werden muss.
|
||||
//Wenn ich nicht passe und nicht Spaltbar (WouldFit()) bin, so schicke
|
||||
//ich meinem TxtFrmanteil die Nachricht, dass eben falls moeglich
|
||||
//trotz des Attributes 'nicht aufspalten' aufgespalten werden muss.
|
||||
// If there's no way I can make myself fit into my Upper, the situation
|
||||
// could still probably be mitigated by splitting up.
|
||||
// This situation arises with freshly created Follows that had been moved
|
||||
// to the next page but is still too big for it - ie. needs to be split
|
||||
// as well.
|
||||
//
|
||||
// If I'm unable to split (WouldFit()) and can't be fitted, I'm going
|
||||
// to tell my TxtFrm part that, if possible, we still need to split despite
|
||||
// the "don't split" attribute.
|
||||
sal_Bool bMoveOrFit = sal_False;
|
||||
sal_Bool bDontMoveMe = !GetIndPrev();
|
||||
if( bDontMoveMe && IsInSct() )
|
||||
@@ -1661,14 +1649,13 @@ void SwCntntFrm::MakeAll()
|
||||
continue;
|
||||
}
|
||||
/* --------------------------------------------------
|
||||
* Frueher wurde in Rahmen und Bereichen niemals versucht,
|
||||
* durch bMoveOrFit den TxtFrm unter Verzicht auf seine
|
||||
* Attribute (Widows,Keep) doch noch passend zu bekommen.
|
||||
* Dies haette zumindest bei spaltigen Rahmen versucht
|
||||
* werden muessen, spaetestens bei verketteten Rahmen und
|
||||
* in Bereichen muss es versucht werden.
|
||||
* Ausnahme: Wenn wir im FormatWidthCols stehen, duerfen die
|
||||
* Attribute nicht ausser Acht gelassen werden.
|
||||
* In earlier days, we never tried to fit TextFrms in
|
||||
* frames and sections using bMoveOrFit by setting aside
|
||||
* the attributes (Widows, Keep).
|
||||
* This should have been done at least for column frames;
|
||||
* as it must be tried anyway with linked frames and sections.
|
||||
* Exception: If we sit in FormatWidthCols, we may not ignore
|
||||
* the attributes.
|
||||
* --------------------------------------------------*/
|
||||
else if ( !bFtn && bMoveable &&
|
||||
( !bFly || !FindFlyFrm()->IsColLocked() ) &&
|
||||
@@ -1678,20 +1665,20 @@ void SwCntntFrm::MakeAll()
|
||||
#if OSL_DEBUG_LEVEL > 0
|
||||
else
|
||||
{
|
||||
OSL_FAIL( "+TxtFrm hat WouldFit-Versprechen nicht eingehalten." );
|
||||
OSL_FAIL( "+TxtFrm didn't respect WouldFit promise." );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
//Mal sehen ob ich irgenwo Platz finde...
|
||||
//Benachbarte Fussnoten werden in _MoveFtnCntFwd 'vorgeschoben'
|
||||
// Let's see if I can find some space somewhere...
|
||||
// footnotes in the neighbourhood are moved into _MoveFtnCntFwd
|
||||
SwFrm *pPre = GetIndPrev();
|
||||
SwFrm *pOldUp = GetUpper();
|
||||
|
||||
/* MA 13. Oct. 98: Was soll das denn sein!?
|
||||
* AMA 14. Dec 98: Wenn ein spaltiger Bereich keinen Platz mehr fuer seinen ersten ContentFrm
|
||||
* bietet, so soll dieser nicht nur in die naechste Spalte, sondern ggf. bis zur naechsten
|
||||
* Seite wandern und dort einen Section-Follow erzeugen.
|
||||
/* MA 13. Oct. 98: What is this supposed to be!?
|
||||
* AMA 14. Dec 98: If a column section can't find any space for its first ContentFrm, it should be
|
||||
* moved not only to the next column, but probably even to the next page, creating
|
||||
* a section-follow there.
|
||||
*/
|
||||
if( IsInSct() && bMovedFwd && bMakePage && pOldUp->IsColBodyFrm() &&
|
||||
pOldUp->GetUpper()->GetUpper()->IsSctFrm() &&
|
||||
@@ -1741,7 +1728,7 @@ void SwCntntFrm::MakeAll()
|
||||
#endif
|
||||
}
|
||||
if ( bMovedBwd && GetUpper() )
|
||||
{ //Unuetz gewordene Invalidierungen zuruecknehmen.
|
||||
{ // Retire invalidations that have become useless.
|
||||
GetUpper()->ResetCompletePaint();
|
||||
if( pPre && !pPre->IsSctFrm() )
|
||||
::ValidateSz( pPre );
|
||||
@@ -1792,17 +1779,16 @@ void SwCntntFrm::MakeAll()
|
||||
|
||||
void MakeNxt( SwFrm *pFrm, SwFrm *pNxt )
|
||||
{
|
||||
//fix(25455): Validieren, sonst kommt es zu einer Rekursion.
|
||||
//Der erste Versuch, der Abbruch mit pFrm = 0 wenn !Valid,
|
||||
//fuehrt leider zu dem Problem, dass das Keep dann u.U. nicht mehr
|
||||
//korrekt beachtet wird (27417)
|
||||
// fix(25455): Validate, otherwise this leads to a recursion.
|
||||
// The first try, cancelling with pFrm = 0 if !Valid, leads to a problem, as
|
||||
// the Keep may not be considered properly anymore (27417).
|
||||
const sal_Bool bOldPos = pFrm->GetValidPosFlag();
|
||||
const sal_Bool bOldSz = pFrm->GetValidSizeFlag();
|
||||
const sal_Bool bOldPrt = pFrm->GetValidPrtAreaFlag();
|
||||
pFrm->bValidPos = pFrm->bValidPrtArea = pFrm->bValidSize = sal_True;
|
||||
|
||||
//fix(29272): Nicht MakeAll rufen, dort wird evtl. pFrm wieder invalidert
|
||||
//und kommt rekursiv wieder herein.
|
||||
// fix(29272): Don't call MakeAll - there, pFrm might be invalidated again, and
|
||||
// we recursively end up in here again.
|
||||
if ( pNxt->IsCntntFrm() )
|
||||
{
|
||||
SwCntntNotify aNotify( (SwCntntFrm*)pNxt );
|
||||
@@ -1838,21 +1824,21 @@ void MakeNxt( SwFrm *pFrm, SwFrm *pNxt )
|
||||
pFrm->bValidPrtArea = bOldPrt;
|
||||
}
|
||||
|
||||
// Diese Routine ueberprueft, ob zwischen dem FtnBoss von pFrm und dem
|
||||
// von pNxt keine anderen FtnBosse liegen
|
||||
// This routine checks whether there are no other FtnBosses
|
||||
// between the pFrm's FtnBoss and the pNxt's FtnBoss.
|
||||
|
||||
sal_Bool lcl_IsNextFtnBoss( const SwFrm *pFrm, const SwFrm* pNxt )
|
||||
{
|
||||
OSL_ENSURE( pFrm && pNxt, "lcl_IsNextFtnBoss: No Frames?" );
|
||||
pFrm = pFrm->FindFtnBossFrm();
|
||||
pNxt = pNxt->FindFtnBossFrm();
|
||||
// Falls pFrm eine letzte Spalte ist, wird stattdessen die Seite genommen
|
||||
// If pFrm is a last column, we use the page instead.
|
||||
while( pFrm && pFrm->IsColumnFrm() && !pFrm->GetNext() )
|
||||
pFrm = pFrm->GetUpper()->FindFtnBossFrm();
|
||||
// Falls pNxt eine erste Spalte ist, wird stattdessen die Seite genommen
|
||||
// If pNxt is a first column, we use the page instead.
|
||||
while( pNxt && pNxt->IsColumnFrm() && !pNxt->GetPrev() )
|
||||
pNxt = pNxt->GetUpper()->FindFtnBossFrm();
|
||||
// So, jetzt muessen pFrm und pNxt entweder zwei benachbarte Seiten oder Spalten sein.
|
||||
// So.. now pFrm and pNxt are either two adjacent pages or columns.
|
||||
return ( pFrm && pNxt && pFrm->GetNext() == pNxt );
|
||||
}
|
||||
|
||||
@@ -1862,10 +1848,9 @@ sal_Bool SwCntntFrm::_WouldFit( SwTwips nSpace,
|
||||
sal_Bool bTstMove,
|
||||
const bool bObjsInNewUpper )
|
||||
{
|
||||
//Damit die Fussnote sich ihren Platz sorgsam waehlt, muss
|
||||
//sie in jedem Fall gemoved werden, wenn zwischen dem
|
||||
//neuen Upper und ihrer aktuellen Seite/Spalte mindestens eine
|
||||
//Seite/Spalte liegt.
|
||||
// To have the footnote select it's place carefully, it needs
|
||||
// to be moved in any case if there is at least one page/column
|
||||
// between the footnote and the new Upper.
|
||||
SwFtnFrm* pFtnFrm = 0;
|
||||
if ( IsInFtn() )
|
||||
{
|
||||
@@ -1893,17 +1878,16 @@ sal_Bool SwCntntFrm::_WouldFit( SwTwips nSpace,
|
||||
( pFrm->GetUpper()->IsColBodyFrm() || ( pFtnFrm &&
|
||||
pFtnFrm->GetUpper()->GetUpper()->IsColumnFrm() ) ) ) )
|
||||
{
|
||||
//Jetzt wirds ein bischen hinterlistig; empfindliche Gemueter sollten
|
||||
//lieber wegsehen. Wenn ein Flys Spalten enthaelt so sind die Cntnts
|
||||
//moveable, mit Ausnahme der in der letzten Spalte (siehe
|
||||
//SwFrm::IsMoveable()). Zurueckfliessen duerfen sie aber natuerlich.
|
||||
//Das WouldFit() liefert leider nur dann einen vernueftigen Wert, wenn
|
||||
//der Frm moveable ist. Um dem WouldFit() einen Moveable Frm
|
||||
//vorzugaukeln haenge ich ihn einfach solange um.
|
||||
// Auch bei spaltigen Bereichen muss umgehaengt werden, damit
|
||||
// SwSectionFrm::Growable() den richtigen Wert liefert.
|
||||
// Innerhalb von Fussnoten muss ggf. sogar der SwFtnFrm umgehaengt werden,
|
||||
// falls es dort keinen SwFtnFrm gibt.
|
||||
// This is going to get a bit insidious now. If you're faint of heart,
|
||||
// you'd better look away here. If a Fly contains columns, then the Cntnts
|
||||
// are movable, except the one in the last column (see SwFrm::IsMoveable()).
|
||||
// Of course they're allowed to float back. WouldFit() only returns a usable
|
||||
// value if the Frm is movable. To fool WouldFit() into believing there's
|
||||
// a movable Frm, I'm just going to hang it somewhere else for the time.
|
||||
// The same procedure applies for column sections to make SwSectionFrm::Growable()
|
||||
// return the proper value.
|
||||
// Within footnotes, we may even need to put the SwFtnFrm somewhere else, if
|
||||
// there's no SwFtnFrm there.
|
||||
SwFrm* pTmpFrm = pFrm->IsInFtn() && !pNewUpper->FindFtnFrm() ?
|
||||
(SwFrm*)pFrm->FindFtnFrm() : pFrm;
|
||||
SwLayoutFrm *pUp = pTmpFrm->GetUpper();
|
||||
@@ -1937,8 +1921,8 @@ sal_Bool SwCntntFrm::_WouldFit( SwTwips nSpace,
|
||||
SwBorderAttrAccess aAccess( SwFrm::GetCache(), pFrm );
|
||||
const SwBorderAttrs &rAttrs = *aAccess.Get();
|
||||
|
||||
//Bitter aber wahr: Der Abstand muss auch noch mit einkalkuliert werden.
|
||||
//Bei TestFormatierung ist dies bereits geschehen.
|
||||
// Sad but true: We need to consider the spacing in our calculation.
|
||||
// This already happened in TestFormat.
|
||||
if ( bRet && !bTstMove )
|
||||
{
|
||||
SwTwips nUpper;
|
||||
@@ -1990,7 +1974,7 @@ sal_Bool SwCntntFrm::_WouldFit( SwTwips nSpace,
|
||||
// #i46181#
|
||||
if ( nSecondCheck > 0 )
|
||||
{
|
||||
// The following code is indented to solve a (rare) problem
|
||||
// The following code is intended to solve a (rare) problem
|
||||
// causing some frames not to move backward:
|
||||
// SwTxtFrm::WouldFit() claims that the whole paragraph
|
||||
// fits into the given space and subtracts the height of
|
||||
@@ -2042,7 +2026,7 @@ sal_Bool SwCntntFrm::_WouldFit( SwTwips nSpace,
|
||||
( !pFtnFrm || ( pNxt->IsInFtn() &&
|
||||
pNxt->FindFtnFrm()->GetAttr() == pFtnFrm->GetAttr() ) ) )
|
||||
{
|
||||
// ProbeFormatierung vertraegt keine absatz- oder gar zeichengebundene Objekte
|
||||
// TestFormat(?) does not like paragraph- or character anchored objects.
|
||||
//
|
||||
// current solution for the test formatting doesn't work, if
|
||||
// objects are present in the remaining area of the new upper
|
||||
@@ -2055,9 +2039,9 @@ sal_Bool SwCntntFrm::_WouldFit( SwTwips nSpace,
|
||||
if ( !pNxt->IsValid() )
|
||||
MakeNxt( pFrm, pNxt );
|
||||
|
||||
//Kleiner Trick: Wenn der naechste einen Vorgaenger hat, so hat
|
||||
//er den Absatzabstand bereits berechnet. Er braucht dann nicht
|
||||
//teuer kalkuliert werden.
|
||||
// Little trick: if the next has a predecessor, then the paragraph
|
||||
// spacing has been calculated already, and we don't need to re-calculate
|
||||
// it in an expensive way.
|
||||
if( lcl_NotHiddenPrev( pNxt ) )
|
||||
pTmpPrev = 0;
|
||||
else
|
||||
|
Reference in New Issue
Block a user