1efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file
5efeef26fSAndrew Rist * distributed with this work for additional information
6efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the
8efeef26fSAndrew Rist * "License"); you may not use this file except in compliance
9efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at
10efeef26fSAndrew Rist *
11efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12efeef26fSAndrew Rist *
13efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing,
14efeef26fSAndrew Rist * software distributed under the License is distributed on an
15efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16efeef26fSAndrew Rist * KIND, either express or implied. See the License for the
17efeef26fSAndrew Rist * specific language governing permissions and limitations
18efeef26fSAndrew Rist * under the License.
19efeef26fSAndrew Rist *
20efeef26fSAndrew Rist *************************************************************/
21efeef26fSAndrew Rist
22efeef26fSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include <hintids.hxx>
28cdf0e10cSrcweir #include <fmtanchr.hxx>
29cdf0e10cSrcweir #include <frmfmt.hxx>
30cdf0e10cSrcweir #include <doc.hxx>
31cdf0e10cSrcweir #include <IDocumentUndoRedo.hxx>
32352af06aSMichael Stahl #include <IShellCursorSupplier.hxx>
33cdf0e10cSrcweir #include <docary.hxx>
34cdf0e10cSrcweir #include <swundo.hxx> // fuer die UndoIds
35cdf0e10cSrcweir #include <pam.hxx>
36cdf0e10cSrcweir #include <ndtxt.hxx>
37cdf0e10cSrcweir #include <UndoCore.hxx>
38cdf0e10cSrcweir #include <rolbck.hxx>
39cdf0e10cSrcweir #include <redline.hxx>
40cdf0e10cSrcweir
41cdf0e10cSrcweir
42cdf0e10cSrcweir
SwUndoInserts(SwUndoId nUndoId,const SwPaM & rPam)43cdf0e10cSrcweir SwUndoInserts::SwUndoInserts( SwUndoId nUndoId, const SwPaM& rPam )
44cdf0e10cSrcweir : SwUndo( nUndoId ), SwUndRng( rPam ),
45cdf0e10cSrcweir pTxtFmtColl( 0 ), pLastNdColl(0), pFrmFmts( 0 ), pRedlData( 0 ),
46cdf0e10cSrcweir bSttWasTxtNd( sal_True ), nNdDiff( 0 ), pPos( 0 ), nSetPos( 0 )
47cdf0e10cSrcweir {
48cdf0e10cSrcweir pHistory = new SwHistory;
49cdf0e10cSrcweir SwDoc* pDoc = (SwDoc*)rPam.GetDoc();
50cdf0e10cSrcweir
51cdf0e10cSrcweir SwTxtNode* pTxtNd = rPam.GetPoint()->nNode.GetNode().GetTxtNode();
52cdf0e10cSrcweir if( pTxtNd )
53cdf0e10cSrcweir {
54cdf0e10cSrcweir pTxtFmtColl = pTxtNd->GetTxtColl();
55cdf0e10cSrcweir pHistory->CopyAttr( pTxtNd->GetpSwpHints(), nSttNode,
56cdf0e10cSrcweir 0, pTxtNd->GetTxt().Len(), false );
57cdf0e10cSrcweir if( pTxtNd->HasSwAttrSet() )
58cdf0e10cSrcweir pHistory->CopyFmtAttr( *pTxtNd->GetpSwAttrSet(), nSttNode );
59cdf0e10cSrcweir
60cdf0e10cSrcweir if( !nSttCntnt ) // dann werden Flys mitgenommen !!
61cdf0e10cSrcweir {
62cdf0e10cSrcweir sal_uInt16 nArrLen = pDoc->GetSpzFrmFmts()->Count();
63cdf0e10cSrcweir for( sal_uInt16 n = 0; n < nArrLen; ++n )
64cdf0e10cSrcweir {
65cdf0e10cSrcweir SwFrmFmt* pFmt = (*pDoc->GetSpzFrmFmts())[n];
66cdf0e10cSrcweir SwFmtAnchor const*const pAnchor = &pFmt->GetAnchor();
67cdf0e10cSrcweir const SwPosition* pAPos = pAnchor->GetCntntAnchor();
68cdf0e10cSrcweir if (pAPos &&
69cdf0e10cSrcweir (pAnchor->GetAnchorId() == FLY_AT_PARA) &&
70cdf0e10cSrcweir nSttNode == pAPos->nNode.GetIndex() )
71cdf0e10cSrcweir {
72cdf0e10cSrcweir if( !pFrmFmts )
73cdf0e10cSrcweir pFrmFmts = new SvPtrarr;
74cdf0e10cSrcweir pFrmFmts->Insert( pFmt, pFrmFmts->Count() );
75cdf0e10cSrcweir }
76cdf0e10cSrcweir }
77cdf0e10cSrcweir }
78cdf0e10cSrcweir }
79cdf0e10cSrcweir // Redline beachten
80cdf0e10cSrcweir if( pDoc->IsRedlineOn() )
81cdf0e10cSrcweir {
82cdf0e10cSrcweir pRedlData = new SwRedlineData( nsRedlineType_t::REDLINE_INSERT, pDoc->GetRedlineAuthor() );
83cdf0e10cSrcweir SetRedlineMode( pDoc->GetRedlineMode() );
84cdf0e10cSrcweir }
85cdf0e10cSrcweir }
86cdf0e10cSrcweir
87cdf0e10cSrcweir // setze den Destination-Bereich nach dem Einlesen.
88cdf0e10cSrcweir
SetInsertRange(const SwPaM & rPam,sal_Bool bScanFlys,sal_Bool bSttIsTxtNd)89cdf0e10cSrcweir void SwUndoInserts::SetInsertRange( const SwPaM& rPam, sal_Bool bScanFlys,
90cdf0e10cSrcweir sal_Bool bSttIsTxtNd )
91cdf0e10cSrcweir {
92cdf0e10cSrcweir const SwPosition* pTmpPos = rPam.End();
93cdf0e10cSrcweir nEndNode = pTmpPos->nNode.GetIndex();
94cdf0e10cSrcweir nEndCntnt = pTmpPos->nContent.GetIndex();
95cdf0e10cSrcweir if( rPam.HasMark() )
96cdf0e10cSrcweir {
97cdf0e10cSrcweir if( pTmpPos == rPam.GetPoint() )
98cdf0e10cSrcweir pTmpPos = rPam.GetMark();
99cdf0e10cSrcweir else
100cdf0e10cSrcweir pTmpPos = rPam.GetPoint();
101cdf0e10cSrcweir
102cdf0e10cSrcweir nSttNode = pTmpPos->nNode.GetIndex();
103cdf0e10cSrcweir nSttCntnt = pTmpPos->nContent.GetIndex();
104cdf0e10cSrcweir
105cdf0e10cSrcweir if( !bSttIsTxtNd ) // wird eine Tabellenselektion eingefuegt,
106cdf0e10cSrcweir {
107cdf0e10cSrcweir ++nSttNode; // dann stimmt der CopyPam nicht ganz
108cdf0e10cSrcweir bSttWasTxtNd = sal_False;
109cdf0e10cSrcweir }
110cdf0e10cSrcweir }
111cdf0e10cSrcweir
112cdf0e10cSrcweir if( bScanFlys && !nSttCntnt )
113cdf0e10cSrcweir {
114cdf0e10cSrcweir // dann alle neuen Flys zusammen sammeln !!
115cdf0e10cSrcweir SwDoc* pDoc = (SwDoc*)rPam.GetDoc();
116cdf0e10cSrcweir sal_uInt16 nFndPos, nArrLen = pDoc->GetSpzFrmFmts()->Count();
117cdf0e10cSrcweir for( sal_uInt16 n = 0; n < nArrLen; ++n )
118cdf0e10cSrcweir {
119cdf0e10cSrcweir SwFrmFmt* pFmt = (*pDoc->GetSpzFrmFmts())[n];
120cdf0e10cSrcweir SwFmtAnchor const*const pAnchor = &pFmt->GetAnchor();
121cdf0e10cSrcweir SwPosition const*const pAPos = pAnchor->GetCntntAnchor();
122cdf0e10cSrcweir if (pAPos &&
123cdf0e10cSrcweir (pAnchor->GetAnchorId() == FLY_AT_PARA) &&
124cdf0e10cSrcweir nSttNode == pAPos->nNode.GetIndex() )
125cdf0e10cSrcweir {
126cdf0e10cSrcweir if( !pFrmFmts ||
127cdf0e10cSrcweir USHRT_MAX == ( nFndPos = pFrmFmts->GetPos( pFmt ) ) )
128cdf0e10cSrcweir {
129cdf0e10cSrcweir ::boost::shared_ptr<SwUndoInsLayFmt> const pFlyUndo(
130cdf0e10cSrcweir new SwUndoInsLayFmt(pFmt, 0, 0));
131cdf0e10cSrcweir m_FlyUndos.push_back(pFlyUndo);
132cdf0e10cSrcweir }
133cdf0e10cSrcweir else
134cdf0e10cSrcweir pFrmFmts->Remove( nFndPos );
135cdf0e10cSrcweir }
136cdf0e10cSrcweir }
137cdf0e10cSrcweir delete pFrmFmts, pFrmFmts = 0;
138cdf0e10cSrcweir }
139cdf0e10cSrcweir }
140cdf0e10cSrcweir
141cdf0e10cSrcweir
~SwUndoInserts()142cdf0e10cSrcweir SwUndoInserts::~SwUndoInserts()
143cdf0e10cSrcweir {
144cdf0e10cSrcweir if( pPos ) // loesche noch den Bereich aus dem UndoNodes Array
145cdf0e10cSrcweir {
146cdf0e10cSrcweir // Insert speichert den Inhalt in der IconSection
147cdf0e10cSrcweir SwNodes& rUNds = pPos->nNode.GetNodes();
148cdf0e10cSrcweir if( pPos->nContent.GetIndex() ) // nicht den gesamten Node loeschen
149cdf0e10cSrcweir {
150cdf0e10cSrcweir SwTxtNode* pTxtNd = pPos->nNode.GetNode().GetTxtNode();
151cdf0e10cSrcweir ASSERT( pTxtNd, "kein TextNode, aus dem geloescht werden soll" );
152cdf0e10cSrcweir if( pTxtNd ) // Robust
153cdf0e10cSrcweir {
154cdf0e10cSrcweir pTxtNd->EraseText( pPos->nContent );
155cdf0e10cSrcweir }
156cdf0e10cSrcweir pPos->nNode++;
157cdf0e10cSrcweir }
158cdf0e10cSrcweir pPos->nContent.Assign( 0, 0 );
159cdf0e10cSrcweir rUNds.Delete( pPos->nNode, rUNds.GetEndOfExtras().GetIndex() -
160cdf0e10cSrcweir pPos->nNode.GetIndex() );
161cdf0e10cSrcweir delete pPos;
162cdf0e10cSrcweir }
163cdf0e10cSrcweir delete pFrmFmts;
164cdf0e10cSrcweir delete pRedlData;
165cdf0e10cSrcweir }
166cdf0e10cSrcweir
167cdf0e10cSrcweir
UndoImpl(::sw::UndoRedoContext & rContext)168cdf0e10cSrcweir void SwUndoInserts::UndoImpl(::sw::UndoRedoContext & rContext)
169cdf0e10cSrcweir {
170cdf0e10cSrcweir SwDoc *const pDoc = & rContext.GetDoc();
171cdf0e10cSrcweir SwPaM *const pPam = & AddUndoRedoPaM(rContext);
172cdf0e10cSrcweir
173cdf0e10cSrcweir if( IDocumentRedlineAccess::IsRedlineOn( GetRedlineMode() ))
174cdf0e10cSrcweir pDoc->DeleteRedline( *pPam, true, USHRT_MAX );
175cdf0e10cSrcweir
176cdf0e10cSrcweir // sind an Point/Mark 2 unterschiedliche TextNodes, dann muss ein
177cdf0e10cSrcweir // JoinNext ausgefuehrt werden.
178cdf0e10cSrcweir sal_Bool bJoinNext = nSttNode != nEndNode &&
179cdf0e10cSrcweir pPam->GetMark()->nNode.GetNode().GetTxtNode() &&
180cdf0e10cSrcweir pPam->GetPoint()->nNode.GetNode().GetTxtNode();
181cdf0e10cSrcweir
182cdf0e10cSrcweir
183cdf0e10cSrcweir // gibts ueberhaupt Inhalt ? (laden von Zeichenvorlagen hat kein Inhalt!)
184cdf0e10cSrcweir if( nSttNode != nEndNode || nSttCntnt != nEndCntnt )
185cdf0e10cSrcweir {
186cdf0e10cSrcweir if( nSttNode != nEndNode )
187cdf0e10cSrcweir {
188cdf0e10cSrcweir SwTxtNode* pTxtNd = pDoc->GetNodes()[ nEndNode ]->GetTxtNode();
189cdf0e10cSrcweir if( pTxtNd && pTxtNd->GetTxt().Len() == nEndCntnt )
190cdf0e10cSrcweir pLastNdColl = pTxtNd->GetTxtColl();
191cdf0e10cSrcweir }
192cdf0e10cSrcweir
193cdf0e10cSrcweir RemoveIdxFromRange( *pPam, sal_False );
194cdf0e10cSrcweir SetPaM(*pPam);
195cdf0e10cSrcweir
196cdf0e10cSrcweir // sind Fussnoten oder CntntFlyFrames im Text ??
197cdf0e10cSrcweir nSetPos = pHistory->Count();
198cdf0e10cSrcweir nNdDiff = pPam->GetMark()->nNode.GetIndex();
199cdf0e10cSrcweir DelCntntIndex( *pPam->GetMark(), *pPam->GetPoint() );
200cdf0e10cSrcweir nNdDiff -= pPam->GetMark()->nNode.GetIndex();
201cdf0e10cSrcweir
202cdf0e10cSrcweir if( *pPam->GetPoint() != *pPam->GetMark() )
203cdf0e10cSrcweir {
204cdf0e10cSrcweir pPos = new SwPosition( *pPam->GetPoint() );
205cdf0e10cSrcweir MoveToUndoNds( *pPam, &pPos->nNode, &pPos->nContent );
206cdf0e10cSrcweir
207cdf0e10cSrcweir if( !bSttWasTxtNd )
208cdf0e10cSrcweir pPam->Move( fnMoveBackward, fnGoCntnt );
209cdf0e10cSrcweir }
210cdf0e10cSrcweir }
211cdf0e10cSrcweir
212cdf0e10cSrcweir if (m_FlyUndos.size())
213cdf0e10cSrcweir {
214cdf0e10cSrcweir sal_uLong nTmp = pPam->GetPoint()->nNode.GetIndex();
215cdf0e10cSrcweir for (size_t n = m_FlyUndos.size(); 0 < n; --n)
216cdf0e10cSrcweir {
217cdf0e10cSrcweir m_FlyUndos[ n-1 ]->UndoImpl(rContext);
218cdf0e10cSrcweir }
219cdf0e10cSrcweir nNdDiff += nTmp - pPam->GetPoint()->nNode.GetIndex();
220cdf0e10cSrcweir }
221cdf0e10cSrcweir
2224d322ebcSOliver-Rainer Wittmann SwNodeIndex& rIdx = pPam->GetPoint()->nNode;
2234d322ebcSOliver-Rainer Wittmann SwTxtNode* pTxtNode = rIdx.GetNode().GetTxtNode();
2244d322ebcSOliver-Rainer Wittmann if( pTxtNode )
2254d322ebcSOliver-Rainer Wittmann {
2264d322ebcSOliver-Rainer Wittmann if( !pTxtFmtColl ) // falls 0, dann war hier auch kein TextNode,
2274d322ebcSOliver-Rainer Wittmann { // dann muss dieser geloescht werden,
2284d322ebcSOliver-Rainer Wittmann SwNodeIndex aDelIdx( rIdx );
2294d322ebcSOliver-Rainer Wittmann rIdx++;
2304d322ebcSOliver-Rainer Wittmann SwCntntNode* pCNd = rIdx.GetNode().GetCntntNode();
2314d322ebcSOliver-Rainer Wittmann xub_StrLen nCnt = 0; if( pCNd ) nCnt = pCNd->Len();
2324d322ebcSOliver-Rainer Wittmann pPam->GetPoint()->nContent.Assign( pCNd, nCnt );
2334d322ebcSOliver-Rainer Wittmann pPam->SetMark();
2344d322ebcSOliver-Rainer Wittmann pPam->DeleteMark();
2354d322ebcSOliver-Rainer Wittmann
2364d322ebcSOliver-Rainer Wittmann RemoveIdxRel( aDelIdx.GetIndex(), *pPam->GetPoint() );
2374d322ebcSOliver-Rainer Wittmann
2384d322ebcSOliver-Rainer Wittmann pDoc->GetNodes().Delete( aDelIdx, 1 );
2394d322ebcSOliver-Rainer Wittmann }
2404d322ebcSOliver-Rainer Wittmann else
2414d322ebcSOliver-Rainer Wittmann {
2424d322ebcSOliver-Rainer Wittmann if( bJoinNext && pTxtNode->CanJoinNext())
2434d322ebcSOliver-Rainer Wittmann {
2444d322ebcSOliver-Rainer Wittmann {
2454d322ebcSOliver-Rainer Wittmann RemoveIdxRel( rIdx.GetIndex()+1, SwPosition( rIdx,
2464d322ebcSOliver-Rainer Wittmann SwIndex( pTxtNode, pTxtNode->GetTxt().Len() )));
2474d322ebcSOliver-Rainer Wittmann }
2484d322ebcSOliver-Rainer Wittmann pTxtNode->JoinNext();
2494d322ebcSOliver-Rainer Wittmann }
250cdf0e10cSrcweir // reset all text attributes in the paragraph!
251*69a74367SOliver-Rainer Wittmann pTxtNode->RstTxtAttr( SwIndex(pTxtNode, 0), pTxtNode->Len(), 0, 0, true );
252cdf0e10cSrcweir
2534d322ebcSOliver-Rainer Wittmann // setze alle Attribute im Node zurueck
254cdf0e10cSrcweir pTxtNode->ResetAllAttr();
255cdf0e10cSrcweir
2564d322ebcSOliver-Rainer Wittmann if( USHRT_MAX != pDoc->GetTxtFmtColls()->GetPos( pTxtFmtColl ))
2574d322ebcSOliver-Rainer Wittmann pTxtFmtColl = (SwTxtFmtColl*)pTxtNode->ChgFmtColl( pTxtFmtColl );
258cdf0e10cSrcweir
2594d322ebcSOliver-Rainer Wittmann pHistory->SetTmpEnd( nSetPos );
260cdf0e10cSrcweir pHistory->TmpRollback( pDoc, 0, false );
261cdf0e10cSrcweir }
262cdf0e10cSrcweir }
263cdf0e10cSrcweir }
264cdf0e10cSrcweir
RedoImpl(::sw::UndoRedoContext & rContext)265cdf0e10cSrcweir void SwUndoInserts::RedoImpl(::sw::UndoRedoContext & rContext)
266cdf0e10cSrcweir {
267cdf0e10cSrcweir // setze noch den Cursor auf den Redo-Bereich
268352af06aSMichael Stahl SwPaM *const pPam(& rContext.GetCursorSupplier().CreateNewShellCursor());
269cdf0e10cSrcweir SwDoc* pDoc = pPam->GetDoc();
270cdf0e10cSrcweir pPam->DeleteMark();
271cdf0e10cSrcweir pPam->GetPoint()->nNode = nSttNode - nNdDiff;
272cdf0e10cSrcweir SwCntntNode* pCNd = pPam->GetCntntNode();
273cdf0e10cSrcweir pPam->GetPoint()->nContent.Assign( pCNd, nSttCntnt );
274cdf0e10cSrcweir
275cdf0e10cSrcweir SwTxtFmtColl* pSavTxtFmtColl = pTxtFmtColl;
276cdf0e10cSrcweir if( pTxtFmtColl && pCNd && pCNd->IsTxtNode() )
277cdf0e10cSrcweir pSavTxtFmtColl = ((SwTxtNode*)pCNd)->GetTxtColl();
278cdf0e10cSrcweir
279cdf0e10cSrcweir pHistory->SetTmpEnd( nSetPos );
280cdf0e10cSrcweir
281cdf0e10cSrcweir // alte Anfangs-Position fuers Rollback zurueckholen
282cdf0e10cSrcweir if( ( nSttNode != nEndNode || nSttCntnt != nEndCntnt ) && pPos )
283cdf0e10cSrcweir {
284cdf0e10cSrcweir sal_Bool bMvBkwrd = MovePtBackward( *pPam );
285cdf0e10cSrcweir
286cdf0e10cSrcweir // Inhalt wieder einfuegen. (erst pPos abmelden !!)
287cdf0e10cSrcweir sal_uLong nMvNd = pPos->nNode.GetIndex();
288cdf0e10cSrcweir xub_StrLen nMvCnt = pPos->nContent.GetIndex();
289cdf0e10cSrcweir DELETEZ( pPos );
290cdf0e10cSrcweir MoveFromUndoNds( *pDoc, nMvNd, nMvCnt, *pPam->GetMark() );
291cdf0e10cSrcweir if( bSttWasTxtNd )
292cdf0e10cSrcweir MovePtForward( *pPam, bMvBkwrd );
293cdf0e10cSrcweir pPam->Exchange();
294cdf0e10cSrcweir }
295cdf0e10cSrcweir
296cdf0e10cSrcweir if( USHRT_MAX != pDoc->GetTxtFmtColls()->GetPos( pTxtFmtColl ))
297cdf0e10cSrcweir {
298cdf0e10cSrcweir SwTxtNode* pTxtNd = pPam->GetMark()->nNode.GetNode().GetTxtNode();
299cdf0e10cSrcweir if( pTxtNd )
300cdf0e10cSrcweir pTxtNd->ChgFmtColl( pTxtFmtColl );
301cdf0e10cSrcweir }
302cdf0e10cSrcweir pTxtFmtColl = pSavTxtFmtColl;
303cdf0e10cSrcweir
304cdf0e10cSrcweir if( pLastNdColl && USHRT_MAX != pDoc->GetTxtFmtColls()->GetPos( pLastNdColl ) &&
305cdf0e10cSrcweir pPam->GetPoint()->nNode != pPam->GetMark()->nNode )
306cdf0e10cSrcweir {
307cdf0e10cSrcweir SwTxtNode* pTxtNd = pPam->GetPoint()->nNode.GetNode().GetTxtNode();
308cdf0e10cSrcweir if( pTxtNd )
309cdf0e10cSrcweir pTxtNd->ChgFmtColl( pLastNdColl );
310cdf0e10cSrcweir }
311cdf0e10cSrcweir
312cdf0e10cSrcweir for (size_t n = m_FlyUndos.size(); 0 < n; --n)
313cdf0e10cSrcweir {
314cdf0e10cSrcweir m_FlyUndos[ n-1 ]->RedoImpl(rContext);
315cdf0e10cSrcweir }
316cdf0e10cSrcweir
317cdf0e10cSrcweir pHistory->Rollback( pDoc, nSetPos );
318cdf0e10cSrcweir
319cdf0e10cSrcweir if( pRedlData && IDocumentRedlineAccess::IsRedlineOn( GetRedlineMode() ))
320cdf0e10cSrcweir {
321cdf0e10cSrcweir RedlineMode_t eOld = pDoc->GetRedlineMode();
322cdf0e10cSrcweir pDoc->SetRedlineMode_intern((RedlineMode_t)( eOld & ~nsRedlineMode_t::REDLINE_IGNORE ));
323cdf0e10cSrcweir pDoc->AppendRedline( new SwRedline( *pRedlData, *pPam ), true);
324cdf0e10cSrcweir pDoc->SetRedlineMode_intern( eOld );
325cdf0e10cSrcweir }
326cdf0e10cSrcweir else if( !( nsRedlineMode_t::REDLINE_IGNORE & GetRedlineMode() ) &&
327cdf0e10cSrcweir pDoc->GetRedlineTbl().Count() )
328cdf0e10cSrcweir pDoc->SplitRedline( *pPam );
329cdf0e10cSrcweir }
330cdf0e10cSrcweir
RepeatImpl(::sw::RepeatContext & rContext)331cdf0e10cSrcweir void SwUndoInserts::RepeatImpl(::sw::RepeatContext & rContext)
332cdf0e10cSrcweir {
333cdf0e10cSrcweir SwPaM aPam( rContext.GetDoc().GetNodes().GetEndOfContent() );
334cdf0e10cSrcweir SetPaM( aPam );
335cdf0e10cSrcweir SwPaM & rRepeatPaM( rContext.GetRepeatPaM() );
336cdf0e10cSrcweir aPam.GetDoc()->CopyRange( aPam, *rRepeatPaM.GetPoint(), false );
337cdf0e10cSrcweir }
338cdf0e10cSrcweir
339cdf0e10cSrcweir
340cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////
341cdf0e10cSrcweir
SwUndoInsDoc(const SwPaM & rPam)342cdf0e10cSrcweir SwUndoInsDoc::SwUndoInsDoc( const SwPaM& rPam )
343cdf0e10cSrcweir : SwUndoInserts( UNDO_INSDOKUMENT, rPam )
344cdf0e10cSrcweir {
345cdf0e10cSrcweir }
346cdf0e10cSrcweir
SwUndoCpyDoc(const SwPaM & rPam)347cdf0e10cSrcweir SwUndoCpyDoc::SwUndoCpyDoc( const SwPaM& rPam )
348cdf0e10cSrcweir : SwUndoInserts( UNDO_COPY, rPam )
349cdf0e10cSrcweir {
350cdf0e10cSrcweir }
351cdf0e10cSrcweir
352