summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
Diffstat (limited to 'sw')
-rw-r--r--sw/source/core/docnode/ndtbl1.cxx289
1 files changed, 126 insertions, 163 deletions
diff --git a/sw/source/core/docnode/ndtbl1.cxx b/sw/source/core/docnode/ndtbl1.cxx
index 973acc78dcff..591b013dc72f 100644
--- a/sw/source/core/docnode/ndtbl1.cxx
+++ b/sw/source/core/docnode/ndtbl1.cxx
@@ -17,7 +17,6 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-
#include "hintids.hxx"
#include <editeng/lrspitem.hxx>
#include <editeng/boxitem.hxx>
@@ -56,7 +55,7 @@ using namespace ::com::sun::star;
extern void ClearFEShellTabCols();
-//siehe auch swtable.cxx
+// See swtable.cxx too
#define COLFUZZY 20L
inline bool IsSame( long nA, long nB ) { return Abs(nA-nB) <= COLFUZZY; }
@@ -101,7 +100,7 @@ static void lcl_GetStartEndCell( const SwCursor& rCrsr,
SwLayoutFrm *&prStart, SwLayoutFrm *&prEnd )
{
OSL_ENSURE( rCrsr.GetCntntNode() && rCrsr.GetCntntNode( sal_False ),
- "Tabselection nicht auf Cnt." );
+ "Tab selection not at ContentNode" );
Point aPtPos, aMkPos;
const SwShellCrsr* pShCrsr = dynamic_cast<const SwShellCrsr*>(&rCrsr);
@@ -111,7 +110,7 @@ static void lcl_GetStartEndCell( const SwCursor& rCrsr,
aMkPos = pShCrsr->GetMkPos();
}
- // robust:
+ // Robust:
SwCntntNode* pPointNd = rCrsr.GetCntntNode();
SwCntntNode* pMarkNd = rCrsr.GetCntntNode(sal_False);
@@ -146,26 +145,27 @@ static bool lcl_GetBoxSel( const SwCursor& rCursor, SwSelBoxes& rBoxes,
return !rBoxes.empty();
}
-/***********************************************************************
-#* Class : SwDoc
-#* Methoden : SetRowHeight(), GetRowHeight()
-#***********************************************************************/
-//Die Zeilenhoehe wird ausgehend von der Selektion ermittelt/gesetzt.
-//Ausgehend von jeder Zelle innerhalb der Selektion werden nach oben alle
-//Zeilen abgeklappert, die oberste Zeile erhaelt den gewuenschten Wert alle
-//tieferliegenden Zeilen einen entsprechenden Wert der sich aus der
-//Relation der alten und neuen Groesse der obersten Zeile und ihrer
-//eigenen Groesse ergiebt.
-//Alle veraenderten Zeilen erhalten ggf. ein eigenes FrmFmt.
-//Natuerlich darf jede Zeile nur einmal angefasst werden.
-
+/**
+ * Class: SwDoc
+ * Methods: SetRowHeight(), GetRowHeight()
+ *
+ * The line height is calculated from the Selection.
+ * Starting with every Cell within the Selection, all Cells are iterated
+ * through in an upwards fashion.
+ *
+ * The topmost Line gets the requested value, all Lines below it get
+ * a respective value that is calculated from the relation of the old and
+ * new size of the topmost Line in the lower line's own size.
+ *
+ * All changed Lines may get an own FrmFmt.
+ * Of course we can only touch every Line once.
+ */
inline void InsertLine( std::vector<SwTableLine*>& rLineArr, SwTableLine* pLine )
{
if( rLineArr.end() == std::find( rLineArr.begin(), rLineArr.end(), pLine ) )
rLineArr.push_back( pLine );
}
-//-----------------------------------------------------------------------------
static bool lcl_IsAnLower( const SwTableLine *pLine, const SwTableLine *pAssumed )
{
@@ -179,7 +179,6 @@ static bool lcl_IsAnLower( const SwTableLine *pLine, const SwTableLine *pAssumed
}
return false;
}
-//-----------------------------------------------------------------------------
struct LinesAndTable
{
@@ -236,12 +235,12 @@ bool _FindLine( _FndLine& rLine, LinesAndTable* pPara )
static void lcl_CollectLines( std::vector<SwTableLine*> &rArr, const SwCursor& rCursor, bool bRemoveLines )
{
- //Zuerst die selektierten Boxen einsammeln.
+ // Collect the selected Boxes first
SwSelBoxes aBoxes;
if( !::lcl_GetBoxSel( rCursor, aBoxes ))
return ;
- //Die selektierte Struktur kopieren.
+ // Copy the selected structure
const SwTable &rTable = aBoxes[0]->GetSttNd()->FindTableNode()->GetTable();
LinesAndTable aPara( rArr, rTable );
_FndBox aFndBox( 0, 0 );
@@ -250,7 +249,7 @@ static void lcl_CollectLines( std::vector<SwTableLine*> &rArr, const SwCursor& r
ForEach_FndLineCopyCol( (SwTableLines&)rTable.GetTabLines(), &aTmpPara );
}
- //Diejenigen Lines einsammeln, die nur selektierte Boxen enthalten.
+ // Collect the Lines which only contain selected Boxes
::_FindBox(aFndBox, &aPara);
// Remove lines, that have a common superordinate row.
@@ -274,7 +273,6 @@ static void lcl_CollectLines( std::vector<SwTableLine*> &rArr, const SwCursor& r
}
}
-//-----------------------------------------------------------------------------
static void lcl_ProcessRowAttr( std::vector<SwTblFmtCmp*>& rFmtCmp, SwTableLine* pLine, const SfxPoolItem& rNew )
{
@@ -290,7 +288,6 @@ static void lcl_ProcessRowAttr( std::vector<SwTblFmtCmp*>& rFmtCmp, SwTableLine*
}
}
-//-----------------------------------------------------------------------------
static void lcl_ProcessBoxSize( std::vector<SwTblFmtCmp*> &rFmtCmp, SwTableBox *pBox, const SwFmtFrmSize &rNew );
@@ -302,7 +299,6 @@ static void lcl_ProcessRowSize( std::vector<SwTblFmtCmp*> &rFmtCmp, SwTableLine
::lcl_ProcessBoxSize( rFmtCmp, rBoxes[i], rNew );
}
-//-----------------------------------------------------------------------------
static void lcl_ProcessBoxSize( std::vector<SwTblFmtCmp*> &rFmtCmp, SwTableBox *pBox, const SwFmtFrmSize &rNew )
{
@@ -316,17 +312,13 @@ static void lcl_ProcessBoxSize( std::vector<SwTblFmtCmp*> &rFmtCmp, SwTableBox *
}
}
-//-----------------------------------------------------------------------------
-/******************************************************************************
- * void SwDoc::SetRowSplit()
- ******************************************************************************/
void SwDoc::SetRowSplit( const SwCursor& rCursor, const SwFmtRowSplit &rNew )
{
SwTableNode* pTblNd = rCursor.GetPoint()->nNode.GetNode().FindTableNode();
if( pTblNd )
{
- std::vector<SwTableLine*> aRowArr; //Zum sammeln Lines.
+ std::vector<SwTableLine*> aRowArr; // For Lines collecting
::lcl_CollectLines( aRowArr, rCursor, false );
if( !aRowArr.empty() )
@@ -348,10 +340,6 @@ void SwDoc::SetRowSplit( const SwCursor& rCursor, const SwFmtRowSplit &rNew )
}
}
-
-/******************************************************************************
- * SwTwips SwDoc::GetRowSplit() const
- ******************************************************************************/
void SwDoc::GetRowSplit( const SwCursor& rCursor, SwFmtRowSplit *& rpSz ) const
{
rpSz = 0;
@@ -359,7 +347,7 @@ void SwDoc::GetRowSplit( const SwCursor& rCursor, SwFmtRowSplit *& rpSz ) const
SwTableNode* pTblNd = rCursor.GetPoint()->nNode.GetNode().FindTableNode();
if( pTblNd )
{
- std::vector<SwTableLine*> aRowArr; //Zum sammeln der Lines.
+ std::vector<SwTableLine*> aRowArr; // For Lines collecting
::lcl_CollectLines( aRowArr, rCursor, false );
if( !aRowArr.empty() )
@@ -377,16 +365,12 @@ void SwDoc::GetRowSplit( const SwCursor& rCursor, SwFmtRowSplit *& rpSz ) const
}
}
-
-/******************************************************************************
- * void SwDoc::SetRowHeight( SwTwips nNew )
- ******************************************************************************/
void SwDoc::SetRowHeight( const SwCursor& rCursor, const SwFmtFrmSize &rNew )
{
SwTableNode* pTblNd = rCursor.GetPoint()->nNode.GetNode().FindTableNode();
if( pTblNd )
{
- std::vector<SwTableLine*> aRowArr; //Zum sammeln Lines.
+ std::vector<SwTableLine*> aRowArr; // For Lines collecting
::lcl_CollectLines( aRowArr, rCursor, true );
if( !aRowArr.empty() )
@@ -407,10 +391,6 @@ void SwDoc::SetRowHeight( const SwCursor& rCursor, const SwFmtFrmSize &rNew )
}
}
-
-/******************************************************************************
- * SwTwips SwDoc::GetRowHeight() const
- ******************************************************************************/
void SwDoc::GetRowHeight( const SwCursor& rCursor, SwFmtFrmSize *& rpSz ) const
{
rpSz = 0;
@@ -418,7 +398,7 @@ void SwDoc::GetRowHeight( const SwCursor& rCursor, SwFmtFrmSize *& rpSz ) const
SwTableNode* pTblNd = rCursor.GetPoint()->nNode.GetNode().FindTableNode();
if( pTblNd )
{
- std::vector<SwTableLine*> aRowArr; //Zum sammeln der Lines.
+ std::vector<SwTableLine*> aRowArr; // For Lines collecting
::lcl_CollectLines( aRowArr, rCursor, true );
if( !aRowArr.empty() )
@@ -442,7 +422,7 @@ sal_Bool SwDoc::BalanceRowHeight( const SwCursor& rCursor, sal_Bool bTstOnly )
SwTableNode* pTblNd = rCursor.GetPoint()->nNode.GetNode().FindTableNode();
if( pTblNd )
{
- std::vector<SwTableLine*> aRowArr; //Zum sammeln der Lines.
+ std::vector<SwTableLine*> aRowArr; // For Lines collecting
::lcl_CollectLines( aRowArr, rCursor, true );
if( 1 < aRowArr.size() )
@@ -484,15 +464,12 @@ sal_Bool SwDoc::BalanceRowHeight( const SwCursor& rCursor, sal_Bool bTstOnly )
return bRet;
}
-/******************************************************************************
- * void SwDoc::SetRowBackground()
- ******************************************************************************/
void SwDoc::SetRowBackground( const SwCursor& rCursor, const SvxBrushItem &rNew )
{
SwTableNode* pTblNd = rCursor.GetPoint()->nNode.GetNode().FindTableNode();
if( pTblNd )
{
- std::vector<SwTableLine*> aRowArr; //Zum sammeln Lines.
+ std::vector<SwTableLine*> aRowArr; // For Lines collecting
::lcl_CollectLines( aRowArr, rCursor, true );
if( !aRowArr.empty() )
@@ -514,16 +491,13 @@ void SwDoc::SetRowBackground( const SwCursor& rCursor, const SvxBrushItem &rNew
}
}
-/******************************************************************************
- * SwTwips SwDoc::GetRowBackground() const
- ******************************************************************************/
sal_Bool SwDoc::GetRowBackground( const SwCursor& rCursor, SvxBrushItem &rToFill ) const
{
sal_Bool bRet = sal_False;
SwTableNode* pTblNd = rCursor.GetPoint()->nNode.GetNode().FindTableNode();
if( pTblNd )
{
- std::vector<SwTableLine*> aRowArr; //Zum sammeln Lines.
+ std::vector<SwTableLine*> aRowArr; // For Lines collecting
::lcl_CollectLines( aRowArr, rCursor, true );
if( !aRowArr.empty() )
@@ -542,31 +516,31 @@ sal_Bool SwDoc::GetRowBackground( const SwCursor& rCursor, SvxBrushItem &rToFill
return bRet;
}
-/***********************************************************************
-#* Class : SwDoc
-#* Methoden : SetTabBorders(), GetTabBorders()
-#***********************************************************************/
+/**
+ * Class: SwDoc
+ * Methods: SetTabBorders(), GetTabBorders()
+ */
inline void InsertCell( std::vector<SwCellFrm*>& rCellArr, SwCellFrm* pCellFrm )
{
if( rCellArr.end() == std::find( rCellArr.begin(), rCellArr.end(), pCellFrm ) )
rCellArr.push_back( pCellFrm );
}
-//-----------------------------------------------------------------------------
static void lcl_CollectCells( std::vector<SwCellFrm*> &rArr, const SwRect &rUnion,
SwTabFrm *pTab )
{
SwLayoutFrm *pCell = pTab->FirstCell();
do
{
- // Wenn in der Zelle ein spaltiger Bereich sitzt, muessen wir
- // uns erst wieder zur Zelle hochhangeln
+ // If the Cell contains a CellFrame, we need to use it
+ // in order to get to the Cell
while ( !pCell->IsCellFrm() )
pCell = pCell->GetUpper();
- OSL_ENSURE( pCell, "Frame ist keine Zelle." );
+ OSL_ENSURE( pCell, "Frame is not a Cell" );
if ( rUnion.IsOver( pCell->Frm() ) )
::InsertCell( rArr, (SwCellFrm*)pCell );
- //Dafuer sorgen, dass die Zelle auch verlassen wird (Bereiche)
+
+ // Make sure the Cell is left (Areas)
SwLayoutFrm *pTmp = pCell;
do
{ pTmp = pTmp->GetNextLayoutLeaf();
@@ -611,8 +585,7 @@ void SwDoc::SetTabBorders( const SwCursor& rCursor, const SfxItemSet& rSet )
bTopValid = sal_True, bBottomValid = sal_True,
bLeftValid = sal_True, bRightValid = sal_True;
- // JP 21.07.95: die Flags im BoxInfo-Item entscheiden, wann eine
- // BorderLine gueltig ist!!
+ // The Flags in the BoxInfo Item decide whether a BorderLine is valid!
if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_BORDER_INNER, sal_False,
(const SfxPoolItem**)&pSetBoxInfo) )
{
@@ -622,7 +595,7 @@ void SwDoc::SetTabBorders( const SwCursor& rCursor, const SfxItemSet& rSet )
bHoriValid = pSetBoxInfo->IsValid(VALID_HORI);
bVertValid = pSetBoxInfo->IsValid(VALID_VERT);
- // wollen wir die auswerten ??
+ // Do we want to evaluate these?
bTopValid = pSetBoxInfo->IsValid(VALID_TOP);
bBottomValid = pSetBoxInfo->IsValid(VALID_BOTTOM);
bLeftValid = pSetBoxInfo->IsValid(VALID_LEFT);
@@ -639,7 +612,7 @@ void SwDoc::SetTabBorders( const SwCursor& rCursor, const SfxItemSet& rSet )
}
else
{
- // nicht gesetzt, also keine gueltigen Werte
+ // Not set, thus not valid values
bTopValid = bBottomValid = bLeftValid = bRightValid = sal_False;
pSetBox = 0;
}
@@ -656,14 +629,14 @@ void SwDoc::SetTabBorders( const SwCursor& rCursor, const SfxItemSet& rSet )
aCellArr.reserve( 255 );
::lcl_CollectCells( aCellArr, pUnion->GetUnion(), pTab );
- //Alle Zellenkanten, die mit dem UnionRect uebereinstimmen oder
- //darueber hinausragen sind Aussenkanten. Alle anderen sind
- //Innenkanten.
- //neu: Die Aussenkanten koennen abhaengig davon, ob es sich um eine
- //Start/Mittlere/Folge -Tabelle (bei Selektionen ueber FollowTabs)
- //handelt doch keine Aussenkanten sein.
- //Aussenkanten werden links, rechts, oben und unten gesetzt.
- //Innenkanten werden nur oben und links gesetzt.
+ // All Cell Borders that match the UnionRect or extend it are
+ // Outer Borders. All others are Inner Borders.
+ //
+ // New: The Outer Borders can, depending on whether it's a
+ // Start/Middle/Follow Table (for Selection via FollowTabs),
+ // also not be Outer Borders.
+ // Outer Borders are set on the left, right, at the top and at the bottom.
+ // Inner Borders are only set at the top and on the left.
for ( sal_uInt16 j = 0; j < aCellArr.size(); ++j )
{
SwCellFrm *pCell = aCellArr[j];
@@ -692,10 +665,10 @@ void SwDoc::SetTabBorders( const SwCursor& rCursor, const SfxItemSet& rSet )
bLeftOver = bTmp;
}
- //Grundsaetzlich nichts setzen in HeadlineRepeats.
+ // Do not set anything by default in HeadlineRepeats
if ( pTab->IsFollow() &&
( pTab->IsInHeadline( *pCell ) ||
- // Same holds for follow flow rows.
+ // Same holds for follow flow rows
pCell->IsInFollowFlowRow() ) )
continue;
@@ -703,7 +676,7 @@ void SwDoc::SetTabBorders( const SwCursor& rCursor, const SfxItemSet& rSet )
sal_Int16 nType = 0;
- //Obere Kante
+ // Top Border
if( bTopValid )
{
if ( bFirst && bTopOver )
@@ -718,7 +691,7 @@ void SwDoc::SetTabBorders( const SwCursor& rCursor, const SfxItemSet& rSet )
}
}
- //Linke Kante
+ // Left Border
if ( bLeftOver )
{
if( bLeftValid )
@@ -733,7 +706,7 @@ void SwDoc::SetTabBorders( const SwCursor& rCursor, const SfxItemSet& rSet )
nType |= 0x0008;
}
- //Rechte Kante
+ // Right Border
if( bRightValid )
{
if ( bRightOver )
@@ -748,7 +721,7 @@ void SwDoc::SetTabBorders( const SwCursor& rCursor, const SfxItemSet& rSet )
}
}
- //Untere Kante
+ // Bottom Border
if ( bLast && bBottomOver )
{
if( bBottomValid )
@@ -857,7 +830,7 @@ void SwDoc::SetTabLineStyle( const SwCursor& rCursor,
{
SwCellFrm *pCell = aCellArr[j];
- //Grundsaetzlich nichts setzen in HeadlineRepeats.
+ // Do not set anything by default in HeadlineRepeats
if ( pTab->IsFollow() && pTab->IsInHeadline( *pCell ) )
continue;
@@ -971,7 +944,7 @@ void SwDoc::GetTabBorders( const SwCursor& rCursor, SfxItemSet& rSet ) const
const SwFrmFmt *pFmt = pCell->GetFmt();
const SvxBoxItem &rBox = pFmt->GetBox();
- //Obere Kante
+ // Top Border
if ( bFirst && bTopOver )
{
if (aSetBoxInfo.IsValid(VALID_TOP))
@@ -982,7 +955,7 @@ void SwDoc::GetTabBorders( const SwCursor& rCursor, SfxItemSet& rSet ) const
}
else if ((aSetBox.GetTop() && rBox.GetTop() &&
!(*aSetBox.GetTop() == *rBox.GetTop())) ||
- ((!aSetBox.GetTop()) ^ (!rBox.GetTop()))) // XOR-Ausdruck ist sal_True, wenn genau einer der beiden Pointer 0 ist
+ ((!aSetBox.GetTop()) ^ (!rBox.GetTop()))) // XOR expression is sal_True, if one of the two pointers is 0
{
aSetBoxInfo.SetValid(VALID_TOP, sal_False );
aSetBox.SetLine( 0, BOX_LINE_TOP );
@@ -990,7 +963,7 @@ void SwDoc::GetTabBorders( const SwCursor& rCursor, SfxItemSet& rSet ) const
}
}
- //Linke Kante
+ // Left Border
if ( bLeftOver )
{
if (aSetBoxInfo.IsValid(VALID_LEFT))
@@ -1025,7 +998,7 @@ void SwDoc::GetTabBorders( const SwCursor& rCursor, SfxItemSet& rSet ) const
}
}
- //Rechte Kante
+ // Right Border
if ( aSetBoxInfo.IsValid(VALID_RIGHT) && bRightOver )
{
if ( !bRightSet )
@@ -1040,7 +1013,7 @@ void SwDoc::GetTabBorders( const SwCursor& rCursor, SfxItemSet& rSet ) const
}
}
- //Untere Kante
+ // Bottom Border
if ( bLast && bBottomOver )
{
if ( aSetBoxInfo.IsValid(VALID_BOTTOM) )
@@ -1057,8 +1030,8 @@ void SwDoc::GetTabBorders( const SwCursor& rCursor, SfxItemSet& rSet ) const
}
}
}
- //in allen Zeilen ausser der letzten werden die
- // horiz. Linien aus der Bottom-Linie entnommen
+ // In all Lines, except for the last one, the horizontal Line
+ // is taken from the Bottom Line.
else
{
if (aSetBoxInfo.IsValid(VALID_HORI))
@@ -1077,7 +1050,7 @@ void SwDoc::GetTabBorders( const SwCursor& rCursor, SfxItemSet& rSet ) const
}
}
- // Abstand zum Text
+ // Distance to text
if (aSetBoxInfo.IsValid(VALID_DISTANCE))
{
static sal_uInt16 const aBorders[] = {
@@ -1085,12 +1058,11 @@ void SwDoc::GetTabBorders( const SwCursor& rCursor, SfxItemSet& rSet ) const
BOX_LINE_RIGHT, BOX_LINE_LEFT };
const sal_uInt16* pBrd = aBorders;
- if( !bDistanceSet ) // bei 1. Durchlauf erstmal setzen
+ if( !bDistanceSet ) // Set on first iteration
{
bDistanceSet = sal_True;
for( int k = 0; k < 4; ++k, ++pBrd )
- aSetBox.SetDistance( rBox.GetDistance( *pBrd ),
- *pBrd );
+ aSetBox.SetDistance( rBox.GetDistance( *pBrd ), *pBrd );
}
else
{
@@ -1111,10 +1083,6 @@ void SwDoc::GetTabBorders( const SwCursor& rCursor, SfxItemSet& rSet ) const
}
}
-/***********************************************************************
-#* Class : SwDoc
-#* Methoden : SetBoxAttr
-#***********************************************************************/
void SwDoc::SetBoxAttr( const SwCursor& rCursor, const SfxPoolItem &rNew )
{
SwTableNode* pTblNd = rCursor.GetPoint()->nNode.GetNode().FindTableNode();
@@ -1159,11 +1127,6 @@ void SwDoc::SetBoxAttr( const SwCursor& rCursor, const SfxPoolItem &rNew )
}
}
-/***********************************************************************
-#* Class : SwDoc
-#* Methoden : GetBoxAttr()
-#***********************************************************************/
-
sal_Bool SwDoc::GetBoxAttr( const SwCursor& rCursor, SfxPoolItem& rToFill ) const
{
sal_Bool bRet = sal_False;
@@ -1213,15 +1176,11 @@ sal_Bool SwDoc::GetBoxAttr( const SwCursor& rCursor, SfxPoolItem& rToFill ) cons
return bRet;
}
-/***********************************************************************
-#* Class : SwDoc
-#* Methoden : SetBoxAlign, SetBoxAlign
-#***********************************************************************/
void SwDoc::SetBoxAlign( const SwCursor& rCursor, sal_uInt16 nAlign )
{
OSL_ENSURE( nAlign == text::VertOrientation::NONE ||
nAlign == text::VertOrientation::CENTER ||
- nAlign == text::VertOrientation::BOTTOM, "wrong alignment" );
+ nAlign == text::VertOrientation::BOTTOM, "Wrong alignment" );
SwFmtVertOrient aVertOri( 0, nAlign );
SetBoxAttr( rCursor, aVertOri );
}
@@ -1250,14 +1209,14 @@ sal_uInt16 SwDoc::GetBoxAlign( const SwCursor& rCursor ) const
}
-/***********************************************************************
-#* Class : SwDoc
-#* Methoden : AdjustCellWidth()
-#***********************************************************************/
+/**
+ * Class: SwDoc
+ * Methods: AdjustCellWidth()
+ */
static sal_uInt16 lcl_CalcCellFit( const SwLayoutFrm *pCell )
{
SwTwips nRet = 0;
- const SwFrm *pFrm = pCell->Lower(); //Die ganze Zelle.
+ const SwFrm *pFrm = pCell->Lower(); // The whole Line
SWRECTFN( pCell )
while ( pFrm )
{
@@ -1272,28 +1231,30 @@ static sal_uInt16 lcl_CalcCellFit( const SwLayoutFrm *pCell )
nRet = Max( nRet, nCalcFitToContent + nAdd );
pFrm = pFrm->GetNext();
}
- //Umrandung und linker/rechter Rand wollen mit kalkuliert werden.
+ // Surrounding border as well as left and Right Border also need to be respected
nRet += (pCell->Frm().*fnRect->fnGetWidth)() -
(pCell->Prt().*fnRect->fnGetWidth)();
- //Um Rechenungenauikeiten, die spaeter bei SwTable::SetTabCols enstehen,
- //auszugleichen, addieren wir noch ein bischen.
+ // To compensate for the accuracy of calculation later on in SwTable::SetTabCols
+ // we keep adding up a little.
nRet += COLFUZZY;
return (sal_uInt16)Max( long(MINLAY), nRet );
}
-/*Die Zelle ist in der Selektion, wird aber nicht von den TabCols beschrieben.
- *Das bedeutet, dass die Zelle aufgrund der zweidimensionalen Darstellung von
- *anderen Zellen "geteilt" wurde. Wir muessen also den Wunsch- bzw. Minimalwert
- *der Zelle auf die Spalten, durch die sie geteilt wurde verteilen.
+/**
+ * The Line is within the Selection but not outlined by the TabCols.
+ *
+ * That means that the Line has been "split" by other Cells due to the
+ * two-dimensional representation used. Thus, we have to distribute the cell's
+ * default or minium value amongst the Cell it has been split by.
*
- *Dazu sammeln wir zuerst die Spalten - nicht die Spaltentrenner! - ein, die
- *sich mit der Zelle ueberschneiden. Den Wunschwert der Zelle verteilen wir
- *dann anhand des Betrages der Ueberschneidung auf die Zellen.
- *Wenn eine Zelle bereits einen groesseren Wunschwert angemeldet hat, so bleibt
- *dieser erhalten, kleinere Wuensche werden ueberschrieben.
+ * First, we collect the Columns (not the Column separators) which overlap
+ * with the Cell. We then distribute the desired value according to the
+ * amount of overlapping amongst the Cells.
+ *
+ * A Cell's default value stays the same if it already has a larger value than
+ * the desired one. It's overwritten if it's smaller.
*/
-
static void lcl_CalcSubColValues( std::vector<sal_uInt16> &rToFill, const SwTabCols &rCols,
const SwLayoutFrm *pCell, const SwLayoutFrm *pTab,
sal_Bool bWishValues )
@@ -1311,7 +1272,7 @@ static void lcl_CalcSubColValues( std::vector<sal_uInt16> &rToFill, const SwTabC
nColLeft += rCols.GetLeftMin();
nColRight += rCols.GetLeftMin();
- //Werte auf die Verhaeltnisse der Tabelle (Follows) anpassen.
+ // Adapt values to the proportions of the Table (Follows)
if ( rCols.GetLeftMin() != sal_uInt16((pTab->Frm().*fnRect->fnGetLeft)()) )
{
const long nDiff = (pTab->Frm().*fnRect->fnGetLeft)() - rCols.GetLeftMin();
@@ -1321,7 +1282,7 @@ static void lcl_CalcSubColValues( std::vector<sal_uInt16> &rToFill, const SwTabC
const long nCellLeft = (pCell->Frm().*fnRect->fnGetLeft)();
const long nCellRight = (pCell->Frm().*fnRect->fnGetRight)();
- //Ueberschneidungsbetrag ermitteln.
+ // Calculate overlapping value
long nWidth = 0;
if ( nColLeft <= nCellLeft && nColRight >= (nCellLeft+COLFUZZY) )
nWidth = nColRight - nCellLeft;
@@ -1338,22 +1299,23 @@ static void lcl_CalcSubColValues( std::vector<sal_uInt16> &rToFill, const SwTabC
}
}
-/*Besorgt neue Werte zu Einstellung der TabCols.
- *Es wird nicht ueber die Eintrage in den TabCols itereriert, sondern
- *quasi ueber die Zwischenraeume, die ja die Zellen beschreiben.
+/**
+ * Retrievs new values to set the TabCols.
*
- *bWishValues == sal_True: Es werden zur aktuellen Selektion bzw. zur aktuellen
- * Zelle die Wunschwerte aller betroffen Zellen ermittelt.
- * Sind mehrere Zellen in einer Spalte, so wird der
- * groesste Wunschwert als Ergebnis geliefert.
- * Fuer die TabCol-Eintraege, zu denen keine Zellen
- * ermittelt wurden, werden 0-en eingetragen.
+ * We do not iterate over the TabCols' entries, but over the gaps that describe Cells.
*
- *bWishValues == sal_False: Die Selektion wird senkrecht ausgedehnt. Zu jeder
- * Spalte in den TabCols, die sich mit der Selektion
- * schneidet wird der Minimalwert ermittelt.
+ * @param bWishValues == sal_True: We calculate the desired value of all affected
+ * Cells for the current Selection/current Cell.
+ * If more Cells are within a Column, the highest
+ * desired value is returned.
+ * We set TabCol entries for which we did not calculate
+ * Cells to 0.
+ *
+ * @param bWishValues == sal_False: The Selection is expanded vertically.
+ * We calculate the minimum value for every
+ * Column in the TabCols that intersects with the
+ * Selection.
*/
-
static void lcl_CalcColValues( std::vector<sal_uInt16> &rToFill, const SwTabCols &rCols,
const SwLayoutFrm *pStart, const SwLayoutFrm *pEnd,
sal_Bool bWishValues )
@@ -1397,7 +1359,7 @@ static void lcl_CalcColValues( std::vector<sal_uInt16> &rToFill, const SwTabCols
nColLeft += rCols.GetLeftMin();
nColRight += rCols.GetLeftMin();
- //Werte auf die Verhaeltnisse der Tabelle (Follows) anpassen.
+ // Adapt values to the proportions of the Table (Follows)
long nLeftA = nColLeft;
long nRightA = nColRight;
if ( rCols.GetLeftMin() != sal_uInt16((pTab->Frm().*fnRect->fnGetLeft)()) )
@@ -1407,7 +1369,7 @@ static void lcl_CalcColValues( std::vector<sal_uInt16> &rToFill, const SwTabCols
nRightA += nDiff;
}
- //Wir wollen nicht allzu genau hinsehen.
+ // We don't want to take a too close look
if ( ::IsSame(nCLeft, nLeftA) && ::IsSame(nCRight, nRightA))
{
bNotInCols = false;
@@ -1432,7 +1394,7 @@ static void lcl_CalcColValues( std::vector<sal_uInt16> &rToFill, const SwTabCols
}
do {
pCell = pCell->GetNextLayoutLeaf();
- }while( pCell && pCell->Frm().Width() == 0 );
+ } while( pCell && pCell->Frm().Width() == 0 );
} while ( pCell && pTab->IsAnLower( pCell ) );
}
}
@@ -1440,7 +1402,7 @@ static void lcl_CalcColValues( std::vector<sal_uInt16> &rToFill, const SwTabCols
void SwDoc::AdjustCellWidth( const SwCursor& rCursor, sal_Bool bBalance )
{
- // pruefe ob vom aktuellen Crsr der Point/Mark in einer Tabelle stehen
+ // Check whether the current Crsr has it's Point/Mark in a Table
SwCntntNode* pCntNd = rCursor.GetPoint()->nNode.GetNode().GetCntntNode();
SwTableNode* pTblNd = pCntNd ? pCntNd->FindTableNode() : 0;
if( !pTblNd )
@@ -1449,13 +1411,13 @@ void SwDoc::AdjustCellWidth( const SwCursor& rCursor, sal_Bool bBalance )
SwLayoutFrm *pStart, *pEnd;
::lcl_GetStartEndCell( rCursor, pStart, pEnd );
- //TabCols besorgen, den ueber diese stellen wir die Tabelle neu ein.
+ // Collect TabCols; we reset the Table with them
SwFrm* pBoxFrm = pStart;
while( pBoxFrm && !pBoxFrm->IsCellFrm() )
pBoxFrm = pBoxFrm->GetUpper();
if ( !pBoxFrm )
- return; // robust
+ return; // Robust
SwTabCols aTabCols;
GetTabCols( aTabCols, 0, (SwCellFrm*)pBoxFrm );
@@ -1470,7 +1432,7 @@ void SwDoc::AdjustCellWidth( const SwCursor& rCursor, sal_Bool bBalance )
::lcl_CalcColValues( aWish, aTabCols, pStart, pEnd, sal_True );
- //Es ist Robuster wenn wir die Min-Werte fuer die ganze Tabelle berechnen.
+ // It's more robust if we calculate the minimum values for the whole Table
const SwTabFrm *pTab = pStart->ImplFindTabFrm();
pStart = (SwLayoutFrm*)pTab->FirstCell();
pEnd = (SwLayoutFrm*)pTab->FindLastCntnt()->GetUpper();
@@ -1480,9 +1442,9 @@ void SwDoc::AdjustCellWidth( const SwCursor& rCursor, sal_Bool bBalance )
if( bBalance )
{
- //Alle Spalten, die makiert sind haben jetzt einen Wunschwert
- //eingtragen. Wir addieren die aktuellen Werte, teilen das Ergebnis
- //durch die Anzahl und haben eine Wunschwert fuer den ausgleich.
+ // All Columns, which are now selected, have a desired value.
+ // We add up the current values, divide the result by their
+ // count and get a desired value for balancing.
sal_uInt16 nWish = 0, nCnt = 0;
for ( i = 0; i <= aTabCols.Count(); ++i )
{
@@ -1506,12 +1468,14 @@ void SwDoc::AdjustCellWidth( const SwCursor& rCursor, sal_Bool bBalance )
const sal_uInt16 nOldRight = static_cast<sal_uInt16>(aTabCols.GetRight());
- //Um die Impl. einfach zu gestalten, aber trotzdem in den meissten Faellen
- //den Platz richtig auszunutzen laufen wir zweimal.
- //Problem: Erste Spalte wird breiter, die anderen aber erst danach
- //schmaler. Die Wunschbreite der ersten Spalte wuerde abgelehnt, weil
- //mit ihr die max. Breite der Tabelle ueberschritten wuerde.
- for ( sal_uInt16 k= 0; k < 2; ++k )
+ // In order to make the implementation easier, but still use the available
+ // space properly, we do this twice.
+ //
+ // The problem: The first column is getting wider, the others get slimmer
+ // only afterwards.
+ // The first column's desired width would be discarded as it would cause
+ // the Table's width to exceed the maximum width.
+ for ( sal_uInt16 k = 0; k < 2; ++k )
{
for ( i = 0; i <= aTabCols.Count(); ++i )
{
@@ -1536,8 +1500,8 @@ void SwDoc::AdjustCellWidth( const SwCursor& rCursor, sal_Bool bBalance )
long nTabRight = aTabCols.GetRight() + nDiff;
- //Wenn die Tabelle zu breit wuerde begrenzen wir die Anpassung
- //auf das erlaubte Maximum.
+ // If the Table would become too wide, we restrict the
+ // adjusted amount to the allowed maximum.
if ( !bBalance && nTabRight > aTabCols.GetRightMax() )
{
const long nTmpD = nTabRight - aTabCols.GetRightMax();
@@ -1556,11 +1520,10 @@ void SwDoc::AdjustCellWidth( const SwCursor& rCursor, sal_Bool bBalance )
SwFrmFmt *pFmt = pTblNd->GetTable().GetFrmFmt();
const sal_Int16 nOriHori = pFmt->GetHoriOrient().GetHoriOrient();
- //So, die richtige Arbeit koennen wir jetzt der SwTable ueberlassen.
+ // We can leave the "real" work to the SwTable now
SetTabCols( aTabCols, sal_False, 0, (SwCellFrm*)pBoxFrm );
- // i54248: lijian/fme
- // alignment might have been changed in SetTabCols, restore old value:
+ // Alignment might have been changed in SetTabCols; restore old value
const SwFmtHoriOrient &rHori = pFmt->GetHoriOrient();
SwFmtHoriOrient aHori( rHori );
if ( aHori.GetHoriOrient() != nOriHori )
@@ -1569,8 +1532,8 @@ void SwDoc::AdjustCellWidth( const SwCursor& rCursor, sal_Bool bBalance )
pFmt->SetFmtAttr( aHori );
}
- //Bei Automatischer Breite wird auf Linksbuendig umgeschaltet.
- //Bei Randattributen wird der Rechte Rand angepasst.
+ // We switch to left-adjusted for automatic width
+ // We adjust the right border for Border attributes
if( !bBalance && nNewRight < nOldRight )
{
if( aHori.GetHoriOrient() == text::HoriOrientation::FULL )