LibreOffice Module sw (master) 1
colfrm.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 <editeng/ulspitem.hxx>
21#include <osl/diagnose.h>
22#include <fmtclds.hxx>
23#include <fmtfordr.hxx>
24#include <frmfmt.hxx>
25#include <frmatr.hxx>
26#include <frmtool.hxx>
27#include <colfrm.hxx>
28#include <pagefrm.hxx>
29#include <bodyfrm.hxx>
30#include <rootfrm.hxx>
31#include <sectfrm.hxx>
32#include <calbck.hxx>
33#include <ftnfrm.hxx>
34#include <IDocumentState.hxx>
36#include <IDocumentUndoRedo.hxx>
37
39 SwFootnoteBossFrame( pFormat, pSib )
40{
42 SwBodyFrame* pColBody = new SwBodyFrame( pFormat->GetDoc()->GetDfltFrameFormat(), pSib );
43 pColBody->InsertBehind( this, nullptr ); // ColumnFrames now with BodyFrame
45}
46
48{
49 SwFrameFormat *pFormat = GetFormat();
50 SwDoc *pDoc;
51 if ( !(pDoc = pFormat->GetDoc())->IsInDtor() && pFormat->HasOnlyOneListener() )
52 {
53 //I'm the only one, delete the format.
54 //Get default format before, so the base class can cope with it.
55 pDoc->GetDfltFrameFormat()->Add( this );
56 // tdf#134009, like #i32968# avoid SwUndoFrameFormatDelete creation,
57 // the format is owned by the SwColumnFrame, see lcl_AddColumns()
58 ::sw::UndoGuard const ug(pDoc->GetIDocumentUndoRedo());
59 pDoc->DelFrameFormat( pFormat );
60 }
61
63}
64
66{
67}
68
69static void lcl_RemoveColumns( SwLayoutFrame *pCont, sal_uInt16 nCnt )
70{
71 OSL_ENSURE( pCont && pCont->Lower() && pCont->Lower()->IsColumnFrame(),
72 "no columns to remove." );
73
74 SwColumnFrame *pColumn = static_cast<SwColumnFrame*>(pCont->Lower());
75 sw_RemoveFootnotes( pColumn, true, true );
76 while ( pColumn->GetNext() )
77 {
78 OSL_ENSURE( pColumn->GetNext()->IsColumnFrame(),
79 "neighbor of ColumnFrame is no ColumnFrame." );
80 pColumn = static_cast<SwColumnFrame*>(pColumn->GetNext());
81 }
82 for ( sal_uInt16 i = 0; i < nCnt; ++i )
83 {
84 SwColumnFrame *pTmp = static_cast<SwColumnFrame*>(pColumn->GetPrev());
85 pColumn->Cut();
86 SwFrame::DestroyFrame(pColumn); //format is going to be destroyed in the DTor if needed.
87 pColumn = pTmp;
88 }
89}
90
91static SwLayoutFrame * lcl_FindColumns( SwLayoutFrame *pLay, sal_uInt16 nCount )
92{
93 SwFrame *pCol = pLay->Lower();
94 if ( pLay->IsPageFrame() )
95 pCol = static_cast<SwPageFrame*>(pLay)->FindBodyCont()->Lower();
96
97 if ( pCol && pCol->IsColumnFrame() )
98 {
99 SwFrame *pTmp = pCol;
100 sal_uInt16 i;
101 for ( i = 0; pTmp; pTmp = pTmp->GetNext(), ++i )
102 /* do nothing */;
103 return i == nCount ? static_cast<SwLayoutFrame*>(pCol) : nullptr;
104 }
105 return nullptr;
106}
107
108static bool lcl_AddColumns( SwLayoutFrame *pCont, sal_uInt16 nCount )
109{
110 SwDoc *pDoc = pCont->GetFormat()->GetDoc();
111 const bool bMod = pDoc->getIDocumentState().IsModified();
112
113 //Formats should be shared whenever possible. If a neighbour already has
114 //the same column settings we can add them to the same format.
115 //The neighbour can be searched using the format, however the owner of the
116 //attribute depends on the frame type.
117 SwLayoutFrame *pAttrOwner = pCont;
118 if ( pCont->IsBodyFrame() )
119 pAttrOwner = pCont->FindPageFrame();
120 SwLayoutFrame *pNeighbourCol = nullptr;
121 SwIterator<SwLayoutFrame,SwFormat> aIter( *pAttrOwner->GetFormat() );
122 SwLayoutFrame *pNeighbour = aIter.First();
123
124 sal_uInt16 nAdd = 0;
125 SwFrame *pCol = pCont->Lower();
126 if ( pCol && pCol->IsColumnFrame() )
127 for ( nAdd = 1; pCol; pCol = pCol->GetNext(), ++nAdd )
128 /* do nothing */;
129 while ( pNeighbour )
130 {
131 if ( nullptr != (pNeighbourCol = lcl_FindColumns( pNeighbour, nCount+nAdd )) &&
132 pNeighbourCol != pCont )
133 break;
134 pNeighbourCol = nullptr;
135 pNeighbour = aIter.Next();
136 }
137
138 bool bRet;
139 SwTwips nMax = pCont->IsPageBodyFrame() ?
141 if ( pNeighbourCol )
142 {
143 bRet = false;
144 SwFrame *pTmp = pCont->Lower();
145 while ( pTmp )
146 {
147 pTmp = pTmp->GetNext();
148 pNeighbourCol = static_cast<SwLayoutFrame*>(pNeighbourCol->GetNext());
149 }
150 for ( sal_uInt16 i = 0; i < nCount; ++i )
151 {
152 SwColumnFrame *pTmpCol = new SwColumnFrame( pNeighbourCol->GetFormat(), pCont );
153 pTmpCol->SetMaxFootnoteHeight( nMax );
154 pTmpCol->InsertBefore( pCont, nullptr );
155 pNeighbourCol = static_cast<SwLayoutFrame*>(pNeighbourCol->GetNext());
156 }
157 }
158 else
159 {
160 bRet = true;
161 // tdf#103359, like #i32968# Inserting columns in the section causes MakeFrameFormat to put
162 // nCount objects of type SwUndoFrameFormat on the undo stack. We don't want them.
163 ::sw::UndoGuard const undoGuard(pDoc->GetIDocumentUndoRedo());
164 for ( sal_uInt16 i = 0; i < nCount; ++i )
165 {
166 SwFrameFormat *pFormat = pDoc->MakeFrameFormat(OUString(), pDoc->GetDfltFrameFormat());
167 SwColumnFrame *pTmp = new SwColumnFrame( pFormat, pCont );
168 pTmp->SetMaxFootnoteHeight( nMax );
169 pTmp->Paste( pCont );
170 }
171 }
172
173 if ( !bMod )
175 return bRet;
176}
177
188void SwLayoutFrame::ChgColumns( const SwFormatCol &rOld, const SwFormatCol &rNew,
189 const bool bChgFootnote )
190{
191 if ( rOld.GetNumCols() <= 1 && rNew.GetNumCols() <= 1 && !bChgFootnote )
192 return;
193 // #i97379#
194 // If current lower is a no text frame, then columns are not allowed
195 if ( Lower() && Lower()->IsNoTextFrame() &&
196 rNew.GetNumCols() > 1 )
197 {
198 return;
199 }
200
201 sal_uInt16 nNewNum, nOldNum = 1;
202 if( Lower() && Lower()->IsColumnFrame() )
203 {
204 SwFrame* pCol = Lower();
205 while( nullptr != (pCol=pCol->GetNext()) )
206 ++nOldNum;
207 }
208 nNewNum = rNew.GetNumCols();
209 if( !nNewNum )
210 ++nNewNum;
211 bool bAtEnd;
212 if( IsSctFrame() )
213 bAtEnd = static_cast<SwSectionFrame*>(this)->IsAnyNoteAtEnd();
214 else
215 bAtEnd = false;
216
217 //Setting the column width is only needed for new formats.
218 bool bAdjustAttributes = nOldNum != rOld.GetNumCols();
219
220 //The content is saved and restored if the column count is different.
221 SwFrame *pSave = nullptr;
222 if( nOldNum != nNewNum || bChgFootnote )
223 {
224 SwDoc *pDoc = GetFormat()->GetDoc();
225 OSL_ENSURE( pDoc, "FrameFormat doesn't return a document." );
226 // SaveContent would also suck up the content of the footnote container
227 // and store it within the normal text flow.
228 if( IsPageBodyFrame() )
230 pSave = ::SaveContent( this );
231
232 //If columns exist, they get deleted if a column count of 0 or 1 is requested.
233 if ( nNewNum == 1 && !bAtEnd )
234 {
235 ::lcl_RemoveColumns( this, nOldNum );
236 if ( IsBodyFrame() )
238 else
240 if ( pSave )
241 ::RestoreContent( pSave, this, nullptr );
242 return;
243 }
244 if ( nOldNum == 1 )
245 {
246 if ( IsBodyFrame() )
248 else
250 if( !Lower() || !Lower()->IsColumnFrame() )
251 --nOldNum;
252 }
253 if ( nOldNum > nNewNum )
254 {
255 ::lcl_RemoveColumns( this, nOldNum - nNewNum );
256 bAdjustAttributes = true;
257 }
258 else if( nOldNum < nNewNum )
259 {
260 sal_uInt16 nAdd = nNewNum - nOldNum;
261 bAdjustAttributes = lcl_AddColumns( this, nAdd );
262 }
263 }
264
265 if ( !bAdjustAttributes )
266 {
267 if ( rOld.GetLineWidth() != rNew.GetLineWidth() ||
268 rOld.GetWishWidth() != rNew.GetWishWidth() ||
269 rOld.IsOrtho() != rNew.IsOrtho() )
270 bAdjustAttributes = true;
271 else
272 {
273 const size_t nCount = std::min( rNew.GetColumns().size(), rOld.GetColumns().size() );
274 for ( size_t i = 0; i < nCount; ++i )
275 if ( !(rOld.GetColumns()[i] == rNew.GetColumns()[i]) )
276 {
277 bAdjustAttributes = true;
278 break;
279 }
280 }
281 }
282
283 //The columns can now be easily adjusted.
284 AdjustColumns( &rNew, bAdjustAttributes );
285
286 //Don't restore the content before. An earlier restore would trigger useless
287 //actions during setup.
288 if ( pSave )
289 {
290 OSL_ENSURE( Lower() && Lower()->IsLayoutFrame() &&
291 static_cast<SwLayoutFrame*>(Lower())->Lower() &&
292 static_cast<SwLayoutFrame*>(Lower())->Lower()->IsLayoutFrame(),
293 "no column body." ); // ColumnFrames contain BodyFrames
294 ::RestoreContent( pSave, static_cast<SwLayoutFrame*>(static_cast<SwLayoutFrame*>(Lower())->Lower()), nullptr );
295 }
296}
297
298void SwLayoutFrame::AdjustColumns( const SwFormatCol *pAttr, bool bAdjustAttributes )
299{
300 if( !Lower()->GetNext() )
301 {
303 return;
304 }
305
306 const bool bVert = IsVertical();
307
309
310 //If we have a pointer or we have to configure an attribute, we set the
311 //column widths in any case. Otherwise we check if a configuration is needed.
312 if ( !pAttr )
313 {
314 pAttr = &GetFormat()->GetCol();
315 if ( !bAdjustAttributes )
316 {
317 tools::Long nAvail = (getFramePrintArea().*fnRect->fnGetWidth)();
318 for ( SwLayoutFrame *pCol = static_cast<SwLayoutFrame*>(Lower());
319 pCol;
320 pCol = static_cast<SwLayoutFrame*>(pCol->GetNext()) )
321 nAvail -= (pCol->getFrameArea().*fnRect->fnGetWidth)();
322 if ( !nAvail )
323 return;
324 }
325 }
326
327 //The columns can now be easily adjusted.
328 //The widths get counted so we can give the reminder to the last one.
329 SwTwips nAvail = (getFramePrintArea().*fnRect->fnGetWidth)();
330 const bool bLine = pAttr->GetLineAdj() != COLADJ_NONE;
331 const sal_uInt16 nMin = bLine ? sal_uInt16( 20 + ( pAttr->GetLineWidth() / 2) ) : 0;
332
333 const bool bR2L = IsRightToLeft();
334 SwFrame *pCol = bR2L ? GetLastLower() : Lower();
335
336 // #i27399#
337 // bOrtho means we have to adjust the column frames manually. Otherwise
338 // we may use the values returned by CalcColWidth:
339 const bool bOrtho = pAttr->IsOrtho() && pAttr->GetNumCols() > 0;
340 tools::Long nGutter = 0;
341
342 for ( sal_uInt16 i = 0; i < pAttr->GetNumCols() && pCol; ++i ) //i118878, value returned by GetNumCols() can't be trusted
343 {
344 if( !bOrtho )
345 {
346 const SwTwips nWidth = i == (pAttr->GetNumCols() - 1) ?
347 nAvail :
348 pAttr->CalcColWidth( i, sal_uInt16( (getFramePrintArea().*fnRect->fnGetWidth)() ) );
349
350 const Size aColSz = bVert ?
351 Size( getFramePrintArea().Width(), nWidth ) :
352 Size( nWidth, getFramePrintArea().Height() );
353
354 pCol->ChgSize( aColSz );
355
356 // With this, the ColumnBodyFrames from page columns gets adjusted and
357 // their bFixHeight flag is set so they won't shrink/grow.
358 // Don't use the flag with frame columns because BodyFrames in frame
359 // columns can grow/shrink.
360 if( IsBodyFrame() )
361 static_cast<SwLayoutFrame*>(pCol)->Lower()->ChgSize( aColSz );
362
363 nAvail -= nWidth;
364 }
365
366 if ( bOrtho || bAdjustAttributes )
367 {
368 const SwColumn *pC = &pAttr->GetColumns()[i];
369 const SwAttrSet* pSet = pCol->GetAttrSet();
370 SvxLRSpaceItem aLR( pSet->GetLRSpace() );
371
372 //In order to have enough space for the separation lines, we have to
373 //take them into account here. Every time two columns meet we
374 //calculate a clearance of 20 + half the pen width on the left or
375 //right side, respectively.
376 const sal_uInt16 nLeft = pC->GetLeft();
377 const sal_uInt16 nRight = pC->GetRight();
378
379 aLR.SetLeft ( nLeft );
380 aLR.SetRight( nRight );
381
382 if ( bLine )
383 {
384 if ( i == 0 )
385 {
386 aLR.SetRight( std::max( nRight, nMin ) );
387 }
388 else if ( i == pAttr->GetNumCols() - 1 )
389 {
390 aLR.SetLeft ( std::max( nLeft, nMin ) );
391 }
392 else
393 {
394 aLR.SetLeft ( std::max( nLeft, nMin ) );
395 aLR.SetRight( std::max( nRight, nMin ) );
396 }
397 }
398
399 if ( bAdjustAttributes )
400 {
401 SvxULSpaceItem aUL( pSet->GetULSpace() );
402 aUL.SetUpper(0);
403 aUL.SetLower(0);
404
405 static_cast<SwLayoutFrame*>(pCol)->GetFormat()->SetFormatAttr( aLR );
406 static_cast<SwLayoutFrame*>(pCol)->GetFormat()->SetFormatAttr( aUL );
407 }
408
409 nGutter += aLR.GetLeft() + aLR.GetRight();
410 }
411
412 pCol = bR2L ? pCol->GetPrev() : pCol->GetNext();
413 }
414
415 if( !bOrtho )
416 return;
417
418 tools::Long nInnerWidth = ( nAvail - nGutter ) / pAttr->GetNumCols();
419 pCol = Lower();
420 for( sal_uInt16 i = 0; i < pAttr->GetNumCols() && pCol; pCol = pCol->GetNext(), ++i ) //i118878, value returned by GetNumCols() can't be trusted
421 {
422 SwTwips nWidth;
423 if ( i == pAttr->GetNumCols() - 1 )
424 nWidth = nAvail;
425 else
426 {
427 SvxLRSpaceItem aLR( pCol->GetAttrSet()->GetLRSpace() );
428 nWidth = nInnerWidth + aLR.GetLeft() + aLR.GetRight();
429 }
430 if( nWidth < 0 )
431 nWidth = 0;
432
433 const Size aColSz = bVert ?
434 Size( getFramePrintArea().Width(), nWidth ) :
435 Size( nWidth, getFramePrintArea().Height() );
436
437 pCol->ChgSize( aColSz );
438
439 if( IsBodyFrame() )
440 static_cast<SwLayoutFrame*>(pCol)->Lower()->ChgSize( aColSz );
441
442 nAvail -= nWidth;
443 }
444}
445
446/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
virtual const SwRootFrame * GetCurrentLayout() const =0
virtual void ResetModified()=0
virtual bool IsModified() const =0
Changes of document?
void SetRight(const tools::Long nR, const sal_uInt16 nProp=100)
tools::Long GetRight() const
tools::Long GetLeft() const
void SetLeft(const tools::Long nL, const sal_uInt16 nProp=100)
void SetLower(const sal_uInt16 nL, const sal_uInt16 nProp=100)
void SetUpper(const sal_uInt16 nU, const sal_uInt16 nProp=100)
const SvxLRSpaceItem & GetLRSpace(bool=true) const
Definition: frmatr.hxx:44
const SvxULSpaceItem & GetULSpace(bool=true) const
Definition: frmatr.hxx:46
Container of body content (i.e.
Definition: bodyfrm.hxx:29
virtual void DestroyImpl() override
Definition: colfrm.cxx:47
SwColumnFrame(SwFrameFormat *, SwFrame *)
Definition: colfrm.cxx:38
virtual ~SwColumnFrame() override
Definition: colfrm.cxx:65
ColumnDescriptor.
Definition: fmtclds.hxx:34
sal_uInt16 GetLeft() const
Definition: fmtclds.hxx:51
sal_uInt16 GetRight() const
Definition: fmtclds.hxx:52
Definition: doc.hxx:195
SwFrameFormat * MakeFrameFormat(const OUString &rFormatName, SwFrameFormat *pDerivedFrom, bool bBroadcast=false, bool bAuto=true)
Definition: docfmt.cxx:820
IDocumentState const & getIDocumentState() const
Definition: doc.cxx:402
const SwFrameFormat * GetColumnContFormat() const
Definition: doc.hxx:760
IDocumentUndoRedo & GetIDocumentUndoRedo()
Definition: doc.cxx:152
IDocumentLayoutAccess const & getIDocumentLayoutAccess() const
Definition: doc.cxx:413
void DelFrameFormat(SwFrameFormat *pFormat, bool bBroadcast=false)
Definition: docfmt.cxx:697
const SwFrameFormat * GetDfltFrameFormat() const
Definition: doc.hxx:756
SwTwips GetMaxFootnoteHeight() const
Definition: ftnboss.hxx:97
void SetMaxFootnoteHeight(const SwTwips nNewMax)
Definition: ftnboss.hxx:78
sal_uInt16 GetWishWidth() const
Definition: fmtclds.hxx:122
sal_uInt16 CalcColWidth(sal_uInt16 nCol, sal_uInt16 nAct) const
Calculates current width of column nCol.
Definition: atrfrm.cxx:991
bool IsOrtho() const
Definition: fmtclds.hxx:121
const SwColumns & GetColumns() const
Definition: fmtclds.hxx:112
sal_uLong GetLineWidth() const
Definition: fmtclds.hxx:117
sal_uInt16 GetNumCols() const
Definition: fmtclds.hxx:114
SwColLineAdj GetLineAdj() const
Definition: fmtclds.hxx:120
const SwDoc * GetDoc() const
The document is set in SwAttrPool now, therefore you always can access it.
Definition: format.hxx:139
const SwFormatCol & GetCol(bool=true) const
Definition: fmtclds.hxx:168
virtual bool SetFormatAttr(const SfxPoolItem &rAttr)
Definition: format.cxx:447
const SwRect & getFramePrintArea() const
Definition: frame.hxx:180
Style of a layout element.
Definition: frmfmt.hxx:62
Base class of the Writer layout elements.
Definition: frame.hxx:315
void InsertBehind(SwLayoutFrame *pParent, SwFrame *pBefore)
Insert SwFrame into existing structure.
Definition: wsfrm.cxx:872
SwFrame * GetNext()
Definition: frame.hxx:676
bool IsPageFrame() const
Definition: frame.hxx:1178
bool IsColumnFrame() const
Definition: frame.hxx:1182
SwFrameType mnFrameType
Definition: frame.hxx:414
bool IsVertLRBT() const
Definition: frame.hxx:983
bool IsRightToLeft() const
Definition: frame.hxx:987
void InsertBefore(SwLayoutFrame *pParent, SwFrame *pBehind)
Insert SwFrame into existing structure.
Definition: wsfrm.cxx:836
bool IsPageBodyFrame() const
Definition: layfrm.hxx:215
const SwAttrSet * GetAttrSet() const
WARNING: this may not return correct RES_PAGEDESC/RES_BREAK items for SwTextFrame,...
Definition: findfrm.cxx:731
SwLayoutFrame * GetUpper()
Definition: frame.hxx:678
bool IsVertical() const
Definition: frame.hxx:973
bool IsNoTextFrame() const
Definition: frame.hxx:1238
SwFrame * GetPrev()
Definition: frame.hxx:677
bool IsSctFrame() const
Definition: frame.hxx:1214
bool IsVertLR() const
Definition: frame.hxx:979
SwPageFrame * FindPageFrame()
Definition: frame.hxx:680
virtual Size ChgSize(const Size &aNewSize)
Definition: wsfrm.cxx:737
static void DestroyFrame(SwFrame *const pFrame)
this is the only way to delete a SwFrame instance
Definition: ssfrm.cxx:388
bool IsLayoutFrame() const
Definition: frame.hxx:1170
bool IsBodyFrame() const
Definition: frame.hxx:1206
TElementType * Next()
Definition: calbck.hxx:373
TElementType * First()
Definition: calbck.hxx:365
A layout frame is a frame that contains other frames (m_pLower), e.g. SwPageFrame or SwTabFrame.
Definition: layfrm.hxx:36
void SetFrameFormat(SwFrameFormat *)
Definition: ssfrm.cxx:409
void AdjustColumns(const SwFormatCol *pCol, bool bAdjustAttributes)
Definition: colfrm.cxx:298
virtual const SwFrameFormat * GetFormat() const
Definition: ssfrm.cxx:399
virtual void DestroyImpl() override
Definition: ssfrm.cxx:485
friend void RestoreContent(SwFrame *, SwLayoutFrame *, SwFrame *pSibling)
Definition: frmtool.cxx:3027
virtual void Paste(SwFrame *pParent, SwFrame *pSibling=nullptr) override
Definition: wsfrm.cxx:1344
const SwFrame * GetLastLower() const
Definition: findfrm.cxx:1885
friend SwFrame * SaveContent(SwLayoutFrame *, SwFrame *)
Definition: frmtool.cxx:2865
void ChgColumns(const SwFormatCol &rOld, const SwFormatCol &rNew, const bool bChgFootnote=false)
add or remove columns from a layoutframe.
Definition: colfrm.cxx:188
const SwFrame * Lower() const
Definition: layfrm.hxx:101
virtual void Cut() override
Definition: wsfrm.cxx:1441
A page of the document layout.
Definition: pagefrm.hxx:58
void RemoveFootnotes(SwPageFrame *pPage=nullptr, bool bPageOnly=false, bool bEndNotes=false)
Remove all footnotes (but no references)
Definition: ftnfrm.cxx:972
static SwLayoutFrame * lcl_FindColumns(SwLayoutFrame *pLay, sal_uInt16 nCount)
Definition: colfrm.cxx:91
static void lcl_RemoveColumns(SwLayoutFrame *pCont, sal_uInt16 nCnt)
Definition: colfrm.cxx:69
static bool lcl_AddColumns(SwLayoutFrame *pCont, sal_uInt16 nCount)
Definition: colfrm.cxx:108
int nCount
@ COLADJ_NONE
Definition: fmtclds.hxx:61
@ ATT_LEFT_TO_RIGHT
Definition: fmtfordr.hxx:31
SwRectFn fnRectVert
Definition: frame.hxx:1347
SwRectFn fnRectVertL2RB2T
Definition: frame.hxx:1347
SwRectFn fnRectHori
Definition: newfrm.cxx:286
SwRectFn fnRectVertL2R
Definition: frame.hxx:1347
void sw_RemoveFootnotes(SwFootnoteBossFrame *pBoss, bool bPageOnly, bool bEndNotes)
remove all footnotes (not the references) and all footnote pages
Definition: ftnfrm.cxx:918
const long LONG_MAX
int i
long Long
SwNodeOffset min(const SwNodeOffset &a, const SwNodeOffset &b)
Definition: nodeoffset.hxx:35
SwRectGet fnGetWidth
Definition: frame.hxx:1294
tools::Long SwTwips
Definition: swtypes.hxx:51