LibreOffice Module sw (master)  1
widorp.cxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  * Licensed to the Apache Software Foundation (ASF) under one or more
12  * contributor license agreements. See the NOTICE file distributed
13  * with this work for additional information regarding copyright
14  * ownership. The ASF licenses this file to you under the Apache
15  * License, Version 2.0 (the "License"); you may not use this file
16  * except in compliance with the License. You may obtain a copy of
17  * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #include <hintids.hxx>
21 
22 #include <layfrm.hxx>
23 #include <ftnboss.hxx>
24 #include <ndtxt.hxx>
25 #include <paratr.hxx>
26 #include <editeng/orphitem.hxx>
27 #include <editeng/widwitem.hxx>
28 #include <editeng/keepitem.hxx>
29 #include <editeng/spltitem.hxx>
30 #include <frmatr.hxx>
31 #include <txtftn.hxx>
32 #include <fmtftn.hxx>
33 #include <rowfrm.hxx>
34 
35 #include "widorp.hxx"
36 #include <txtfrm.hxx>
37 #include "itrtxt.hxx"
38 #include <sectfrm.hxx>
39 #include <ftnfrm.hxx>
40 #include <pagefrm.hxx>
41 
42 #undef WIDOWTWIPS
43 
44 namespace
45 {
46 
47 // A Follow on the same page as its master is nasty.
48 bool IsNastyFollow( const SwTextFrame *pFrame )
49 {
50  OSL_ENSURE( !pFrame->IsFollow() || !pFrame->GetPrev() ||
51  static_cast<const SwTextFrame*>(pFrame->GetPrev())->GetFollow() == pFrame,
52  "IsNastyFollow: What is going on here?" );
53  return pFrame->IsFollow() && pFrame->GetPrev();
54 }
55 
56 }
57 
59  : m_nRstHeight(nRst), m_pFrame(pNewFrame)
60 {
62  SwRectFnSet aRectFnSet(m_pFrame);
63  m_nOrigin = aRectFnSet.GetPrtTop(*m_pFrame);
64  m_bKeep = !m_pFrame->IsMoveable() || IsNastyFollow( m_pFrame );
65  if( !m_bKeep && m_pFrame->IsInSct() )
66  {
67  const SwSectionFrame* const pSct = m_pFrame->FindSctFrame();
68  m_bKeep = pSct->Lower()->IsColumnFrame() && !pSct->MoveAllowed( m_pFrame );
69  }
72  m_bBreak = false;
73 
75  {
78  aRectFnSet.GetHeight(m_pFrame->getFrameArea());
79  if( m_nRstHeight < 0 )
80  m_nRstHeight = 0;
81  }
82 }
83 
104 bool SwTextFrameBreak::IsInside( SwTextMargin const &rLine ) const
105 {
106  bool bFit = false;
107 
109  SwRectFnSet aRectFnSet(m_pFrame);
110  // nOrigin is an absolute value, rLine referes to the swapped situation.
111 
112  SwTwips nTmpY;
113  if ( m_pFrame->IsVertical() )
114  nTmpY = m_pFrame->SwitchHorizontalToVertical( rLine.Y() + rLine.GetLineHeight() );
115  else
116  nTmpY = rLine.Y() + rLine.GetLineHeight();
117 
118  SwTwips nLineHeight = aRectFnSet.YDiff( nTmpY , m_nOrigin );
119 
120  // Calculate extra space for bottom border.
121  nLineHeight += aRectFnSet.GetBottomMargin(*m_pFrame);
122 
123  if( m_nRstHeight )
124  bFit = m_nRstHeight >= nLineHeight;
125  else
126  {
127  // The Frame has a height to fit on the page.
128  SwTwips nHeight =
129  aRectFnSet.YDiff( aRectFnSet.GetPrtBottom(*m_pFrame->GetUpper()), m_nOrigin );
130  SwTwips nDiff = nHeight - nLineHeight;
131 
132  // Hide whitespace may require not to insert a new page.
133  SwPageFrame* pPageFrame = m_pFrame->FindPageFrame();
134  if (!pPageFrame->CheckPageHeightValidForHideWhitespace(nDiff))
135  nDiff = 0;
136 
137  // If everything is inside the existing frame the result is true;
138  bFit = nDiff >= 0;
139 
140  if ( !bFit )
141  {
142  if ( rLine.GetNext() &&
144  {
145  // add additional space taken as lower space as last content in a table
146  // for all text lines except the last one.
148  bFit = nHeight >= nLineHeight;
149  }
150  }
151  if( !bFit )
152  {
153  // The LineHeight exceeds the current Frame height.
154  // Call a test Grow to detect if the Frame could
155  // grow the requested area.
156  nHeight += m_pFrame->GrowTst( LONG_MAX );
157 
158  // The Grow() returns the height by which the Upper of the TextFrame
159  // would let the TextFrame grow.
160  // The TextFrame itself can grow as much as it wants.
161  bFit = nHeight >= nLineHeight;
162  }
163  }
164 
165  return bFit;
166 }
167 
169 {
171 
172  // bKeep is stronger than IsBreakNow()
173  // Is there enough space ?
174  if( m_bKeep || IsInside( rLine ) )
175  m_bBreak = false;
176  else
177  {
178  /* This class assumes that the SwTextMargin is processed from Top to
179  * Bottom. Because of performance reasons we stop splitting in the
180  * following cases:
181  * If only one line does not fit.
182  * Special case: with DummyPortions there is LineNr == 1, though we
183  * want to split.
184  */
185  // Include DropLines
186 
187  bool bFirstLine = 1 == rLine.GetLineNr() && !rLine.GetPrev();
188  m_bBreak = true;
189  if( ( bFirstLine && m_pFrame->GetIndPrev() )
190  || ( rLine.GetLineNr() <= rLine.GetDropLines() ) )
191  {
192  m_bKeep = true;
193  m_bBreak = false;
194  }
195  else if(bFirstLine && m_pFrame->IsInFootnote() && !m_pFrame->FindFootnoteFrame()->GetPrev())
196  {
198  if( !pTmp || !pTmp->Lower() )
199  m_bBreak = false;
200  }
201  }
202 
203  return m_bBreak;
204 }
205 
207 {
208  // Consider bottom margin
209  SwRectFnSet aRectFnSet(m_pFrame);
210 
211  m_nRstHeight = aRectFnSet.GetBottomMargin(*m_pFrame);
212 
213  if ( aRectFnSet.IsVert() )
214  {
215  if ( m_pFrame->IsVertLR() )
216  m_nRstHeight = aRectFnSet.YDiff( m_pFrame->SwitchHorizontalToVertical( rLine.Y() ) , m_nOrigin );
217  else
219  }
220  else
221  m_nRstHeight += rLine.Y() - m_nOrigin;
222 }
223 
225  bool bChkKeep )
226  : SwTextFrameBreak( pNewFrame, nRst ), nWidLines( 0 ), nOrphLines( 0 )
227 {
229 
230  if( m_bKeep )
231  {
232  // If paragraph should not be split but is larger than
233  // the page, then bKeep is overruled.
234  if( bChkKeep && !m_pFrame->GetPrev() && !m_pFrame->IsInFootnote() &&
235  m_pFrame->IsMoveable() &&
237  m_bKeep = false;
238  // Even if Keep is set, Orphans has to be respected.
239  // e.g. if there are chained frames where a Follow in the last frame
240  // receives a Keep, because it is not (forward) movable -
241  // nevertheless the paragraph can request lines from the Master
242  // because of the Orphan rule.
243  if( m_pFrame->IsFollow() )
245  }
246  else
247  {
249  const SvxOrphansItem &rOrph = rSet.GetOrphans();
250  if ( rOrph.GetValue() > 1 )
251  nOrphLines = rOrph.GetValue();
252  if ( m_pFrame->IsFollow() )
253  nWidLines = rSet.GetWidows().GetValue();
254 
255  }
256 
257  if ( m_bKeep || nWidLines || nOrphLines )
258  {
259  bool bResetFlags = false;
260 
261  if ( m_pFrame->IsInTab() )
262  {
263  // For compatibility reasons, we disable Keep/Widows/Orphans
264  // inside splittable row frames:
266  {
267  const SwFrame* pTmpFrame = m_pFrame->GetUpper();
268  while ( !pTmpFrame->IsRowFrame() )
269  pTmpFrame = pTmpFrame->GetUpper();
270  if ( static_cast<const SwRowFrame*>(pTmpFrame)->IsRowSplitAllowed() )
271  bResetFlags = true;
272  }
273  }
274 
275  if( m_pFrame->IsInFootnote() && !m_pFrame->GetIndPrev() )
276  {
277  // Inside of footnotes there are good reasons to turn off the Keep attribute
278  // as well as Widows/Orphans.
280  const bool bFt = !pFootnote->GetAttr()->GetFootnote().IsEndNote();
281  if( !pFootnote->GetPrev() &&
282  pFootnote->FindFootnoteBossFrame( bFt ) != pFootnote->GetRef()->FindFootnoteBossFrame( bFt )
284  {
285  bResetFlags = true;
286  }
287  }
288 
289  if ( bResetFlags )
290  {
291  m_bKeep = false;
292  nOrphLines = 0;
293  nWidLines = 0;
294  }
295  }
296 }
297 
304  bool bHasToFit )
305 {
306  // i#16128 - Why member <pFrame> _*and*_ parameter <pFrame>??
307  // Thus, assertion on situation, that these are different to figure out why.
308  OSL_ENSURE( m_pFrame == pFrame, "<WidowsAndOrphans::FindBreak> - pFrame != pFrame" );
309 
311 
312  bool bRet = true;
313  sal_uInt16 nOldOrphans = nOrphLines;
314  if( bHasToFit )
315  nOrphLines = 0;
316  rLine.Bottom();
317 
318  if( !IsBreakNowWidAndOrp( rLine ) )
319  bRet = false;
320  if( !FindWidows( pFrame, rLine ) )
321  {
322  bool bBack = false;
323 
324  while( IsBreakNowWidAndOrp( rLine ) )
325  {
326  if( rLine.PrevLine() )
327  bBack = true;
328  else
329  break;
330  }
331  // Usually Orphans are not taken into account for HasToFit.
332  // But if Dummy-Lines are concerned and the Orphans rule is violated
333  // we make an exception: We leave behind one Dummyline and take
334  // the whole text to the next page/column.
335  if( rLine.GetLineNr() <= nOldOrphans &&
336  rLine.GetInfo().GetParaPortion()->IsDummy() &&
337  ( ( bHasToFit && bRet ) || IsBreakNow( rLine ) ) )
338  rLine.Top();
339 
340  rLine.TruncLines( true );
341  bRet = bBack;
342  }
343  nOrphLines = nOldOrphans;
344 
345  return bRet;
346 }
347 
355 {
356  OSL_ENSURE( ! pFrame->IsVertical() || ! pFrame->IsSwapped(),
357  "WidowsAndOrphans::FindWidows with swapped frame" );
358 
359  if( !nWidLines || !pFrame->IsFollow() )
360  return false;
361 
362  rLine.Bottom();
363 
364  // We can still cut something off
365  SwTextFrame *pMaster = pFrame->FindMaster();
366  OSL_ENSURE(pMaster, "+WidowsAndOrphans::FindWidows: Widows in a master?");
367  if( !pMaster )
368  return false;
369 
370  // If the first line of the Follow does not fit, the master
371  // probably is full of Dummies. In this case a PREP_WIDOWS would be fatal.
372  if( pMaster->GetOfst() == pFrame->GetOfst() )
373  return false;
374 
375  // Remaining height of the master
376  SwRectFnSet aRectFnSet(pFrame);
377 
378  const SwTwips nDocPrtTop = aRectFnSet.GetPrtTop(*pFrame);
379  SwTwips nOldHeight;
380  SwTwips nTmpY = rLine.Y() + rLine.GetLineHeight();
381 
382  if ( aRectFnSet.IsVert() )
383  {
384  nTmpY = pFrame->SwitchHorizontalToVertical( nTmpY );
385  nOldHeight = -aRectFnSet.GetHeight(pFrame->getFramePrintArea());
386  }
387  else
388  nOldHeight = aRectFnSet.GetHeight(pFrame->getFramePrintArea());
389 
390  const SwTwips nChg = aRectFnSet.YDiff( nTmpY, nDocPrtTop + nOldHeight );
391 
392  // below the Widows-threshold...
393  if( rLine.GetLineNr() >= nWidLines )
394  {
395  // Follow to Master I
396  // If the Follow *grows*, there is the chance for the Master to
397  // receive lines, that it was forced to hand over to the Follow lately:
398  // Prepare(Need); check that below nChg!
399  // (0W, 2O, 2M, 2F) + 1F = 3M, 2F
400  if( rLine.GetLineNr() > nWidLines && pFrame->IsJustWidow() )
401  {
402  // If the Master is locked, it has probably just donated a line
403  // to us, we don't return that just because we turned it into
404  // multiple lines (e.g. via frames).
405  if( !pMaster->IsLocked() && pMaster->GetUpper() )
406  {
407  const SwTwips nTmpRstHeight = aRectFnSet.BottomDist( pMaster->getFrameArea(),
408  aRectFnSet.GetPrtBottom(*pMaster->GetUpper()) );
409  if ( nTmpRstHeight >=
410  SwTwips(rLine.GetInfo().GetParaPortion()->Height() ) )
411  {
412  pMaster->Prepare( PREP_ADJUST_FRM );
413  pMaster->InvalidateSize_();
414  pMaster->InvalidatePage();
415  }
416  }
417 
418  pFrame->SetJustWidow( false );
419  }
420  return false;
421  }
422 
423  // Follow to Master II
424  // If the Follow *shrinks*, maybe the Master can absorb the whole Orphan.
425  // (0W, 2O, 2M, 1F) - 1F = 3M, 0F -> PREP_ADJUST_FRM
426  // (0W, 2O, 3M, 2F) - 1F = 2M, 2F -> PREP_WIDOWS
427 
428  if( 0 > nChg && !pMaster->IsLocked() && pMaster->GetUpper() )
429  {
430  SwTwips nTmpRstHeight = aRectFnSet.BottomDist( pMaster->getFrameArea(),
431  aRectFnSet.GetPrtBottom(*pMaster->GetUpper()) );
432  if( nTmpRstHeight >= SwTwips(rLine.GetInfo().GetParaPortion()->Height() ) )
433  {
434  pMaster->Prepare( PREP_ADJUST_FRM );
435  pMaster->InvalidateSize_();
436  pMaster->InvalidatePage();
437  pFrame->SetJustWidow( false );
438  return false;
439  }
440  }
441 
442  // Master to Follow
443  // If the Follow contains fewer lines than Widows after formatting,
444  // we still can move over some lines from the Master. If this triggers
445  // the Orphans rule of the Master, the Master frame must be Grow()n
446  // in its CalcPreps(), such that it won't fit onto its page anymore.
447  // But if the Master Frame can still lose a few lines, we need to
448  // do a Shrink() in the CalcPreps(); the Follow with the Widows then
449  // moves onto the page of the Master, but remains unsplit, so that
450  // it (finally) moves onto the next page. So much for the theory!
451  //
452  // We only request one line at a time for now, because a Master's line
453  // could result in multiple lines for us.
454  // Therefore, the CalcFollow() remains in control until the Follow got all
455  // necessary lines.
456  sal_uInt16 nNeed = 1; // was: nWidLines - rLine.GetLineNr();
457 
458  // Special case: Master cannot give lines to follow
459  // i#91421
460  if ( !pMaster->GetIndPrev() )
461  {
462  pMaster->ChgThisLines();
463  sal_uLong nLines = pMaster->GetThisLines();
464  if(nLines == 0 && pMaster->HasPara())
465  {
466  const SwParaPortion *pMasterPara = pMaster->GetPara();
467  if(pMasterPara && pMasterPara->GetNext())
468  nLines = 2;
469  }
470  if( nLines <= nNeed )
471  return false;
472  }
473 
474  pMaster->Prepare( PREP_WIDOWS, static_cast<void*>(&nNeed) );
475  return true;
476 }
477 
478 bool WidowsAndOrphans::WouldFit( SwTextMargin &rLine, SwTwips &rMaxHeight, bool bTst )
479 {
480  // Here it does not matter, if pFrame is swapped or not.
481  // IsInside() takes care of itself
482 
483  // We expect that rLine is set to the last line
484  OSL_ENSURE( !rLine.GetNext(), "WouldFit: aLine::Bottom missed!" );
485  sal_uInt16 nLineCnt = rLine.GetLineNr();
486 
487  // First satisfy the Orphans-rule and the wish for initials ...
488  const sal_uInt16 nMinLines = std::max( GetOrphansLines(), rLine.GetDropLines() );
489  if ( nLineCnt < nMinLines )
490  return false;
491 
492  rLine.Top();
493  SwTwips nLineSum = rLine.GetLineHeight();
494 
495  while( nMinLines > rLine.GetLineNr() )
496  {
497  if( !rLine.NextLine() )
498  return false;
499  nLineSum += rLine.GetLineHeight();
500  }
501 
502  // We do not fit
503  if( !IsInside( rLine ) )
504  return false;
505 
506  // Check the Widows-rule
507  if( !nWidLines && !m_pFrame->IsFollow() )
508  {
509  // Usually we only have to check for Widows if we are a Follow.
510  // On WouldFit the rule has to be checked for the Master too,
511  // because we are just in the middle of calculating the break.
512  // In Ctor of WidowsAndOrphans the nWidLines are only calced for
513  // Follows from the AttrSet - so we catch up now:
515  nWidLines = rSet.GetWidows().GetValue();
516  }
517 
518  // After Orphans/Initials, do enough lines remain for Widows?
519  // If we are currently doing a test formatting, we may not
520  // consider the widows rule for two reasons:
521  // 1. The columns may have different widths.
522  // Widow lines would have wrong width.
523  // 2. Test formatting is only done up to the given space.
524  // we do not have any lines for widows at all.
525  if( bTst || nLineCnt - nMinLines >= nWidLines )
526  {
527  if( rMaxHeight >= nLineSum )
528  {
529  rMaxHeight -= nLineSum;
530  return true;
531  }
532  }
533  return false;
534 }
535 
536 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
bool FindWidows(SwTextFrame *pFrame, SwTextMargin &rLine)
FindWidows positions the SwTextMargin of the Master to the line where to break by examining and forma...
Definition: widorp.cxx:354
Base class of the Writer layout elements.
Definition: frame.hxx:295
Represents the visualization of a paragraph.
Definition: txtfrm.hxx:149
bool FindBreak(SwTextFrame *pFrame, SwTextMargin &rLine, bool bHasToFit)
The Find*-Methods do not only search, but adjust the SwTextMargin to the line where the paragraph sho...
Definition: widorp.cxx:303
long BottomDist(const SwRect &rRect, long nPos) const
Definition: frame.hxx:1375
bool MoveAllowed(const SwFrame *) const
Definition: sectfrm.cxx:2384
bool IsFollow() const
Definition: flowfrm.hxx:166
void SetRstHeight(const SwTextMargin &rLine)
Definition: widorp.cxx:206
sal_uInt16 GetLineNr() const
Definition: itrtxt.hxx:88
bool IsInSct() const
Definition: frame.hxx:943
sal_uInt16 Height() const
Definition: possiz.hxx:44
SwLineLayout * GetNext()
Definition: porlay.hxx:145
bool IsSwapped() const
Definition: txtfrm.hxx:524
const SwLineLayout * NextLine()
Definition: itrtxt.cxx:124
bool HasPara() const
Definition: txtfrm.hxx:806
bool IsInFootnote() const
Definition: frame.hxx:925
void SwitchHorizontalToVertical(SwRect &rRect) const
Calculates the coordinates of a rectangle when switching from horizontal to vertical layout...
Definition: txtfrm.cxx:476
sal_uIntPtr sal_uLong
const SwRect & getFramePrintArea() const
Definition: frame.hxx:176
void InvalidateSize_()
Definition: frame.hxx:749
SwParaPortion * GetPara()
Definition: txtcache.cxx:82
const SvxOrphansItem & GetOrphans(bool=true) const
Definition: paratr.hxx:188
TextFrameIndex GetOfst() const
Definition: txtfrm.hxx:426
long SwTwips
Definition: swtypes.hxx:49
bool IsVert() const
Definition: frame.hxx:1328
bool WouldFit(SwTextMargin &rLine, SwTwips &rMaxHeight, bool bTest)
Definition: widorp.cxx:478
bool IsEndNote() const
Definition: fmtftn.hxx:73
long GetPrtTop(const SwFrame &rFrame) const
Definition: frame.hxx:1370
SwTwips Y() const
Definition: itrtxt.hxx:91
Collection of SwLineLayout instances, represents the paragraph text in Writer layout.
Definition: porlay.hxx:231
sal_uInt16 GetOrphansLines() const
Definition: widorp.hxx:61
void SetJustWidow(const bool bNew)
Definition: txtfrm.hxx:236
bool IsBreakNowWidAndOrp(SwTextMargin &rLine)
Definition: widorp.hxx:69
SwTwips GetFootnoteFrameHeight() const
Definition: txtfrm.hxx:830
long YDiff(long n1, long n2) const
Definition: frame.hxx:1384
long GetPrtBottom(const SwFrame &rFrame) const
Definition: frame.hxx:1371
bool IsMoveable(const SwLayoutFrame *_pLayoutFrame=nullptr) const
determine, if frame is moveable in given environment
Definition: findfrm.cxx:1359
const SwRect & getFrameArea() const
Definition: frame.hxx:175
sal_uLong GetThisLines() const
Definition: txtfrm.hxx:655
SwTwips GrowTst(const SwTwips nGrow)
Test grow.
Definition: txtfrm.hxx:811
bool IsInTab() const
Definition: frame.hxx:931
SwTwips m_nOrigin
Definition: widorp.hxx:30
const SvxFormatSplitItem & GetSplit(bool=true) const
Definition: paratr.hxx:182
long GetBottomMargin(const SwFrame &rFrame) const
Definition: frame.hxx:1365
virtual bool Prepare(const PrepareHint ePrep=PREP_CLEAR, const void *pVoid=nullptr, bool bNotify=true) override
SwContentFrame: the shortcut for the Frames If the void* casts wrongly, it's its own fault! The void*...
Definition: txtfrm.cxx:2706
const SvxFormatKeepItem & GetKeep(bool=true) const
Definition: frmatr.hxx:56
SwLayoutFrame * GetNextCellLeaf()
Definition: findfrm.cxx:1511
SwTextFrame * GetFollow()
Definition: txtfrm.hxx:842
SwTwips m_nRstHeight
Definition: widorp.hxx:29
bool IsColumnFrame() const
Definition: frame.hxx:1158
SwFootnoteFrame * FindFootnoteFrame()
Definition: frame.hxx:1083
void swap(cow_wrapper< T, P > &a, cow_wrapper< T, P > &b)
SwTextNode const * GetTextNodeForParaProps() const
Definition: txtfrm.cxx:1288
void Bottom()
Definition: itrtxt.cxx:185
bool IsDummy() const
Definition: porlay.hxx:137
bool CheckPageHeightValidForHideWhitespace(SwTwips nDiff)
Is bottom-of-page-frame - bottom-of-text-frame difference valid in case whitespace is hidden...
Definition: pagechg.cxx:2486
SwFrame * GetIndPrev() const
Definition: frame.hxx:702
SwTwips CalcAddLowerSpaceAsLastInTableCell(const SwBorderAttrs *_pAttrs=nullptr) const
calculation of the additional space to be considered, if flow frame is the last inside a table cell ...
Definition: flowfrm.cxx:1705
bool IsInside(SwTextMargin const &rLine) const
BP 18.6.93: Widows.
Definition: widorp.cxx:104
void Top()
Definition: itrtxt.hxx:100
SwFrame * GetIndNext()
Definition: frame.hxx:705
SwPageFrame * FindPageFrame()
Definition: frame.hxx:658
SwParaPortion * GetParaPortion()
Definition: inftxt.hxx:135
const SwFrame * Lower() const
Definition: layfrm.hxx:100
void InvalidatePage(const SwPageFrame *pPage=nullptr) const
Invalidates the page in which the Frame is currently placed.
Definition: wsfrm.cxx:590
SwLayoutFrame * GetUpper()
Definition: frame.hxx:656
bool IsRowFrame() const
Definition: frame.hxx:1198
const SwLineLayout * GetPrev()
Definition: itrtxt.cxx:83
SwFootnoteBossFrame * FindFootnoteBossFrame(bool bFootnotes=false)
Definition: findfrm.cxx:435
SwFrame * GetPrev()
Definition: frame.hxx:655
const SwRowFrame * IsInFollowFlowRow() const
Definition: findfrm.cxx:1774
const SvxWidowsItem & GetWidows(bool=true) const
Definition: paratr.hxx:186
sal_uInt16 GetLineHeight() const
Definition: itrtxt.hxx:117
void TruncLines(bool bNoteFollow=false)
Definition: itrtxt.cxx:323
bool IsLocked() const
Definition: txtfrm.hxx:505
A page of the document layout.
Definition: pagefrm.hxx:40
const SwFormatFootnote & GetFootnote() const
Definition: txatbase.hxx:194
const long LONG_MAX
SwSectionFrame * FindSctFrame()
Definition: frame.hxx:1091
SwLayoutFrame * FindBodyCont()
Searches the first ContentFrame in BodyText below the page.
Definition: findfrm.cxx:42
SwTextFrameBreak(SwTextFrame *pFrame, const SwTwips nRst=0)
Definition: widorp.cxx:58
sal_uInt16 nOrphLines
Definition: widorp.hxx:55
bool IsBreakNow(SwTextMargin &rLine)
Definition: widorp.cxx:168
bool IsVertLR() const
Definition: frame.hxx:955
SwTextFrame * FindMaster() const
Definition: flowfrm.cxx:677
sal_uInt16 nWidLines
Definition: widorp.hxx:55
SwTextSizeInfo & GetInfo()
Definition: itrtxt.hxx:217
WidowsAndOrphans(SwTextFrame *pFrame, const SwTwips nRst=0, bool bCheckKeep=true)
Definition: widorp.cxx:224
const SwContentFrame * GetRef() const
Definition: ftnfrm.cxx:2857
const SwTextFootnote * GetAttr() const
Definition: ftnfrm.hxx:107
const SwLineLayout * PrevLine()
Definition: itrtxt.cxx:170
long GetHeight(const SwRect &rRect) const
Definition: frame.hxx:1343
const SwAttrSet & GetSwAttrSet() const
Does node has already its own auto-attributes? Access to SwAttrSet.
Definition: node.hxx:723
const SwLineLayout * GetNext() const
Definition: itrtxt.hxx:85
bool IsVertical() const
Definition: frame.hxx:949
SwTextFrame * m_pFrame
Definition: widorp.hxx:32
sal_uInt16 GetDropLines() const
Definition: itrtxt.hxx:203
bool IsJustWidow() const
Definition: txtfrm.hxx:508
void ChgThisLines()
Definition: txtfrm.cxx:3749