summaryrefslogtreecommitdiff
path: root/sw/source/core
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/core')
-rw-r--r--sw/source/core/doc/docnum.cxx62
-rw-r--r--sw/source/core/docnode/ndcopy.cxx292
-rw-r--r--sw/source/core/edit/ednumber.cxx8
-rw-r--r--sw/source/core/inc/frmtool.hxx17
-rw-r--r--sw/source/core/layout/flowfrm.cxx51
-rw-r--r--sw/source/core/layout/frmtool.cxx31
-rw-r--r--sw/source/core/text/itrcrsr.cxx24
-rw-r--r--sw/source/core/txtnode/ndtxt.cxx10
8 files changed, 334 insertions, 161 deletions
diff --git a/sw/source/core/doc/docnum.cxx b/sw/source/core/doc/docnum.cxx
index 97333d063e..5600f198b9 100644
--- a/sw/source/core/doc/docnum.cxx
+++ b/sw/source/core/doc/docnum.cxx
@@ -1128,29 +1128,29 @@ void SwDoc::SetCounted(const SwPaM & rPam, bool bCounted)
}
}
-void SwDoc::ReplaceNumRule(const SwPaM & rPaM, const SwNumRule & rNumRule)
-{
- if (DoesUndo())
- StartUndo(UNDO_START, NULL);
+//void SwDoc::ReplaceNumRule(const SwPaM & rPaM, const SwNumRule & rNumRule)
+//{
+// if (DoesUndo())
+// StartUndo(UNDO_START, NULL);
- ULONG nStt = rPaM.Start()->nNode.GetIndex();
- ULONG nEnd = rPaM.End()->nNode.GetIndex();
+// ULONG nStt = rPaM.Start()->nNode.GetIndex();
+// ULONG nEnd = rPaM.End()->nNode.GetIndex();
- for (ULONG n = nStt; n <= nEnd; n++)
- {
- SwTxtNode * pCNd = GetNodes()[n]->GetTxtNode();
+// for (ULONG n = nStt; n <= nEnd; n++)
+// {
+// SwTxtNode * pCNd = GetNodes()[n]->GetTxtNode();
- if (pCNd && NULL != pCNd->GetNumRule())
- {
- SwPaM aPam(*pCNd);
+// if (pCNd && NULL != pCNd->GetNumRule())
+// {
+// SwPaM aPam(*pCNd);
- Insert(aPam, SwNumRuleItem(rNumRule.GetName()), 0);
- }
- }
+// Insert(aPam, SwNumRuleItem(rNumRule.GetName()), 0);
+// }
+// }
- if (DoesUndo())
- EndUndo(UNDO_START, NULL);
-}
+// if (DoesUndo())
+// EndUndo(UNDO_START, NULL);
+//}
void SwDoc::SetNumRuleStart( const SwPosition& rPos, BOOL bFlag )
{
@@ -1544,8 +1544,8 @@ void SwDoc::MakeUniqueNumRules(const SwPaM & rPaM)
SwPosition aPos(*pCNd);
aListStyleData.pReplaceNumRule =
const_cast<SwNumRule *>
- (SearchNumRule( aPos, FALSE, pCNd->HasNumber(),
- FALSE, 0,
+ (SearchNumRule( aPos, false, pCNd->HasNumber(),
+ false, 0,
aListStyleData.sListId, true ));
}
@@ -1668,7 +1668,7 @@ void SwDoc::DelNumRules( const SwPaM& rPam )
pTNd->ChkCondColl();
//else if( !pOutlNd && NO_NUMBERING != //#outline level,zhaojianwei
// ((SwTxtFmtColl*)pTNd->GetFmtColl())->GetOutlineLevel() )
- else if( !pOutlNd &&
+ else if( !pOutlNd &&
((SwTxtFmtColl*)pTNd->GetFmtColl())->IsAssignedToListLevelOfOutlineStyle() )//<-end,zhaojianwei
pOutlNd = pTNd;
}
@@ -1849,13 +1849,13 @@ BOOL SwDoc::GotoNextNum( SwPosition& rPos, BOOL bOverUpper,
// -> #i23731#
// --> OD 2008-03-18 #refactorlists# - add output parameter <sListId>
-const SwNumRule * SwDoc::SearchNumRule(SwPosition & rPos,
- BOOL bForward,
- BOOL bNum,
- BOOL bOutline,
+const SwNumRule * SwDoc::SearchNumRule(const SwPosition & rPos,
+ const bool bForward,
+ const bool bNum,
+ const bool bOutline,
int nNonEmptyAllowed,
String& sListId,
- bool _bInvestigateStartNode)
+ const bool bInvestigateStartNode)
{
const SwNumRule * pResult = NULL;
SwTxtNode * pTxtNd = rPos.nNode.GetNode().GetTxtNode();
@@ -1871,7 +1871,7 @@ const SwNumRule * SwDoc::SearchNumRule(SwPosition & rPos,
do
{
// --> OD 2005-10-20 #i55391#
- if ( !_bInvestigateStartNode )
+ if ( !bInvestigateStartNode )
{
if (bForward)
aIdx++;
@@ -1886,9 +1886,9 @@ const SwNumRule * SwDoc::SearchNumRule(SwPosition & rPos,
const SwNumRule * pNumRule = pTxtNd->GetNumRule();
if (pNumRule)
{
- if (pNumRule->IsOutlineRule() == bOutline && // #115901#
- ( (bNum && pNumRule->Get(0).IsEnumeration()) ||
- (!bNum && pNumRule->Get(0).IsItemize()) )) // #i22362#, #i29560#
+ if ( ( pNumRule->IsOutlineRule() == ( bOutline ? TRUE : FALSE ) ) && // #115901#
+ ( ( bNum && pNumRule->Get(0).IsEnumeration()) ||
+ ( !bNum && pNumRule->Get(0).IsItemize() ) ) ) // #i22362#, #i29560#
{
pResult = pTxtNd->GetNumRule();
// --> OD 2008-03-18 #refactorlists#
@@ -1911,7 +1911,7 @@ const SwNumRule * SwDoc::SearchNumRule(SwPosition & rPos,
}
// --> OD 2005-10-20 #i55391#
- if ( _bInvestigateStartNode )
+ if ( bInvestigateStartNode )
{
if (bForward)
aIdx++;
diff --git a/sw/source/core/docnode/ndcopy.cxx b/sw/source/core/docnode/ndcopy.cxx
index dba567c545..cefb747485 100644
--- a/sw/source/core/docnode/ndcopy.cxx
+++ b/sw/source/core/docnode/ndcopy.cxx
@@ -795,34 +795,68 @@ bool SwDoc::Copy( SwPaM& rPam, SwPosition& rPos, bool bCopyAll ) const
// Kopieren eines Bereiches im oder in ein anderes Dokument !
// Die Position darf nicht im Bereich liegen !!
-BOOL lcl_MarksWholeNode(const SwPaM & rPam)
+bool lcl_MarksWholeNode(const SwPaM & rPam)
{
- BOOL bResult = FALSE;
- const SwPosition * pStt = rPam.Start(), * pEnd = rPam.End();
+ bool bResult = false;
+ const SwPosition* pStt = rPam.Start();
+ const SwPosition* pEnd = rPam.End();
if (NULL != pStt && NULL != pEnd)
{
- SwTxtNode * pSttNd = pStt->nNode.GetNode().GetTxtNode();
- SwTxtNode * pEndNd = pEnd->nNode.GetNode().GetTxtNode();
+ const SwTxtNode* pSttNd = pStt->nNode.GetNode().GetTxtNode();
+ const SwTxtNode* pEndNd = pEnd->nNode.GetNode().GetTxtNode();
if (NULL != pSttNd && NULL != pEndNd &&
pStt->nContent.GetIndex() == 0 &&
pEnd->nContent.GetIndex() == pEndNd->Len())
{
- bResult = TRUE;
+ bResult = true;
}
}
return bResult;
}
+// --> OD 2009-08-25 #i86492#
+bool lcl_ContainsOnlyParagraphsInList( const SwPaM& rPam )
+{
+ bool bRet = false;
+
+ const SwTxtNode* pTxtNd = rPam.Start()->nNode.GetNode().GetTxtNode();
+ const SwTxtNode* pEndTxtNd = rPam.End()->nNode.GetNode().GetTxtNode();
+ if ( pTxtNd && pTxtNd->IsInList() &&
+ pEndTxtNd && pEndTxtNd->IsInList() )
+ {
+ bRet = true;
+ SwNodeIndex aIdx(rPam.Start()->nNode);
+
+ do
+ {
+ aIdx++;
+ pTxtNd = aIdx.GetNode().GetTxtNode();
+
+ if ( !pTxtNd || !pTxtNd->IsInList() )
+ {
+ bRet = false;
+ break;
+ }
+ } while ( pTxtNd && pTxtNd != pEndTxtNd );
+ }
+
+
+ return bRet;
+}
+// <--
+
BOOL SwDoc::_Copy( SwPaM& rPam, SwPosition& rPos,
BOOL bMakeNewFrms, bool bCopyAll, SwPaM* pCpyRange ) const
{
SwDoc* pDoc = rPos.nNode.GetNode().GetDoc();
- bool bColumnSel = pDoc->IsClipBoard() && pDoc->IsColumnSelection();
+ const bool bColumnSel = pDoc->IsClipBoard() && pDoc->IsColumnSelection();
+
+ SwPosition* pStt = rPam.Start();
+ SwPosition* pEnd = rPam.End();
- SwPosition *pStt = rPam.Start(), *pEnd = rPam.End();
// kein Copy abfangen.
if( !rPam.HasMark() || ( *pStt >= *pEnd && !bColumnSel ) ||
//JP 29.6.2001: 88963 - dont copy if inspos is in region of start to end
@@ -830,7 +864,7 @@ BOOL SwDoc::_Copy( SwPaM& rPam, SwPosition& rPos,
( pDoc == this && *pStt <= rPos && rPos < *pEnd ))
return FALSE;
- BOOL bEndEqualIns = pDoc == this && rPos == *pEnd;
+ const bool bEndEqualIns = pDoc == this && rPos == *pEnd;
// falls Undo eingeschaltet, erzeuge das UndoCopy-Objekt
SwUndoCpyDoc* pUndo = 0;
@@ -858,43 +892,63 @@ BOOL SwDoc::_Copy( SwPaM& rPam, SwPosition& rPos,
SwNodeRange aRg( pStt->nNode, pEnd->nNode );
SwNodeIndex aInsPos( rPos.nNode );
- BOOL bOneNode = pStt->nNode == pEnd->nNode;
- SwTxtNode* pSttNd = pStt->nNode.GetNode().GetTxtNode();
- SwTxtNode* pEndNd = pEnd->nNode.GetNode().GetTxtNode();
- SwTxtNode* pDestNd = aInsPos.GetNode().GetTxtNode();
- BOOL bCopyCollFmt = !pDoc->IsInsOnlyTextGlossary() && (
- ( pDestNd && !pDestNd->GetTxt().Len() ) ||
- ( !bOneNode && !rPos.nContent.GetIndex() ));
- BOOL bCopyBookmarks = TRUE;
- BOOL bStartIsTxtNode = 0 != pSttNd;
-
- // --> OD 2008-03-18 #refactorlists#
- String aDummy;
- const SwNumRule * pNumRuleToPropagate =
- pDoc->SearchNumRule(rPos, FALSE, FALSE, TRUE, 0, aDummy);
+ const bool bOneNode = pStt->nNode == pEnd->nNode;
+ SwTxtNode* pSttTxtNd = pStt->nNode.GetNode().GetTxtNode();
+ SwTxtNode* pEndTxtNd = pEnd->nNode.GetNode().GetTxtNode();
+ SwTxtNode* pDestTxtNd = aInsPos.GetNode().GetTxtNode();
+ bool bCopyCollFmt = !pDoc->IsInsOnlyTextGlossary() &&
+ ( ( pDestTxtNd && !pDestTxtNd->GetTxt().Len() ) ||
+ ( !bOneNode && !rPos.nContent.GetIndex() ) );
+ bool bCopyBookmarks = true;
+ BOOL bStartIsTxtNode = 0 != pSttTxtNd;
+
+ // --> OD 2009-08-25 #i86492#
+ // Correct the search for a previous list:
+ // First search for non-outline numbering list. Then search for non-outline
+ // bullet list.
+ // Keep also the <ListId> value for possible propagation.
+ String aListIdToPropagate;
+ const SwNumRule* pNumRuleToPropagate =
+ pDoc->SearchNumRule( rPos, false, true, false, 0, aListIdToPropagate, true );
+ if ( !pNumRuleToPropagate )
+ {
+ pNumRuleToPropagate =
+ pDoc->SearchNumRule( rPos, false, false, false, 0, aListIdToPropagate, true );
+ }
+ // <--
+ // --> OD 2009-08-25 #i86492#
+ // Do not propagate previous found list, if
+ // - destination is an empty paragraph which is not in a list and
+ // - source contains at least one paragraph which is not in a list
+ if ( pNumRuleToPropagate &&
+ pDestTxtNd && !pDestTxtNd->GetTxt().Len() && !pDestTxtNd->IsInList() &&
+ !lcl_ContainsOnlyParagraphsInList( rPam ) )
+ {
+ pNumRuleToPropagate = 0;
+ }
// <--
// Block, damit aus diesem gesprungen werden kann !!
do {
- if( pSttNd )
+ if( pSttTxtNd )
{
// den Anfang nicht komplett kopieren ?
if( !bCopyCollFmt || bColumnSel || pStt->nContent.GetIndex() )
{
SwIndex aDestIdx( rPos.nContent );
BOOL bCopyOk = FALSE;
- if( !pDestNd )
+ if( !pDestTxtNd )
{
if( pStt->nContent.GetIndex() || bOneNode )
- pDestNd = pDoc->GetNodes().MakeTxtNode( aInsPos,
+ pDestTxtNd = pDoc->GetNodes().MakeTxtNode( aInsPos,
pDoc->GetTxtCollFromPool(RES_POOLCOLL_STANDARD));
else
{
- pDestNd = (SwTxtNode*)pSttNd->MakeCopy( pDoc, aInsPos );
+ pDestTxtNd = static_cast<SwTxtNode*>(pSttTxtNd->MakeCopy( pDoc, aInsPos ));
bCopyOk = TRUE;
}
- aDestIdx.Assign( pDestNd, 0 );
- bCopyCollFmt = TRUE;
+ aDestIdx.Assign( pDestTxtNd, 0 );
+ bCopyCollFmt = true;
}
else if( !bOneNode || bColumnSel )
{
@@ -911,8 +965,8 @@ BOOL SwDoc::_Copy( SwPaM& rPam, SwPosition& rPos,
aCpyPam.Move( fnMoveBackward, fnGoCntnt );
}
- pDestNd = pDoc->GetNodes()[ aInsPos.GetIndex()-1 ]->GetTxtNode();
- aDestIdx.Assign( pDestNd, pDestNd->GetTxt().Len() );
+ pDestTxtNd = pDoc->GetNodes()[ aInsPos.GetIndex()-1 ]->GetTxtNode();
+ aDestIdx.Assign( pDestTxtNd, pDestTxtNd->GetTxt().Len() );
// korrigiere den Bereich wieder !!
if( bEndEqualIns )
@@ -925,59 +979,83 @@ BOOL SwDoc::_Copy( SwPaM& rPam, SwPosition& rPos,
rPam.Exchange();
aRg.aEnd = pEnd->nNode;
- pEndNd = pEnd->nNode.GetNode().GetTxtNode();
+ pEndTxtNd = pEnd->nNode.GetNode().GetTxtNode();
}
else if( rPos == *pEnd ) // Wurde das Ende auch verschoben
{
pEnd->nNode--;
- pEnd->nContent.Assign( pDestNd, nCntntEnd );
+ pEnd->nContent.Assign( pDestTxtNd, nCntntEnd );
aRg.aEnd = pEnd->nNode;
- pEndNd = pEnd->nNode.GetNode().GetTxtNode();
+ pEndTxtNd = pEnd->nNode.GetNode().GetTxtNode();
}
}
- const SfxPoolItem * pItem = NULL;
- const SfxItemSet * pAttrSet = pDestNd->GetpSwAttrSet();
-
/* #107213#: Safe numrule item at destination. */
- int aState = SFX_ITEM_UNKNOWN;
+ // --> OD 2009-08-25 #i86492#
+ // Safe also <ListId> item of destination.
+ int aNumRuleState = SFX_ITEM_UNKNOWN;
SwNumRuleItem aNumRuleItem;
-
- if (pAttrSet != NULL)
+ int aListIdState = SFX_ITEM_UNKNOWN;
+ SfxStringItem aListIdItem( RES_PARATR_LIST_ID, String() );
{
- aState =
- pAttrSet->GetItemState(RES_PARATR_NUMRULE, FALSE, &pItem);
-
- if (SFX_ITEM_SET == aState)
- aNumRuleItem = *((SwNumRuleItem *) pItem);
+ const SfxItemSet * pAttrSet = pDestTxtNd->GetpSwAttrSet();
+ if (pAttrSet != NULL)
+ {
+ const SfxPoolItem * pItem = NULL;
+ aNumRuleState = pAttrSet->GetItemState(RES_PARATR_NUMRULE, FALSE, &pItem);
+ if (SFX_ITEM_SET == aNumRuleState)
+ aNumRuleItem = *((SwNumRuleItem *) pItem);
+
+ aListIdState =
+ pAttrSet->GetItemState(RES_PARATR_LIST_ID, FALSE, &pItem);
+ if (SFX_ITEM_SET == aListIdState)
+ {
+ aListIdItem.SetValue( static_cast<const SfxStringItem*>(pItem)->GetValue() );
+ }
+ }
}
+ // <--
/* #107213# */
if( !bCopyOk )
{
- xub_StrLen nCpyLen = ( bOneNode ? pEnd->nContent.GetIndex()
- : pSttNd->GetTxt().Len() )
- - pStt->nContent.GetIndex();
- pSttNd->Copy( pDestNd, aDestIdx, pStt->nContent, nCpyLen );
+ xub_StrLen nCpyLen = ( bOneNode
+ ? pEnd->nContent.GetIndex()
+ : pSttTxtNd->GetTxt().Len() )
+ - pStt->nContent.GetIndex();
+ pSttTxtNd->Copy( pDestTxtNd, aDestIdx, pStt->nContent, nCpyLen );
if( bEndEqualIns )
pEnd->nContent -= nCpyLen;
}
if( bOneNode )
{
- // ist der DestinationNode leer, kopiere die Vorlage mit
if( bCopyCollFmt )
{
- pSttNd->CopyCollFmt( *pDestNd );
+ pSttTxtNd->CopyCollFmt( *pDestTxtNd );
/* #107213# If only a part of one paragraph is copied
restore the numrule at the destination. */
- if (! lcl_MarksWholeNode(rPam))
+ // --> OD 2009-08-25 #i86492#
+ // restore also <ListId> item
+ if ( !lcl_MarksWholeNode(rPam) )
{
- if (SFX_ITEM_SET == aState)
- pDestNd->SetAttr(aNumRuleItem);
+ if (SFX_ITEM_SET == aNumRuleState)
+ {
+ pDestTxtNd->SetAttr(aNumRuleItem);
+ }
+ else
+ {
+ pDestTxtNd->ResetAttr(RES_PARATR_NUMRULE);
+ }
+ if (SFX_ITEM_SET == aListIdState)
+ {
+ pDestTxtNd->SetAttr(aListIdItem);
+ }
else
- pDestNd->ResetAttr(RES_PARATR_NUMRULE);
+ {
+ pDestTxtNd->ResetAttr(RES_PARATR_LIST_ID);
+ }
}
}
@@ -987,13 +1065,13 @@ BOOL SwDoc::_Copy( SwPaM& rPam, SwPosition& rPos,
aRg.aStart++;
}
}
- else if( pDestNd )
+ else if( pDestTxtNd )
{
// Problems with insertion of table selections into "normal" text solved.
// We have to set the correct PaM for Undo, if this PaM starts in a textnode,
// the undo operation will try to merge this node after removing the table.
// If we didn't split a textnode, the PaM should start at the inserted table node
- if( rPos.nContent.GetIndex() == pDestNd->Len() )
+ if( rPos.nContent.GetIndex() == pDestTxtNd->Len() )
{ // Insertion at the last position of a textnode (empty or not)
aInsPos++; // The table will be inserted behind the text node
}
@@ -1040,15 +1118,15 @@ BOOL SwDoc::_Copy( SwPaM& rPam, SwPosition& rPos,
}
}
- pDestNd = aInsPos.GetNode().GetTxtNode();
- if( pEndNd )
+ pDestTxtNd = aInsPos.GetNode().GetTxtNode();
+ if( pEndTxtNd )
{
SwIndex aDestIdx( rPos.nContent );
- if( !pDestNd )
+ if( !pDestTxtNd )
{
- pDestNd = pDoc->GetNodes().MakeTxtNode( aInsPos,
+ pDestTxtNd = pDoc->GetNodes().MakeTxtNode( aInsPos,
pDoc->GetTxtCollFromPool(RES_POOLCOLL_STANDARD));
- aDestIdx.Assign( pDestNd, 0 );
+ aDestIdx.Assign( pDestTxtNd, 0 );
aInsPos--;
// #112756# #98130# if we have to insert an extra text node
@@ -1060,42 +1138,66 @@ BOOL SwDoc::_Copy( SwPaM& rPam, SwPosition& rPos,
bStartIsTxtNode = TRUE;
}
- const SfxPoolItem * pItem = NULL;
- const SfxItemSet* pAttrSet = pDestNd->GetpSwAttrSet();
-
/* #107213# Save numrule at destination */
- int aState = SFX_ITEM_UNKNOWN;
+ // --> OD 2009-08-25 #i86492#
+ // Safe also <ListId> item of destination.
+ int aNumRuleState = SFX_ITEM_UNKNOWN;
SwNumRuleItem aNumRuleItem;
-
- if (pAttrSet != NULL)
+ int aListIdState = SFX_ITEM_UNKNOWN;
+ SfxStringItem aListIdItem( RES_PARATR_LIST_ID, String() );
{
- aState =
- pAttrSet->GetItemState(RES_PARATR_NUMRULE, FALSE, &pItem);
+ const SfxItemSet* pAttrSet = pDestTxtNd->GetpSwAttrSet();
+ if (pAttrSet != NULL)
+ {
+ const SfxPoolItem * pItem = NULL;
+
+ aNumRuleState =
+ pAttrSet->GetItemState(RES_PARATR_NUMRULE, FALSE, &pItem);
+ if (SFX_ITEM_SET == aNumRuleState)
+ aNumRuleItem = *((SwNumRuleItem *) pItem);
- if (SFX_ITEM_SET == aState)
- aNumRuleItem = *((SwNumRuleItem *) pItem);
+ aListIdState =
+ pAttrSet->GetItemState(RES_PARATR_LIST_ID, FALSE, &pItem);
+ if (SFX_ITEM_SET == aListIdState)
+ aListIdItem.SetValue( static_cast<const SfxStringItem*>(pItem)->GetValue() );
+ }
}
+ // <--
/* #107213# */
- BOOL bEmptyDestNd = 0 == pDestNd->GetTxt().Len();
- pEndNd->Copy( pDestNd, aDestIdx, SwIndex( pEndNd ),
+ BOOL bEmptyDestNd = 0 == pDestTxtNd->GetTxt().Len();
+ pEndTxtNd->Copy( pDestTxtNd, aDestIdx, SwIndex( pEndTxtNd ),
pEnd->nContent.GetIndex() );
// auch alle FormatVorlagen kopieren
if( bCopyCollFmt && ( bOneNode || bEmptyDestNd ))
{
- pEndNd->CopyCollFmt( *pDestNd );
+ pEndTxtNd->CopyCollFmt( *pDestTxtNd );
- if (bOneNode)
+ if ( bOneNode )
{
/* #107213# If only a part of one paragraph is copied
restore the numrule at the destination. */
- if ( ! lcl_MarksWholeNode(rPam))
+ // --> OD 2009-08-25 #i86492#
+ // restore also <ListId> item
+ if ( !lcl_MarksWholeNode(rPam) )
{
- if (SFX_ITEM_SET == aState)
- pDestNd->SetAttr(aNumRuleItem);
+ if (SFX_ITEM_SET == aNumRuleState)
+ {
+ pDestTxtNd->SetAttr(aNumRuleItem);
+ }
else
- pDestNd->ResetAttr(RES_PARATR_NUMRULE);
+ {
+ pDestTxtNd->ResetAttr(RES_PARATR_NUMRULE);
+ }
+ if (SFX_ITEM_SET == aListIdState)
+ {
+ pDestTxtNd->SetAttr(aListIdItem);
+ }
+ else
+ {
+ pDestTxtNd->ResetAttr(RES_PARATR_LIST_ID);
+ }
}
}
}
@@ -1104,13 +1206,13 @@ BOOL SwDoc::_Copy( SwPaM& rPam, SwPosition& rPos,
if( bCopyAll || aRg.aStart != aRg.aEnd )
{
SfxItemSet aBrkSet( pDoc->GetAttrPool(), aBreakSetRange );
- if( pSttNd && bCopyCollFmt && pDestNd->HasSwAttrSet() )
+ if( pSttTxtNd && bCopyCollFmt && pDestTxtNd->HasSwAttrSet() )
{
- aBrkSet.Put( *pDestNd->GetpSwAttrSet() );
+ aBrkSet.Put( *pDestTxtNd->GetpSwAttrSet() );
if( SFX_ITEM_SET == aBrkSet.GetItemState( RES_BREAK, FALSE ) )
- pDestNd->ResetAttr( RES_BREAK );
+ pDestTxtNd->ResetAttr( RES_BREAK );
if( SFX_ITEM_SET == aBrkSet.GetItemState( RES_PAGEDESC, FALSE ) )
- pDestNd->ResetAttr( RES_PAGEDESC );
+ pDestTxtNd->ResetAttr( RES_PAGEDESC );
}
if( aInsPos == pEnd->nNode )
@@ -1124,13 +1226,13 @@ BOOL SwDoc::_Copy( SwPaM& rPam, SwPosition& rPos,
else
CopyWithFlyInFly( aRg, pEnd->nContent.GetIndex(), aInsPos, bMakeNewFrms, FALSE );
- bCopyBookmarks = FALSE;
+ bCopyBookmarks = false;
// harte Umbrueche wieder in den ersten Node setzen
- if( aBrkSet.Count() && 0 != ( pDestNd = pDoc->GetNodes()[
+ if( aBrkSet.Count() && 0 != ( pDestTxtNd = pDoc->GetNodes()[
aCpyPam.GetPoint()->nNode.GetIndex()+1 ]->GetTxtNode() ) )
{
- pDestNd->SetAttr( aBrkSet );
+ pDestTxtNd->SetAttr( aBrkSet );
}
}
} while( FALSE );
@@ -1169,8 +1271,14 @@ BOOL SwDoc::_Copy( SwPaM& rPam, SwPosition& rPos,
*pCpyRange->GetMark() = *aCpyPam.GetMark();
}
- if (pNumRuleToPropagate)
- pDoc->ReplaceNumRule(aCpyPam, *pNumRuleToPropagate);
+ if ( pNumRuleToPropagate )
+ {
+ // --> OD 2009-08-25 #i86492#
+ // use <SwDoc::SetNumRule(..)>, because it also handles the <ListId>
+// pDoc->ReplaceNumRule(aCpyPam, *pNumRuleToPropagate);
+ pDoc->SetNumRule( aCpyPam, *pNumRuleToPropagate, false,
+ aListIdToPropagate, sal_True, true );
+ }
pDoc->SetRedlineMode_intern( eOld );
pDoc->SetModified();
@@ -1181,7 +1289,7 @@ BOOL SwDoc::_Copy( SwPaM& rPam, SwPosition& rPos,
// ----- Copy-Methode vom SwDoc - "kopiere Fly's in Fly's" ------
-void SwDoc::CopyWithFlyInFly( const SwNodeRange& rRg, const xub_StrLen nEndContentIndex,
+void SwDoc::CopyWithFlyInFly( const SwNodeRange& rRg, const xub_StrLen nEndContentIndex,
const SwNodeIndex& rInsPos, BOOL bMakeNewFrms,
BOOL bDelRedlines, BOOL bCopyFlyAtFly ) const
{
@@ -1324,11 +1432,11 @@ void SwDoc::_CopyFlyInFly( const SwNodeRange& rRg, const xub_StrLen nEndContentI
{
if( bAtCntnt )
bAdd = nEndContentIndex > 0;
- else
+ else
bAdd = pAPos->nContent <= nEndContentIndex;
}
}
- if( bAdd )
+ if( bAdd )
aArr.Insert( _ZSortFly( pFmt, pAnchor, nArrLen + aArr.Count() ));
}
}
diff --git a/sw/source/core/edit/ednumber.cxx b/sw/source/core/edit/ednumber.cxx
index ba06e528b4..b9d4523edb 100644
--- a/sw/source/core/edit/ednumber.cxx
+++ b/sw/source/core/edit/ednumber.cxx
@@ -565,7 +565,7 @@ BOOL SwEditShell::IsProtectedOutlinePara() const
// BYTE nTmpLvl = GetRealLevel( pTmpNd->GetTxtNode()->
// GetTxtColl()->GetOutlineLevel() );
// int nTmpLvl = pTmpNd->GetTxtNode()->GetOutlineLevel();//#outline level,zhaojianwei
- int nTmpLvl = pTmpNd->GetTxtNode()->GetAttrOutlineLevel();
+ int nTmpLvl = pTmpNd->GetTxtNode()->GetAttrOutlineLevel();
// ASSERT( nTmpLvl >= 0 && nTmpLvl < MAXLEVEL,
ASSERT( nTmpLvl >= 0 && nTmpLvl <= MAXLEVEL, //<-end,zhaojianwei
"<SwEditShell::IsProtectedOutlinePara()>" );
@@ -825,9 +825,9 @@ USHORT SwEditShell::GetNodeNumStart() const
-----------------------------------------------------------------------*/
// --> OD 2008-03-18 #refactorlists#
-const SwNumRule * SwEditShell::SearchNumRule( BOOL bForward,
- BOOL bNum,
- BOOL bOutline,
+const SwNumRule * SwEditShell::SearchNumRule( const bool bForward,
+ const bool bNum,
+ const bool bOutline,
int nNonEmptyAllowed,
String& sListId )
{
diff --git a/sw/source/core/inc/frmtool.hxx b/sw/source/core/inc/frmtool.hxx
index 584c22ec09..199be26f58 100644
--- a/sw/source/core/inc/frmtool.hxx
+++ b/sw/source/core/inc/frmtool.hxx
@@ -518,21 +518,26 @@ inline BOOL SwBorderAttrs::IsLine() const
OD 2004-03-10 #i28701#
Values only provided for flow frames (table, section or text frames)
Note: line spacing value is only determined for text frames
+ OD 2009-08-28 #i102458#
+ Add output parameter <obIsLineSpacingProportional>
- @param _rFrm
+ @param rFrm
input parameter - frame, for which the spacing values are determined.
- @param _roPrevLowerSpacing
+ @param onPrevLowerSpacing
output parameter - lower spacing of the frame in SwTwips
- @param _roPrevLineSpacing
+ @param onPrevLineSpacing
output parameter - line spacing of the frame in SwTwips
+ @param obIsLineSpacingProportional
+
@author OD
*/
-void GetSpacingValuesOfFrm( const SwFrm& _rFrm,
- SwTwips& _roLowerSpacing,
- SwTwips& _roLineSpacing );
+void GetSpacingValuesOfFrm( const SwFrm& rFrm,
+ SwTwips& onLowerSpacing,
+ SwTwips& onLineSpacing,
+ bool& obIsLineSpacingProportional );
/** method to get the content of the table cell
diff --git a/sw/source/core/layout/flowfrm.cxx b/sw/source/core/layout/flowfrm.cxx
index ba9f0f9b99..4968601e7a 100644
--- a/sw/source/core/layout/flowfrm.cxx
+++ b/sw/source/core/layout/flowfrm.cxx
@@ -1514,7 +1514,12 @@ SwTwips SwFlowFrm::CalcUpperSpace( const SwBorderAttrs *pAttrs,
// values of found previous frame and use these values.
SwTwips nPrevLowerSpace = 0;
SwTwips nPrevLineSpacing = 0;
- GetSpacingValuesOfFrm( (*pPrevFrm), nPrevLowerSpace, nPrevLineSpacing );
+ // --> OD 2009-08-28 #i102458#
+ bool bPrevLineSpacingPorportional = false;
+ GetSpacingValuesOfFrm( (*pPrevFrm),
+ nPrevLowerSpace, nPrevLineSpacing,
+ bPrevLineSpacingPorportional );
+ // <--
if( pIDSA->get(IDocumentSettingAccess::PARA_SPACE_MAX) )
{
nUpper = nPrevLowerSpace + pAttrs->GetULSpace().GetUpper();
@@ -1539,7 +1544,22 @@ SwTwips SwFlowFrm::CalcUpperSpace( const SwBorderAttrs *pAttrs,
// building its maximum.
if ( pOwn->IsTxtFrm() )
{
- nAdd += static_cast<SwTxtFrm&>(rThis).GetLineSpace( true );
+ // --> OD 2009-08-28 #i102458#
+ // Correction:
+ // A proportional line spacing of the previous text frame
+ // is added up to a own leading line spacing.
+ // Otherwise, the maximum of the leading line spacing
+ // of the previous text frame and the own leading line
+ // spacing is built.
+ if ( bPrevLineSpacingPorportional )
+ {
+ nAdd += static_cast<SwTxtFrm&>(rThis).GetLineSpace( true );
+ }
+ else
+ {
+ nAdd = Max( nAdd, static_cast<SwTxtFrm&>(rThis).GetLineSpace( true ) );
+ }
+ // <--
}
nUpper += nAdd;
}
@@ -1571,7 +1591,22 @@ SwTwips SwFlowFrm::CalcUpperSpace( const SwBorderAttrs *pAttrs,
SwTwips nAdd = nPrevLineSpacing;
if ( pOwn->IsTxtFrm() )
{
- nAdd += static_cast<SwTxtFrm&>(rThis).GetLineSpace( true );
+ // --> OD 2009-08-28 #i102458#
+ // Correction:
+ // A proportional line spacing of the previous text frame
+ // is added up to a own leading line spacing.
+ // Otherwise, the maximum of the leading line spacing
+ // of the previous text frame and the own leading line
+ // spacing is built.
+ if ( bPrevLineSpacingPorportional )
+ {
+ nAdd += static_cast<SwTxtFrm&>(rThis).GetLineSpace( true );
+ }
+ else
+ {
+ nAdd = Max( nAdd, static_cast<SwTxtFrm&>(rThis).GetLineSpace( true ) );
+ }
+ // <--
}
nUpper += nAdd;
}
@@ -1675,7 +1710,10 @@ SwTwips SwFlowFrm::_GetUpperSpaceAmountConsideredForPrevFrm() const
{
SwTwips nPrevLowerSpace = 0;
SwTwips nPrevLineSpacing = 0;
- GetSpacingValuesOfFrm( (*pPrevFrm), nPrevLowerSpace, nPrevLineSpacing );
+ // --> OD 2009-08-28 #i102458#
+ bool bDummy = false;
+ GetSpacingValuesOfFrm( (*pPrevFrm), nPrevLowerSpace, nPrevLineSpacing, bDummy );
+ // <--
if ( nPrevLowerSpace > 0 || nPrevLineSpacing > 0 )
{
const IDocumentSettingAccess* pIDSA = rThis.GetUpper()->GetFmt()->getIDocumentSettingAccess();
@@ -2697,8 +2735,3 @@ const SwFlowFrm *SwFlowFrm::CastFlowFrm( const SwFrm *pFrm )
return (SwSectionFrm*)pFrm;
return 0;
}
-
-
-
-
-
diff --git a/sw/source/core/layout/frmtool.cxx b/sw/source/core/layout/frmtool.cxx
index 6e96769025..756269cd03 100644
--- a/sw/source/core/layout/frmtool.cxx
+++ b/sw/source/core/layout/frmtool.cxx
@@ -3655,30 +3655,37 @@ const SwRect SwPageFrm::PrtWithoutHeaderAndFooter() const
/** method to determine the spacing values of a frame
OD 2004-03-10 #i28701#
+ OD 2009-08-28 #i102458#
+ Add output parameter <obIsLineSpacingProportional>
@author OD
*/
-void GetSpacingValuesOfFrm( const SwFrm& _rFrm,
- SwTwips& _roLowerSpacing,
- SwTwips& _roLineSpacing )
+void GetSpacingValuesOfFrm( const SwFrm& rFrm,
+ SwTwips& onLowerSpacing,
+ SwTwips& onLineSpacing,
+ bool& obIsLineSpacingProportional )
{
- if ( !_rFrm.IsFlowFrm() )
+ if ( !rFrm.IsFlowFrm() )
{
- _roLowerSpacing = 0L;
- _roLineSpacing = 0L;
+ onLowerSpacing = 0;
+ onLineSpacing = 0;
}
else
{
- const SvxULSpaceItem& rULSpace = _rFrm.GetAttrSet()->GetULSpace();
- _roLowerSpacing = rULSpace.GetLower();
+ const SvxULSpaceItem& rULSpace = rFrm.GetAttrSet()->GetULSpace();
+ onLowerSpacing = rULSpace.GetLower();
- _roLineSpacing = 0;
- if ( _rFrm.IsTxtFrm() )
+ onLineSpacing = 0;
+ obIsLineSpacingProportional = false;
+ if ( rFrm.IsTxtFrm() )
{
- _roLineSpacing = static_cast<const SwTxtFrm&>(_rFrm).GetLineSpace();
+ onLineSpacing = static_cast<const SwTxtFrm&>(rFrm).GetLineSpace();
+ obIsLineSpacingProportional =
+ onLineSpacing != 0 &&
+ static_cast<const SwTxtFrm&>(rFrm).GetLineSpace( true ) == 0;
}
- ASSERT( _roLowerSpacing >= 0 && _roLineSpacing >= 0,
+ ASSERT( onLowerSpacing >= 0 && onLineSpacing >= 0,
"<GetSpacingValuesOfFrm(..)> - spacing values aren't positive!" );
}
}
diff --git a/sw/source/core/text/itrcrsr.cxx b/sw/source/core/text/itrcrsr.cxx
index 25ad1a25ca..7fbb6bae55 100644
--- a/sw/source/core/text/itrcrsr.cxx
+++ b/sw/source/core/text/itrcrsr.cxx
@@ -157,8 +157,10 @@ void SwTxtMargin::CtorInitTxtMargin( SwTxtFrm *pNewFrm, SwTxtSizeInfo *pNewInf )
GetInfo().SetFont( GetFnt() );
const SwTxtNode *pNode = pFrm->GetTxtNode();
- const SvxLRSpaceItem &rSpace =
- pFrm->GetTxtNode()->GetSwAttrSet().GetLRSpace();
+ const SvxLRSpaceItem &rSpace = pFrm->GetTxtNode()->GetSwAttrSet().GetLRSpace();
+ // --> OD 2009-09-02 #i95907#
+ const bool bListLevelIndentsApplicable = pFrm->GetTxtNode()->AreListLevelIndentsApplicable();
+ // <--
//
// Carefully adjust the text formatting ranges.
@@ -181,8 +183,13 @@ void SwTxtMargin::CtorInitTxtMargin( SwTxtFrm *pNewFrm, SwTxtSizeInfo *pNewInf )
pFrm->Prt().Left() +
nLMWithNum -
pNode->GetLeftMarginWithNum( sal_False ) -
- rSpace.GetLeft() +
- rSpace.GetTxtLeft();
+ // --> OD 2009-09-02 #i95907#
+// rSpace.GetLeft() +
+// rSpace.GetTxtLeft();
+ ( bListLevelIndentsApplicable
+ ? 0
+ : ( rSpace.GetLeft() - rSpace.GetTxtLeft() ) );
+ // <--
}
else
{
@@ -193,8 +200,13 @@ void SwTxtMargin::CtorInitTxtMargin( SwTxtFrm *pNewFrm, SwTxtSizeInfo *pNewInf )
pFrm->Prt().Left() +
nLMWithNum -
pNode->GetLeftMarginWithNum( sal_False ) -
- rSpace.GetLeft() +
- rSpace.GetTxtLeft();
+ // --> OD 2009-09-02 #i95907#
+// rSpace.GetLeft() +
+// rSpace.GetTxtLeft();
+ ( bListLevelIndentsApplicable
+ ? 0
+ : ( rSpace.GetLeft() - rSpace.GetTxtLeft() ) );
+ // <--
}
else
{
diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx
index 201ac8049a..ed037311e5 100644
--- a/sw/source/core/txtnode/ndtxt.cxx
+++ b/sw/source/core/txtnode/ndtxt.cxx
@@ -234,7 +234,6 @@ SwTxtNode::SwTxtNode( const SwNodeIndex &rWhere,
mpNodeNum( 0 ),
m_bLastOutlineState( false ),
m_bNotifiable( false ),
- //nOutlineLevel( pTxtColl->GetOutlineLevel() )//#outline level, removed by zhaojianwei.
// --> OD 2008-11-19 #i70748#
mbEmptyListStyleSetDueToSetOutlineLevelAttr( false ),
// <--
@@ -253,6 +252,15 @@ SwTxtNode::SwTxtNode( const SwNodeIndex &rWhere,
// SyncNumberAndNumRule();
if ( !IsInList() && GetNumRule() && GetListId().Len() > 0 )
{
+ // --> OD 2009-08-27 #i101516#
+ // apply paragraph style's assigned outline style list level as
+ // list level of the paragraph, if it has none set already.
+ if ( !HasAttrListLevel() &&
+ pTxtColl && pTxtColl->IsAssignedToListLevelOfOutlineStyle() )
+ {
+ SetAttrListLevel( pTxtColl->GetAssignedOutlineStyleLevel() );
+ }
+ // <--
AddToList();
}
// <--