1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sw.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski #include <UndoSplitMove.hxx>
28*b1cdbd2cSJim Jagielski
29*b1cdbd2cSJim Jagielski #include <doc.hxx>
30*b1cdbd2cSJim Jagielski #include <IDocumentUndoRedo.hxx>
31*b1cdbd2cSJim Jagielski #include <pam.hxx>
32*b1cdbd2cSJim Jagielski #include <swundo.hxx> // fuer die UndoIds
33*b1cdbd2cSJim Jagielski #include <ndtxt.hxx>
34*b1cdbd2cSJim Jagielski #include <UndoCore.hxx>
35*b1cdbd2cSJim Jagielski #include <rolbck.hxx>
36*b1cdbd2cSJim Jagielski
37*b1cdbd2cSJim Jagielski
38*b1cdbd2cSJim Jagielski // MOVE
39*b1cdbd2cSJim Jagielski
SwUndoMove(const SwPaM & rRange,const SwPosition & rMvPos)40*b1cdbd2cSJim Jagielski SwUndoMove::SwUndoMove( const SwPaM& rRange, const SwPosition& rMvPos )
41*b1cdbd2cSJim Jagielski : SwUndo( UNDO_MOVE ), SwUndRng( rRange ),
42*b1cdbd2cSJim Jagielski nMvDestNode( rMvPos.nNode.GetIndex() ),
43*b1cdbd2cSJim Jagielski nMvDestCntnt( rMvPos.nContent.GetIndex() ),
44*b1cdbd2cSJim Jagielski bMoveRedlines( false )
45*b1cdbd2cSJim Jagielski {
46*b1cdbd2cSJim Jagielski bMoveRange = bJoinNext = bJoinPrev = sal_False;
47*b1cdbd2cSJim Jagielski
48*b1cdbd2cSJim Jagielski // StartNode vorm loeschen von Fussnoten besorgen!
49*b1cdbd2cSJim Jagielski SwDoc* pDoc = rRange.GetDoc();
50*b1cdbd2cSJim Jagielski SwTxtNode* pTxtNd = pDoc->GetNodes()[ nSttNode ]->GetTxtNode();
51*b1cdbd2cSJim Jagielski SwTxtNode* pEndTxtNd = pDoc->GetNodes()[ nEndNode ]->GetTxtNode();
52*b1cdbd2cSJim Jagielski
53*b1cdbd2cSJim Jagielski pHistory = new SwHistory;
54*b1cdbd2cSJim Jagielski
55*b1cdbd2cSJim Jagielski if( pTxtNd )
56*b1cdbd2cSJim Jagielski {
57*b1cdbd2cSJim Jagielski pHistory->Add( pTxtNd->GetTxtColl(), nSttNode, ND_TEXTNODE );
58*b1cdbd2cSJim Jagielski if ( pTxtNd->GetpSwpHints() )
59*b1cdbd2cSJim Jagielski {
60*b1cdbd2cSJim Jagielski pHistory->CopyAttr( pTxtNd->GetpSwpHints(), nSttNode,
61*b1cdbd2cSJim Jagielski 0, pTxtNd->GetTxt().Len(), false );
62*b1cdbd2cSJim Jagielski }
63*b1cdbd2cSJim Jagielski if( pTxtNd->HasSwAttrSet() )
64*b1cdbd2cSJim Jagielski pHistory->CopyFmtAttr( *pTxtNd->GetpSwAttrSet(), nSttNode );
65*b1cdbd2cSJim Jagielski }
66*b1cdbd2cSJim Jagielski if( pEndTxtNd && pEndTxtNd != pTxtNd )
67*b1cdbd2cSJim Jagielski {
68*b1cdbd2cSJim Jagielski pHistory->Add( pEndTxtNd->GetTxtColl(), nEndNode, ND_TEXTNODE );
69*b1cdbd2cSJim Jagielski if ( pEndTxtNd->GetpSwpHints() )
70*b1cdbd2cSJim Jagielski {
71*b1cdbd2cSJim Jagielski pHistory->CopyAttr( pEndTxtNd->GetpSwpHints(), nEndNode,
72*b1cdbd2cSJim Jagielski 0, pEndTxtNd->GetTxt().Len(), false );
73*b1cdbd2cSJim Jagielski }
74*b1cdbd2cSJim Jagielski if( pEndTxtNd->HasSwAttrSet() )
75*b1cdbd2cSJim Jagielski pHistory->CopyFmtAttr( *pEndTxtNd->GetpSwAttrSet(), nEndNode );
76*b1cdbd2cSJim Jagielski }
77*b1cdbd2cSJim Jagielski
78*b1cdbd2cSJim Jagielski pTxtNd = rMvPos.nNode.GetNode().GetTxtNode();
79*b1cdbd2cSJim Jagielski if (0 != pTxtNd)
80*b1cdbd2cSJim Jagielski {
81*b1cdbd2cSJim Jagielski pHistory->Add( pTxtNd->GetTxtColl(), nMvDestNode, ND_TEXTNODE );
82*b1cdbd2cSJim Jagielski if ( pTxtNd->GetpSwpHints() )
83*b1cdbd2cSJim Jagielski {
84*b1cdbd2cSJim Jagielski pHistory->CopyAttr( pTxtNd->GetpSwpHints(), nMvDestNode,
85*b1cdbd2cSJim Jagielski 0, pTxtNd->GetTxt().Len(), false );
86*b1cdbd2cSJim Jagielski }
87*b1cdbd2cSJim Jagielski if( pTxtNd->HasSwAttrSet() )
88*b1cdbd2cSJim Jagielski pHistory->CopyFmtAttr( *pTxtNd->GetpSwAttrSet(), nMvDestNode );
89*b1cdbd2cSJim Jagielski }
90*b1cdbd2cSJim Jagielski
91*b1cdbd2cSJim Jagielski
92*b1cdbd2cSJim Jagielski nFtnStt = pHistory->Count();
93*b1cdbd2cSJim Jagielski DelFtn( rRange );
94*b1cdbd2cSJim Jagielski
95*b1cdbd2cSJim Jagielski if( pHistory && !pHistory->Count() )
96*b1cdbd2cSJim Jagielski DELETEZ( pHistory );
97*b1cdbd2cSJim Jagielski }
98*b1cdbd2cSJim Jagielski
99*b1cdbd2cSJim Jagielski
SwUndoMove(SwDoc * pDoc,const SwNodeRange & rRg,const SwNodeIndex & rMvPos)100*b1cdbd2cSJim Jagielski SwUndoMove::SwUndoMove( SwDoc* pDoc, const SwNodeRange& rRg,
101*b1cdbd2cSJim Jagielski const SwNodeIndex& rMvPos )
102*b1cdbd2cSJim Jagielski : SwUndo( UNDO_MOVE ),
103*b1cdbd2cSJim Jagielski nMvDestNode( rMvPos.GetIndex() ),
104*b1cdbd2cSJim Jagielski bMoveRedlines( false )
105*b1cdbd2cSJim Jagielski {
106*b1cdbd2cSJim Jagielski bMoveRange = sal_True;
107*b1cdbd2cSJim Jagielski bJoinNext = bJoinPrev = sal_False;
108*b1cdbd2cSJim Jagielski
109*b1cdbd2cSJim Jagielski nSttCntnt = nEndCntnt = nMvDestCntnt = STRING_MAXLEN;
110*b1cdbd2cSJim Jagielski
111*b1cdbd2cSJim Jagielski nSttNode = rRg.aStart.GetIndex();
112*b1cdbd2cSJim Jagielski nEndNode = rRg.aEnd.GetIndex();
113*b1cdbd2cSJim Jagielski
114*b1cdbd2cSJim Jagielski // DelFtn( rRange );
115*b1cdbd2cSJim Jagielski
116*b1cdbd2cSJim Jagielski // wird aus dem CntntBereich in den Sonderbereich verschoben ?
117*b1cdbd2cSJim Jagielski sal_uLong nCntntStt = pDoc->GetNodes().GetEndOfAutotext().GetIndex();
118*b1cdbd2cSJim Jagielski if( nMvDestNode < nCntntStt && rRg.aStart.GetIndex() > nCntntStt )
119*b1cdbd2cSJim Jagielski {
120*b1cdbd2cSJim Jagielski // loesche alle Fussnoten. Diese sind dort nicht erwuenscht.
121*b1cdbd2cSJim Jagielski SwPosition aPtPos( rRg.aEnd );
122*b1cdbd2cSJim Jagielski SwCntntNode* pCNd = rRg.aEnd.GetNode().GetCntntNode();
123*b1cdbd2cSJim Jagielski if( pCNd )
124*b1cdbd2cSJim Jagielski aPtPos.nContent.Assign( pCNd, pCNd->Len() );
125*b1cdbd2cSJim Jagielski SwPosition aMkPos( rRg.aStart );
126*b1cdbd2cSJim Jagielski if( 0 != ( pCNd = aMkPos.nNode.GetNode().GetCntntNode() ))
127*b1cdbd2cSJim Jagielski aMkPos.nContent.Assign( pCNd, 0 );
128*b1cdbd2cSJim Jagielski
129*b1cdbd2cSJim Jagielski DelCntntIndex( aMkPos, aPtPos, nsDelCntntType::DELCNT_FTN );
130*b1cdbd2cSJim Jagielski
131*b1cdbd2cSJim Jagielski if( pHistory && !pHistory->Count() )
132*b1cdbd2cSJim Jagielski DELETEZ( pHistory );
133*b1cdbd2cSJim Jagielski }
134*b1cdbd2cSJim Jagielski
135*b1cdbd2cSJim Jagielski nFtnStt = 0;
136*b1cdbd2cSJim Jagielski }
137*b1cdbd2cSJim Jagielski
138*b1cdbd2cSJim Jagielski
139*b1cdbd2cSJim Jagielski
SetDestRange(const SwPaM & rRange,const SwPosition & rInsPos,sal_Bool bJoin,sal_Bool bCorrPam)140*b1cdbd2cSJim Jagielski void SwUndoMove::SetDestRange( const SwPaM& rRange,
141*b1cdbd2cSJim Jagielski const SwPosition& rInsPos,
142*b1cdbd2cSJim Jagielski sal_Bool bJoin, sal_Bool bCorrPam )
143*b1cdbd2cSJim Jagielski {
144*b1cdbd2cSJim Jagielski const SwPosition *pStt = rRange.Start(),
145*b1cdbd2cSJim Jagielski *pEnd = rRange.GetPoint() == pStt
146*b1cdbd2cSJim Jagielski ? rRange.GetMark()
147*b1cdbd2cSJim Jagielski : rRange.GetPoint();
148*b1cdbd2cSJim Jagielski
149*b1cdbd2cSJim Jagielski nDestSttNode = pStt->nNode.GetIndex();
150*b1cdbd2cSJim Jagielski nDestSttCntnt = pStt->nContent.GetIndex();
151*b1cdbd2cSJim Jagielski nDestEndNode = pEnd->nNode.GetIndex();
152*b1cdbd2cSJim Jagielski nDestEndCntnt = pEnd->nContent.GetIndex();
153*b1cdbd2cSJim Jagielski
154*b1cdbd2cSJim Jagielski nInsPosNode = rInsPos.nNode.GetIndex();
155*b1cdbd2cSJim Jagielski nInsPosCntnt = rInsPos.nContent.GetIndex();
156*b1cdbd2cSJim Jagielski
157*b1cdbd2cSJim Jagielski if( bCorrPam )
158*b1cdbd2cSJim Jagielski {
159*b1cdbd2cSJim Jagielski nDestSttNode--;
160*b1cdbd2cSJim Jagielski nDestEndNode--;
161*b1cdbd2cSJim Jagielski }
162*b1cdbd2cSJim Jagielski
163*b1cdbd2cSJim Jagielski bJoinNext = nDestSttNode != nDestEndNode &&
164*b1cdbd2cSJim Jagielski pStt->nNode.GetNode().GetTxtNode() &&
165*b1cdbd2cSJim Jagielski pEnd->nNode.GetNode().GetTxtNode();
166*b1cdbd2cSJim Jagielski bJoinPrev = bJoin;
167*b1cdbd2cSJim Jagielski }
168*b1cdbd2cSJim Jagielski
169*b1cdbd2cSJim Jagielski
SetDestRange(const SwNodeIndex & rStt,const SwNodeIndex & rEnd,const SwNodeIndex & rInsPos)170*b1cdbd2cSJim Jagielski void SwUndoMove::SetDestRange( const SwNodeIndex& rStt,
171*b1cdbd2cSJim Jagielski const SwNodeIndex& rEnd,
172*b1cdbd2cSJim Jagielski const SwNodeIndex& rInsPos )
173*b1cdbd2cSJim Jagielski {
174*b1cdbd2cSJim Jagielski nDestSttNode = rStt.GetIndex();
175*b1cdbd2cSJim Jagielski nDestEndNode = rEnd.GetIndex();
176*b1cdbd2cSJim Jagielski if( nDestSttNode > nDestEndNode )
177*b1cdbd2cSJim Jagielski {
178*b1cdbd2cSJim Jagielski nDestSttNode = nDestEndNode;
179*b1cdbd2cSJim Jagielski nDestEndNode = rStt.GetIndex();
180*b1cdbd2cSJim Jagielski }
181*b1cdbd2cSJim Jagielski nInsPosNode = rInsPos.GetIndex();
182*b1cdbd2cSJim Jagielski
183*b1cdbd2cSJim Jagielski nDestSttCntnt = nDestEndCntnt = nInsPosCntnt = STRING_MAXLEN;
184*b1cdbd2cSJim Jagielski }
185*b1cdbd2cSJim Jagielski
186*b1cdbd2cSJim Jagielski
UndoImpl(::sw::UndoRedoContext & rContext)187*b1cdbd2cSJim Jagielski void SwUndoMove::UndoImpl(::sw::UndoRedoContext & rContext)
188*b1cdbd2cSJim Jagielski {
189*b1cdbd2cSJim Jagielski SwDoc *const pDoc = & rContext.GetDoc();
190*b1cdbd2cSJim Jagielski
191*b1cdbd2cSJim Jagielski // Block, damit aus diesem gesprungen werden kann
192*b1cdbd2cSJim Jagielski do {
193*b1cdbd2cSJim Jagielski // erzeuge aus den Werten die Insert-Position und den Bereich
194*b1cdbd2cSJim Jagielski SwNodeIndex aIdx( pDoc->GetNodes(), nDestSttNode );
195*b1cdbd2cSJim Jagielski
196*b1cdbd2cSJim Jagielski if( bMoveRange )
197*b1cdbd2cSJim Jagielski {
198*b1cdbd2cSJim Jagielski // nur ein Move mit SwRange
199*b1cdbd2cSJim Jagielski SwNodeRange aRg( aIdx, aIdx );
200*b1cdbd2cSJim Jagielski aRg.aEnd = nDestEndNode;
201*b1cdbd2cSJim Jagielski aIdx = nInsPosNode;
202*b1cdbd2cSJim Jagielski bool bSuccess = pDoc->MoveNodeRange( aRg, aIdx,
203*b1cdbd2cSJim Jagielski IDocumentContentOperations::DOC_MOVEDEFAULT );
204*b1cdbd2cSJim Jagielski if (!bSuccess)
205*b1cdbd2cSJim Jagielski break;
206*b1cdbd2cSJim Jagielski }
207*b1cdbd2cSJim Jagielski else
208*b1cdbd2cSJim Jagielski {
209*b1cdbd2cSJim Jagielski SwPaM aPam( aIdx.GetNode(), nDestSttCntnt,
210*b1cdbd2cSJim Jagielski *pDoc->GetNodes()[ nDestEndNode ], nDestEndCntnt );
211*b1cdbd2cSJim Jagielski
212*b1cdbd2cSJim Jagielski // #i17764# if redlines are to be moved, we may not remove them before
213*b1cdbd2cSJim Jagielski // pDoc->Move gets a chance to handle them
214*b1cdbd2cSJim Jagielski if( ! bMoveRedlines )
215*b1cdbd2cSJim Jagielski RemoveIdxFromRange( aPam, sal_False );
216*b1cdbd2cSJim Jagielski
217*b1cdbd2cSJim Jagielski SwPosition aPos( *pDoc->GetNodes()[ nInsPosNode] );
218*b1cdbd2cSJim Jagielski SwCntntNode* pCNd = aPos.nNode.GetNode().GetCntntNode();
219*b1cdbd2cSJim Jagielski aPos.nContent.Assign( pCNd, nInsPosCntnt );
220*b1cdbd2cSJim Jagielski
221*b1cdbd2cSJim Jagielski if( pCNd->HasSwAttrSet() )
222*b1cdbd2cSJim Jagielski pCNd->ResetAllAttr();
223*b1cdbd2cSJim Jagielski
224*b1cdbd2cSJim Jagielski if( pCNd->IsTxtNode() && ((SwTxtNode*)pCNd)->GetpSwpHints() )
225*b1cdbd2cSJim Jagielski ((SwTxtNode*)pCNd)->ClearSwpHintsArr( false );
226*b1cdbd2cSJim Jagielski
227*b1cdbd2cSJim Jagielski // an der InsertPos erstmal alle Attribute entfernen,
228*b1cdbd2cSJim Jagielski const bool bSuccess = pDoc->MoveRange( aPam, aPos, (bMoveRedlines)
229*b1cdbd2cSJim Jagielski ? IDocumentContentOperations::DOC_MOVEREDLINES
230*b1cdbd2cSJim Jagielski : IDocumentContentOperations::DOC_MOVEDEFAULT );
231*b1cdbd2cSJim Jagielski if (!bSuccess)
232*b1cdbd2cSJim Jagielski break;
233*b1cdbd2cSJim Jagielski
234*b1cdbd2cSJim Jagielski aPam.Exchange();
235*b1cdbd2cSJim Jagielski aPam.DeleteMark();
236*b1cdbd2cSJim Jagielski // pDoc->ResetAttr( aPam, sal_False );
237*b1cdbd2cSJim Jagielski if( aPam.GetNode()->IsCntntNode() )
238*b1cdbd2cSJim Jagielski aPam.GetNode()->GetCntntNode()->ResetAllAttr();
239*b1cdbd2cSJim Jagielski // der Pam wird jetzt aufgegeben.
240*b1cdbd2cSJim Jagielski }
241*b1cdbd2cSJim Jagielski
242*b1cdbd2cSJim Jagielski SwTxtNode* pTxtNd = aIdx.GetNode().GetTxtNode();
243*b1cdbd2cSJim Jagielski if( bJoinNext )
244*b1cdbd2cSJim Jagielski {
245*b1cdbd2cSJim Jagielski {
246*b1cdbd2cSJim Jagielski RemoveIdxRel( aIdx.GetIndex() + 1, SwPosition( aIdx,
247*b1cdbd2cSJim Jagielski SwIndex( pTxtNd, pTxtNd->GetTxt().Len() ) ) );
248*b1cdbd2cSJim Jagielski }
249*b1cdbd2cSJim Jagielski // sind keine Pams mehr im naechsten TextNode
250*b1cdbd2cSJim Jagielski pTxtNd->JoinNext();
251*b1cdbd2cSJim Jagielski }
252*b1cdbd2cSJim Jagielski
253*b1cdbd2cSJim Jagielski if( bJoinPrev && pTxtNd->CanJoinPrev( &aIdx ) )
254*b1cdbd2cSJim Jagielski {
255*b1cdbd2cSJim Jagielski // ?? sind keine Pams mehr im naechsten TextNode ??
256*b1cdbd2cSJim Jagielski pTxtNd = aIdx.GetNode().GetTxtNode();
257*b1cdbd2cSJim Jagielski {
258*b1cdbd2cSJim Jagielski RemoveIdxRel( aIdx.GetIndex() + 1, SwPosition( aIdx,
259*b1cdbd2cSJim Jagielski SwIndex( pTxtNd, pTxtNd->GetTxt().Len() ) ) );
260*b1cdbd2cSJim Jagielski }
261*b1cdbd2cSJim Jagielski pTxtNd->JoinNext();
262*b1cdbd2cSJim Jagielski }
263*b1cdbd2cSJim Jagielski
264*b1cdbd2cSJim Jagielski } while( sal_False );
265*b1cdbd2cSJim Jagielski
266*b1cdbd2cSJim Jagielski if( pHistory )
267*b1cdbd2cSJim Jagielski {
268*b1cdbd2cSJim Jagielski if( nFtnStt != pHistory->Count() )
269*b1cdbd2cSJim Jagielski pHistory->Rollback( pDoc, nFtnStt );
270*b1cdbd2cSJim Jagielski pHistory->TmpRollback( pDoc, 0 );
271*b1cdbd2cSJim Jagielski pHistory->SetTmpEnd( pHistory->Count() );
272*b1cdbd2cSJim Jagielski }
273*b1cdbd2cSJim Jagielski
274*b1cdbd2cSJim Jagielski // setze noch den Cursor auf den Undo-Bereich
275*b1cdbd2cSJim Jagielski if( !bMoveRange )
276*b1cdbd2cSJim Jagielski {
277*b1cdbd2cSJim Jagielski AddUndoRedoPaM(rContext);
278*b1cdbd2cSJim Jagielski }
279*b1cdbd2cSJim Jagielski }
280*b1cdbd2cSJim Jagielski
281*b1cdbd2cSJim Jagielski
RedoImpl(::sw::UndoRedoContext & rContext)282*b1cdbd2cSJim Jagielski void SwUndoMove::RedoImpl(::sw::UndoRedoContext & rContext)
283*b1cdbd2cSJim Jagielski {
284*b1cdbd2cSJim Jagielski SwPaM *const pPam = & AddUndoRedoPaM(rContext);
285*b1cdbd2cSJim Jagielski SwDoc & rDoc = rContext.GetDoc();
286*b1cdbd2cSJim Jagielski
287*b1cdbd2cSJim Jagielski SwNodes& rNds = rDoc.GetNodes();
288*b1cdbd2cSJim Jagielski SwNodeIndex aIdx( rNds, nMvDestNode );
289*b1cdbd2cSJim Jagielski
290*b1cdbd2cSJim Jagielski if( bMoveRange )
291*b1cdbd2cSJim Jagielski {
292*b1cdbd2cSJim Jagielski // nur ein Move mit SwRange
293*b1cdbd2cSJim Jagielski SwNodeRange aRg( rNds, nSttNode, rNds, nEndNode );
294*b1cdbd2cSJim Jagielski rDoc.MoveNodeRange( aRg, aIdx, (bMoveRedlines)
295*b1cdbd2cSJim Jagielski ? IDocumentContentOperations::DOC_MOVEREDLINES
296*b1cdbd2cSJim Jagielski : IDocumentContentOperations::DOC_MOVEDEFAULT );
297*b1cdbd2cSJim Jagielski }
298*b1cdbd2cSJim Jagielski else
299*b1cdbd2cSJim Jagielski {
300*b1cdbd2cSJim Jagielski SwPaM aPam( *pPam->GetPoint() );
301*b1cdbd2cSJim Jagielski SetPaM( aPam );
302*b1cdbd2cSJim Jagielski SwPosition aMvPos( aIdx, SwIndex( aIdx.GetNode().GetCntntNode(),
303*b1cdbd2cSJim Jagielski nMvDestCntnt ));
304*b1cdbd2cSJim Jagielski
305*b1cdbd2cSJim Jagielski DelFtn( aPam );
306*b1cdbd2cSJim Jagielski RemoveIdxFromRange( aPam, sal_False );
307*b1cdbd2cSJim Jagielski
308*b1cdbd2cSJim Jagielski aIdx = aPam.Start()->nNode;
309*b1cdbd2cSJim Jagielski sal_Bool bJoinTxt = aIdx.GetNode().IsTxtNode();
310*b1cdbd2cSJim Jagielski
311*b1cdbd2cSJim Jagielski aIdx--;
312*b1cdbd2cSJim Jagielski rDoc.MoveRange( aPam, aMvPos,
313*b1cdbd2cSJim Jagielski IDocumentContentOperations::DOC_MOVEDEFAULT );
314*b1cdbd2cSJim Jagielski
315*b1cdbd2cSJim Jagielski if( nSttNode != nEndNode && bJoinTxt )
316*b1cdbd2cSJim Jagielski {
317*b1cdbd2cSJim Jagielski aIdx++;
318*b1cdbd2cSJim Jagielski SwTxtNode * pTxtNd = aIdx.GetNode().GetTxtNode();
319*b1cdbd2cSJim Jagielski if( pTxtNd && pTxtNd->CanJoinNext() )
320*b1cdbd2cSJim Jagielski {
321*b1cdbd2cSJim Jagielski {
322*b1cdbd2cSJim Jagielski RemoveIdxRel( aIdx.GetIndex() + 1, SwPosition( aIdx,
323*b1cdbd2cSJim Jagielski SwIndex( pTxtNd, pTxtNd->GetTxt().Len() ) ) );
324*b1cdbd2cSJim Jagielski }
325*b1cdbd2cSJim Jagielski pTxtNd->JoinNext();
326*b1cdbd2cSJim Jagielski }
327*b1cdbd2cSJim Jagielski }
328*b1cdbd2cSJim Jagielski *pPam->GetPoint() = *aPam.GetPoint();
329*b1cdbd2cSJim Jagielski pPam->SetMark();
330*b1cdbd2cSJim Jagielski *pPam->GetMark() = *aPam.GetMark();
331*b1cdbd2cSJim Jagielski }
332*b1cdbd2cSJim Jagielski }
333*b1cdbd2cSJim Jagielski
334*b1cdbd2cSJim Jagielski
DelFtn(const SwPaM & rRange)335*b1cdbd2cSJim Jagielski void SwUndoMove::DelFtn( const SwPaM& rRange )
336*b1cdbd2cSJim Jagielski {
337*b1cdbd2cSJim Jagielski // wird aus dem CntntBereich in den Sonderbereich verschoben ?
338*b1cdbd2cSJim Jagielski SwDoc* pDoc = rRange.GetDoc();
339*b1cdbd2cSJim Jagielski sal_uLong nCntntStt = pDoc->GetNodes().GetEndOfAutotext().GetIndex();
340*b1cdbd2cSJim Jagielski if( nMvDestNode < nCntntStt &&
341*b1cdbd2cSJim Jagielski rRange.GetPoint()->nNode.GetIndex() >= nCntntStt )
342*b1cdbd2cSJim Jagielski {
343*b1cdbd2cSJim Jagielski // loesche alle Fussnoten. Diese sind dort nicht erwuenscht.
344*b1cdbd2cSJim Jagielski DelCntntIndex( *rRange.GetMark(), *rRange.GetPoint(),
345*b1cdbd2cSJim Jagielski nsDelCntntType::DELCNT_FTN );
346*b1cdbd2cSJim Jagielski
347*b1cdbd2cSJim Jagielski if( pHistory && !pHistory->Count() )
348*b1cdbd2cSJim Jagielski delete pHistory, pHistory = 0;
349*b1cdbd2cSJim Jagielski }
350*b1cdbd2cSJim Jagielski }
351*b1cdbd2cSJim Jagielski
352