20#include <libxml/xmlwriter.h>
28#include <osl/diagnose.h>
68#define CHECK_TABLE(t) (t).CheckConsistency();
102 for(
n = 0;
n < rText.getLength() &&
' ' >= ( c = rText[
n] ); ++
n )
104 rText = rText.replaceAt(
n, 1,
u" " );
105 for(
n = rText.getLength();
n &&
' ' >= ( c = rText[--
n] ); )
107 rText = rText.replaceAt(
n, 1,
u" " );
115 OUStringBuffer sBuff(rText);
117 for(
n = 0;
n < sBuff.getLength() &&
' ' >= ( c = sBuff[
n ]); ++
n )
120 sBuff.remove(
n--, 1 );
122 for(
n = sBuff.getLength();
n &&
' ' >= ( c = sBuff[ --
n ]); )
125 sBuff.remove(
n, 1 );
127 rText = sBuff.makeStringAndClear();
134 sal_uInt16 nInsPos, sal_uInt16 nCnt )
136 OSL_ENSURE( pBox->
GetSttNd(),
"Box with no start node" );
141 OSL_ENSURE( pCNd,
"Box with no content node" );
151 const std::shared_ptr<SfxItemSet>& handle = format.
GetStyleHandle();
152 aAttrSet.
Put(*handle);
162 static_cast<SwTextNode*
>(pCNd)->GetTextColl(),
163 &aAttrSet, nInsPos, nCnt );
167 static_cast<SwTextNode*
>(pCNd)->GetTextColl(),
179 for( sal_uInt16
i = 0;
i < nCnt; ++
i )
181 pBox = rTableBoxes[
i + nInsPos ];
189 m_pTableNode( nullptr ),
190 m_nGraphicsThatResize( 0 ),
191 m_nRowsToRepeat( 1 ),
192 m_bModifyLocked( false ),
200 :
SwClient( rTable.GetFrameFormat() ),
201 m_pTableNode( nullptr ),
202 m_eTableChgMode( rTable.m_eTableChgMode ),
203 m_nGraphicsThatResize( 0 ),
204 m_nRowsToRepeat( rTable.GetRowsToRepeat() ),
205 maTableStyleName(rTable.maTableStyleName),
206 m_bModifyLocked( false ),
207 m_bNewModel( rTable.m_bNewModel )
213 for (
size_t n = 0;
n < rSortCntBoxes.
size(); ++
n)
215 rSortCntBoxes[
n ]->m_pStartNode =
nullptr;
232 pFormat->Remove(
this );
234 if( !pFormat->HasWriterListeners() )
249T lcl_MulDiv64(sal_uInt64 nA, sal_uInt64 nM, sal_uInt64 nD)
252 return nD == 0 ?
static_cast<T
>(nA*nM) :
static_cast<T
>((nA*nM)/nD);
259 std::vector<SwFormat*>::const_iterator it = std::find( rFormatArr.begin(), rFormatArr.end(), pBoxFormat );
260 if ( it == rFormatArr.end() )
261 rFormatArr.push_back( pBoxFormat );
265 const tools::Long nNew, std::vector<SwFormat*>& rFormatArr );
268 const tools::Long nNew, std::vector<SwFormat*>& rFormatArr,
const bool bCheckSum )
270 for (
auto &rLine : rLines)
276 const SwTwips nBox = lcl_MulDiv64<SwTwips>(pFormat->GetFrameSize().GetWidth(), nNew, nOld);
278 pFormat->LockModify();
279 pFormat->SetFormatAttr( aNewBox );
280 pFormat->UnlockModify();
286 const tools::Long nNew, std::vector<SwFormat*>& rFormatArr )
289 sal_uInt64 nOriginalSum = 0;
290 for (
size_t i = 0;
i < rBoxes.size(); ++
i )
301 nOriginalSum += nBox;
302 nBox = lcl_MulDiv64<sal_uInt64>(nBox, nNew, nOld);
303 const sal_uInt64 nWishedSum = lcl_MulDiv64<sal_uInt64>(nOriginalSum, nNew, nOld) - nSum;
306 if( nBox == nWishedSum )
313 pFormat->LockModify();
315 pFormat->UnlockModify();
319 OSL_FAIL(
"Rounding error" );
327 if (rHint.
GetId() != SfxHintId::SwLegacyModify)
331 const sal_uInt16 nWhich = pLegacy->
GetWhich();
337 if (pLegacy->m_pOld && pLegacy->m_pNew
342 pOldSize = &
static_cast<const SwAttrSetChg*
>(pLegacy->m_pOld)->GetChgSet()->GetFrameSize();
361 std::vector<SwFormat*> aFormatArr;
362 aFormatArr.reserve(
m_aLines[0]->GetTabBoxes().
size() );
368 for (
size_t i = 0;
i < rToFill.
Count(); ++
i )
380 const bool bRefreshHidden )
383 OSL_ENSURE(nWish,
"weird <= 0 width frmfrm");
400 for (
size_t i = 0;
i < rBoxes.size(); ++
i )
402 const SwTwips nWidth = rBoxes[
i]->GetFrameFormat()->GetFrameSize().GetWidth();
404 const tools::Long nTmp = lcl_MulDiv64<tools::Long>(nSum, nAct, nWish);
406 if (rBoxes[
i] != pCur)
408 if ( pLine == pBox->
GetUpper() || 0 == nLeftMin )
409 nLeftMin = nTmp -
nPos;
415 if ( 0 == nRightMax )
416 nRightMax = nTmp -
nPos;
421 pLine = pCur ? pCur->
GetUpper() :
nullptr;
425 bool bInsert = !bRefreshHidden;
426 for (
size_t j = 0; bInsert && (j < rToFill.
Count()); ++j )
434 else if (
nPos < nCmp )
442 else if ( bRefreshHidden )
445 if ( !bHidden || bRefreshHidden )
449 nLeftMin =
nPos - nLeftMin;
450 nRightMax =
nPos + nRightMax;
453 bool bFoundPos =
false;
454 bool bFoundMax =
false;
455 for (
size_t j = 0; !(bFoundPos && bFoundMax ) && j < rToFill.
Count(); ++j )
465 if ( nLeftMin > nOldMin )
466 rEntry.
nMin = nLeftMin;
469 if ( nRightMax < nOldMax )
470 rEntry.
nMax = nRightMax;
479 if (
nPos > nOldMin )
493 for (
size_t i = 0;
i < rLines.
size(); ++
i )
496 for (
size_t j = 0; j < rBoxes.size(); ++j )
519 bool bRefreshHidden,
bool bCurRowOnly )
const
522 if ( bRefreshHidden )
525 for (
size_t i = 0;
i < rToFill.
Count(); ++
i )
534 for (
size_t i = 0;
i < rToFill.
Count(); ++
i )
561 for (
size_t i = 0;
i < rBoxes.size(); ++
i )
570 for (
size_t k = 0; k < rBoxes2.size(); ++k )
572 pTabFormat,
false, bRefreshHidden );
576 if ( !bRefreshHidden )
592 for (
size_t i = 0;
i < rToFill.
Count(); ++
i )
621 for (
size_t i = rBoxes.size();
i > 0; )
633 for (
size_t i = rLines.
size();
i > 0; )
658 for (
size_t i = 0; (
i < rBoxes.size()) && (rBoxes[
i] != pCur); ++
i)
660 nLeft += lcl_MulDiv64<tools::Long>(
661 rBoxes[
i]->GetFrameFormat()->GetFrameSize().GetWidth(),
665 pLine = pCur ? pCur->
GetUpper() :
nullptr;
672 const tools::Long nWidth = lcl_MulDiv64<tools::Long>(
677 size_t nRightPos = 0;
678 bool bFoundLeftPos =
false;
679 bool bFoundRightPos =
false;
686 bFoundLeftPos =
true;
692 bFoundRightPos =
true;
695 nLeftDiff = bFoundLeftPos ?
696 rParm.
rOld[nLeftPos] - rParm.
rNew[nLeftPos] : 0;
697 nRightDiff= bFoundRightPos ?
698 rParm.
rNew[nRightPos] - rParm.
rOld[nRightPos] : 0;
706 const tools::Long nWidth = lcl_MulDiv64<tools::Long>(
726 if(
nPos && rTableBoxes[
nPos - 1 ]->getRowSpan() != 1 )
728 if(
nPos + 1 < o3tl::narrowing<sal_uInt16>(rTableBoxes.size()) &&
729 rTableBoxes[
nPos + 1 ]->getRowSpan() != 1 )
733 nLeftDiff = nRightDiff = 0;
735 if ( nLeftDiff || nRightDiff )
753 if ( aFormatFrameSize.
GetWidth() < 0 )
786 for (
size_t i = 0;
i < rLines.
size(); ++
i )
789 for (
size_t j = 0; j < rBoxes.size(); ++j )
794 rBoxArr.push_front( pBox );
796 rBoxArr.push_back( pBox );
803 for (
size_t i = 0;
i < rLines.
size(); ++
i )
806 [rLines[
i]->GetTabBoxes().
size()-1];
834 Parm aParm( rNew, rOld );
836 OSL_ENSURE( rOld.
Count() == rNew.
Count(),
"Number of columns changed.");
865 const bool bLeftDist = rNew.
GetLeft() != nShLeft;
867 if(!bLeftDist && !bRightDist)
869 else if(!bRightDist && rNew.
GetLeft() > nShLeft )
936 for (
size_t i = 0;
i < rBoxes.size(); ++
i )
946 for (
size_t i = 0;
i < rBoxes2.size(); ++
i )
948 if ( rBoxes2[
i] != pExcl )
958 for (
int j = aParm.
aBoxArr.size()-1; j >= 0; --j )
970 for (
size_t i = rLines.
size();
i > 0; )
994 Parm& rParm, sal_uInt16 nColFuzzy )
996 ChangeList::iterator pCurr = rOldNew.begin();
997 if( pCurr == rOldNew.end() )
1006 SwTwips nNewWidth = nWidth - nRest;
1009 if( pCurr != rOldNew.end() &&
nBorder + nColFuzzy >= pCurr->first )
1012 while( pCurr != rOldNew.end() &&
nBorder > pCurr->first )
1014 if( pCurr != rOldNew.end() )
1017 if(
nBorder + nColFuzzy >= pCurr->first )
1019 if( pCurr->second == pCurr->first )
1022 nRest = pCurr->second -
nBorder;
1028 if( nNewWidth != nWidth )
1032 nRest += 1 - nNewWidth;
1036 aFormatFrameSize.
SetWidth( nNewWidth );
1045 if( rChanges.empty() )
1050 if( rSpanPos.empty() )
1055 std::vector<sal_uInt16> aNewSpanPos;
1056 ChangeList::iterator pCurr = rChanges.begin();
1058 std::vector<sal_uInt16>::iterator pSpan = rSpanPos.begin();
1059 sal_uInt16 nCurr = 0;
1061 bool bRowSpan =
false;
1062 sal_uInt16 nRowSpanCount = 0;
1064 for(
size_t nCurrBox = 0; nCurrBox <
nCount; ++nCurrBox )
1068 const sal_Int32 nRowSpan = pBox->
getRowSpan();
1069 const bool bCurrRowSpan = bTop ? nRowSpan < 0 :
1070 ( nRowSpan > 1 || nRowSpan < -1 );
1071 if( bRowSpan || bCurrRowSpan )
1072 aNewSpanPos.push_back( nRowSpanCount );
1073 bRowSpan = bCurrRowSpan;
1074 nOrgSum += nCurrWidth;
1075 const sal_uInt16
nPos = lcl_MulDiv64<sal_uInt16>(
1076 lcl_MulDiv64<sal_uInt64>(nOrgSum, nWidth, nWish),
1078 while( pCurr != rChanges.end() && pCurr->first <
nPos )
1084 if( pCurr != rChanges.end() && pCurr->first <=
nPos &&
1085 pCurr->first != pCurr->second )
1087 pSpan = std::find_if(pSpan, rSpanPos.end(),
1088 [nCurr](
const sal_uInt16 nSpan) { return nSpan >= nCurr; });
1089 if( pSpan != rSpanPos.end() && *pSpan == nCurr )
1091 aNewChanges.push_back( *pCurr );
1099 aNewChanges.push_back( aTmp );
1104 pCurr = aNewChanges.begin();
1105 ChangeList::iterator pLast = pCurr;
1106 ChangeList::iterator pLeftMove = pCurr;
1107 while( pCurr != aNewChanges.end() )
1109 if( pLeftMove == pCurr )
1111 while( ++pLeftMove != aNewChanges.end() && pLeftMove->first <= pLeftMove->second )
1114 if( pCurr->second == pCurr->first )
1116 if( pLeftMove != aNewChanges.end() && pCurr->second > pLeftMove->second )
1118 if( pLeftMove->first == pLast->first )
1119 pCurr->second = pLeftMove->second;
1122 pCurr->second = lcl_MulDiv64<sal_uInt16>(
1123 pCurr->first - pLast->first,
1124 pLeftMove->second - pLast->second,
1125 pLeftMove->first - pLast->first) + pLast->second;
1131 else if( pCurr->second > pCurr->first )
1135 ChangeList::iterator pNext = pCurr;
1136 while( pNext != pLeftMove && pNext->second == pNext->first &&
1137 pNext->second < pLast->second )
1139 while( pCurr != pNext )
1141 if( pNext == aNewChanges.end() || pNext->first == pLast->first )
1142 pCurr->second = pLast->second;
1145 pCurr->second = lcl_MulDiv64<sal_uInt16>(
1146 pCurr->first - pLast->first,
1147 pNext->second - pLast->second,
1148 pNext->first - pLast->first) + pLast->second;
1161 rChanges.swap(aNewChanges);
1162 rSpanPos.swap(aNewSpanPos);
1168#if OSL_DEBUG_LEVEL > 1
1169 static int nCallCount = 0;
1176 if( nNewWidth < 1 || nOldWidth < 1 )
1178 for(
size_t i = 0;
i <= rOld.
Count(); ++
i )
1192 nNewPos = lcl_MulDiv64<tools::Long>(nNewPos, rParm.
nNewWish, nNewWidth);
1193 nOldPos = lcl_MulDiv64<tools::Long>(nOldPos, rParm.
nOldWish, nOldWidth);
1194 if( nOldPos != nNewPos && nNewPos > 0 && nOldPos > 0 )
1196 ColChange aChg( o3tl::narrowing<sal_uInt16>(nOldPos), o3tl::narrowing<sal_uInt16>(nNewPos) );
1197 aOldNew.push_back( aChg );
1201 int nCount = aOldNew.size();
1208 sal_uInt16 nCurr = rLines.
GetPos( pCurrLine );
1209 if( nCurr >= USHRT_MAX )
1213 aOldNew.push_front( aChg );
1214 std::vector<sal_uInt16> aRowSpanPos;
1218 sal_uInt16
nPos = 0;
1219 for(
const auto& rCop : aOldNew )
1221 aCopy.push_back( rCop );
1222 aRowSpanPos.push_back(
nPos++ );
1226 bool bGoOn = !aRowSpanPos.empty();
1227 sal_uInt16 j = nCurr;
1233 bGoOn = !aRowSpanPos.empty() && j > 0;
1235 aRowSpanPos.clear();
1237 if( nCurr+1 < o3tl::narrowing<sal_uInt16>(rLines.
size()) )
1240 sal_uInt16
nPos = 0;
1241 for(
const auto& rCop : aOldNew )
1243 aCopy.push_back( rCop );
1244 aRowSpanPos.push_back(
nPos++ );
1247 rParm.
nOldWish, nOldWidth,
false );
1248 bool bGoOn = !aRowSpanPos.empty();
1249 sal_uInt16 j = nCurr;
1253 rParm.
nOldWish, nOldWidth,
false );
1255 bGoOn = !aRowSpanPos.empty() && j+1 < o3tl::narrowing<sal_uInt16>(rLines.
size());
1262 for(
size_t i = 0;
i < rLines.
size(); ++
i )
1271 bool bIsValid =
true;
1272 size_t nLen = rStr.size();
1273 for(
size_t i = 0;
i < nLen && bIsValid; ++
i )
1276 if (cChar < '0' || cChar >
'9')
1285 const bool bPerformValidCheck )
1287 sal_uInt16 nRet = 0;
1294 bool overflow =
false;
1295 while (
nPos<rStr.getLength())
1298 if ((cChar<'A' || cChar>
'Z') && (cChar<'a' || cChar>
'z'))
1307 num = num * 52 + cChar;
1314 rStr = rStr.copy(
nPos );
1318 const sal_Int32
nPos = rStr.indexOf(
"." );
1324 nRet = o3tl::narrowing<sal_uInt16>(rStr.toInt32());
1331 const std::u16string_view aText( rStr.subView( 0,
nPos ) );
1336 rStr = rStr.copy(
nPos+1 );
1345 const bool bPerformValidCheck )
const
1351 sal_uInt16 nLine, nBox;
1352 OUString aNm( rName );
1353 while( !aNm.isEmpty() )
1369 if( !nLine || nLine > pLines->
size() )
1371 pLine = (*pLines)[ nLine-1 ];
1375 if( nBox >= pBoxes->size() )
1377 pBox = (*pBoxes)[ nBox ];
1383 OSL_FAIL(
"Box without content, looking for the next one!" );
1406 pTableNd = rNds[
nIndex ]->GetTableNode();
1410 pCNd = rNds[
nIndex ]->GetContentNode();
1417 if ( pCNd || pTableNd )
1419 sw::BroadcastingModify* pModify = pCNd;
1477 pMod->Remove(
this );
1478 if( !pMod->HasWriterListeners() )
1492 if ( pLast !=
this )
1497 *pNewFormat = *pRet;
1502 if( pFrame->GetTabLine() ==
this )
1503 pFrame->RegisterToFormat( *pNewFormat );
1506 pNewFormat->Add(
this );
1520 pNewFormat->Add(
this);
1521 if(!pOld->HasWriterListeners())
1528 bLayoutAvailable =
false;
1535 if (pLast->GetTabLine() !=
this)
1548 if (!pChain || pChain->IsAnFollow( pTab ) || pTab->IsAnFollow(pChain))
1554 nRet += pLast->getFrameArea().Height();
1556 if( !pTab->HasFollow() && !pTab->IsFollow() )
1590 if ( aRedlineTable.
empty() )
1602 for(
size_t j = 0; j < rBoxes.size(); ++j )
1604 if ( RedlineType::Delete == rBoxes[j]->GetRedlineType() )
1614 if ( aRedlineTable.
empty() )
1631 assert(pBoxFormula);
1632 if(!pBoxFormula->GetDefinedIn())
1634 const SwNode* pNd = pBoxFormula->GetNodeOfFormula();
1637 rvFormulas.push_back(pBoxFormula);
1648 std::vector<SwTableBoxFormula*> vFormulas;
1650 for(
auto pBoxFormula: vFormulas)
1652 const SwNode* pNd = pBoxFormula->GetNodeOfFormula();
1654 if(pTableNd ==
nullptr)
1663 pBoxFormula->ToSplitMergeBoxNmWithHistory(aHint, pHistory);
1672 std::vector<SwTableBoxFormula*> vFormulas;
1674 for(
auto pBoxFormula: vFormulas)
1675 pBoxFormula->ToSplitMergeBoxNmWithHistory(aHint, pHistory);
1684 std::vector<SwFormatField*> vFields;
1686 for(
auto pFormatField : vFields)
1693 if(pTableNd ==
nullptr || &pTableNd->
GetTable() !=
this)
1721 if(pBoxFormula && pBoxFormula->GetDefinedIn())
1726 pBoxFormula->ChangeState();
1733 (void)xmlTextWriterStartElement(pWriter, BAD_CAST(
"SwTable"));
1734 (void)xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST(
"ptr"),
"%p",
this);
1735 (void)xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST(
"table-format"),
"%p",
GetFrameFormat());
1738 (void)xmlTextWriterStartElement(pWriter, BAD_CAST(
"SwTableLine"));
1739 (void)xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST(
"ptr"),
"%p", pLine);
1740 pLine->GetFrameFormat()->dumpAsXml(pWriter);
1741 (void)xmlTextWriterEndElement(pWriter);
1743 (void)xmlTextWriterEndElement(pWriter);
1761 if ( pHasTextChangesOnlyProp && !pHasTextChangesOnlyProp->GetValue() )
1764 size_t nBoxes = rBoxes.size();
1765 bool bInsertion =
false;
1766 bool bPlainTextInLine =
false;
1769 for (
size_t nBoxIndex = 0; nBoxIndex < nBoxes && rRedlinePos < aRedlineTable.
size(); ++nBoxIndex)
1771 auto pBox = rBoxes[nBoxIndex];
1772 if ( pBox->IsEmpty(
false ) )
1778 bool bHasRedlineInBox =
false;
1783 for( ; rRedlinePos < aRedlineTable.
size(); ++rRedlinePos )
1795 if ( aCellStart <= *pRedline->
Start() )
1797 if ( !bHasRedlineInBox )
1799 bHasRedlineInBox =
true;
1802 bPlainTextInLine =
true;
1810 if ( RedlineType::Insert ==
nType )
1817 if ( pPreviousDeleteRedline &&
1818 *pPreviousDeleteRedline->
End() < *pRedline->
Start() &&
1823 bPlainTextInLine =
true;
1831 aRedlineTable[nNewestRedline]->GetRedlineData().GetTimeStamp() <
1834 nNewestRedline = rRedlinePos;
1837 aRedlineTable[nOldestRedline]->GetRedlineData().GetTimeStamp() >
1840 nOldestRedline = rRedlinePos;
1846 if ( !bInsertion && ( !bHasRedlineInBox || ( pPreviousDeleteRedline &&
1854 bPlainTextInLine =
true;
1863 RedlineType::Insert == aRedlineTable[ nOldestRedline ]->GetType() )
1866 nRet = nOldestRedline;
1869 RedlineType::Delete == aRedlineTable[ nNewestRedline ]->GetType() )
1874 nRet = nNewestRedline;
1883 if ( bUpdateProperty )
1887 pFormat->LockModify();
1889 pFormat->UnlockModify();
1897 : aRedlineTable[ nRet ]->GetType());
1909 if ( !pFirstBox || !pLastBox )
1917 if( pFnd && *pFnd->
Start() < aLineStart && *pFnd->
End() > aLineEnd )
1930 if ( RedlineType::Delete == aRedlineTable[
nPos]->GetType() ||
1931 ( !bOnlyDeleted && RedlineType::Insert == aRedlineTable[
nPos]->GetType() ) )
1943 for(
size_t i = 0;
i < rBoxes.size(); ++
i )
1957 if ( aRedlineTable.
empty() )
1958 return RedlineType::None;
1964 if ( pHasTextChangesOnlyProp && !pHasTextChangesOnlyProp->GetValue() )
1972 return aRedlineTable[
nPos]->GetType();
1981 return aRedlineTable[nTableRedline]->GetType();
1983 return RedlineType::None;
1989 , m_pStartNode(nullptr)
1992 , mbDummyFlag(false)
1993 , mbDirectFormatting(false)
2005 , mbDummyFlag(false)
2006 , mbDirectFormatting(false)
2014 assert(pTableNd &&
"In which table is that box?");
2024 , m_pStartNode(&rSttNd)
2027 , mbDummyFlag(false)
2028 , mbDirectFormatting(false)
2034 OSL_ENSURE( pTableNd,
"In which table is the box?" );
2047 assert(pTableNd &&
"In which table is that box?");
2065 pMod->Remove(
this );
2066 if( !pMod->HasWriterListeners() )
2081 pNewFormat->LockModify();
2082 *pNewFormat = *pFormat;
2086 pNewFormat->UnlockModify();
2088 pFormat = pNewFormat;
2104 if ( pLast !=
this )
2110 pNewFormat->LockModify();
2111 *pNewFormat = *pRet;
2113 pNewFormat->UnlockModify();
2118 if( pCell->GetTabBox() ==
this )
2119 pCell->RegisterToFormat( *pNewFormat );
2122 pNewFormat->Add(
this );
2136 if(bNeedToReregister)
2139 pNewFormat->Add(
this);
2140 if(!pOld->HasWriterListeners())
2148 const sal_uInt16 coDiff = 52;
2151 const sal_uInt16 nCalc = nCol % coDiff;
2153 rNm = OUStringChar(
sal_Unicode(
'a' - 26 + nCalc) ) + rNm;
2155 rNm = OUStringChar(
sal_Unicode(
'A' + nCalc) ) + rNm;
2157 nCol = nCol - nCalc;
2170 return Point( 0, 0 );
2182 nY = pLines->
GetPos( pLine ) + 1 ;
2186 return Point( nX, nY );
2208 sTmp = OUString::number(
nPos );
2209 if( !sNm.isEmpty() )
2210 sNm = sTmp +
"." + sNm;
2215 sTmp = OUString::number(
nPos + 1);
2217 if(
nullptr != pBox )
2218 sNm = sTmp +
"." + sNm;
2260 if ( pCNd && !pCNd->
Len() )
2263 else if ( bWithRemainingNestedTable )
2270 return pTableNode->GetTable().IsEmpty();
2280 switch( rInfo.
Which() )
2357 if( SvxAdjust::Left == eAdjust || SvxAdjust::Block == eAdjust )
2371 std::optional<Color> pNewUserColor;
2373 pNewUserColor = pColorItem->
GetValue();
2375 if( ( pNewUserColor && pOldNumFormatColor &&
2376 *pNewUserColor == *pOldNumFormatColor ) ||
2377 ( !pNewUserColor && !pOldNumFormatColor ))
2383 else if( pColorItem )
2395 rBox.
SetSaveUserColor( pNewUserColor ? *pNewUserColor : std::optional<Color>() );
2404 if( pTNd->
GetText() != rText )
2407 const OUString& rOrig = pTNd->
GetText();
2412 for( ;
n < rOrig.getLength() &&
'\x01' == rOrig[
n]; ++
n )
2417 sal_Int32 nEndPos =
n;
2428 SwPaM aTemp(*pTNd, 0, *pTNd, rOrig.getLength());
2434 while( nCommentPos > aIdx.
GetIndex() )
2440 nEndPos = nCommentPos;
2445 while( nCommentPos > aIdx.
GetIndex() && nCommentPos == nEndPos );
2453 SwPaM aTemp(*pTNd, 0, *pTNd, rText.getLength());
2462 text::VertOrientation::TOP == pVertOrientItem->
GetVertOrient() ))
2479 const Color * pCol =
nullptr;
2484 const OUString sText( pTNd->
GetText() );
2501 if( bChgAlign && pAttrSet &&
2503 SvxAdjust::Right == pAdjustItem->
GetAdjust() )
2514 std::optional<Color> pNewUserColor;
2516 pNewUserColor = pColorItem->
GetValue();
2518 if( ( pNewUserColor && pOldNumFormatColor &&
2519 *pNewUserColor == *pOldNumFormatColor ) ||
2520 ( !pNewUserColor && !pOldNumFormatColor ))
2526 else if( pColorItem )
2551 text::VertOrientation::BOTTOM == pVertOrientItem->
GetVertOrient() )
2562 nNewFormat = pNewFormat->
GetValue();
2566 pNewFormat =
nullptr;
2573 nNewFormat = pNewFormat ? pNewFormat->
GetValue() : nOldFormat;
2579 if(
GetDoc()->GetNumberFormatter()->IsTextFormat(nNewFormat))
2601 bool bNewIsTextFormat = pNumFormatr->
IsTextFormat(nNewFormat);
2603 if((!bNewIsTextFormat && nOldFormat != nNewFormat) || pNewFormula)
2605 bool bIsNumFormat =
false;
2607 bool bChgText =
true;
2617 sal_uInt32 nTmpFormatIdx = nNewFormat;
2618 OUString aText(
GetDoc()->GetNodes()[nNdPos] ->GetTextNode()->GetRedlineText());
2629 if(SvNumFormatType::PERCENT == pNumFormatr->
GetType(nNewFormat))
2631 sal_uInt32 nTmpFormat = 0;
2632 if(
GetDoc()->IsNumberFormat(aText, nTmpFormat, fVal))
2634 if(SvNumFormatType::NUMBER == pNumFormatr->
GetType( nTmpFormat))
2646 bool bIsLockMod = IsModifyLocked();
2658 bIsNumFormat =
true;
2662 const Color* pCol =
nullptr;
2664 bool bChangeFormat =
true;
2687 sNewText = aOrigText;
2695 bChangeFormat =
false;
2708 else if(bNewIsTextFormat && nOldFormat != nNewFormat)
2712SwTableBox* SwTableBoxFormat::SwTableBoxFormat::GetTableBox()
2715 auto pBox = aIter.First();
2716 SAL_INFO_IF(!pBox,
"sw.core",
"no box found at format");
2717 SAL_WARN_IF(pBox && aIter.Next(),
"sw.core",
"more than one box found at format");
2724 if(rHint.
GetId() != SfxHintId::SwLegacyModify)
2737 switch(pLegacy->m_pNew ? pLegacy->m_pNew->Which() : 0)
2762 if( pNewFormat || pNewFormula || pNewVal )
2794 bool& rIsEmptyTextNd )
const
2803 rIsEmptyTextNd = aText.isEmpty();
2808 rFormatIndex = pItem->GetValue();
2810 if( !rIsEmptyTextNd && SvNumFormatType::PERCENT == pNumFormatr->
GetType( rFormatIndex ))
2812 sal_uInt32 nTmpFormat = 0;
2813 if(
GetFrameFormat()->GetDoc()->IsNumberFormat( aText, nTmpFormat, rNum ) &&
2814 SvNumFormatType::NUMBER == pNumFormatr->
GetType( nTmpFormat ))
2824 rIsEmptyTextNd =
false;
2841 GetTextNode()->GetRedlineText() );
2844 const Color* pCol =
nullptr;
2848 bRet = sNewText != sOldText ||
2866 while( ++
nIndex < nIndexEnd )
2871 pTextNode =
nullptr;
2878 pTextNode =
nullptr;
2897 sal_Int32 nNextSetField = 0;
2898 for(
size_t n = 0;
n < pHts->
Count(); ++
n )
2901 if( RES_TXTATR_NOEND_BEGIN <= pAttr->Which() )
2903 if ( (pAttr->
GetStart() == nNextSetField)
2917 nNextSetField = pAttr->
GetStart() + 1;
2942 sal_uInt16 nWhich = 0;
2953 ->GetTextNode() ) && pTNd->
GetText().isEmpty())
2976 double fVal = pValItem->
GetValue();
2977 const Color* pCol =
nullptr;
2982 if( rText != sNewText )
2992 if ( aRedlineTable.
empty() || !pSttNd )
2999 if ( !pHasTextChangesOnlyProp || pHasTextChangesOnlyProp->GetValue() )
3006 for( ; nRedlinePos < aRedlineTable.
size(); ++nRedlinePos )
3018 if ( aCellStart <= *pRedline->
Start() )
3032 if ( RedlineType::Delete == pRedline->
GetType() ||
3033 RedlineType::Insert == pRedline->
GetType() )
3038 return RedlineType::None;
3074 const SwFrame * pResult =
nullptr;
3082 while (pFrame->
GetUpper() !=
nullptr)
3107 while ((pFrame = getNextFrameInTable(pFrame)) !=
nullptr)
3111 pResult =
static_cast<const SwCellFrame *
>(pFrame);
3123 while ((pFrame = getNextCellFrame(pFrame)) !=
nullptr)
3127 auto aIt = m_HandledTableBoxes.insert(pTabBox);
3130 pResult = pCellFrame;
3140 return m_pImpl->getCellFrame();
3145 if (m_pCellFrame ==
nullptr)
3147 if (m_pTabFrame !=
nullptr)
3153 return m_pCellFrame !=
nullptr;
3193 rFormat.Add(
this );
3205 rFormat.Add(
this );
constexpr sal_uInt32 getSwDefaultTextFormat()
The number formatter's default locale's @ Text format.
sal_uInt32 GetValue() const
virtual bool SetFieldsDirty(bool b, const SwNode *pChk, SwNodeOffset nLen)=0
virtual SwFieldType * GetFieldType(SwFieldIds nResId, const OUString &rName, bool bDbFieldMatching) const =0
virtual sfx2::LinkManager & GetLinkManager()=0
virtual bool IsIgnoreRedline() const =0
virtual bool DeleteRedline(const SwPaM &rPam, bool bSaveInUndo, RedlineType nDelType)=0
static bool IsRedlineOn(const RedlineFlags eM)
virtual const SwRedlineTable & GetRedlineTable() const =0
virtual AppendResult AppendRedline(SwRangeRedline *pNewRedl, bool bCallDelete)=0
Append a new redline.
const T * GetItemIfSet(TypedWhichId< T > nWhich, bool bSrchInParent=true) const
sal_uInt16 ClearItem(sal_uInt16 nWhich=0)
bool HasItem(sal_uInt16 nWhich, const SfxPoolItem **ppItem=nullptr) const
const SfxPoolItem * GetItem(sal_uInt16 nWhich, bool bSearchInParent=true) const
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
SvxAdjust GetAdjust() const
void SetAdjust(const SvxAdjust eType)
const Color & GetValue() const
void SetRight(const tools::Long nR, const sal_uInt16 nProp=100)
void SetLeft(const tools::Long nL, const sal_uInt16 nProp=100)
sal_uInt16 CalcShadowSpace(SvxShadowItemSide nShadow) const
tools::Long GetWidth() const
void SetWidth(tools::Long n)
const SwAttrSet * GetChgSet() const
What has changed.
SwCellFrame is one table cell in the document layout.
const SwTableBox * GetTabBox() const
std::optional< sw::ModifyChangedHint > CheckRegistration(const SfxPoolItem *pOldValue)
Marks a character position inside a document model content node (SwContentNode)
sal_Int32 GetIndex() const
const SwAttrSet & GetSwAttrSet() const
Does node has already its own auto-attributes? Access to SwAttrSet.
virtual sal_Int32 Len() const
const SwAttrSet * GetpSwAttrSet() const
SwTableBoxFormat * MakeTableBoxFormat()
SwTableLineFormat * MakeTableLineFormat()
IDocumentLinksAdministration const & getIDocumentLinksAdministration() const
IDocumentFieldsAccess const & getIDocumentFieldsAccess() const
IDocumentRedlineAccess const & getIDocumentRedlineAccess() const
const SwTextFormatColl * GetDfltTextFormatColl() const
void DelTableFrameFormat(SwTableFormat *pFormat)
SvNumberFormatter * GetNumberFormatter(bool bCreate=true)
bool IsNumberFormat(const OUString &aString, sal_uInt32 &F_Index, double &fOutNumber)
bool IsInsTableAlignNum() const
void GatherFields(std::vector< SwFormatField * > &rvFormatFields, bool bCollectOnlyInDocNodes=true) const
Base class of all fields.
SwFieldTypesEnum GetTypeId() const
const SwRect & getFrameArea() const
Base class of the Writer layout elements.
SwTabFrame * FindTabFrame()
SwLayoutFrame * GetUpper()
Marks a node in the document model.
SwNodeOffset GetIndex() const
Base class of the Writer document model elements.
SwStartNode * GetStartNode()
SwTextNode * GetTextNode()
Inline methods from Node.hxx.
SwNodeOffset GetIndex() const
SwNodes & GetNodes()
Node is in which nodes-array/doc?
SwTableNode * FindTableNode()
Search table node, in which it is.
const SwStartNode * StartOfSectionNode() const
SwNodeOffset EndOfSectionIndex() const
SwContentNode * GetContentNode()
SwTableNode * GetTableNode()
bool InsBoxen(SwTableNode *, SwTableLine *, SwTableBoxFormat *, SwTextFormatColl *, const SfxItemSet *pAutoAttr, sal_uInt16 nInsPos, sal_uInt16 nCnt=1)
Insert a new box in the line before InsPos.
SwContentNode * GoNext(SwNodeIndex *) const
SwNodeOffset Count() const
PaM is Point and Mark: a selection of the document model.
const SwPosition * End() const
const SwPosition * Start() const
RedlineType GetType(sal_uInt16 nPos=0) const
const SwRedlineData & GetRedlineData(sal_uInt16 nPos=0) const
Of course Writer needs its own rectangles.
void Height(tools::Long nNew)
void Width(tools::Long nNew)
const DateTime & GetTimeStamp() const
static constexpr size_type npos
vector_type::size_type size_type
const SwRangeRedline * FindAtPosition(const SwPosition &startPosition, size_type &tableIndex, bool next=true) const
Find the redline at the given position.
SwRowFrame is one table row in the document layout.
virtual sal_uInt16 GetSubType() const override
Starts a section of nodes in the document model.
const SwTabColsEntry & GetEntry(size_t nPos) const
void Remove(size_t nPos, size_t nCount=1)
tools::Long GetLeft() const
tools::Long GetRight() const
tools::Long GetRightMax() const
void SetHidden(size_t nPos, bool bValue)
void Insert(tools::Long nValue, bool bValue, size_t nPos)
SwTabFrame is one table in the document layout, containing rows (which contain cells).
SwTabFrame * FindMaster(bool bFirstMaster=false) const
bool IsInHeadline(const SwFrame &rFrame) const
SwTableBox is one table cell in the document model.
SwNodeOffset IsValidNumTextNd(bool bCheckAttr=true) const
void SetSaveUserColor(std::optional< Color > p)
bool IsEmpty(bool bWithRemainingNestedTable=true) const
SwRedlineTable::size_type GetRedline() const
sal_uInt16 IsFormulaOrValueBox() const
bool IsNumberChanged() const
sal_Int32 getRowSpan() const
SwNodeOffset GetSttIdx() const
const std::optional< Color > & GetSaveUserColor() const
void setRowSpan(sal_Int32 nNewRowSpan)
const SwStartNode * m_pStartNode
static SwTableBoxFormat * CheckBoxFormat(SwTableBoxFormat *)
void SetSaveNumFormatColor(std::optional< Color > p)
SwFrameFormat * GetFrameFormat()
SwTableLines & GetTabLines()
bool getDummyFlag() const
void setDummyFlag(bool bDummy)
bool HasNumContent(double &rNum, sal_uInt32 &rFormatIndex, bool &rIsEmptyTextNd) const
Point GetCoordinates() const
bool IsInHeadline(const SwTable *pTable) const
virtual ~SwTableBox() override
const std::optional< Color > & GetSaveNumFormatColor() const
RedlineType GetRedlineType() const
const SwStartNode * GetSttNd() const
void RegisterToFormat(SwFormat &rFormat)
void ChgFrameFormat(SwTableBoxFormat *pNewFormat, bool bNeedToReregister=true)
SwTableBox(const SwTableBox &)=delete
SwFrameFormat * ClaimFrameFormat()
const SwCellFrame * getCellFrame() const
std::unique_ptr< Impl > m_pImpl
SwTableCellInfo(SwTableCellInfo const &)=delete
const SwTableBox * getTableBox() const
SwTableLine is one table row in the document model.
SwFrameFormat * GetFrameFormat()
SwTableLine(SwTableLineFormat *, sal_uInt16 nBoxes, SwTableBox *pUp)
SwRedlineTable::size_type UpdateTextChangesOnly(SwRedlineTable::size_type &rRedlinePos, bool bUpdateProperty=true) const
void ChgFrameFormat(SwTableLineFormat *pNewFormat)
SwTwips GetTableLineHeight(bool &bLayoutAvailable) const
bool IsTracked(SwRedlineTable::size_type &rRedlinePos, bool bOnlyDeleted=false) const
SwFrameFormat * ClaimFrameFormat()
void SetRedlineType(RedlineType eType)
SwTableBoxes & GetTabBoxes()
RedlineType GetRedlineType() const
bool IsDeleted(SwRedlineTable::size_type &rRedlinePos) const
RedlineType m_eRedlineType
SwRedlineTable::size_type GetTableRedline() const
sal_uInt16 GetBoxPos(const SwTableBox *pBox) const
virtual ~SwTableLine() override
std::vector< SwTableLine * >::const_iterator const_iterator
SwTableLine * back() const
SwTableLine * front() const
void reserve(size_type nSize)
sal_uInt16 GetPos(const SwTableLine *pBox) const
const SwTable & GetTable() const
SwTable is one table in the document model, containing rows (which contain cells).
void SetTabCols(const SwTabCols &rNew, const SwTabCols &rOld, const SwTableBox *pStart, bool bCurRowOnly)
virtual ~SwTable() override
SwTableNode * GetTableNode() const
void SetHTMLTableLayout(std::shared_ptr< SwHTMLTableLayout > const &r)
std::shared_ptr< SwHTMLTableLayout > m_xHTMLLayout
SwTableSortBoxes m_TabSortContentBoxes
bool Merge(SwDoc *pDoc, const SwSelBoxes &rBoxes, const SwSelBoxes &rMerged, SwTableBox *pMergeBox, SwUndoTableMerge *pUndo)
void AdjustWidths(const tools::Long nOld, const tools::Long nNew)
SwTableNode * m_pTableNode
SwTableLines & GetTabLines()
SwTableFormat * GetFrameFormat()
bool IsTableComplex() const
void RegisterToFormat(SwFormat &rFormat)
TableChgMode m_eTableChgMode
bool HasDeletedRowOrCell() const
const SwTableBox * GetTableBox(const OUString &rName, const bool bPerformValidCheck=false) const
void Split(OUString sNewTableName, sal_uInt16 nSplitLine, SwHistory *pHistory)
void dumpAsXml(xmlTextWriterPtr pWriter) const
virtual void SwClientNotify(const SwModify &, const SfxHint &) override
virtual bool GetInfo(SfxPoolItem &) const override
static SwTable * FindTable(SwFrameFormat const *const pFormat)
static sal_uInt16 GetBoxNum(OUString &rStr, bool bFirst=false, const bool bPerformValidCheck=false)
SwTableSortBoxes & GetTabSortBoxes()
void GetTabCols(SwTabCols &rToFill, const SwTableBox *pStart, bool bHidden=false, bool bCurRowOnly=false) const
tools::SvRef< SwServerObject > m_xRefObj
void NewSetTabCols(Parm &rP, const SwTabCols &rNew, const SwTabCols &rOld, const SwTableBox *pStart, bool bCurRowOnly)
void SetRefObject(SwServerObject *)
void UpdateFields(TableFormulaUpdateFlags eFlags)
void GatherFormulas(std::vector< SwTableBoxFormula * > &rvFormulas)
A wrapper around SfxPoolItem to store the start position of (usually) a text portion,...
sal_Int32 GetStart() const
const SwFormatField & GetFormatField() const
SwTextNode is a paragraph in the document model.
virtual bool SetAttr(const SfxPoolItem &) override
overriding to handle change of certain paragraph attributes
void EraseText(const SwContentIndex &rIdx, const sal_Int32 nCount=SAL_MAX_INT32, const SwInsertFlags nMode=SwInsertFlags::DEFAULT)
delete text content ATTENTION: must not be called with a range that overlaps the start of an attribut...
OUString InsertText(const OUString &rStr, const SwContentIndex &rIdx, const SwInsertFlags nMode=SwInsertFlags::DEFAULT)
insert text content
SwpHints * GetpSwpHints()
const OUString & GetText() const
bool DontExpandFormat(sal_Int32 nContentIdx, bool bFlag=true, bool bFormatToTextAttributes=true)
When appropriate set DontExpand-flag at INet or character styles respectively.
virtual bool ResetAttr(sal_uInt16 nWhich1, sal_uInt16 nWhich2=0) override
static ShellResource * GetShellRes()
An SwTextAttr container, stores all directly formatted text portions for a text node.
SwTextAttr * Get(size_t nPos) const
size_type erase(const Value &x)
std::pair< const_iterator, bool > insert(Value &&x)
void RemoveServer(SvLinkSource *rObj)
struct _xmlTextWriter * xmlTextWriterPtr
TableChgMode GetTableChgDefaultMode()
@ Variable
Frame is variable in Var-direction.
constexpr TypedWhichId< SwFormatFootnote > RES_TXTATR_FTN(59)
constexpr TypedWhichId< SwFindNearestNode > RES_FINDNEARESTNODE(184)
constexpr TypedWhichId< SwTableBoxValue > RES_BOXATR_VALUE(158)
constexpr TypedWhichId< SwFormatFrameSize > RES_FRM_SIZE(89)
constexpr TypedWhichId< SwFormatVertOrient > RES_VERT_ORIENT(108)
constexpr TypedWhichId< SwFormatPageDesc > RES_PAGEDESC(99)
constexpr TypedWhichId< SvxAdjustItem > RES_PARATR_ADJUST(64)
constexpr TypedWhichId< SwTableBoxFormula > RES_BOXATR_FORMULA(157)
constexpr TypedWhichId< SwAttrSetChg > RES_ATTRSET_CHG(169)
constexpr TypedWhichId< SwFormatField > RES_TXTATR_ANNOTATION(60)
constexpr TypedWhichId< SwFormatField > RES_TXTATR_FIELD(RES_TXTATR_NOEND_BEGIN)
constexpr TypedWhichId< SwTableBoxNumFormat > RES_BOXATR_FORMAT(RES_BOXATR_BEGIN)
constexpr TypedWhichId< SwFormatAutoFormat > RES_PARATR_LIST_AUTOFMT(87)
constexpr TypedWhichId< SwAutoFormatGetDocNode > RES_AUTOFMT_DOCNODE(176)
constexpr TypedWhichId< SvxColorItem > RES_CHRATR_COLOR(3)
constexpr TypedWhichId< SvxPrintItem > RES_PRINT(104)
TableFormulaUpdateFlags
SwTableFormulaUpdate is sent when the table has to be newly calculated or when a table itself is merg...
#define SAL_INFO_IF(condition, area, stream)
#define SAL_WARN_IF(condition, area, stream)
tools::Long const nBorder
const SwExtendedSubType SUB_INVISIBLE
Invisible.
sal_Int32 toInt32(std::u16string_view str, sal_Int16 radix=10)
o3tl::strong_int< sal_Int32, struct Tag_SwNodeOffset > SwNodeOffset
constexpr SwNodeOffset NODE_OFFSET_MAX(SAL_MAX_INT32)
SwNodeOffset abs(const SwNodeOffset &a)
SwShareBoxFormats aShareFormats
std::deque< SwTableBox * > aBoxArr
Parm(const SwTabCols &rN, const SwTabCols &rO)
Marks a position in the document model.
SwNodeOffset GetNodeIndex() const
sal_Int32 GetContentIndex() const
TableBoxes_t m_HandledTableBoxes
const SwTabFrame * m_pTabFrame
const SwCellFrame * m_pCellFrame
const SwCellFrame * getNextCellFrame(const SwFrame *pFrame)
void setTable(const SwTable *pTable)
const SwCellFrame * getNextTableBoxsCellFrame(const SwFrame *pFrame)
const SwCellFrame * getCellFrame() const
o3tl::sorted_vector< const SwTableBox * > TableBoxes_t
const SwFrame * getNextFrameInTable(const SwFrame *pFrame)
sal_uInt16 GetWhich() const
std::list< ColChange > ChangeList
static void lcl_AdjustWidthsInLine(SwTableLine *pLine, ChangeList &rOldNew, Parm &rParm, sal_uInt16 nColFuzzy)
static void lcl_ProcessBoxPtr(SwTableBox *pBox, std::deque< SwTableBox * > &rBoxArr, bool bBefore)
std::pair< sal_uInt16, sal_uInt16 > ColChange
static void lcl_ProcessLine(SwTableLine *pLine, Parm &rParm)
static OUString & lcl_TabToBlankAtSttEnd(OUString &rText)
static void lcl_ProcessLineGet(const SwTableLine *pLine, SwTabCols &rToFill, const SwFrameFormat *pTabFormat)
static void ChgNumToText(SwTableBox &rBox, sal_uLong nFormat)
static void lcl_ProcessBoxSet(SwTableBox *pBox, Parm &rParm)
static void lcl_ModifyLines(SwTableLines &rLines, const tools::Long nOld, const tools::Long nNew, std::vector< SwFormat * > &rFormatArr, const bool bCheckSum)
static void lcl_ModifyBoxes(SwTableBoxes &rBoxes, const tools::Long nOld, const tools::Long nNew, std::vector< SwFormat * > &rFormatArr)
static void lcl_ProcessBoxGet(const SwTableBox *pBox, SwTabCols &rToFill, const SwFrameFormat *pTabFormat, bool bRefreshHidden)
static void lcl_AdjustBox(SwTableBox *pBox, const tools::Long nDiff, Parm &rParm)
static void lcl_AdjustLines(SwTableLines &rLines, const tools::Long nDiff, Parm &rParm)
static void FormatInArr(std::vector< SwFormat * > &rFormatArr, SwFormat *pBoxFormat)
static void lcl_CalcNewWidths(std::vector< sal_uInt16 > &rSpanPos, ChangeList &rChanges, SwTableLine *pLine, tools::Long nWish, tools::Long nWidth, bool bTop)
static bool lcl_IsValidRowName(std::u16string_view rStr)
static void ChgTextToNum(SwTableBox &rBox, const OUString &rText, const Color *pCol, bool bChgAlign, SwNodeOffset nNdPos)
static void lcl_RefreshHidden(SwTabCols &rToFill, size_t nPos)
void DelBoxNode(SwTableSortBoxes const &rSortCntBoxes)
static void lcl_SortedTabColInsert(SwTabCols &rToFill, const SwTableBox *pBox, const SwFrameFormat *pTabFormat, const bool bHidden, const bool bRefreshHidden)
static OUString & lcl_DelTabsAtSttEnd(OUString &rText)
void sw_GetTableBoxColStr(sal_uInt16 nCol, OUString &rNm)
void InsTableBox(SwDoc &rDoc, SwTableNode *pTableNd, SwTableLine *pLine, SwTableBoxFormat *pBoxFrameFormat, SwTableBox *pBox, sal_uInt16 nInsPos, sal_uInt16 nCnt)
std::vector< SwTableBox * > SwTableBoxes
void CheckBoxWidth(const SwTableLine &rLine, SwTwips nSize)