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
28cdf0e10cSrcweir #define _ZFORLIST_DECLARE_TABLE
29cdf0e10cSrcweir #define _SVSTDARR_USHORTSSORT
30cdf0e10cSrcweir #define _SVSTDARR_USHORTS
31cdf0e10cSrcweir #include <hintids.hxx>
32cdf0e10cSrcweir #include <rtl/logfile.hxx>
33cdf0e10cSrcweir #include <svl/itemiter.hxx>
34cdf0e10cSrcweir #include <sfx2/app.hxx>
35cdf0e10cSrcweir #include <editeng/tstpitem.hxx>
36cdf0e10cSrcweir #include <editeng/eeitem.hxx>
37cdf0e10cSrcweir #include <editeng/langitem.hxx>
38cdf0e10cSrcweir #include <editeng/lrspitem.hxx>
39cdf0e10cSrcweir #include <editeng/brkitem.hxx>
40cdf0e10cSrcweir #include <svl/whiter.hxx>
41cdf0e10cSrcweir #ifndef _ZFORLIST_HXX //autogen
42cdf0e10cSrcweir #define _ZFORLIST_DECLARE_TABLE
43cdf0e10cSrcweir #include <svl/zforlist.hxx>
44cdf0e10cSrcweir #endif
45cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
46cdf0e10cSrcweir #include <unotools/misccfg.hxx>
47cdf0e10cSrcweir #include <com/sun/star/i18n/WordType.hdl>
48cdf0e10cSrcweir #include <fmtpdsc.hxx>
49cdf0e10cSrcweir #include <fmthdft.hxx>
50cdf0e10cSrcweir #include <fmtcntnt.hxx>
51cdf0e10cSrcweir #include <frmatr.hxx>
52cdf0e10cSrcweir #include <doc.hxx>
53cdf0e10cSrcweir #include <IDocumentUndoRedo.hxx>
54cdf0e10cSrcweir #include <rootfrm.hxx>
55cdf0e10cSrcweir #include <pagefrm.hxx>
56cdf0e10cSrcweir #include <hints.hxx> // fuer SwHyphenBug (in SetDefault)
57cdf0e10cSrcweir #include <ndtxt.hxx>
58cdf0e10cSrcweir #include <pam.hxx>
59cdf0e10cSrcweir #include <UndoCore.hxx>
60cdf0e10cSrcweir #include <UndoAttribute.hxx>
61cdf0e10cSrcweir #include <ndgrf.hxx>
62cdf0e10cSrcweir #include <pagedesc.hxx> // Fuer Sonderbehandlung in InsFrmFmt
63cdf0e10cSrcweir #include <rolbck.hxx> // Undo-Attr
64cdf0e10cSrcweir #include <mvsave.hxx> // servieren: Veraenderungen erkennen
65cdf0e10cSrcweir #include <txatbase.hxx>
66cdf0e10cSrcweir #include <swtable.hxx>
67cdf0e10cSrcweir #include <swtblfmt.hxx>
68cdf0e10cSrcweir #include <charfmt.hxx>
69cdf0e10cSrcweir #include <docary.hxx>
70cdf0e10cSrcweir #include <paratr.hxx>
71cdf0e10cSrcweir #include <redline.hxx>
72cdf0e10cSrcweir #include <reffld.hxx>
73cdf0e10cSrcweir #include <txtinet.hxx>
74cdf0e10cSrcweir #include <fmtinfmt.hxx>
75cdf0e10cSrcweir #include <breakit.hxx>
76cdf0e10cSrcweir #include <SwStyleNameMapper.hxx>
77cdf0e10cSrcweir #include <fmtautofmt.hxx>
78cdf0e10cSrcweir #include <istyleaccess.hxx>
79cdf0e10cSrcweir #include <SwUndoFmt.hxx>
80cdf0e10cSrcweir #include <docsh.hxx>
81cdf0e10cSrcweir
82cdf0e10cSrcweir using namespace ::com::sun::star::i18n;
83cdf0e10cSrcweir using namespace ::com::sun::star::lang;
84cdf0e10cSrcweir using namespace ::com::sun::star::uno;
85cdf0e10cSrcweir
SV_IMPL_PTRARR(SwFrmFmts,SwFrmFmtPtr)86cdf0e10cSrcweir SV_IMPL_PTRARR(SwFrmFmts,SwFrmFmtPtr)
87cdf0e10cSrcweir SV_IMPL_PTRARR(SwCharFmts,SwCharFmtPtr)
88cdf0e10cSrcweir
89cdf0e10cSrcweir //Spezifische Frameformate (Rahmen)
90cdf0e10cSrcweir SV_IMPL_PTRARR(SwSpzFrmFmts,SwFrmFmtPtr)
91cdf0e10cSrcweir
92cdf0e10cSrcweir /*
93cdf0e10cSrcweir * interne Funktionen
94cdf0e10cSrcweir */
95cdf0e10cSrcweir
96cdf0e10cSrcweir sal_Bool SetTxtFmtCollNext( const SwTxtFmtCollPtr& rpTxtColl, void* pArgs )
97cdf0e10cSrcweir {
98cdf0e10cSrcweir SwTxtFmtColl *pDel = (SwTxtFmtColl*) pArgs;
99cdf0e10cSrcweir if ( &rpTxtColl->GetNextTxtFmtColl() == pDel )
100cdf0e10cSrcweir {
101cdf0e10cSrcweir rpTxtColl->SetNextTxtFmtColl( *rpTxtColl );
102cdf0e10cSrcweir }
103cdf0e10cSrcweir return sal_True;
104cdf0e10cSrcweir }
105cdf0e10cSrcweir
106cdf0e10cSrcweir /*
107cdf0e10cSrcweir * Zuruecksetzen der harten Formatierung fuer Text
108cdf0e10cSrcweir */
109cdf0e10cSrcweir
110cdf0e10cSrcweir // Uebergabeparameter fuer _Rst und lcl_SetTxtFmtColl
111cdf0e10cSrcweir struct ParaRstFmt
112cdf0e10cSrcweir {
113cdf0e10cSrcweir SwFmtColl* pFmtColl;
114cdf0e10cSrcweir SwHistory* pHistory;
115cdf0e10cSrcweir const SwPosition *pSttNd, *pEndNd;
116cdf0e10cSrcweir const SfxItemSet* pDelSet;
117cdf0e10cSrcweir sal_uInt16 nWhich;
118cdf0e10cSrcweir bool bReset;
119cdf0e10cSrcweir bool bResetListAttrs;
120cdf0e10cSrcweir bool bResetAll;
121cdf0e10cSrcweir bool bInclRefToxMark;
122cdf0e10cSrcweir
ParaRstFmtParaRstFmt123cdf0e10cSrcweir ParaRstFmt( const SwPosition* pStt, const SwPosition* pEnd,
124cdf0e10cSrcweir SwHistory* pHst, sal_uInt16 nWhch = 0, const SfxItemSet* pSet = 0 )
125cdf0e10cSrcweir : pFmtColl(0),
126cdf0e10cSrcweir pHistory(pHst),
127cdf0e10cSrcweir pSttNd(pStt),
128cdf0e10cSrcweir pEndNd(pEnd),
129cdf0e10cSrcweir pDelSet(pSet),
130cdf0e10cSrcweir nWhich(nWhch),
131cdf0e10cSrcweir bReset( false ),
132cdf0e10cSrcweir bResetListAttrs( false ),
133cdf0e10cSrcweir bResetAll( true ),
134*808c4840SOliver-Rainer Wittmann bInclRefToxMark( false )
135*808c4840SOliver-Rainer Wittmann {
136*808c4840SOliver-Rainer Wittmann }
137cdf0e10cSrcweir
ParaRstFmtParaRstFmt138cdf0e10cSrcweir ParaRstFmt( SwHistory* pHst )
139cdf0e10cSrcweir : pFmtColl(0),
140cdf0e10cSrcweir pHistory(pHst),
141cdf0e10cSrcweir pSttNd(0),
142cdf0e10cSrcweir pEndNd(0),
143cdf0e10cSrcweir pDelSet(0),
144cdf0e10cSrcweir nWhich(0),
145cdf0e10cSrcweir bReset( false ),
146cdf0e10cSrcweir bResetListAttrs( false ),
147cdf0e10cSrcweir bResetAll( true ),
148*808c4840SOliver-Rainer Wittmann bInclRefToxMark( false )
149*808c4840SOliver-Rainer Wittmann {
150*808c4840SOliver-Rainer Wittmann }
151cdf0e10cSrcweir };
152cdf0e10cSrcweir
153cdf0e10cSrcweir /* in pArgs steht die ChrFmtTablle vom Dokument
154cdf0e10cSrcweir * (wird bei Selectionen am Start/Ende und bei keiner SSelection benoetigt)
155cdf0e10cSrcweir */
156cdf0e10cSrcweir
lcl_RstTxtAttr(const SwNodePtr & rpNd,void * pArgs)157cdf0e10cSrcweir sal_Bool lcl_RstTxtAttr( const SwNodePtr& rpNd, void* pArgs )
158cdf0e10cSrcweir {
15969a74367SOliver-Rainer Wittmann ParaRstFmt* pPara = (ParaRstFmt*)pArgs;
16069a74367SOliver-Rainer Wittmann SwTxtNode * pTxtNode = (SwTxtNode*)rpNd->GetTxtNode();
16169a74367SOliver-Rainer Wittmann if( pTxtNode && pTxtNode->GetpSwpHints() )
16269a74367SOliver-Rainer Wittmann {
16369a74367SOliver-Rainer Wittmann SwIndex aSt( pTxtNode, 0 );
16469a74367SOliver-Rainer Wittmann sal_uInt16 nEnd = pTxtNode->Len();
165cdf0e10cSrcweir
16669a74367SOliver-Rainer Wittmann if( &pPara->pSttNd->nNode.GetNode() == pTxtNode &&
16769a74367SOliver-Rainer Wittmann pPara->pSttNd->nContent.GetIndex() )
16869a74367SOliver-Rainer Wittmann aSt = pPara->pSttNd->nContent.GetIndex();
169cdf0e10cSrcweir
17069a74367SOliver-Rainer Wittmann if( &pPara->pEndNd->nNode.GetNode() == rpNd )
17169a74367SOliver-Rainer Wittmann nEnd = pPara->pEndNd->nContent.GetIndex();
172cdf0e10cSrcweir
17369a74367SOliver-Rainer Wittmann if( pPara->pHistory )
17469a74367SOliver-Rainer Wittmann {
17569a74367SOliver-Rainer Wittmann // fuers Undo alle Attribute sichern
176cdf0e10cSrcweir SwRegHistory aRHst( *pTxtNode, pPara->pHistory );
17769a74367SOliver-Rainer Wittmann pTxtNode->GetpSwpHints()->Register( &aRHst );
17869a74367SOliver-Rainer Wittmann pTxtNode->RstTxtAttr( aSt, nEnd - aSt.GetIndex(), pPara->nWhich,
17969a74367SOliver-Rainer Wittmann pPara->pDelSet, pPara->bInclRefToxMark );
18069a74367SOliver-Rainer Wittmann if( pTxtNode->GetpSwpHints() )
18169a74367SOliver-Rainer Wittmann pTxtNode->GetpSwpHints()->DeRegister();
18269a74367SOliver-Rainer Wittmann }
18369a74367SOliver-Rainer Wittmann else
18469a74367SOliver-Rainer Wittmann pTxtNode->RstTxtAttr( aSt, nEnd - aSt.GetIndex(), pPara->nWhich,
18569a74367SOliver-Rainer Wittmann pPara->pDelSet, pPara->bInclRefToxMark );
18669a74367SOliver-Rainer Wittmann }
18769a74367SOliver-Rainer Wittmann return sal_True;
188cdf0e10cSrcweir }
189cdf0e10cSrcweir
lcl_RstAttr(const SwNodePtr & rpNd,void * pArgs)190cdf0e10cSrcweir sal_Bool lcl_RstAttr( const SwNodePtr& rpNd, void* pArgs )
191cdf0e10cSrcweir {
192*808c4840SOliver-Rainer Wittmann const ParaRstFmt* pPara = (ParaRstFmt*) pArgs;
193*808c4840SOliver-Rainer Wittmann SwCntntNode* pNode = (SwCntntNode*) rpNd->GetCntntNode();
194cdf0e10cSrcweir if( pNode && pNode->HasSwAttrSet() )
195cdf0e10cSrcweir {
196cdf0e10cSrcweir const sal_Bool bLocked = pNode->IsModifyLocked();
197cdf0e10cSrcweir pNode->LockModify();
198cdf0e10cSrcweir
199cdf0e10cSrcweir SwDoc* pDoc = pNode->GetDoc();
200cdf0e10cSrcweir
201*808c4840SOliver-Rainer Wittmann SfxItemSet aSavedAttrsSet(
202*808c4840SOliver-Rainer Wittmann pDoc->GetAttrPool(),
203*808c4840SOliver-Rainer Wittmann RES_PAGEDESC, RES_BREAK,
204*808c4840SOliver-Rainer Wittmann RES_PARATR_NUMRULE, RES_PARATR_NUMRULE,
205*808c4840SOliver-Rainer Wittmann RES_PARATR_LIST_BEGIN, RES_PARATR_LIST_END - 1,
206*808c4840SOliver-Rainer Wittmann 0 );
207*808c4840SOliver-Rainer Wittmann const SfxItemSet* pAttrSetOfNode = pNode->GetpSwAttrSet();
208*808c4840SOliver-Rainer Wittmann
209cdf0e10cSrcweir SvUShorts aClearWhichIds;
210cdf0e10cSrcweir // restoring all paragraph list attributes
211cdf0e10cSrcweir {
212cdf0e10cSrcweir SfxItemSet aListAttrSet( pDoc->GetAttrPool(),
213cdf0e10cSrcweir RES_PARATR_LIST_BEGIN, RES_PARATR_LIST_END - 1,
214cdf0e10cSrcweir 0 );
215*808c4840SOliver-Rainer Wittmann aListAttrSet.Set( *pAttrSetOfNode );
216cdf0e10cSrcweir if ( aListAttrSet.Count() )
217cdf0e10cSrcweir {
218*808c4840SOliver-Rainer Wittmann aSavedAttrsSet.Put( aListAttrSet );
219cdf0e10cSrcweir SfxItemIter aIter( aListAttrSet );
220cdf0e10cSrcweir const SfxPoolItem* pItem = aIter.GetCurItem();
221cdf0e10cSrcweir while( pItem )
222cdf0e10cSrcweir {
223cdf0e10cSrcweir aClearWhichIds.Insert( pItem->Which(), aClearWhichIds.Count() );
224cdf0e10cSrcweir pItem = aIter.NextItem();
225cdf0e10cSrcweir }
226cdf0e10cSrcweir }
227cdf0e10cSrcweir }
228cdf0e10cSrcweir
229*808c4840SOliver-Rainer Wittmann const SfxPoolItem* pItem;
230*808c4840SOliver-Rainer Wittmann sal_uInt16 __READONLY_DATA aSavIds[3] =
231*808c4840SOliver-Rainer Wittmann { RES_PAGEDESC, RES_BREAK, RES_PARATR_NUMRULE };
232*808c4840SOliver-Rainer Wittmann for ( sal_uInt16 n = 0; n < 3; ++n )
233cdf0e10cSrcweir {
234*808c4840SOliver-Rainer Wittmann if ( SFX_ITEM_SET == pAttrSetOfNode->GetItemState( aSavIds[n], sal_False, &pItem ) )
235*808c4840SOliver-Rainer Wittmann {
236cdf0e10cSrcweir bool bSave = false;
237*808c4840SOliver-Rainer Wittmann switch (aSavIds[n])
238*808c4840SOliver-Rainer Wittmann {
239*808c4840SOliver-Rainer Wittmann case RES_PAGEDESC:
240*808c4840SOliver-Rainer Wittmann bSave = 0 != ( (SwFmtPageDesc*) pItem )->GetPageDesc();
241cdf0e10cSrcweir break;
242*808c4840SOliver-Rainer Wittmann case RES_BREAK:
243*808c4840SOliver-Rainer Wittmann bSave = SVX_BREAK_NONE != ( (SvxFmtBreakItem*) pItem )->GetBreak();
244cdf0e10cSrcweir break;
245*808c4840SOliver-Rainer Wittmann case RES_PARATR_NUMRULE:
246*808c4840SOliver-Rainer Wittmann bSave = 0 != ( (SwNumRuleItem*) pItem )->GetValue().Len();
247cdf0e10cSrcweir break;
248*808c4840SOliver-Rainer Wittmann }
249*808c4840SOliver-Rainer Wittmann if ( bSave )
250*808c4840SOliver-Rainer Wittmann {
251*808c4840SOliver-Rainer Wittmann aSavedAttrsSet.Put( *pItem );
252cdf0e10cSrcweir aClearWhichIds.Insert( aSavIds[n], aClearWhichIds.Count() );
253cdf0e10cSrcweir }
254*808c4840SOliver-Rainer Wittmann }
255cdf0e10cSrcweir }
256cdf0e10cSrcweir
257cdf0e10cSrcweir // do not clear items directly from item set and only clear to be kept
258cdf0e10cSrcweir // attributes, if no deletion item set is found.
259cdf0e10cSrcweir const bool bKeepAttributes =
260cdf0e10cSrcweir !pPara || !pPara->pDelSet || pPara->pDelSet->Count() == 0;
261cdf0e10cSrcweir if ( bKeepAttributes )
262cdf0e10cSrcweir {
263cdf0e10cSrcweir pNode->ResetAttr( aClearWhichIds );
264cdf0e10cSrcweir }
265cdf0e10cSrcweir
266cdf0e10cSrcweir if( !bLocked )
267cdf0e10cSrcweir pNode->UnlockModify();
268cdf0e10cSrcweir
269*808c4840SOliver-Rainer Wittmann if ( pPara )
270*808c4840SOliver-Rainer Wittmann {
271*808c4840SOliver-Rainer Wittmann SwRegHistory aRegH( pNode, *pNode, pPara->pHistory );
272cdf0e10cSrcweir
273*808c4840SOliver-Rainer Wittmann if ( pPara->pDelSet && pPara->pDelSet->Count() )
274*808c4840SOliver-Rainer Wittmann {
275cdf0e10cSrcweir ASSERT( !bKeepAttributes,
276cdf0e10cSrcweir "<lcl_RstAttr(..)> - certain attributes are kept, but not needed. -> please inform OD" );
277*808c4840SOliver-Rainer Wittmann SfxItemIter aIter( *pPara->pDelSet );
278*808c4840SOliver-Rainer Wittmann pItem = aIter.FirstItem();
279*808c4840SOliver-Rainer Wittmann while ( sal_True )
280*808c4840SOliver-Rainer Wittmann {
281cdf0e10cSrcweir if ( ( pItem->Which() != RES_PAGEDESC &&
282cdf0e10cSrcweir pItem->Which() != RES_BREAK &&
283cdf0e10cSrcweir pItem->Which() != RES_PARATR_NUMRULE ) ||
284*808c4840SOliver-Rainer Wittmann ( aSavedAttrsSet.GetItemState( pItem->Which(), sal_False ) != SFX_ITEM_SET ) )
285cdf0e10cSrcweir {
286cdf0e10cSrcweir pNode->ResetAttr( pItem->Which() );
287cdf0e10cSrcweir }
288*808c4840SOliver-Rainer Wittmann if ( aIter.IsAtEnd() )
289*808c4840SOliver-Rainer Wittmann break;
290*808c4840SOliver-Rainer Wittmann pItem = aIter.NextItem();
291*808c4840SOliver-Rainer Wittmann }
292*808c4840SOliver-Rainer Wittmann }
293*808c4840SOliver-Rainer Wittmann else if ( pPara->bResetAll )
294*808c4840SOliver-Rainer Wittmann pNode->ResetAllAttr();
295*808c4840SOliver-Rainer Wittmann else
296*808c4840SOliver-Rainer Wittmann pNode->ResetAttr( RES_PARATR_BEGIN, POOLATTR_END - 1 );
297*808c4840SOliver-Rainer Wittmann }
298*808c4840SOliver-Rainer Wittmann else
299*808c4840SOliver-Rainer Wittmann pNode->ResetAllAttr();
300cdf0e10cSrcweir
301cdf0e10cSrcweir // only restore saved attributes, if needed
302*808c4840SOliver-Rainer Wittmann if ( bKeepAttributes && aSavedAttrsSet.Count() )
303*808c4840SOliver-Rainer Wittmann {
304cdf0e10cSrcweir pNode->LockModify();
305cdf0e10cSrcweir
306*808c4840SOliver-Rainer Wittmann pNode->SetAttr( aSavedAttrsSet );
307cdf0e10cSrcweir
308*808c4840SOliver-Rainer Wittmann if ( !bLocked )
309*808c4840SOliver-Rainer Wittmann pNode->UnlockModify();
310*808c4840SOliver-Rainer Wittmann }
311*808c4840SOliver-Rainer Wittmann }
312*808c4840SOliver-Rainer Wittmann return sal_True;
313cdf0e10cSrcweir }
314cdf0e10cSrcweir
315*808c4840SOliver-Rainer Wittmann
RstTxtAttrs(const SwPaM & rRg,sal_Bool bInclRefToxMark)316cdf0e10cSrcweir void SwDoc::RstTxtAttrs(const SwPaM &rRg, sal_Bool bInclRefToxMark )
317cdf0e10cSrcweir {
318cdf0e10cSrcweir SwHistory* pHst = 0;
319cdf0e10cSrcweir SwDataChanged aTmp( rRg, 0 );
320cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
321cdf0e10cSrcweir {
322cdf0e10cSrcweir SwUndoResetAttr* pUndo = new SwUndoResetAttr( rRg, RES_CHRFMT );
323cdf0e10cSrcweir pHst = &pUndo->GetHistory();
324cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo(pUndo);
325cdf0e10cSrcweir }
326cdf0e10cSrcweir const SwPosition *pStt = rRg.Start(), *pEnd = rRg.End();
327cdf0e10cSrcweir ParaRstFmt aPara( pStt, pEnd, pHst );
328cdf0e10cSrcweir aPara.bInclRefToxMark = ( bInclRefToxMark == sal_True );
329cdf0e10cSrcweir GetNodes().ForEach( pStt->nNode.GetIndex(), pEnd->nNode.GetIndex()+1,
330cdf0e10cSrcweir lcl_RstTxtAttr, &aPara );
331cdf0e10cSrcweir SetModified();
332cdf0e10cSrcweir }
333cdf0e10cSrcweir
ResetAttrs(const SwPaM & rRg,sal_Bool bTxtAttr,const SvUShortsSort * pAttrs,const bool bSendDataChangedEvents)334cdf0e10cSrcweir void SwDoc::ResetAttrs( const SwPaM &rRg,
335cdf0e10cSrcweir sal_Bool bTxtAttr,
336cdf0e10cSrcweir const SvUShortsSort* pAttrs,
337cdf0e10cSrcweir // --> OD 2008-11-28 #b96644#
338cdf0e10cSrcweir const bool bSendDataChangedEvents )
339cdf0e10cSrcweir // <--
340cdf0e10cSrcweir {
341cdf0e10cSrcweir SwPaM* pPam = (SwPaM*)&rRg;
342cdf0e10cSrcweir if( !bTxtAttr && pAttrs && pAttrs->Count() &&
343cdf0e10cSrcweir RES_TXTATR_END > (*pAttrs)[ 0 ] )
344cdf0e10cSrcweir bTxtAttr = sal_True;
345cdf0e10cSrcweir
346cdf0e10cSrcweir if( !rRg.HasMark() )
347cdf0e10cSrcweir {
348cdf0e10cSrcweir SwTxtNode* pTxtNd = rRg.GetPoint()->nNode.GetNode().GetTxtNode();
349cdf0e10cSrcweir if( !pTxtNd )
350cdf0e10cSrcweir return ;
351cdf0e10cSrcweir
352cdf0e10cSrcweir pPam = new SwPaM( *rRg.GetPoint() );
353cdf0e10cSrcweir
354cdf0e10cSrcweir SwIndex& rSt = pPam->GetPoint()->nContent;
355cdf0e10cSrcweir sal_uInt16 nMkPos, nPtPos = rSt.GetIndex();
356cdf0e10cSrcweir
357cdf0e10cSrcweir // JP 22.08.96: Sonderfall: steht der Crsr in einem URL-Attribut
358cdf0e10cSrcweir // dann wird dessen Bereich genommen
359cdf0e10cSrcweir SwTxtAttr const*const pURLAttr(
360cdf0e10cSrcweir pTxtNd->GetTxtAttrAt(rSt.GetIndex(), RES_TXTATR_INETFMT));
361cdf0e10cSrcweir if (pURLAttr && pURLAttr->GetINetFmt().GetValue().Len())
362cdf0e10cSrcweir {
363cdf0e10cSrcweir nMkPos = *pURLAttr->GetStart();
36469a74367SOliver-Rainer Wittmann nPtPos = *pURLAttr->End();
365cdf0e10cSrcweir }
366cdf0e10cSrcweir else
367cdf0e10cSrcweir {
368cdf0e10cSrcweir Boundary aBndry;
369cdf0e10cSrcweir if( pBreakIt->GetBreakIter().is() )
370cdf0e10cSrcweir aBndry = pBreakIt->GetBreakIter()->getWordBoundary(
371cdf0e10cSrcweir pTxtNd->GetTxt(), nPtPos,
372cdf0e10cSrcweir pBreakIt->GetLocale( pTxtNd->GetLang( nPtPos ) ),
373cdf0e10cSrcweir WordType::ANY_WORD /*ANYWORD_IGNOREWHITESPACES*/,
374cdf0e10cSrcweir sal_True );
375cdf0e10cSrcweir
376cdf0e10cSrcweir if( aBndry.startPos < nPtPos && nPtPos < aBndry.endPos )
377cdf0e10cSrcweir {
378cdf0e10cSrcweir nMkPos = (xub_StrLen)aBndry.startPos;
379cdf0e10cSrcweir nPtPos = (xub_StrLen)aBndry.endPos;
380cdf0e10cSrcweir }
381cdf0e10cSrcweir else
382cdf0e10cSrcweir {
383cdf0e10cSrcweir nPtPos = nMkPos = rSt.GetIndex();
384cdf0e10cSrcweir if( bTxtAttr )
385cdf0e10cSrcweir pTxtNd->DontExpandFmt( rSt, sal_True );
386cdf0e10cSrcweir }
387cdf0e10cSrcweir }
388cdf0e10cSrcweir
389cdf0e10cSrcweir rSt = nMkPos;
390cdf0e10cSrcweir pPam->SetMark();
391cdf0e10cSrcweir pPam->GetPoint()->nContent = nPtPos;
392cdf0e10cSrcweir }
393cdf0e10cSrcweir
394cdf0e10cSrcweir // --> OD 2008-11-28 #i96644#
395cdf0e10cSrcweir // SwDataChanged aTmp( *pPam, 0 );
396cdf0e10cSrcweir std::auto_ptr< SwDataChanged > pDataChanged;
397cdf0e10cSrcweir if ( bSendDataChangedEvents )
398cdf0e10cSrcweir {
399cdf0e10cSrcweir pDataChanged.reset( new SwDataChanged( *pPam, 0 ) );
400cdf0e10cSrcweir }
401cdf0e10cSrcweir // <--
402cdf0e10cSrcweir SwHistory* pHst = 0;
403cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
404cdf0e10cSrcweir {
405cdf0e10cSrcweir SwUndoResetAttr* pUndo = new SwUndoResetAttr( rRg,
406cdf0e10cSrcweir static_cast<sal_uInt16>(bTxtAttr ? RES_CONDTXTFMTCOLL : RES_TXTFMTCOLL ));
407cdf0e10cSrcweir if( pAttrs && pAttrs->Count() )
408cdf0e10cSrcweir {
409cdf0e10cSrcweir pUndo->SetAttrs( *pAttrs );
410cdf0e10cSrcweir }
411cdf0e10cSrcweir pHst = &pUndo->GetHistory();
412cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo(pUndo);
413cdf0e10cSrcweir }
414cdf0e10cSrcweir
415cdf0e10cSrcweir const SwPosition *pStt = pPam->Start(), *pEnd = pPam->End();
416cdf0e10cSrcweir ParaRstFmt aPara( pStt, pEnd, pHst );
417cdf0e10cSrcweir
418cdf0e10cSrcweir // mst: not including META here; it seems attrs with CH_TXTATR are omitted
419cdf0e10cSrcweir sal_uInt16 __FAR_DATA aResetableSetRange[] = {
420cdf0e10cSrcweir RES_FRMATR_BEGIN, RES_FRMATR_END-1,
421cdf0e10cSrcweir RES_CHRATR_BEGIN, RES_CHRATR_END-1,
422cdf0e10cSrcweir RES_PARATR_BEGIN, RES_PARATR_END-1,
423cdf0e10cSrcweir // --> OD 2008-02-25 #refactorlists#
424cdf0e10cSrcweir RES_PARATR_LIST_BEGIN, RES_PARATR_LIST_END-1,
425cdf0e10cSrcweir // <--
426cdf0e10cSrcweir RES_TXTATR_INETFMT, RES_TXTATR_INETFMT,
427cdf0e10cSrcweir RES_TXTATR_CHARFMT, RES_TXTATR_CHARFMT,
428cdf0e10cSrcweir RES_TXTATR_CJK_RUBY, RES_TXTATR_CJK_RUBY,
429cdf0e10cSrcweir RES_TXTATR_UNKNOWN_CONTAINER, RES_TXTATR_UNKNOWN_CONTAINER,
430cdf0e10cSrcweir RES_UNKNOWNATR_BEGIN, RES_UNKNOWNATR_END-1,
431cdf0e10cSrcweir 0
432cdf0e10cSrcweir };
433cdf0e10cSrcweir
434cdf0e10cSrcweir SfxItemSet aDelSet( GetAttrPool(), aResetableSetRange );
435cdf0e10cSrcweir if( pAttrs && pAttrs->Count() )
436cdf0e10cSrcweir {
437cdf0e10cSrcweir for( sal_uInt16 n = pAttrs->Count(); n; )
438cdf0e10cSrcweir if( POOLATTR_END > (*pAttrs)[ --n ] )
439cdf0e10cSrcweir aDelSet.Put( *GetDfltAttr( (*pAttrs)[ n ] ));
440cdf0e10cSrcweir
441cdf0e10cSrcweir if( aDelSet.Count() )
442cdf0e10cSrcweir aPara.pDelSet = &aDelSet;
443cdf0e10cSrcweir }
444cdf0e10cSrcweir
445cdf0e10cSrcweir sal_Bool bAdd = sal_True;
446cdf0e10cSrcweir SwNodeIndex aTmpStt( pStt->nNode );
447cdf0e10cSrcweir SwNodeIndex aTmpEnd( pEnd->nNode );
448cdf0e10cSrcweir if( pStt->nContent.GetIndex() ) // nur ein Teil
449cdf0e10cSrcweir {
450cdf0e10cSrcweir // dann spaeter aufsetzen und alle CharFmtAttr -> TxtFmtAttr
451cdf0e10cSrcweir SwTxtNode* pTNd = aTmpStt.GetNode().GetTxtNode();
452cdf0e10cSrcweir if( pTNd && pTNd->HasSwAttrSet() && pTNd->GetpSwAttrSet()->Count() )
453cdf0e10cSrcweir {
454cdf0e10cSrcweir if (pHst)
455cdf0e10cSrcweir {
456cdf0e10cSrcweir SwRegHistory history(pTNd, *pTNd, pHst);
457cdf0e10cSrcweir pTNd->FmtToTxtAttr(pTNd);
458cdf0e10cSrcweir }
459cdf0e10cSrcweir else
460cdf0e10cSrcweir {
461cdf0e10cSrcweir pTNd->FmtToTxtAttr(pTNd);
462cdf0e10cSrcweir }
463cdf0e10cSrcweir }
464cdf0e10cSrcweir
465cdf0e10cSrcweir aTmpStt++;
466cdf0e10cSrcweir }
467cdf0e10cSrcweir if( pEnd->nContent.GetIndex() == pEnd->nNode.GetNode().GetCntntNode()->Len() )
468cdf0e10cSrcweir // dann spaeter aufsetzen und alle CharFmtAttr -> TxtFmtAttr
469cdf0e10cSrcweir aTmpEnd++, bAdd = sal_False;
470cdf0e10cSrcweir else if( pStt->nNode != pEnd->nNode || !pStt->nContent.GetIndex() )
471cdf0e10cSrcweir {
472cdf0e10cSrcweir SwTxtNode* pTNd = aTmpEnd.GetNode().GetTxtNode();
473cdf0e10cSrcweir if( pTNd && pTNd->HasSwAttrSet() && pTNd->GetpSwAttrSet()->Count() )
474cdf0e10cSrcweir {
475cdf0e10cSrcweir if (pHst)
476cdf0e10cSrcweir {
477cdf0e10cSrcweir SwRegHistory history(pTNd, *pTNd, pHst);
478cdf0e10cSrcweir pTNd->FmtToTxtAttr(pTNd);
479cdf0e10cSrcweir }
480cdf0e10cSrcweir else
481cdf0e10cSrcweir {
482cdf0e10cSrcweir pTNd->FmtToTxtAttr(pTNd);
483cdf0e10cSrcweir }
484cdf0e10cSrcweir }
485cdf0e10cSrcweir }
486cdf0e10cSrcweir
487cdf0e10cSrcweir if( aTmpStt < aTmpEnd )
488cdf0e10cSrcweir GetNodes().ForEach( pStt->nNode, aTmpEnd, lcl_RstAttr, &aPara );
489cdf0e10cSrcweir else if( !rRg.HasMark() )
490cdf0e10cSrcweir {
491cdf0e10cSrcweir aPara.bResetAll = false ;
492cdf0e10cSrcweir ::lcl_RstAttr( &pStt->nNode.GetNode(), &aPara );
493cdf0e10cSrcweir aPara.bResetAll = true ;
494cdf0e10cSrcweir }
495cdf0e10cSrcweir
496cdf0e10cSrcweir if( bTxtAttr )
497cdf0e10cSrcweir {
498cdf0e10cSrcweir if( bAdd )
499cdf0e10cSrcweir aTmpEnd++;
500cdf0e10cSrcweir GetNodes().ForEach( pStt->nNode, aTmpEnd, lcl_RstTxtAttr, &aPara );
501cdf0e10cSrcweir }
502cdf0e10cSrcweir
503cdf0e10cSrcweir if( pPam != &rRg )
504cdf0e10cSrcweir delete pPam;
505cdf0e10cSrcweir
506cdf0e10cSrcweir SetModified();
507cdf0e10cSrcweir }
508cdf0e10cSrcweir
509cdf0e10cSrcweir #define DELETECHARSETS if ( bDelete ) { delete pCharSet; delete pOtherSet; }
510cdf0e10cSrcweir
511cdf0e10cSrcweir // Einfuegen der Hints nach Inhaltsformen;
512cdf0e10cSrcweir // wird in SwDoc::Insert(..., SwFmtHint &rHt) benutzt
513cdf0e10cSrcweir
lcl_InsAttr(SwDoc * const pDoc,const SwPaM & rRg,const SfxItemSet & rChgSet,const SetAttrMode nFlags,SwUndoAttr * const pUndo,const bool bExpandCharToPara=false)51469a74367SOliver-Rainer Wittmann static bool lcl_InsAttr(
51569a74367SOliver-Rainer Wittmann SwDoc *const pDoc,
51669a74367SOliver-Rainer Wittmann const SwPaM &rRg,
51769a74367SOliver-Rainer Wittmann const SfxItemSet& rChgSet,
51869a74367SOliver-Rainer Wittmann const SetAttrMode nFlags,
51969a74367SOliver-Rainer Wittmann SwUndoAttr *const pUndo,
52069a74367SOliver-Rainer Wittmann //Modify here for #119405, by easyfan, 2012-05-24
52169a74367SOliver-Rainer Wittmann const bool bExpandCharToPara=false)
52269a74367SOliver-Rainer Wittmann //End of modification, by easyfan
523cdf0e10cSrcweir {
52469a74367SOliver-Rainer Wittmann // teil die Sets auf (fuer Selektion in Nodes)
525cdf0e10cSrcweir const SfxItemSet* pCharSet = 0;
526cdf0e10cSrcweir const SfxItemSet* pOtherSet = 0;
527cdf0e10cSrcweir bool bDelete = false;
528cdf0e10cSrcweir bool bCharAttr = false;
529cdf0e10cSrcweir bool bOtherAttr = false;
530cdf0e10cSrcweir
531cdf0e10cSrcweir // Check, if we can work with rChgSet or if we have to create additional SfxItemSets
532cdf0e10cSrcweir if ( 1 == rChgSet.Count() )
533cdf0e10cSrcweir {
534cdf0e10cSrcweir SfxItemIter aIter( rChgSet );
535cdf0e10cSrcweir const SfxPoolItem* pItem = aIter.FirstItem();
536cdf0e10cSrcweir
53725beb051SJürgen Schmidt if (!IsInvalidItem(pItem))
538cdf0e10cSrcweir {
53925beb051SJürgen Schmidt const sal_uInt16 nWhich = pItem->Which();
540cdf0e10cSrcweir
54125beb051SJürgen Schmidt if ( isCHRATR(nWhich) ||
54225beb051SJürgen Schmidt (RES_TXTATR_CHARFMT == nWhich) ||
54325beb051SJürgen Schmidt (RES_TXTATR_INETFMT == nWhich) ||
54425beb051SJürgen Schmidt (RES_TXTATR_AUTOFMT == nWhich) ||
54525beb051SJürgen Schmidt (RES_TXTATR_UNKNOWN_CONTAINER == nWhich) )
54625beb051SJürgen Schmidt {
54725beb051SJürgen Schmidt pCharSet = &rChgSet;
54825beb051SJürgen Schmidt bCharAttr = true;
54925beb051SJürgen Schmidt }
55025beb051SJürgen Schmidt
55125beb051SJürgen Schmidt if ( isPARATR(nWhich)
55225beb051SJürgen Schmidt || isPARATR_LIST(nWhich)
55325beb051SJürgen Schmidt || isFRMATR(nWhich)
55425beb051SJürgen Schmidt || isGRFATR(nWhich)
55525beb051SJürgen Schmidt || isUNKNOWNATR(nWhich) )
55625beb051SJürgen Schmidt {
55725beb051SJürgen Schmidt pOtherSet = &rChgSet;
55825beb051SJürgen Schmidt bOtherAttr = true;
55925beb051SJürgen Schmidt }
560cdf0e10cSrcweir }
561cdf0e10cSrcweir }
562cdf0e10cSrcweir
563cdf0e10cSrcweir // Build new itemset if either
564cdf0e10cSrcweir // - rChgSet.Count() > 1 or
565cdf0e10cSrcweir // - The attribute in rChgSet does not belong to one of the above categories
566cdf0e10cSrcweir if ( !bCharAttr && !bOtherAttr )
567cdf0e10cSrcweir {
568cdf0e10cSrcweir SfxItemSet* pTmpCharItemSet = new SfxItemSet( pDoc->GetAttrPool(),
569cdf0e10cSrcweir RES_CHRATR_BEGIN, RES_CHRATR_END-1,
570cdf0e10cSrcweir RES_TXTATR_AUTOFMT, RES_TXTATR_AUTOFMT,
571cdf0e10cSrcweir RES_TXTATR_INETFMT, RES_TXTATR_INETFMT,
572cdf0e10cSrcweir RES_TXTATR_CHARFMT, RES_TXTATR_CHARFMT,
573cdf0e10cSrcweir RES_TXTATR_UNKNOWN_CONTAINER, RES_TXTATR_UNKNOWN_CONTAINER,
574cdf0e10cSrcweir 0 );
575cdf0e10cSrcweir
576cdf0e10cSrcweir SfxItemSet* pTmpOtherItemSet = new SfxItemSet( pDoc->GetAttrPool(),
577cdf0e10cSrcweir RES_PARATR_BEGIN, RES_PARATR_END-1,
578cdf0e10cSrcweir RES_PARATR_LIST_BEGIN, RES_PARATR_LIST_END-1,
579cdf0e10cSrcweir RES_FRMATR_BEGIN, RES_FRMATR_END-1,
580cdf0e10cSrcweir RES_GRFATR_BEGIN, RES_GRFATR_END-1,
581cdf0e10cSrcweir RES_UNKNOWNATR_BEGIN, RES_UNKNOWNATR_END-1,
582cdf0e10cSrcweir 0 );
583cdf0e10cSrcweir
584cdf0e10cSrcweir pTmpCharItemSet->Put( rChgSet );
585cdf0e10cSrcweir pTmpOtherItemSet->Put( rChgSet );
586cdf0e10cSrcweir
587cdf0e10cSrcweir pCharSet = pTmpCharItemSet;
588cdf0e10cSrcweir pOtherSet = pTmpOtherItemSet;
589cdf0e10cSrcweir
590cdf0e10cSrcweir bDelete = true;
591cdf0e10cSrcweir }
592cdf0e10cSrcweir
593cdf0e10cSrcweir SwHistory* pHistory = pUndo ? &pUndo->GetHistory() : 0;
594cdf0e10cSrcweir bool bRet = false;
59569a74367SOliver-Rainer Wittmann const SwPosition *pStt = rRg.Start(), *pEnd = rRg.End();
59669a74367SOliver-Rainer Wittmann SwCntntNode* pNode = pStt->nNode.GetNode().GetCntntNode();
597cdf0e10cSrcweir
59869a74367SOliver-Rainer Wittmann if( pNode && pNode->IsTxtNode() )
59969a74367SOliver-Rainer Wittmann {
600cdf0e10cSrcweir // -> #i27615#
601cdf0e10cSrcweir if (rRg.IsInFrontOfLabel())
602cdf0e10cSrcweir {
603cdf0e10cSrcweir SwTxtNode * pTxtNd = pNode->GetTxtNode();
604cdf0e10cSrcweir SwNumRule * pNumRule = pTxtNd->GetNumRule();
605cdf0e10cSrcweir
606cdf0e10cSrcweir if ( !pNumRule )
607cdf0e10cSrcweir {
608cdf0e10cSrcweir ASSERT( false,
609cdf0e10cSrcweir "<InsAttr(..)> - PaM in front of label, but text node has no numbering rule set. This is a serious defect, please inform OD." );
610cdf0e10cSrcweir DELETECHARSETS
611cdf0e10cSrcweir return false;
612cdf0e10cSrcweir }
613cdf0e10cSrcweir
614cdf0e10cSrcweir SwNumFmt aNumFmt = pNumRule->Get(static_cast<sal_uInt16>(pTxtNd->GetActualListLevel()));
615cdf0e10cSrcweir SwCharFmt * pCharFmt =
616cdf0e10cSrcweir pDoc->FindCharFmtByName(aNumFmt.GetCharFmtName());
617cdf0e10cSrcweir
618cdf0e10cSrcweir if (pCharFmt)
619cdf0e10cSrcweir {
620cdf0e10cSrcweir if (pHistory)
621cdf0e10cSrcweir pHistory->Add(pCharFmt->GetAttrSet(), *pCharFmt);
622cdf0e10cSrcweir
623cdf0e10cSrcweir if ( pCharSet )
624cdf0e10cSrcweir pCharFmt->SetFmtAttr(*pCharSet);
625cdf0e10cSrcweir }
626cdf0e10cSrcweir
627cdf0e10cSrcweir DELETECHARSETS
628cdf0e10cSrcweir return true;
629cdf0e10cSrcweir }
630cdf0e10cSrcweir
63169a74367SOliver-Rainer Wittmann const SwIndex& rSt = pStt->nContent;
632cdf0e10cSrcweir
63369a74367SOliver-Rainer Wittmann // Attribute ohne Ende haben keinen Bereich
634cdf0e10cSrcweir if ( !bCharAttr && !bOtherAttr )
635cdf0e10cSrcweir {
636cdf0e10cSrcweir SfxItemSet aTxtSet( pDoc->GetAttrPool(),
63769a74367SOliver-Rainer Wittmann RES_TXTATR_NOEND_BEGIN, RES_TXTATR_NOEND_END-1 );
63869a74367SOliver-Rainer Wittmann aTxtSet.Put( rChgSet );
63969a74367SOliver-Rainer Wittmann if( aTxtSet.Count() )
64069a74367SOliver-Rainer Wittmann {
641cdf0e10cSrcweir SwRegHistory history( pNode, *pNode, pHistory );
642cdf0e10cSrcweir bRet = history.InsertItems(
643cdf0e10cSrcweir aTxtSet, rSt.GetIndex(), rSt.GetIndex(), nFlags ) || bRet;
644cdf0e10cSrcweir
645cdf0e10cSrcweir if (bRet && (pDoc->IsRedlineOn() || (!pDoc->IsIgnoreRedline()
646cdf0e10cSrcweir && pDoc->GetRedlineTbl().Count())))
647cdf0e10cSrcweir {
64869a74367SOliver-Rainer Wittmann SwPaM aPam( pStt->nNode, pStt->nContent.GetIndex()-1,
64969a74367SOliver-Rainer Wittmann pStt->nNode, pStt->nContent.GetIndex() );
650cdf0e10cSrcweir
65169a74367SOliver-Rainer Wittmann if( pUndo )
65269a74367SOliver-Rainer Wittmann pUndo->SaveRedlineData( aPam, sal_True );
653cdf0e10cSrcweir
65469a74367SOliver-Rainer Wittmann if( pDoc->IsRedlineOn() )
65569a74367SOliver-Rainer Wittmann pDoc->AppendRedline( new SwRedline( nsRedlineType_t::REDLINE_INSERT, aPam ), true);
65669a74367SOliver-Rainer Wittmann else
65769a74367SOliver-Rainer Wittmann pDoc->SplitRedline( aPam );
65869a74367SOliver-Rainer Wittmann }
65969a74367SOliver-Rainer Wittmann }
66069a74367SOliver-Rainer Wittmann }
661cdf0e10cSrcweir
66269a74367SOliver-Rainer Wittmann // TextAttribute mit Ende expandieren nie ihren Bereich
66369a74367SOliver-Rainer Wittmann if ( !bCharAttr && !bOtherAttr )
664cdf0e10cSrcweir {
66569a74367SOliver-Rainer Wittmann // CharFmt wird gesondert behandelt !!!
66669a74367SOliver-Rainer Wittmann // JP 22.08.96: URL-Attribute auch!!
667cdf0e10cSrcweir // TEST_TEMP ToDo: AutoFmt!
66869a74367SOliver-Rainer Wittmann SfxItemSet aTxtSet( pDoc->GetAttrPool(),
669cdf0e10cSrcweir RES_TXTATR_REFMARK, RES_TXTATR_TOXMARK,
670cdf0e10cSrcweir RES_TXTATR_META, RES_TXTATR_METAFIELD,
671cdf0e10cSrcweir RES_TXTATR_CJK_RUBY, RES_TXTATR_CJK_RUBY,
67269a74367SOliver-Rainer Wittmann RES_TXTATR_INPUTFIELD, RES_TXTATR_INPUTFIELD,
67369a74367SOliver-Rainer Wittmann 0 );
674cdf0e10cSrcweir
67569a74367SOliver-Rainer Wittmann aTxtSet.Put( rChgSet );
67669a74367SOliver-Rainer Wittmann if( aTxtSet.Count() )
67769a74367SOliver-Rainer Wittmann {
67869a74367SOliver-Rainer Wittmann sal_uInt16 nInsCnt = rSt.GetIndex();
67969a74367SOliver-Rainer Wittmann sal_uInt16 nEnd = pStt->nNode == pEnd->nNode
68069a74367SOliver-Rainer Wittmann ? pEnd->nContent.GetIndex()
68169a74367SOliver-Rainer Wittmann : pNode->Len();
682cdf0e10cSrcweir SwRegHistory history( pNode, *pNode, pHistory );
683cdf0e10cSrcweir bRet = history.InsertItems( aTxtSet, nInsCnt, nEnd, nFlags )
684dec99bbdSOliver-Rainer Wittmann || bRet;
685cdf0e10cSrcweir
686cdf0e10cSrcweir if (bRet && (pDoc->IsRedlineOn() || (!pDoc->IsIgnoreRedline()
687cdf0e10cSrcweir && pDoc->GetRedlineTbl().Count())))
688cdf0e10cSrcweir {
68969a74367SOliver-Rainer Wittmann // wurde Text-Inhalt eingefuegt? (RefMark/TOXMarks ohne Ende)
69069a74367SOliver-Rainer Wittmann sal_Bool bTxtIns = nInsCnt != rSt.GetIndex();
69169a74367SOliver-Rainer Wittmann // wurde Inhalt eingefuegt oder ueber die Selektion gesetzt?
69269a74367SOliver-Rainer Wittmann SwPaM aPam( pStt->nNode, bTxtIns ? nInsCnt + 1 : nEnd,
69369a74367SOliver-Rainer Wittmann pStt->nNode, nInsCnt );
69469a74367SOliver-Rainer Wittmann if( pUndo )
69569a74367SOliver-Rainer Wittmann pUndo->SaveRedlineData( aPam, bTxtIns );
69669a74367SOliver-Rainer Wittmann
69769a74367SOliver-Rainer Wittmann if( pDoc->IsRedlineOn() )
698dec99bbdSOliver-Rainer Wittmann pDoc->AppendRedline(
699dec99bbdSOliver-Rainer Wittmann new SwRedline(
700dec99bbdSOliver-Rainer Wittmann bTxtIns ? nsRedlineType_t::REDLINE_INSERT : nsRedlineType_t::REDLINE_FORMAT, aPam ),
701dec99bbdSOliver-Rainer Wittmann true);
70269a74367SOliver-Rainer Wittmann else if( bTxtIns )
70369a74367SOliver-Rainer Wittmann pDoc->SplitRedline( aPam );
70469a74367SOliver-Rainer Wittmann }
70569a74367SOliver-Rainer Wittmann }
70669a74367SOliver-Rainer Wittmann }
70769a74367SOliver-Rainer Wittmann }
708cdf0e10cSrcweir
70969a74367SOliver-Rainer Wittmann // bei PageDesc's, die am Node gesetzt werden, muss immer das
71069a74367SOliver-Rainer Wittmann // Auto-Flag gesetzt werden!!
711cdf0e10cSrcweir if( pOtherSet && pOtherSet->Count() )
71269a74367SOliver-Rainer Wittmann {
71369a74367SOliver-Rainer Wittmann SwTableNode* pTblNd;
71469a74367SOliver-Rainer Wittmann const SwFmtPageDesc* pDesc;
715cdf0e10cSrcweir if( SFX_ITEM_SET == pOtherSet->GetItemState( RES_PAGEDESC,
71669a74367SOliver-Rainer Wittmann sal_False, (const SfxPoolItem**)&pDesc ))
71769a74367SOliver-Rainer Wittmann {
71869a74367SOliver-Rainer Wittmann if( pNode )
71969a74367SOliver-Rainer Wittmann {
72069a74367SOliver-Rainer Wittmann // Auto-Flag setzen, nur in Vorlagen ist ohne Auto !
72169a74367SOliver-Rainer Wittmann SwFmtPageDesc aNew( *pDesc );
72269a74367SOliver-Rainer Wittmann // Bug 38479: AutoFlag wird jetzt in der WrtShell gesetzt
72369a74367SOliver-Rainer Wittmann // aNew.SetAuto();
72469a74367SOliver-Rainer Wittmann
72569a74367SOliver-Rainer Wittmann // Tabellen kennen jetzt auch Umbrueche
72669a74367SOliver-Rainer Wittmann if( 0 == (nFlags & nsSetAttrMode::SETATTR_APICALL) &&
72769a74367SOliver-Rainer Wittmann 0 != ( pTblNd = pNode->FindTableNode() ) )
72869a74367SOliver-Rainer Wittmann {
729cdf0e10cSrcweir SwTableNode* pCurTblNd = pTblNd;
730cdf0e10cSrcweir while ( 0 != ( pCurTblNd = pCurTblNd->StartOfSectionNode()->FindTableNode() ) )
731cdf0e10cSrcweir pTblNd = pCurTblNd;
732cdf0e10cSrcweir
73369a74367SOliver-Rainer Wittmann // dann am Tabellen Format setzen
73469a74367SOliver-Rainer Wittmann SwFrmFmt* pFmt = pTblNd->GetTable().GetFrmFmt();
73569a74367SOliver-Rainer Wittmann SwRegHistory aRegH( pFmt, *pTblNd, pHistory );
736cdf0e10cSrcweir pFmt->SetFmtAttr( aNew );
737cdf0e10cSrcweir bRet = true;
738cdf0e10cSrcweir }
739cdf0e10cSrcweir else
740cdf0e10cSrcweir {
741cdf0e10cSrcweir SwRegHistory aRegH( pNode, *pNode, pHistory );
742cdf0e10cSrcweir bRet = pNode->SetAttr( aNew ) || bRet;
743cdf0e10cSrcweir }
744cdf0e10cSrcweir }
745cdf0e10cSrcweir
746cdf0e10cSrcweir // bOtherAttr = true means that pOtherSet == rChgSet. In this case
747cdf0e10cSrcweir // we know, that there is only one attribute in pOtherSet. We cannot
748cdf0e10cSrcweir // perform the following operations, instead we return:
749cdf0e10cSrcweir if ( bOtherAttr )
750cdf0e10cSrcweir return bRet;
751cdf0e10cSrcweir
752cdf0e10cSrcweir const_cast<SfxItemSet*>(pOtherSet)->ClearItem( RES_PAGEDESC );
753cdf0e10cSrcweir if( !pOtherSet->Count() )
754cdf0e10cSrcweir {
755cdf0e10cSrcweir DELETECHARSETS
756cdf0e10cSrcweir return bRet;
757cdf0e10cSrcweir }
758cdf0e10cSrcweir }
759cdf0e10cSrcweir
76069a74367SOliver-Rainer Wittmann // Tabellen kennen jetzt auch Umbrueche
76169a74367SOliver-Rainer Wittmann const SvxFmtBreakItem* pBreak;
76269a74367SOliver-Rainer Wittmann if( pNode && 0 == (nFlags & nsSetAttrMode::SETATTR_APICALL) &&
76369a74367SOliver-Rainer Wittmann 0 != (pTblNd = pNode->FindTableNode() ) &&
764cdf0e10cSrcweir SFX_ITEM_SET == pOtherSet->GetItemState( RES_BREAK,
76569a74367SOliver-Rainer Wittmann sal_False, (const SfxPoolItem**)&pBreak ) )
76669a74367SOliver-Rainer Wittmann {
767cdf0e10cSrcweir SwTableNode* pCurTblNd = pTblNd;
768cdf0e10cSrcweir while ( 0 != ( pCurTblNd = pCurTblNd->StartOfSectionNode()->FindTableNode() ) )
769cdf0e10cSrcweir pTblNd = pCurTblNd;
770cdf0e10cSrcweir
77169a74367SOliver-Rainer Wittmann // dann am Tabellen Format setzen
77269a74367SOliver-Rainer Wittmann SwFrmFmt* pFmt = pTblNd->GetTable().GetFrmFmt();
77369a74367SOliver-Rainer Wittmann SwRegHistory aRegH( pFmt, *pTblNd, pHistory );
774cdf0e10cSrcweir pFmt->SetFmtAttr( *pBreak );
775cdf0e10cSrcweir bRet = true;
776cdf0e10cSrcweir
777cdf0e10cSrcweir // bOtherAttr = true means that pOtherSet == rChgSet. In this case
778cdf0e10cSrcweir // we know, that there is only one attribute in pOtherSet. We cannot
779cdf0e10cSrcweir // perform the following operations, instead we return:
780cdf0e10cSrcweir if ( bOtherAttr )
781cdf0e10cSrcweir return bRet;
782cdf0e10cSrcweir
783cdf0e10cSrcweir const_cast<SfxItemSet*>(pOtherSet)->ClearItem( RES_BREAK );
784cdf0e10cSrcweir if( !pOtherSet->Count() )
785cdf0e10cSrcweir {
786cdf0e10cSrcweir DELETECHARSETS
787cdf0e10cSrcweir return bRet;
788cdf0e10cSrcweir }
789cdf0e10cSrcweir }
790cdf0e10cSrcweir
79169a74367SOliver-Rainer Wittmann {
79269a74367SOliver-Rainer Wittmann // wenns eine PoolNumRule ist, diese ggfs. anlegen
79369a74367SOliver-Rainer Wittmann const SwNumRuleItem* pRule;
79469a74367SOliver-Rainer Wittmann sal_uInt16 nPoolId;
795cdf0e10cSrcweir if( SFX_ITEM_SET == pOtherSet->GetItemState( RES_PARATR_NUMRULE,
79669a74367SOliver-Rainer Wittmann sal_False, (const SfxPoolItem**)&pRule ) &&
79769a74367SOliver-Rainer Wittmann !pDoc->FindNumRulePtr( pRule->GetValue() ) &&
79869a74367SOliver-Rainer Wittmann USHRT_MAX != (nPoolId = SwStyleNameMapper::GetPoolIdFromUIName ( pRule->GetValue(),
79969a74367SOliver-Rainer Wittmann nsSwGetPoolIdFromName::GET_POOLID_NUMRULE )) )
80069a74367SOliver-Rainer Wittmann pDoc->GetNumRuleFromPool( nPoolId );
80169a74367SOliver-Rainer Wittmann }
802cdf0e10cSrcweir
80369a74367SOliver-Rainer Wittmann }
804cdf0e10cSrcweir
80569a74367SOliver-Rainer Wittmann if( !rRg.HasMark() ) // kein Bereich
80669a74367SOliver-Rainer Wittmann {
80769a74367SOliver-Rainer Wittmann if( !pNode )
808cdf0e10cSrcweir {
809cdf0e10cSrcweir DELETECHARSETS
81069a74367SOliver-Rainer Wittmann return bRet;
811cdf0e10cSrcweir }
812cdf0e10cSrcweir
813cdf0e10cSrcweir if( pNode->IsTxtNode() && pCharSet && pCharSet->Count() )
814cdf0e10cSrcweir {
815cdf0e10cSrcweir SwTxtNode* pTxtNd = static_cast<SwTxtNode*>(pNode);
81669a74367SOliver-Rainer Wittmann const SwIndex& rSt = pStt->nContent;
81769a74367SOliver-Rainer Wittmann sal_uInt16 nMkPos, nPtPos = rSt.GetIndex();
81869a74367SOliver-Rainer Wittmann const String& rStr = pTxtNd->GetTxt();
819cdf0e10cSrcweir
82069a74367SOliver-Rainer Wittmann // JP 22.08.96: Sonderfall: steht der Crsr in einem URL-Attribut
82169a74367SOliver-Rainer Wittmann // dann wird dessen Bereich genommen
822cdf0e10cSrcweir SwTxtAttr const*const pURLAttr(
823cdf0e10cSrcweir pTxtNd->GetTxtAttrAt(rSt.GetIndex(), RES_TXTATR_INETFMT));
824cdf0e10cSrcweir if (pURLAttr && pURLAttr->GetINetFmt().GetValue().Len())
82569a74367SOliver-Rainer Wittmann {
82669a74367SOliver-Rainer Wittmann nMkPos = *pURLAttr->GetStart();
82769a74367SOliver-Rainer Wittmann nPtPos = *pURLAttr->End();
82869a74367SOliver-Rainer Wittmann }
82969a74367SOliver-Rainer Wittmann else
83069a74367SOliver-Rainer Wittmann {
83169a74367SOliver-Rainer Wittmann Boundary aBndry;
83269a74367SOliver-Rainer Wittmann if( pBreakIt->GetBreakIter().is() )
83369a74367SOliver-Rainer Wittmann aBndry = pBreakIt->GetBreakIter()->getWordBoundary(
83469a74367SOliver-Rainer Wittmann pTxtNd->GetTxt(), nPtPos,
83569a74367SOliver-Rainer Wittmann pBreakIt->GetLocale( pTxtNd->GetLang( nPtPos ) ),
83669a74367SOliver-Rainer Wittmann WordType::ANY_WORD /*ANYWORD_IGNOREWHITESPACES*/,
83769a74367SOliver-Rainer Wittmann sal_True );
83869a74367SOliver-Rainer Wittmann
83969a74367SOliver-Rainer Wittmann if( aBndry.startPos < nPtPos && nPtPos < aBndry.endPos )
84069a74367SOliver-Rainer Wittmann {
84169a74367SOliver-Rainer Wittmann nMkPos = (xub_StrLen)aBndry.startPos;
84269a74367SOliver-Rainer Wittmann nPtPos = (xub_StrLen)aBndry.endPos;
84369a74367SOliver-Rainer Wittmann }
84469a74367SOliver-Rainer Wittmann else
84569a74367SOliver-Rainer Wittmann nPtPos = nMkPos = rSt.GetIndex();
84669a74367SOliver-Rainer Wittmann }
847cdf0e10cSrcweir
84869a74367SOliver-Rainer Wittmann // erstmal die zu ueberschreibenden Attribute aus dem
84969a74367SOliver-Rainer Wittmann // SwpHintsArray entfernen, wenn die Selektion den gesamten
85069a74367SOliver-Rainer Wittmann // Absatz umspannt. (Diese Attribute werden als FormatAttr.
85169a74367SOliver-Rainer Wittmann // eingefuegt und verdraengen nie die TextAttr.!)
85269a74367SOliver-Rainer Wittmann if( !(nFlags & nsSetAttrMode::SETATTR_DONTREPLACE ) &&
85369a74367SOliver-Rainer Wittmann pTxtNd->HasHints() && !nMkPos && nPtPos == rStr.Len() )
85469a74367SOliver-Rainer Wittmann {
85569a74367SOliver-Rainer Wittmann SwIndex aSt( pTxtNd );
85669a74367SOliver-Rainer Wittmann if( pHistory )
85769a74367SOliver-Rainer Wittmann {
85869a74367SOliver-Rainer Wittmann // fuers Undo alle Attribute sichern
85969a74367SOliver-Rainer Wittmann SwRegHistory aRHst( *pTxtNd, pHistory );
86069a74367SOliver-Rainer Wittmann pTxtNd->GetpSwpHints()->Register( &aRHst );
86169a74367SOliver-Rainer Wittmann pTxtNd->RstTxtAttr( aSt, nPtPos, 0, pCharSet );
86269a74367SOliver-Rainer Wittmann if( pTxtNd->GetpSwpHints() )
86369a74367SOliver-Rainer Wittmann pTxtNd->GetpSwpHints()->DeRegister();
86469a74367SOliver-Rainer Wittmann }
865cdf0e10cSrcweir else
86669a74367SOliver-Rainer Wittmann pTxtNd->RstTxtAttr( aSt, nPtPos, 0, pCharSet );
86769a74367SOliver-Rainer Wittmann }
868cdf0e10cSrcweir
869cdf0e10cSrcweir // the SwRegHistory inserts the attribute into the TxtNode!
870cdf0e10cSrcweir SwRegHistory history( pNode, *pNode, pHistory );
871cdf0e10cSrcweir bRet = history.InsertItems( *pCharSet, nMkPos, nPtPos, nFlags )
872cdf0e10cSrcweir || bRet;
873cdf0e10cSrcweir
87469a74367SOliver-Rainer Wittmann if( pDoc->IsRedlineOn() )
87569a74367SOliver-Rainer Wittmann {
87669a74367SOliver-Rainer Wittmann SwPaM aPam( *pNode, nMkPos, *pNode, nPtPos );
877cdf0e10cSrcweir
87869a74367SOliver-Rainer Wittmann if( pUndo )
87969a74367SOliver-Rainer Wittmann pUndo->SaveRedlineData( aPam, sal_False );
88069a74367SOliver-Rainer Wittmann pDoc->AppendRedline( new SwRedline( nsRedlineType_t::REDLINE_FORMAT, aPam ), true);
88169a74367SOliver-Rainer Wittmann }
88269a74367SOliver-Rainer Wittmann }
883cdf0e10cSrcweir if( pOtherSet && pOtherSet->Count() )
88469a74367SOliver-Rainer Wittmann {
88569a74367SOliver-Rainer Wittmann SwRegHistory aRegH( pNode, *pNode, pHistory );
886cdf0e10cSrcweir bRet = pNode->SetAttr( *pOtherSet ) || bRet;
887cdf0e10cSrcweir }
888cdf0e10cSrcweir
889cdf0e10cSrcweir DELETECHARSETS
89069a74367SOliver-Rainer Wittmann return bRet;
89169a74367SOliver-Rainer Wittmann }
892cdf0e10cSrcweir
893cdf0e10cSrcweir if( pDoc->IsRedlineOn() && pCharSet && pCharSet->Count() )
89469a74367SOliver-Rainer Wittmann {
89569a74367SOliver-Rainer Wittmann if( pUndo )
89669a74367SOliver-Rainer Wittmann pUndo->SaveRedlineData( rRg, sal_False );
89769a74367SOliver-Rainer Wittmann pDoc->AppendRedline( new SwRedline( nsRedlineType_t::REDLINE_FORMAT, rRg ), true);
89869a74367SOliver-Rainer Wittmann }
899cdf0e10cSrcweir
90069a74367SOliver-Rainer Wittmann /* jetzt wenn Bereich */
90169a74367SOliver-Rainer Wittmann sal_uLong nNodes = 0;
902cdf0e10cSrcweir
90369a74367SOliver-Rainer Wittmann SwNodeIndex aSt( pDoc->GetNodes() );
90469a74367SOliver-Rainer Wittmann SwNodeIndex aEnd( pDoc->GetNodes() );
90569a74367SOliver-Rainer Wittmann SwIndex aCntEnd( pEnd->nContent );
906cdf0e10cSrcweir
90769a74367SOliver-Rainer Wittmann if( pNode )
90869a74367SOliver-Rainer Wittmann {
90969a74367SOliver-Rainer Wittmann sal_uInt16 nLen = pNode->Len();
91069a74367SOliver-Rainer Wittmann if( pStt->nNode != pEnd->nNode )
91169a74367SOliver-Rainer Wittmann aCntEnd.Assign( pNode, nLen );
912cdf0e10cSrcweir
91369a74367SOliver-Rainer Wittmann if( pStt->nContent.GetIndex() != 0 || aCntEnd.GetIndex() != nLen )
914cdf0e10cSrcweir {
915cdf0e10cSrcweir // the SwRegHistory inserts the attribute into the TxtNode!
916cdf0e10cSrcweir if( pNode->IsTxtNode() && pCharSet && pCharSet->Count() )
917cdf0e10cSrcweir {
918cdf0e10cSrcweir SwRegHistory history( pNode, *pNode, pHistory );
919cdf0e10cSrcweir bRet = history.InsertItems(*pCharSet,
920cdf0e10cSrcweir pStt->nContent.GetIndex(), aCntEnd.GetIndex(), nFlags)
921cdf0e10cSrcweir || bRet;
922cdf0e10cSrcweir }
923cdf0e10cSrcweir
924cdf0e10cSrcweir if( pOtherSet && pOtherSet->Count() )
92569a74367SOliver-Rainer Wittmann {
92669a74367SOliver-Rainer Wittmann SwRegHistory aRegH( pNode, *pNode, pHistory );
927cdf0e10cSrcweir bRet = pNode->SetAttr( *pOtherSet ) || bRet;
928cdf0e10cSrcweir }
929cdf0e10cSrcweir
93069a74367SOliver-Rainer Wittmann // lediglich Selektion in einem Node.
93169a74367SOliver-Rainer Wittmann if( pStt->nNode == pEnd->nNode )
932cdf0e10cSrcweir {
93369a74367SOliver-Rainer Wittmann //Modify here for #119405, by easyfan, 2012-05-24
93469a74367SOliver-Rainer Wittmann //The data parameter flag: bExpandCharToPara, comes from the data member of SwDoc,
93569a74367SOliver-Rainer Wittmann //Which is set in SW MS word Binary filter WW8ImplRreader. With this flag on, means that
93669a74367SOliver-Rainer Wittmann //current setting attribute set is a character range properties set and comes from a MS word
93769a74367SOliver-Rainer Wittmann //binary file, And the setting range include a paragraph end position (0X0D);
93869a74367SOliver-Rainer Wittmann //More specifications, as such property inside the character range properties set recorded in
93969a74367SOliver-Rainer Wittmann //MS word binary file are dealed and inserted into data model (SwDoc) one by one, so we
94069a74367SOliver-Rainer Wittmann //only dealing the scenario that the char properties set with 1 item inside;
94169a74367SOliver-Rainer Wittmann
94269a74367SOliver-Rainer Wittmann if (bExpandCharToPara && pCharSet && pCharSet->Count() ==1 )
94369a74367SOliver-Rainer Wittmann {
94469a74367SOliver-Rainer Wittmann SwTxtNode* pCurrentNd = pStt->nNode.GetNode().GetTxtNode();
94569a74367SOliver-Rainer Wittmann
94669a74367SOliver-Rainer Wittmann if (pCurrentNd)
94769a74367SOliver-Rainer Wittmann {
94869a74367SOliver-Rainer Wittmann pCurrentNd->TryCharSetExpandToNum(*pCharSet);
94969a74367SOliver-Rainer Wittmann
95069a74367SOliver-Rainer Wittmann }
95169a74367SOliver-Rainer Wittmann }
95269a74367SOliver-Rainer Wittmann //End of modification, by easyfan
953cdf0e10cSrcweir DELETECHARSETS
954cdf0e10cSrcweir return bRet;
955cdf0e10cSrcweir }
95669a74367SOliver-Rainer Wittmann ++nNodes;
95769a74367SOliver-Rainer Wittmann aSt.Assign( pStt->nNode.GetNode(), +1 );
95869a74367SOliver-Rainer Wittmann }
95969a74367SOliver-Rainer Wittmann else
96069a74367SOliver-Rainer Wittmann aSt = pStt->nNode;
96169a74367SOliver-Rainer Wittmann aCntEnd = pEnd->nContent; // aEnd wurde veraendert !!
96269a74367SOliver-Rainer Wittmann }
96369a74367SOliver-Rainer Wittmann else
96469a74367SOliver-Rainer Wittmann aSt.Assign( pStt->nNode.GetNode(), +1 );
965cdf0e10cSrcweir
96669a74367SOliver-Rainer Wittmann // aSt zeigt jetzt auf den ersten vollen Node
967cdf0e10cSrcweir
96869a74367SOliver-Rainer Wittmann /*
96969a74367SOliver-Rainer Wittmann * die Selektion umfasst mehr als einen Node
97069a74367SOliver-Rainer Wittmann */
97169a74367SOliver-Rainer Wittmann if( pStt->nNode < pEnd->nNode )
97269a74367SOliver-Rainer Wittmann {
97369a74367SOliver-Rainer Wittmann pNode = pEnd->nNode.GetNode().GetCntntNode();
97469a74367SOliver-Rainer Wittmann if(pNode)
97569a74367SOliver-Rainer Wittmann {
97669a74367SOliver-Rainer Wittmann sal_uInt16 nLen = pNode->Len();
97769a74367SOliver-Rainer Wittmann if( aCntEnd.GetIndex() != nLen )
978cdf0e10cSrcweir {
979cdf0e10cSrcweir // the SwRegHistory inserts the attribute into the TxtNode!
980cdf0e10cSrcweir if( pNode->IsTxtNode() && pCharSet && pCharSet->Count() )
981cdf0e10cSrcweir {
982cdf0e10cSrcweir SwRegHistory history( pNode, *pNode, pHistory );
983cdf0e10cSrcweir history.InsertItems(*pCharSet,
984cdf0e10cSrcweir 0, aCntEnd.GetIndex(), nFlags);
985cdf0e10cSrcweir }
986cdf0e10cSrcweir
987cdf0e10cSrcweir if( pOtherSet && pOtherSet->Count() )
98869a74367SOliver-Rainer Wittmann {
98969a74367SOliver-Rainer Wittmann SwRegHistory aRegH( pNode, *pNode, pHistory );
990cdf0e10cSrcweir pNode->SetAttr( *pOtherSet );
99169a74367SOliver-Rainer Wittmann }
992cdf0e10cSrcweir
99369a74367SOliver-Rainer Wittmann ++nNodes;
99469a74367SOliver-Rainer Wittmann aEnd = pEnd->nNode;
99569a74367SOliver-Rainer Wittmann }
99669a74367SOliver-Rainer Wittmann else
99769a74367SOliver-Rainer Wittmann aEnd.Assign( pEnd->nNode.GetNode(), +1 );
99869a74367SOliver-Rainer Wittmann }
99969a74367SOliver-Rainer Wittmann else
100069a74367SOliver-Rainer Wittmann aEnd = pEnd->nNode;
100169a74367SOliver-Rainer Wittmann }
100269a74367SOliver-Rainer Wittmann else
100369a74367SOliver-Rainer Wittmann aEnd.Assign( pEnd->nNode.GetNode(), +1 );
1004cdf0e10cSrcweir
100569a74367SOliver-Rainer Wittmann // aEnd zeigt jetzt HINTER den letzten voll Node
1006cdf0e10cSrcweir
100769a74367SOliver-Rainer Wittmann /* Bearbeitung der vollstaendig selektierten Nodes. */
1008cdf0e10cSrcweir // alle Attribute aus dem Set zuruecksetzen !!
1009cdf0e10cSrcweir if( pCharSet && pCharSet->Count() && !( nsSetAttrMode::SETATTR_DONTREPLACE & nFlags ) )
101069a74367SOliver-Rainer Wittmann {
1011cdf0e10cSrcweir
1012cdf0e10cSrcweir ParaRstFmt aPara( pStt, pEnd, pHistory, 0, pCharSet );
101369a74367SOliver-Rainer Wittmann pDoc->GetNodes().ForEach( aSt, aEnd, lcl_RstTxtAttr, &aPara );
101469a74367SOliver-Rainer Wittmann }
1015cdf0e10cSrcweir
1016cdf0e10cSrcweir sal_Bool bCreateSwpHints = pCharSet && (
1017cdf0e10cSrcweir SFX_ITEM_SET == pCharSet->GetItemState( RES_TXTATR_CHARFMT, sal_False ) ||
1018cdf0e10cSrcweir SFX_ITEM_SET == pCharSet->GetItemState( RES_TXTATR_INETFMT, sal_False ) );
1019cdf0e10cSrcweir
102069a74367SOliver-Rainer Wittmann for(; aSt < aEnd; aSt++ )
102169a74367SOliver-Rainer Wittmann {
102269a74367SOliver-Rainer Wittmann pNode = aSt.GetNode().GetCntntNode();
102369a74367SOliver-Rainer Wittmann if( !pNode )
102469a74367SOliver-Rainer Wittmann continue;
1025cdf0e10cSrcweir
102669a74367SOliver-Rainer Wittmann SwTxtNode* pTNd = pNode->GetTxtNode();
102769a74367SOliver-Rainer Wittmann if( pHistory )
102869a74367SOliver-Rainer Wittmann {
102969a74367SOliver-Rainer Wittmann SwRegHistory aRegH( pNode, *pNode, pHistory );
103069a74367SOliver-Rainer Wittmann SwpHints *pSwpHints;
1031cdf0e10cSrcweir
1032cdf0e10cSrcweir if( pTNd && pCharSet && pCharSet->Count() )
103369a74367SOliver-Rainer Wittmann {
103469a74367SOliver-Rainer Wittmann pSwpHints = bCreateSwpHints ? &pTNd->GetOrCreateSwpHints()
103569a74367SOliver-Rainer Wittmann : pTNd->GetpSwpHints();
103669a74367SOliver-Rainer Wittmann if( pSwpHints )
103769a74367SOliver-Rainer Wittmann pSwpHints->Register( &aRegH );
1038cdf0e10cSrcweir
1039cdf0e10cSrcweir pTNd->SetAttr( *pCharSet, 0, pTNd->GetTxt().Len(), nFlags );
104069a74367SOliver-Rainer Wittmann if( pSwpHints )
104169a74367SOliver-Rainer Wittmann pSwpHints->DeRegister();
104269a74367SOliver-Rainer Wittmann }
1043cdf0e10cSrcweir if( pOtherSet && pOtherSet->Count() )
1044cdf0e10cSrcweir pNode->SetAttr( *pOtherSet );
104569a74367SOliver-Rainer Wittmann }
104669a74367SOliver-Rainer Wittmann else
104769a74367SOliver-Rainer Wittmann {
1048cdf0e10cSrcweir if( pTNd && pCharSet && pCharSet->Count() )
1049cdf0e10cSrcweir pTNd->SetAttr( *pCharSet, 0, pTNd->GetTxt().Len(), nFlags );
1050cdf0e10cSrcweir if( pOtherSet && pOtherSet->Count() )
1051cdf0e10cSrcweir pNode->SetAttr( *pOtherSet );
105269a74367SOliver-Rainer Wittmann }
105369a74367SOliver-Rainer Wittmann ++nNodes;
105469a74367SOliver-Rainer Wittmann }
1055cdf0e10cSrcweir
105669a74367SOliver-Rainer Wittmann //The data parameter flag: bExpandCharToPara, comes from the data member of SwDoc,
105769a74367SOliver-Rainer Wittmann //Which is set in SW MS word Binary filter WW8ImplRreader. With this flag on, means that
105869a74367SOliver-Rainer Wittmann //current setting attribute set is a character range properties set and comes from a MS word
105969a74367SOliver-Rainer Wittmann //binary file, And the setting range include a paragraph end position (0X0D);
106069a74367SOliver-Rainer Wittmann //More specifications, as such property inside the character range properties set recorded in
106169a74367SOliver-Rainer Wittmann //MS word binary file are dealed and inserted into data model (SwDoc) one by one, so we
106269a74367SOliver-Rainer Wittmann //only dealing the scenario that the char properties set with 1 item inside;
106369a74367SOliver-Rainer Wittmann if (bExpandCharToPara && pCharSet && pCharSet->Count() ==1)
106469a74367SOliver-Rainer Wittmann {
106569a74367SOliver-Rainer Wittmann SwPosition aStartPos (*rRg.Start());
106669a74367SOliver-Rainer Wittmann SwPosition aEndPos (*rRg.End());
1067abbaf3ecSJian Hong Cheng
106869a74367SOliver-Rainer Wittmann if (aEndPos.nNode.GetNode().GetTxtNode() && aEndPos.nContent != aEndPos.nNode.GetNode().GetTxtNode()->Len())
106969a74367SOliver-Rainer Wittmann aEndPos.nNode--;
1070abbaf3ecSJian Hong Cheng
107169a74367SOliver-Rainer Wittmann for (;aStartPos<=aEndPos;aStartPos.nNode++)
107269a74367SOliver-Rainer Wittmann {
107369a74367SOliver-Rainer Wittmann SwTxtNode* pCurrentNd = aStartPos.nNode.GetNode().GetTxtNode();
107469a74367SOliver-Rainer Wittmann
107569a74367SOliver-Rainer Wittmann if (pCurrentNd)
107669a74367SOliver-Rainer Wittmann {
107769a74367SOliver-Rainer Wittmann pCurrentNd->TryCharSetExpandToNum(*pCharSet);
107869a74367SOliver-Rainer Wittmann
107969a74367SOliver-Rainer Wittmann }
108069a74367SOliver-Rainer Wittmann
108169a74367SOliver-Rainer Wittmann }
108269a74367SOliver-Rainer Wittmann }
1083abbaf3ecSJian Hong Cheng
1084cdf0e10cSrcweir DELETECHARSETS
1085cdf0e10cSrcweir return (nNodes != 0) || bRet;
1086cdf0e10cSrcweir }
1087cdf0e10cSrcweir
InsertPoolItem(const SwPaM & rRg,const SfxPoolItem & rHt,const SetAttrMode nFlags,const bool bExpandCharToPara)108869a74367SOliver-Rainer Wittmann bool SwDoc::InsertPoolItem(
108969a74367SOliver-Rainer Wittmann const SwPaM &rRg,
109069a74367SOliver-Rainer Wittmann const SfxPoolItem &rHt,
109169a74367SOliver-Rainer Wittmann const SetAttrMode nFlags,
109269a74367SOliver-Rainer Wittmann const bool bExpandCharToPara)
1093cdf0e10cSrcweir {
109469a74367SOliver-Rainer Wittmann SwDataChanged aTmp( rRg, 0 );
109569a74367SOliver-Rainer Wittmann SwUndoAttr* pUndoAttr = 0;
1096cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1097cdf0e10cSrcweir {
1098cdf0e10cSrcweir GetIDocumentUndoRedo().ClearRedo();
109969a74367SOliver-Rainer Wittmann pUndoAttr = new SwUndoAttr( rRg, rHt, nFlags );
110069a74367SOliver-Rainer Wittmann }
1101cdf0e10cSrcweir
110269a74367SOliver-Rainer Wittmann SfxItemSet aSet( GetAttrPool(), rHt.Which(), rHt.Which() );
110369a74367SOliver-Rainer Wittmann aSet.Put( rHt );
110469a74367SOliver-Rainer Wittmann const bool bRet = lcl_InsAttr( this, rRg, aSet, nFlags, pUndoAttr,bExpandCharToPara );
1105cdf0e10cSrcweir
1106cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1107cdf0e10cSrcweir {
1108cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo( pUndoAttr );
1109cdf0e10cSrcweir }
1110cdf0e10cSrcweir
111169a74367SOliver-Rainer Wittmann if( bRet )
111269a74367SOliver-Rainer Wittmann {
111369a74367SOliver-Rainer Wittmann SetModified();
111469a74367SOliver-Rainer Wittmann }
111569a74367SOliver-Rainer Wittmann return bRet;
1116cdf0e10cSrcweir }
1117cdf0e10cSrcweir
InsertItemSet(const SwPaM & rRg,const SfxItemSet & rSet,const SetAttrMode nFlags)1118cdf0e10cSrcweir bool SwDoc::InsertItemSet ( const SwPaM &rRg, const SfxItemSet &rSet,
1119cdf0e10cSrcweir const SetAttrMode nFlags )
1120cdf0e10cSrcweir {
1121cdf0e10cSrcweir SwDataChanged aTmp( rRg, 0 );
1122cdf0e10cSrcweir SwUndoAttr* pUndoAttr = 0;
1123cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1124cdf0e10cSrcweir {
1125cdf0e10cSrcweir GetIDocumentUndoRedo().ClearRedo();
1126cdf0e10cSrcweir pUndoAttr = new SwUndoAttr( rRg, rSet, nFlags );
1127cdf0e10cSrcweir }
1128cdf0e10cSrcweir
1129cdf0e10cSrcweir bool bRet = lcl_InsAttr( this, rRg, rSet, nFlags, pUndoAttr );
1130cdf0e10cSrcweir
1131cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1132cdf0e10cSrcweir {
1133cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo( pUndoAttr );
1134cdf0e10cSrcweir }
1135cdf0e10cSrcweir
1136cdf0e10cSrcweir if( bRet )
1137cdf0e10cSrcweir SetModified();
1138cdf0e10cSrcweir return bRet;
1139cdf0e10cSrcweir }
1140cdf0e10cSrcweir
1141cdf0e10cSrcweir
1142cdf0e10cSrcweir // Setze das Attribut im angegebenen Format. Ist Undo aktiv, wird
1143cdf0e10cSrcweir // das alte in die Undo-History aufgenommen
SetAttr(const SfxPoolItem & rAttr,SwFmt & rFmt)1144cdf0e10cSrcweir void SwDoc::SetAttr( const SfxPoolItem& rAttr, SwFmt& rFmt )
1145cdf0e10cSrcweir {
1146cdf0e10cSrcweir SfxItemSet aSet( GetAttrPool(), rAttr.Which(), rAttr.Which() );
1147cdf0e10cSrcweir aSet.Put( rAttr );
1148cdf0e10cSrcweir SetAttr( aSet, rFmt );
1149cdf0e10cSrcweir }
1150cdf0e10cSrcweir
1151cdf0e10cSrcweir
1152cdf0e10cSrcweir // Setze das Attribut im angegebenen Format. Ist Undo aktiv, wird
1153cdf0e10cSrcweir // das alte in die Undo-History aufgenommen
SetAttr(const SfxItemSet & rSet,SwFmt & rFmt)1154cdf0e10cSrcweir void SwDoc::SetAttr( const SfxItemSet& rSet, SwFmt& rFmt )
1155cdf0e10cSrcweir {
1156cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1157cdf0e10cSrcweir {
1158cdf0e10cSrcweir SwUndoFmtAttrHelper aTmp( rFmt );
1159cdf0e10cSrcweir rFmt.SetFmtAttr( rSet );
1160cdf0e10cSrcweir if ( aTmp.GetUndo() )
1161cdf0e10cSrcweir {
1162cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo( aTmp.ReleaseUndo() );
1163cdf0e10cSrcweir }
1164cdf0e10cSrcweir else
1165cdf0e10cSrcweir {
1166cdf0e10cSrcweir GetIDocumentUndoRedo().ClearRedo();
1167cdf0e10cSrcweir }
1168cdf0e10cSrcweir }
1169cdf0e10cSrcweir else
1170cdf0e10cSrcweir {
1171cdf0e10cSrcweir rFmt.SetFmtAttr( rSet );
1172cdf0e10cSrcweir }
1173cdf0e10cSrcweir SetModified();
1174cdf0e10cSrcweir }
1175cdf0e10cSrcweir
1176cdf0e10cSrcweir // --> OD 2008-02-12 #newlistlevelattrs#
ResetAttrAtFormat(const sal_uInt16 nWhichId,SwFmt & rChangedFormat)1177cdf0e10cSrcweir void SwDoc::ResetAttrAtFormat( const sal_uInt16 nWhichId,
1178cdf0e10cSrcweir SwFmt& rChangedFormat )
1179cdf0e10cSrcweir {
1180cdf0e10cSrcweir SwUndo *const pUndo = (GetIDocumentUndoRedo().DoesUndo())
1181cdf0e10cSrcweir ? new SwUndoFmtResetAttr( rChangedFormat, nWhichId )
1182cdf0e10cSrcweir : 0;
1183cdf0e10cSrcweir
1184cdf0e10cSrcweir const sal_Bool bAttrReset = rChangedFormat.ResetFmtAttr( nWhichId );
1185cdf0e10cSrcweir
1186cdf0e10cSrcweir if ( bAttrReset )
1187cdf0e10cSrcweir {
1188cdf0e10cSrcweir if ( pUndo )
1189cdf0e10cSrcweir {
1190cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo( pUndo );
1191cdf0e10cSrcweir }
1192cdf0e10cSrcweir
1193cdf0e10cSrcweir SetModified();
1194cdf0e10cSrcweir }
1195cdf0e10cSrcweir else if ( pUndo )
1196cdf0e10cSrcweir delete pUndo;
1197cdf0e10cSrcweir }
1198cdf0e10cSrcweir // <--
1199cdf0e10cSrcweir
lcl_SetNewDefTabStops(SwTwips nOldWidth,SwTwips nNewWidth,SvxTabStopItem & rChgTabStop)1200cdf0e10cSrcweir int lcl_SetNewDefTabStops( SwTwips nOldWidth, SwTwips nNewWidth,
1201cdf0e10cSrcweir SvxTabStopItem& rChgTabStop )
1202cdf0e10cSrcweir {
1203cdf0e10cSrcweir // dann aender bei allen TabStop die default's auf den neuen Wert
1204cdf0e10cSrcweir // !!! Achtung: hier wird immer auf dem PoolAttribut gearbeitet,
1205cdf0e10cSrcweir // damit nicht in allen Sets die gleiche Berechnung
1206cdf0e10cSrcweir // auf dem gleichen TabStop (gepoolt!) vorgenommen
1207cdf0e10cSrcweir // wird. Als Modify wird ein FmtChg verschickt.
1208cdf0e10cSrcweir
1209cdf0e10cSrcweir sal_uInt16 nOldCnt = rChgTabStop.Count();
1210cdf0e10cSrcweir if( !nOldCnt || nOldWidth == nNewWidth )
1211cdf0e10cSrcweir return sal_False;
1212cdf0e10cSrcweir
1213cdf0e10cSrcweir // suche den Anfang der Defaults
1214cdf0e10cSrcweir SvxTabStop* pTabs = ((SvxTabStop*)rChgTabStop.GetStart())
1215cdf0e10cSrcweir + (nOldCnt-1);
1216cdf0e10cSrcweir sal_uInt16 n;
1217cdf0e10cSrcweir
1218cdf0e10cSrcweir for( n = nOldCnt; n ; --n, --pTabs )
1219cdf0e10cSrcweir if( SVX_TAB_ADJUST_DEFAULT != pTabs->GetAdjustment() )
1220cdf0e10cSrcweir break;
1221cdf0e10cSrcweir ++n;
1222cdf0e10cSrcweir if( n < nOldCnt ) // die DefTabStops loeschen
1223cdf0e10cSrcweir rChgTabStop.Remove( n, nOldCnt - n );
1224cdf0e10cSrcweir return sal_True;
1225cdf0e10cSrcweir }
1226cdf0e10cSrcweir
1227cdf0e10cSrcweir // Setze das Attribut als neues default Attribut in diesem Dokument.
1228cdf0e10cSrcweir // Ist Undo aktiv, wird das alte in die Undo-History aufgenommen
SetDefault(const SfxPoolItem & rAttr)1229cdf0e10cSrcweir void SwDoc::SetDefault( const SfxPoolItem& rAttr )
1230cdf0e10cSrcweir {
1231cdf0e10cSrcweir SfxItemSet aSet( GetAttrPool(), rAttr.Which(), rAttr.Which() );
1232cdf0e10cSrcweir aSet.Put( rAttr );
1233cdf0e10cSrcweir SetDefault( aSet );
1234cdf0e10cSrcweir }
1235cdf0e10cSrcweir
SetDefault(const SfxItemSet & rSet)1236cdf0e10cSrcweir void SwDoc::SetDefault( const SfxItemSet& rSet )
1237cdf0e10cSrcweir {
1238cdf0e10cSrcweir if( !rSet.Count() )
1239cdf0e10cSrcweir return;
1240cdf0e10cSrcweir
1241cdf0e10cSrcweir SwModify aCallMod( 0 );
1242cdf0e10cSrcweir SwAttrSet aOld( GetAttrPool(), rSet.GetRanges() ),
1243cdf0e10cSrcweir aNew( GetAttrPool(), rSet.GetRanges() );
1244cdf0e10cSrcweir SfxItemIter aIter( rSet );
1245cdf0e10cSrcweir sal_uInt16 nWhich;
1246cdf0e10cSrcweir const SfxPoolItem* pItem = aIter.GetCurItem();
1247cdf0e10cSrcweir SfxItemPool* pSdrPool = GetAttrPool().GetSecondaryPool();
1248cdf0e10cSrcweir while( sal_True )
1249cdf0e10cSrcweir {
1250cdf0e10cSrcweir sal_Bool bCheckSdrDflt = sal_False;
1251cdf0e10cSrcweir nWhich = pItem->Which();
1252cdf0e10cSrcweir aOld.Put( GetAttrPool().GetDefaultItem( nWhich ) );
1253cdf0e10cSrcweir GetAttrPool().SetPoolDefaultItem( *pItem );
1254cdf0e10cSrcweir aNew.Put( GetAttrPool().GetDefaultItem( nWhich ) );
1255cdf0e10cSrcweir
1256cdf0e10cSrcweir if (isCHRATR(nWhich) || isTXTATR(nWhich))
1257cdf0e10cSrcweir {
1258cdf0e10cSrcweir aCallMod.Add( pDfltTxtFmtColl );
1259cdf0e10cSrcweir aCallMod.Add( pDfltCharFmt );
1260cdf0e10cSrcweir bCheckSdrDflt = 0 != pSdrPool;
1261cdf0e10cSrcweir }
1262cdf0e10cSrcweir else if ( isPARATR(nWhich) ||
1263cdf0e10cSrcweir // --> OD 2008-02-25 #refactorlists#
1264cdf0e10cSrcweir isPARATR_LIST(nWhich) )
1265cdf0e10cSrcweir // <--
1266cdf0e10cSrcweir {
1267cdf0e10cSrcweir aCallMod.Add( pDfltTxtFmtColl );
1268cdf0e10cSrcweir bCheckSdrDflt = 0 != pSdrPool;
1269cdf0e10cSrcweir }
1270cdf0e10cSrcweir else if (isGRFATR(nWhich))
1271cdf0e10cSrcweir {
1272cdf0e10cSrcweir aCallMod.Add( pDfltGrfFmtColl );
1273cdf0e10cSrcweir }
1274cdf0e10cSrcweir else if (isFRMATR(nWhich))
1275cdf0e10cSrcweir {
1276cdf0e10cSrcweir aCallMod.Add( pDfltGrfFmtColl );
1277cdf0e10cSrcweir aCallMod.Add( pDfltTxtFmtColl );
1278cdf0e10cSrcweir aCallMod.Add( pDfltFrmFmt );
1279cdf0e10cSrcweir }
1280cdf0e10cSrcweir else if (isBOXATR(nWhich))
1281cdf0e10cSrcweir {
1282cdf0e10cSrcweir aCallMod.Add( pDfltFrmFmt );
1283cdf0e10cSrcweir }
1284cdf0e10cSrcweir
1285cdf0e10cSrcweir // copy also the defaults
1286cdf0e10cSrcweir if( bCheckSdrDflt )
1287cdf0e10cSrcweir {
1288cdf0e10cSrcweir sal_uInt16 nEdtWhich, nSlotId;
1289cdf0e10cSrcweir if( 0 != (nSlotId = GetAttrPool().GetSlotId( nWhich ) ) &&
1290cdf0e10cSrcweir nSlotId != nWhich &&
1291cdf0e10cSrcweir 0 != (nEdtWhich = pSdrPool->GetWhich( nSlotId )) &&
1292cdf0e10cSrcweir nSlotId != nEdtWhich )
1293cdf0e10cSrcweir {
1294cdf0e10cSrcweir SfxPoolItem* pCpy = pItem->Clone();
1295cdf0e10cSrcweir pCpy->SetWhich( nEdtWhich );
1296cdf0e10cSrcweir pSdrPool->SetPoolDefaultItem( *pCpy );
1297cdf0e10cSrcweir delete pCpy;
1298cdf0e10cSrcweir }
1299cdf0e10cSrcweir }
1300cdf0e10cSrcweir
1301cdf0e10cSrcweir if( aIter.IsAtEnd() )
1302cdf0e10cSrcweir break;
1303cdf0e10cSrcweir pItem = aIter.NextItem();
1304cdf0e10cSrcweir }
1305cdf0e10cSrcweir
1306cdf0e10cSrcweir if( aNew.Count() && aCallMod.GetDepends() )
1307cdf0e10cSrcweir {
1308cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1309cdf0e10cSrcweir {
1310cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo( new SwUndoDefaultAttr( aOld ) );
1311cdf0e10cSrcweir }
1312cdf0e10cSrcweir
1313cdf0e10cSrcweir const SfxPoolItem* pTmpItem;
1314cdf0e10cSrcweir if( ( SFX_ITEM_SET ==
1315cdf0e10cSrcweir aNew.GetItemState( RES_PARATR_TABSTOP, sal_False, &pTmpItem ) ) &&
1316cdf0e10cSrcweir ((SvxTabStopItem*)pTmpItem)->Count() )
1317cdf0e10cSrcweir {
1318cdf0e10cSrcweir // TabStop-Aenderungen behandeln wir erstmal anders:
1319cdf0e10cSrcweir // dann aender bei allen TabStop die dafault's auf den neuen Wert
1320cdf0e10cSrcweir // !!! Achtung: hier wird immer auf dem PoolAttribut gearbeitet,
1321cdf0e10cSrcweir // damit nicht in allen Sets die gleiche Berechnung
1322cdf0e10cSrcweir // auf dem gleichen TabStop (gepoolt!) vorgenommen
1323cdf0e10cSrcweir // wird. Als Modify wird ein FmtChg verschickt.
1324cdf0e10cSrcweir SwTwips nNewWidth = (*(SvxTabStopItem*)pTmpItem)[ 0 ].GetTabPos(),
1325cdf0e10cSrcweir nOldWidth = ((SvxTabStopItem&)aOld.Get(RES_PARATR_TABSTOP))[ 0 ].GetTabPos();
1326cdf0e10cSrcweir
1327cdf0e10cSrcweir int bChg = sal_False;
1328cdf0e10cSrcweir sal_uInt32 nMaxItems = GetAttrPool().GetItemCount2( RES_PARATR_TABSTOP );
1329cdf0e10cSrcweir for( sal_uInt32 n = 0; n < nMaxItems; ++n )
1330cdf0e10cSrcweir if( 0 != (pTmpItem = GetAttrPool().GetItem2( RES_PARATR_TABSTOP, n ) ))
1331cdf0e10cSrcweir bChg |= lcl_SetNewDefTabStops( nOldWidth, nNewWidth,
1332cdf0e10cSrcweir *(SvxTabStopItem*)pTmpItem );
1333cdf0e10cSrcweir
1334cdf0e10cSrcweir aNew.ClearItem( RES_PARATR_TABSTOP );
1335cdf0e10cSrcweir aOld.ClearItem( RES_PARATR_TABSTOP );
1336cdf0e10cSrcweir if( bChg )
1337cdf0e10cSrcweir {
1338cdf0e10cSrcweir SwFmtChg aChgFmt( pDfltCharFmt );
1339cdf0e10cSrcweir // dann sage mal den Frames bescheid
1340cdf0e10cSrcweir aCallMod.ModifyNotification( &aChgFmt, &aChgFmt );
1341cdf0e10cSrcweir }
1342cdf0e10cSrcweir }
1343cdf0e10cSrcweir }
1344cdf0e10cSrcweir
1345cdf0e10cSrcweir if( aNew.Count() && aCallMod.GetDepends() )
1346cdf0e10cSrcweir {
1347cdf0e10cSrcweir SwAttrSetChg aChgOld( aOld, aOld );
1348cdf0e10cSrcweir SwAttrSetChg aChgNew( aNew, aNew );
1349cdf0e10cSrcweir aCallMod.ModifyNotification( &aChgOld, &aChgNew ); // alle veraenderten werden verschickt
1350cdf0e10cSrcweir }
1351cdf0e10cSrcweir
1352cdf0e10cSrcweir // und die default-Formate wieder beim Object austragen
1353cdf0e10cSrcweir SwClient* pDep;
1354cdf0e10cSrcweir while( 0 != ( pDep = (SwClient*)aCallMod.GetDepends()) )
1355cdf0e10cSrcweir aCallMod.Remove( pDep );
1356cdf0e10cSrcweir
1357cdf0e10cSrcweir SetModified();
1358cdf0e10cSrcweir }
1359cdf0e10cSrcweir
1360cdf0e10cSrcweir // Erfrage das Default Attribut in diesem Dokument.
GetDefault(sal_uInt16 nFmtHint) const1361cdf0e10cSrcweir const SfxPoolItem& SwDoc::GetDefault( sal_uInt16 nFmtHint ) const
1362cdf0e10cSrcweir {
1363cdf0e10cSrcweir return GetAttrPool().GetDefaultItem( nFmtHint );
1364cdf0e10cSrcweir }
1365cdf0e10cSrcweir
1366cdf0e10cSrcweir /*
1367cdf0e10cSrcweir * Loeschen der Formate
1368cdf0e10cSrcweir */
DelCharFmt(sal_uInt16 nFmt,sal_Bool bBroadcast)1369cdf0e10cSrcweir void SwDoc::DelCharFmt(sal_uInt16 nFmt, sal_Bool bBroadcast)
1370cdf0e10cSrcweir {
1371cdf0e10cSrcweir SwCharFmt * pDel = (*pCharFmtTbl)[nFmt];
1372cdf0e10cSrcweir
1373cdf0e10cSrcweir if (bBroadcast)
1374cdf0e10cSrcweir BroadcastStyleOperation(pDel->GetName(), SFX_STYLE_FAMILY_CHAR,
1375cdf0e10cSrcweir SFX_STYLESHEET_ERASED);
1376cdf0e10cSrcweir
1377cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1378cdf0e10cSrcweir {
1379cdf0e10cSrcweir SwUndo * pUndo =
1380cdf0e10cSrcweir new SwUndoCharFmtDelete(pDel, this);
1381cdf0e10cSrcweir
1382cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo(pUndo);
1383cdf0e10cSrcweir }
1384cdf0e10cSrcweir
1385cdf0e10cSrcweir pCharFmtTbl->DeleteAndDestroy(nFmt);
1386cdf0e10cSrcweir
1387cdf0e10cSrcweir SetModified();
1388cdf0e10cSrcweir }
1389cdf0e10cSrcweir
DelCharFmt(SwCharFmt * pFmt,sal_Bool bBroadcast)1390cdf0e10cSrcweir void SwDoc::DelCharFmt( SwCharFmt *pFmt, sal_Bool bBroadcast )
1391cdf0e10cSrcweir {
1392cdf0e10cSrcweir sal_uInt16 nFmt = pCharFmtTbl->GetPos( pFmt );
1393cdf0e10cSrcweir ASSERT( USHRT_MAX != nFmt, "Fmt not found," );
1394cdf0e10cSrcweir
1395cdf0e10cSrcweir DelCharFmt( nFmt, bBroadcast );
1396cdf0e10cSrcweir }
1397cdf0e10cSrcweir
DelFrmFmt(SwFrmFmt * pFmt,sal_Bool bBroadcast)1398cdf0e10cSrcweir void SwDoc::DelFrmFmt( SwFrmFmt *pFmt, sal_Bool bBroadcast )
1399cdf0e10cSrcweir {
1400cdf0e10cSrcweir if( pFmt->ISA( SwTableBoxFmt ) || pFmt->ISA( SwTableLineFmt ))
1401cdf0e10cSrcweir {
1402cdf0e10cSrcweir ASSERT( !this, "Format steht nicht mehr im DocArray, "
1403cdf0e10cSrcweir "kann per delete geloescht werden" );
1404cdf0e10cSrcweir delete pFmt;
1405cdf0e10cSrcweir }
1406cdf0e10cSrcweir else
1407cdf0e10cSrcweir {
1408cdf0e10cSrcweir
1409cdf0e10cSrcweir //Das Format muss in einem der beiden Arrays stehen, in welchem
1410cdf0e10cSrcweir //werden wir schon merken.
1411cdf0e10cSrcweir sal_uInt16 nPos;
1412cdf0e10cSrcweir if ( USHRT_MAX != ( nPos = pFrmFmtTbl->GetPos( pFmt )) )
1413cdf0e10cSrcweir {
1414cdf0e10cSrcweir if (bBroadcast)
1415cdf0e10cSrcweir BroadcastStyleOperation(pFmt->GetName(),
1416cdf0e10cSrcweir SFX_STYLE_FAMILY_FRAME,
1417cdf0e10cSrcweir SFX_STYLESHEET_ERASED);
1418cdf0e10cSrcweir
1419cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1420cdf0e10cSrcweir {
1421cdf0e10cSrcweir SwUndo * pUndo = new SwUndoFrmFmtDelete(pFmt, this);
1422cdf0e10cSrcweir
1423cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo(pUndo);
1424cdf0e10cSrcweir }
1425cdf0e10cSrcweir
1426cdf0e10cSrcweir pFrmFmtTbl->DeleteAndDestroy( nPos );
1427cdf0e10cSrcweir }
1428cdf0e10cSrcweir else
1429cdf0e10cSrcweir {
1430cdf0e10cSrcweir nPos = GetSpzFrmFmts()->GetPos( pFmt );
1431cdf0e10cSrcweir ASSERT( nPos != USHRT_MAX, "FrmFmt not found." );
1432cdf0e10cSrcweir if( USHRT_MAX != nPos )
1433cdf0e10cSrcweir GetSpzFrmFmts()->DeleteAndDestroy( nPos );
1434cdf0e10cSrcweir }
1435cdf0e10cSrcweir }
1436cdf0e10cSrcweir }
1437cdf0e10cSrcweir
DelTblFrmFmt(SwTableFmt * pFmt)1438cdf0e10cSrcweir void SwDoc::DelTblFrmFmt( SwTableFmt *pFmt )
1439cdf0e10cSrcweir {
1440cdf0e10cSrcweir sal_uInt16 nPos = pTblFrmFmtTbl->GetPos( pFmt );
1441cdf0e10cSrcweir ASSERT( USHRT_MAX != nPos, "Fmt not found," );
1442cdf0e10cSrcweir pTblFrmFmtTbl->DeleteAndDestroy( nPos );
1443cdf0e10cSrcweir }
1444cdf0e10cSrcweir
1445cdf0e10cSrcweir /*
1446cdf0e10cSrcweir * Erzeugen der Formate
1447cdf0e10cSrcweir */
MakeFlyFrmFmt(const String & rFmtName,SwFrmFmt * pDerivedFrom)1448cdf0e10cSrcweir SwFlyFrmFmt *SwDoc::MakeFlyFrmFmt( const String &rFmtName,
1449cdf0e10cSrcweir SwFrmFmt *pDerivedFrom )
1450cdf0e10cSrcweir {
1451cdf0e10cSrcweir SwFlyFrmFmt *pFmt = new SwFlyFrmFmt( GetAttrPool(), rFmtName, pDerivedFrom );
1452cdf0e10cSrcweir GetSpzFrmFmts()->Insert(pFmt, GetSpzFrmFmts()->Count());
1453cdf0e10cSrcweir SetModified();
1454cdf0e10cSrcweir return pFmt;
1455cdf0e10cSrcweir }
1456cdf0e10cSrcweir
MakeDrawFrmFmt(const String & rFmtName,SwFrmFmt * pDerivedFrom)1457cdf0e10cSrcweir SwDrawFrmFmt *SwDoc::MakeDrawFrmFmt( const String &rFmtName,
1458cdf0e10cSrcweir SwFrmFmt *pDerivedFrom )
1459cdf0e10cSrcweir {
1460cdf0e10cSrcweir SwDrawFrmFmt *pFmt = new SwDrawFrmFmt( GetAttrPool(), rFmtName, pDerivedFrom);
1461cdf0e10cSrcweir GetSpzFrmFmts()->Insert(pFmt,GetSpzFrmFmts()->Count());
1462cdf0e10cSrcweir SetModified();
1463cdf0e10cSrcweir return pFmt;
1464cdf0e10cSrcweir }
1465cdf0e10cSrcweir
1466cdf0e10cSrcweir
GetTblFrmFmtCount(sal_Bool bUsed) const1467cdf0e10cSrcweir sal_uInt16 SwDoc::GetTblFrmFmtCount(sal_Bool bUsed) const
1468cdf0e10cSrcweir {
1469cdf0e10cSrcweir sal_uInt16 nCount = pTblFrmFmtTbl->Count();
1470cdf0e10cSrcweir if(bUsed)
1471cdf0e10cSrcweir {
1472cdf0e10cSrcweir SwAutoFmtGetDocNode aGetHt( &GetNodes() );
1473cdf0e10cSrcweir for ( sal_uInt16 i = nCount; i; )
1474cdf0e10cSrcweir {
1475cdf0e10cSrcweir if((*pTblFrmFmtTbl)[--i]->GetInfo( aGetHt ))
1476cdf0e10cSrcweir
1477cdf0e10cSrcweir --nCount;
1478cdf0e10cSrcweir }
1479cdf0e10cSrcweir }
1480cdf0e10cSrcweir
1481cdf0e10cSrcweir return nCount;
1482cdf0e10cSrcweir }
1483cdf0e10cSrcweir
1484cdf0e10cSrcweir
GetTblFrmFmt(sal_uInt16 nFmt,sal_Bool bUsed) const1485cdf0e10cSrcweir SwFrmFmt& SwDoc::GetTblFrmFmt(sal_uInt16 nFmt, sal_Bool bUsed ) const
1486cdf0e10cSrcweir {
1487cdf0e10cSrcweir sal_uInt16 nRemoved = 0;
1488cdf0e10cSrcweir if(bUsed)
1489cdf0e10cSrcweir {
1490cdf0e10cSrcweir SwAutoFmtGetDocNode aGetHt( &GetNodes() );
1491cdf0e10cSrcweir for ( sal_uInt16 i = 0; i <= nFmt; i++ )
1492cdf0e10cSrcweir {
1493cdf0e10cSrcweir while ( (*pTblFrmFmtTbl)[ i + nRemoved]->GetInfo( aGetHt ))
1494cdf0e10cSrcweir {
1495cdf0e10cSrcweir nRemoved++;
1496cdf0e10cSrcweir }
1497cdf0e10cSrcweir }
1498cdf0e10cSrcweir }
1499cdf0e10cSrcweir return *((*pTblFrmFmtTbl)[nRemoved + nFmt]);
1500cdf0e10cSrcweir }
1501cdf0e10cSrcweir
MakeTblFrmFmt(const String & rFmtName,SwFrmFmt * pDerivedFrom)1502cdf0e10cSrcweir SwTableFmt* SwDoc::MakeTblFrmFmt( const String &rFmtName,
1503cdf0e10cSrcweir SwFrmFmt *pDerivedFrom )
1504cdf0e10cSrcweir {
1505cdf0e10cSrcweir SwTableFmt* pFmt = new SwTableFmt( GetAttrPool(), rFmtName, pDerivedFrom );
1506cdf0e10cSrcweir pTblFrmFmtTbl->Insert( pFmt, pTblFrmFmtTbl->Count() );
1507cdf0e10cSrcweir SetModified();
1508cdf0e10cSrcweir
1509cdf0e10cSrcweir return pFmt;
1510cdf0e10cSrcweir }
1511cdf0e10cSrcweir
MakeFrmFmt(const String & rFmtName,SwFrmFmt * pDerivedFrom,sal_Bool bBroadcast,sal_Bool bAuto)1512cdf0e10cSrcweir SwFrmFmt *SwDoc::MakeFrmFmt(const String &rFmtName,
1513cdf0e10cSrcweir SwFrmFmt *pDerivedFrom,
1514cdf0e10cSrcweir sal_Bool bBroadcast, sal_Bool bAuto)
1515cdf0e10cSrcweir {
1516cdf0e10cSrcweir
1517cdf0e10cSrcweir SwFrmFmt *pFmt = new SwFrmFmt( GetAttrPool(), rFmtName, pDerivedFrom );
1518cdf0e10cSrcweir
1519cdf0e10cSrcweir pFmt->SetAuto(bAuto);
1520cdf0e10cSrcweir pFrmFmtTbl->Insert( pFmt, pFrmFmtTbl->Count());
1521cdf0e10cSrcweir SetModified();
1522cdf0e10cSrcweir
1523cdf0e10cSrcweir if (bBroadcast)
1524cdf0e10cSrcweir {
1525cdf0e10cSrcweir BroadcastStyleOperation(rFmtName, SFX_STYLE_FAMILY_PARA,
1526cdf0e10cSrcweir SFX_STYLESHEET_CREATED);
1527cdf0e10cSrcweir
1528cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1529cdf0e10cSrcweir {
1530cdf0e10cSrcweir SwUndo * pUndo = new SwUndoFrmFmtCreate(pFmt, pDerivedFrom, this);
1531cdf0e10cSrcweir
1532cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo(pUndo);
1533cdf0e10cSrcweir }
1534cdf0e10cSrcweir }
1535cdf0e10cSrcweir
1536cdf0e10cSrcweir return pFmt;
1537cdf0e10cSrcweir }
1538cdf0e10cSrcweir
_MakeFrmFmt(const String & rFmtName,SwFmt * pDerivedFrom,sal_Bool bBroadcast,sal_Bool bAuto)1539cdf0e10cSrcweir SwFmt *SwDoc::_MakeFrmFmt(const String &rFmtName,
1540cdf0e10cSrcweir SwFmt *pDerivedFrom,
1541cdf0e10cSrcweir sal_Bool bBroadcast, sal_Bool bAuto)
1542cdf0e10cSrcweir {
1543cdf0e10cSrcweir SwFrmFmt *pFrmFmt = dynamic_cast<SwFrmFmt*>(pDerivedFrom);
1544cdf0e10cSrcweir pFrmFmt = MakeFrmFmt( rFmtName, pFrmFmt, bBroadcast, bAuto );
1545cdf0e10cSrcweir return dynamic_cast<SwFmt*>(pFrmFmt);
1546cdf0e10cSrcweir }
1547cdf0e10cSrcweir
1548cdf0e10cSrcweir
1549cdf0e10cSrcweir // --> OD 2005-01-13 #i40550# - add parameter <bAuto> - not relevant
MakeCharFmt(const String & rFmtName,SwCharFmt * pDerivedFrom,sal_Bool bBroadcast,sal_Bool)1550cdf0e10cSrcweir SwCharFmt *SwDoc::MakeCharFmt( const String &rFmtName,
1551cdf0e10cSrcweir SwCharFmt *pDerivedFrom,
1552cdf0e10cSrcweir sal_Bool bBroadcast,
1553cdf0e10cSrcweir sal_Bool )
1554cdf0e10cSrcweir // <--
1555cdf0e10cSrcweir {
1556cdf0e10cSrcweir SwCharFmt *pFmt = new SwCharFmt( GetAttrPool(), rFmtName, pDerivedFrom );
1557cdf0e10cSrcweir pCharFmtTbl->Insert( pFmt, pCharFmtTbl->Count() );
1558cdf0e10cSrcweir pFmt->SetAuto( sal_False );
1559cdf0e10cSrcweir SetModified();
1560cdf0e10cSrcweir
1561cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1562cdf0e10cSrcweir {
1563cdf0e10cSrcweir SwUndo * pUndo = new SwUndoCharFmtCreate(pFmt, pDerivedFrom, this);
1564cdf0e10cSrcweir
1565cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo(pUndo);
1566cdf0e10cSrcweir }
1567cdf0e10cSrcweir
1568cdf0e10cSrcweir if (bBroadcast)
1569cdf0e10cSrcweir {
1570cdf0e10cSrcweir BroadcastStyleOperation(rFmtName, SFX_STYLE_FAMILY_CHAR,
1571cdf0e10cSrcweir SFX_STYLESHEET_CREATED);
1572cdf0e10cSrcweir }
1573cdf0e10cSrcweir
1574cdf0e10cSrcweir return pFmt;
1575cdf0e10cSrcweir }
1576cdf0e10cSrcweir
_MakeCharFmt(const String & rFmtName,SwFmt * pDerivedFrom,sal_Bool bBroadcast,sal_Bool bAuto)1577cdf0e10cSrcweir SwFmt *SwDoc::_MakeCharFmt(const String &rFmtName,
1578cdf0e10cSrcweir SwFmt *pDerivedFrom,
1579cdf0e10cSrcweir sal_Bool bBroadcast, sal_Bool bAuto)
1580cdf0e10cSrcweir {
1581cdf0e10cSrcweir SwCharFmt *pCharFmt = dynamic_cast<SwCharFmt*>(pDerivedFrom);
1582cdf0e10cSrcweir pCharFmt = MakeCharFmt( rFmtName, pCharFmt, bBroadcast, bAuto );
1583cdf0e10cSrcweir return dynamic_cast<SwFmt*>(pCharFmt);
1584cdf0e10cSrcweir }
1585cdf0e10cSrcweir
1586cdf0e10cSrcweir
1587cdf0e10cSrcweir /*
1588cdf0e10cSrcweir * Erzeugen der FormatCollections
1589cdf0e10cSrcweir */
1590cdf0e10cSrcweir // TXT
1591cdf0e10cSrcweir // --> OD 2005-01-13 #i40550# - add parameter <bAuto> - not relevant
MakeTxtFmtColl(const String & rFmtName,SwTxtFmtColl * pDerivedFrom,sal_Bool bBroadcast,sal_Bool)1592cdf0e10cSrcweir SwTxtFmtColl* SwDoc::MakeTxtFmtColl( const String &rFmtName,
1593cdf0e10cSrcweir SwTxtFmtColl *pDerivedFrom,
1594cdf0e10cSrcweir sal_Bool bBroadcast,
1595cdf0e10cSrcweir sal_Bool )
1596cdf0e10cSrcweir // <--
1597cdf0e10cSrcweir {
1598cdf0e10cSrcweir SwTxtFmtColl *pFmtColl = new SwTxtFmtColl( GetAttrPool(), rFmtName,
1599cdf0e10cSrcweir pDerivedFrom );
1600cdf0e10cSrcweir pTxtFmtCollTbl->Insert(pFmtColl, pTxtFmtCollTbl->Count());
1601cdf0e10cSrcweir pFmtColl->SetAuto( sal_False );
1602cdf0e10cSrcweir SetModified();
1603cdf0e10cSrcweir
1604cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1605cdf0e10cSrcweir {
1606cdf0e10cSrcweir SwUndo * pUndo = new SwUndoTxtFmtCollCreate(pFmtColl, pDerivedFrom,
1607cdf0e10cSrcweir this);
1608cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo(pUndo);
1609cdf0e10cSrcweir }
1610cdf0e10cSrcweir
1611cdf0e10cSrcweir if (bBroadcast)
1612cdf0e10cSrcweir BroadcastStyleOperation(rFmtName, SFX_STYLE_FAMILY_PARA,
1613cdf0e10cSrcweir SFX_STYLESHEET_CREATED);
1614cdf0e10cSrcweir
1615cdf0e10cSrcweir return pFmtColl;
1616cdf0e10cSrcweir }
1617cdf0e10cSrcweir
_MakeTxtFmtColl(const String & rFmtName,SwFmt * pDerivedFrom,sal_Bool bBroadcast,sal_Bool bAuto)1618cdf0e10cSrcweir SwFmt *SwDoc::_MakeTxtFmtColl(const String &rFmtName,
1619cdf0e10cSrcweir SwFmt *pDerivedFrom,
1620cdf0e10cSrcweir sal_Bool bBroadcast, sal_Bool bAuto)
1621cdf0e10cSrcweir {
1622cdf0e10cSrcweir SwTxtFmtColl *pTxtFmtColl = dynamic_cast<SwTxtFmtColl*>(pDerivedFrom);
1623cdf0e10cSrcweir pTxtFmtColl = MakeTxtFmtColl( rFmtName, pTxtFmtColl, bBroadcast, bAuto );
1624cdf0e10cSrcweir return dynamic_cast<SwFmt*>(pTxtFmtColl);
1625cdf0e10cSrcweir }
1626cdf0e10cSrcweir
1627cdf0e10cSrcweir
1628cdf0e10cSrcweir //FEATURE::CONDCOLL
MakeCondTxtFmtColl(const String & rFmtName,SwTxtFmtColl * pDerivedFrom,sal_Bool bBroadcast)1629cdf0e10cSrcweir SwConditionTxtFmtColl* SwDoc::MakeCondTxtFmtColl( const String &rFmtName,
1630cdf0e10cSrcweir SwTxtFmtColl *pDerivedFrom,
1631cdf0e10cSrcweir sal_Bool bBroadcast)
1632cdf0e10cSrcweir {
1633cdf0e10cSrcweir SwConditionTxtFmtColl*pFmtColl = new SwConditionTxtFmtColl( GetAttrPool(),
1634cdf0e10cSrcweir rFmtName, pDerivedFrom );
1635cdf0e10cSrcweir pTxtFmtCollTbl->Insert(pFmtColl, pTxtFmtCollTbl->Count());
1636cdf0e10cSrcweir pFmtColl->SetAuto( sal_False );
1637cdf0e10cSrcweir SetModified();
1638cdf0e10cSrcweir
1639cdf0e10cSrcweir if (bBroadcast)
1640cdf0e10cSrcweir BroadcastStyleOperation(rFmtName, SFX_STYLE_FAMILY_PARA,
1641cdf0e10cSrcweir SFX_STYLESHEET_CREATED);
1642cdf0e10cSrcweir
1643cdf0e10cSrcweir return pFmtColl;
1644cdf0e10cSrcweir }
1645cdf0e10cSrcweir //FEATURE::CONDCOLL
1646cdf0e10cSrcweir
1647cdf0e10cSrcweir // GRF
1648cdf0e10cSrcweir
MakeGrfFmtColl(const String & rFmtName,SwGrfFmtColl * pDerivedFrom)1649cdf0e10cSrcweir SwGrfFmtColl* SwDoc::MakeGrfFmtColl( const String &rFmtName,
1650cdf0e10cSrcweir SwGrfFmtColl *pDerivedFrom )
1651cdf0e10cSrcweir {
1652cdf0e10cSrcweir SwGrfFmtColl *pFmtColl = new SwGrfFmtColl( GetAttrPool(), rFmtName,
1653cdf0e10cSrcweir pDerivedFrom );
1654cdf0e10cSrcweir pGrfFmtCollTbl->Insert( pFmtColl, pGrfFmtCollTbl->Count() );
1655cdf0e10cSrcweir pFmtColl->SetAuto( sal_False );
1656cdf0e10cSrcweir SetModified();
1657cdf0e10cSrcweir return pFmtColl;
1658cdf0e10cSrcweir }
1659cdf0e10cSrcweir
DelTxtFmtColl(sal_uInt16 nFmtColl,sal_Bool bBroadcast)1660cdf0e10cSrcweir void SwDoc::DelTxtFmtColl(sal_uInt16 nFmtColl, sal_Bool bBroadcast)
1661cdf0e10cSrcweir {
1662cdf0e10cSrcweir ASSERT( nFmtColl, "Remove fuer Coll 0." );
1663cdf0e10cSrcweir
1664cdf0e10cSrcweir // Wer hat die zu loeschende als Next
1665cdf0e10cSrcweir SwTxtFmtColl *pDel = (*pTxtFmtCollTbl)[nFmtColl];
1666cdf0e10cSrcweir if( pDfltTxtFmtColl == pDel )
1667cdf0e10cSrcweir return; // default nie loeschen !!
1668cdf0e10cSrcweir
1669cdf0e10cSrcweir if (bBroadcast)
1670cdf0e10cSrcweir BroadcastStyleOperation(pDel->GetName(), SFX_STYLE_FAMILY_PARA,
1671cdf0e10cSrcweir SFX_STYLESHEET_ERASED);
1672cdf0e10cSrcweir
1673cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1674cdf0e10cSrcweir {
1675cdf0e10cSrcweir SwUndoTxtFmtCollDelete * pUndo =
1676cdf0e10cSrcweir new SwUndoTxtFmtCollDelete(pDel, this);
1677cdf0e10cSrcweir
1678cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo(pUndo);
1679cdf0e10cSrcweir }
1680cdf0e10cSrcweir
1681cdf0e10cSrcweir // Die FmtColl austragen
1682cdf0e10cSrcweir pTxtFmtCollTbl->Remove(nFmtColl);
1683cdf0e10cSrcweir // Next korrigieren
1684cdf0e10cSrcweir pTxtFmtCollTbl->ForEach( 1, pTxtFmtCollTbl->Count(),
1685cdf0e10cSrcweir &SetTxtFmtCollNext, pDel );
1686cdf0e10cSrcweir delete pDel;
1687cdf0e10cSrcweir SetModified();
1688cdf0e10cSrcweir }
1689cdf0e10cSrcweir
DelTxtFmtColl(SwTxtFmtColl * pColl,sal_Bool bBroadcast)1690cdf0e10cSrcweir void SwDoc::DelTxtFmtColl( SwTxtFmtColl *pColl, sal_Bool bBroadcast )
1691cdf0e10cSrcweir {
1692cdf0e10cSrcweir sal_uInt16 nFmt = pTxtFmtCollTbl->GetPos( pColl );
1693cdf0e10cSrcweir ASSERT( USHRT_MAX != nFmt, "Collection not found," );
1694cdf0e10cSrcweir DelTxtFmtColl( nFmt, bBroadcast );
1695cdf0e10cSrcweir }
1696cdf0e10cSrcweir
lcl_SetTxtFmtColl(const SwNodePtr & rpNode,void * pArgs)1697cdf0e10cSrcweir sal_Bool lcl_SetTxtFmtColl( const SwNodePtr& rpNode, void* pArgs )
1698cdf0e10cSrcweir {
1699*808c4840SOliver-Rainer Wittmann SwCntntNode* pCNd = (SwCntntNode*) rpNode->GetTxtNode();
1700*808c4840SOliver-Rainer Wittmann if ( pCNd )
1701*808c4840SOliver-Rainer Wittmann {
1702*808c4840SOliver-Rainer Wittmann ParaRstFmt* pPara = (ParaRstFmt*) pArgs;
1703cdf0e10cSrcweir
1704*808c4840SOliver-Rainer Wittmann SwTxtFmtColl* pFmt = static_cast< SwTxtFmtColl* >( pPara->pFmtColl );
1705*808c4840SOliver-Rainer Wittmann if ( pPara->bReset )
1706cdf0e10cSrcweir {
1707cdf0e10cSrcweir
1708*808c4840SOliver-Rainer Wittmann lcl_RstAttr( pCNd, pPara );
1709cdf0e10cSrcweir
1710cdf0e10cSrcweir // check, if paragraph style has changed
1711cdf0e10cSrcweir if ( pPara->bResetListAttrs &&
1712cdf0e10cSrcweir pFmt != pCNd->GetFmtColl() &&
1713cdf0e10cSrcweir pFmt->GetItemState( RES_PARATR_NUMRULE ) == SFX_ITEM_SET )
1714cdf0e10cSrcweir {
1715cdf0e10cSrcweir // --> OD 2009-09-07 #b6876367#
1716cdf0e10cSrcweir // Check, if the list style of the paragraph will change.
1717cdf0e10cSrcweir bool bChangeOfListStyleAtParagraph( true );
1718cdf0e10cSrcweir SwTxtNode* pTNd( dynamic_cast<SwTxtNode*>(pCNd) );
1719cdf0e10cSrcweir ASSERT( pTNd,
1720cdf0e10cSrcweir "<lcl_SetTxtFmtColl(..)> - text node expected -> crash" );
1721cdf0e10cSrcweir {
1722cdf0e10cSrcweir SwNumRule* pNumRuleAtParagraph( pTNd->GetNumRule() );
1723cdf0e10cSrcweir if ( pNumRuleAtParagraph )
1724cdf0e10cSrcweir {
1725cdf0e10cSrcweir const SwNumRuleItem& rNumRuleItemAtParagraphStyle =
1726cdf0e10cSrcweir pFmt->GetNumRule();
1727cdf0e10cSrcweir if ( rNumRuleItemAtParagraphStyle.GetValue() ==
1728cdf0e10cSrcweir pNumRuleAtParagraph->GetName() )
1729cdf0e10cSrcweir {
1730cdf0e10cSrcweir bChangeOfListStyleAtParagraph = false;
1731cdf0e10cSrcweir }
1732cdf0e10cSrcweir }
1733cdf0e10cSrcweir }
1734cdf0e10cSrcweir
1735cdf0e10cSrcweir if ( bChangeOfListStyleAtParagraph )
1736cdf0e10cSrcweir {
1737cdf0e10cSrcweir std::auto_ptr< SwRegHistory > pRegH;
1738cdf0e10cSrcweir if ( pPara->pHistory )
1739cdf0e10cSrcweir {
1740cdf0e10cSrcweir pRegH.reset( new SwRegHistory( pTNd, *pTNd, pPara->pHistory ) );
1741cdf0e10cSrcweir }
1742cdf0e10cSrcweir
1743cdf0e10cSrcweir pCNd->ResetAttr( RES_PARATR_NUMRULE );
1744cdf0e10cSrcweir
1745cdf0e10cSrcweir // reset all list attributes
1746cdf0e10cSrcweir pCNd->ResetAttr( RES_PARATR_LIST_LEVEL );
1747cdf0e10cSrcweir pCNd->ResetAttr( RES_PARATR_LIST_ISRESTART );
1748cdf0e10cSrcweir pCNd->ResetAttr( RES_PARATR_LIST_RESTARTVALUE );
1749cdf0e10cSrcweir pCNd->ResetAttr( RES_PARATR_LIST_ISCOUNTED );
1750cdf0e10cSrcweir pCNd->ResetAttr( RES_PARATR_LIST_ID );
1751cdf0e10cSrcweir }
1752cdf0e10cSrcweir }
1753cdf0e10cSrcweir }
1754cdf0e10cSrcweir
1755cdf0e10cSrcweir // erst in die History aufnehmen, damit ggfs. alte Daten
1756cdf0e10cSrcweir // gesichert werden koennen
1757cdf0e10cSrcweir if( pPara->pHistory )
1758cdf0e10cSrcweir pPara->pHistory->Add( pCNd->GetFmtColl(), pCNd->GetIndex(),
1759cdf0e10cSrcweir ND_TEXTNODE );
1760cdf0e10cSrcweir
1761cdf0e10cSrcweir pCNd->ChgFmtColl( pFmt );
1762cdf0e10cSrcweir
1763cdf0e10cSrcweir pPara->nWhich++;
1764cdf0e10cSrcweir }
1765cdf0e10cSrcweir return sal_True;
1766cdf0e10cSrcweir }
1767cdf0e10cSrcweir
1768*808c4840SOliver-Rainer Wittmann
SetTxtFmtColl(const SwPaM & rRg,SwTxtFmtColl * pFmt,const bool bReset,const bool bResetListAttrs)1769*808c4840SOliver-Rainer Wittmann sal_Bool SwDoc::SetTxtFmtColl(
1770*808c4840SOliver-Rainer Wittmann const SwPaM &rRg,
1771*808c4840SOliver-Rainer Wittmann SwTxtFmtColl *pFmt,
1772*808c4840SOliver-Rainer Wittmann const bool bReset,
1773*808c4840SOliver-Rainer Wittmann const bool bResetListAttrs )
1774cdf0e10cSrcweir {
1775cdf0e10cSrcweir SwDataChanged aTmp( rRg, 0 );
1776cdf0e10cSrcweir const SwPosition *pStt = rRg.Start(), *pEnd = rRg.End();
1777cdf0e10cSrcweir SwHistory* pHst = 0;
1778cdf0e10cSrcweir sal_Bool bRet = sal_True;
1779cdf0e10cSrcweir
1780cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1781cdf0e10cSrcweir {
1782cdf0e10cSrcweir SwUndoFmtColl* pUndo = new SwUndoFmtColl( rRg, pFmt,
1783cdf0e10cSrcweir bReset,
1784cdf0e10cSrcweir bResetListAttrs );
1785*808c4840SOliver-Rainer Wittmann pHst = pUndo->GetHistory();
1786cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo(pUndo);
1787cdf0e10cSrcweir }
1788cdf0e10cSrcweir
1789cdf0e10cSrcweir ParaRstFmt aPara( pStt, pEnd, pHst );
1790cdf0e10cSrcweir aPara.pFmtColl = pFmt;
1791cdf0e10cSrcweir aPara.bReset = bReset;
1792cdf0e10cSrcweir aPara.bResetListAttrs = bResetListAttrs;
1793cdf0e10cSrcweir
1794cdf0e10cSrcweir GetNodes().ForEach( pStt->nNode.GetIndex(), pEnd->nNode.GetIndex()+1,
1795cdf0e10cSrcweir lcl_SetTxtFmtColl, &aPara );
1796*808c4840SOliver-Rainer Wittmann if ( !aPara.nWhich )
1797cdf0e10cSrcweir bRet = sal_False; // keinen gueltigen Node gefunden
1798cdf0e10cSrcweir
1799*808c4840SOliver-Rainer Wittmann if ( bRet )
1800*808c4840SOliver-Rainer Wittmann {
1801*808c4840SOliver-Rainer Wittmann SetModified();
1802*808c4840SOliver-Rainer Wittmann }
1803*808c4840SOliver-Rainer Wittmann
1804*808c4840SOliver-Rainer Wittmann return bRet;
1805cdf0e10cSrcweir }
1806cdf0e10cSrcweir
1807cdf0e10cSrcweir
1808cdf0e10cSrcweir // ---- Kopiere die Formate in sich selbst (SwDoc) ----------------------
1809cdf0e10cSrcweir
CopyFmt(const SwFmt & rFmt,const SvPtrarr & rFmtArr,FNCopyFmt fnCopyFmt,const SwFmt & rDfltFmt)1810cdf0e10cSrcweir SwFmt* SwDoc::CopyFmt( const SwFmt& rFmt,
1811cdf0e10cSrcweir const SvPtrarr& rFmtArr,
1812cdf0e10cSrcweir FNCopyFmt fnCopyFmt, const SwFmt& rDfltFmt )
1813cdf0e10cSrcweir {
1814cdf0e10cSrcweir // kein-Autoformat || default Format || Collection-Format
1815cdf0e10cSrcweir // dann suche danach.
1816cdf0e10cSrcweir if( !rFmt.IsAuto() || !rFmt.GetRegisteredIn() )
1817cdf0e10cSrcweir for( sal_uInt16 n = 0; n < rFmtArr.Count(); n++ )
1818cdf0e10cSrcweir {
1819cdf0e10cSrcweir // ist die Vorlage schon im Doc vorhanden ??
1820cdf0e10cSrcweir if( ((SwFmt*)rFmtArr[n])->GetName().Equals( rFmt.GetName() ))
1821cdf0e10cSrcweir return (SwFmt*)rFmtArr[n];
1822cdf0e10cSrcweir }
1823cdf0e10cSrcweir
1824cdf0e10cSrcweir // suche erstmal nach dem "Parent"
1825cdf0e10cSrcweir SwFmt* pParent = (SwFmt*)&rDfltFmt;
1826cdf0e10cSrcweir if( rFmt.DerivedFrom() && pParent != rFmt.DerivedFrom() )
1827cdf0e10cSrcweir pParent = CopyFmt( *rFmt.DerivedFrom(), rFmtArr,
1828cdf0e10cSrcweir fnCopyFmt, rDfltFmt );
1829cdf0e10cSrcweir
1830cdf0e10cSrcweir // erzeuge das Format und kopiere die Attribute
1831cdf0e10cSrcweir // --> OD 2005-01-13 #i40550#
1832cdf0e10cSrcweir SwFmt* pNewFmt = (this->*fnCopyFmt)( rFmt.GetName(), pParent, sal_False, sal_True );
1833cdf0e10cSrcweir // <--
1834cdf0e10cSrcweir pNewFmt->SetAuto( rFmt.IsAuto() );
1835cdf0e10cSrcweir pNewFmt->CopyAttrs( rFmt, sal_True ); // kopiere Attribute
1836cdf0e10cSrcweir
1837cdf0e10cSrcweir pNewFmt->SetPoolFmtId( rFmt.GetPoolFmtId() );
1838cdf0e10cSrcweir pNewFmt->SetPoolHelpId( rFmt.GetPoolHelpId() );
1839cdf0e10cSrcweir
1840cdf0e10cSrcweir // HelpFile-Id immer auf dflt setzen !!
1841cdf0e10cSrcweir pNewFmt->SetPoolHlpFileId( UCHAR_MAX );
1842cdf0e10cSrcweir
1843cdf0e10cSrcweir return pNewFmt;
1844cdf0e10cSrcweir }
1845cdf0e10cSrcweir
1846cdf0e10cSrcweir
1847cdf0e10cSrcweir // ---- kopiere das Frame-Format --------
CopyFrmFmt(const SwFrmFmt & rFmt)1848cdf0e10cSrcweir SwFrmFmt* SwDoc::CopyFrmFmt( const SwFrmFmt& rFmt )
1849cdf0e10cSrcweir {
1850cdf0e10cSrcweir
1851cdf0e10cSrcweir return (SwFrmFmt*)CopyFmt( rFmt, *GetFrmFmts(), &SwDoc::_MakeFrmFmt,
1852cdf0e10cSrcweir *GetDfltFrmFmt() );
1853cdf0e10cSrcweir }
1854cdf0e10cSrcweir
1855cdf0e10cSrcweir // ---- kopiere das Char-Format --------
CopyCharFmt(const SwCharFmt & rFmt)1856cdf0e10cSrcweir SwCharFmt* SwDoc::CopyCharFmt( const SwCharFmt& rFmt )
1857cdf0e10cSrcweir {
1858cdf0e10cSrcweir return (SwCharFmt*)CopyFmt( rFmt, *GetCharFmts(),
1859cdf0e10cSrcweir &SwDoc::_MakeCharFmt,
1860cdf0e10cSrcweir *GetDfltCharFmt() );
1861cdf0e10cSrcweir }
1862cdf0e10cSrcweir
1863cdf0e10cSrcweir
1864cdf0e10cSrcweir // --- Kopiere TextNodes ----
1865cdf0e10cSrcweir
CopyTxtColl(const SwTxtFmtColl & rColl)1866cdf0e10cSrcweir SwTxtFmtColl* SwDoc::CopyTxtColl( const SwTxtFmtColl& rColl )
1867cdf0e10cSrcweir {
1868cdf0e10cSrcweir SwTxtFmtColl* pNewColl = FindTxtFmtCollByName( rColl.GetName() );
1869cdf0e10cSrcweir if( pNewColl )
1870cdf0e10cSrcweir return pNewColl;
1871cdf0e10cSrcweir
1872cdf0e10cSrcweir // suche erstmal nach dem "Parent"
1873cdf0e10cSrcweir SwTxtFmtColl* pParent = pDfltTxtFmtColl;
1874cdf0e10cSrcweir if( pParent != rColl.DerivedFrom() )
1875cdf0e10cSrcweir pParent = CopyTxtColl( *(SwTxtFmtColl*)rColl.DerivedFrom() );
1876cdf0e10cSrcweir
1877cdf0e10cSrcweir
1878cdf0e10cSrcweir //FEATURE::CONDCOLL
1879cdf0e10cSrcweir if( RES_CONDTXTFMTCOLL == rColl.Which() )
1880cdf0e10cSrcweir {
1881cdf0e10cSrcweir pNewColl = new SwConditionTxtFmtColl( GetAttrPool(), rColl.GetName(),
1882cdf0e10cSrcweir pParent);
1883cdf0e10cSrcweir pTxtFmtCollTbl->Insert( pNewColl, pTxtFmtCollTbl->Count() );
1884cdf0e10cSrcweir pNewColl->SetAuto( sal_False );
1885cdf0e10cSrcweir SetModified();
1886cdf0e10cSrcweir
1887cdf0e10cSrcweir // Kopiere noch die Bedingungen
1888cdf0e10cSrcweir ((SwConditionTxtFmtColl*)pNewColl)->SetConditions(
1889cdf0e10cSrcweir ((SwConditionTxtFmtColl&)rColl).GetCondColls() );
1890cdf0e10cSrcweir }
1891cdf0e10cSrcweir else
1892cdf0e10cSrcweir //FEATURE::CONDCOLL
1893cdf0e10cSrcweir pNewColl = MakeTxtFmtColl( rColl.GetName(), pParent );
1894cdf0e10cSrcweir
1895cdf0e10cSrcweir // kopiere jetzt noch die Auto-Formate oder kopiere die Attribute
1896cdf0e10cSrcweir pNewColl->CopyAttrs( rColl, sal_True );
1897cdf0e10cSrcweir
1898*808c4840SOliver-Rainer Wittmann // setze noch den Outline-Level
1899*808c4840SOliver-Rainer Wittmann if ( rColl.IsAssignedToListLevelOfOutlineStyle() )
1900*808c4840SOliver-Rainer Wittmann pNewColl->AssignToListLevelOfOutlineStyle( rColl.GetAssignedOutlineStyleLevel() );
1901*808c4840SOliver-Rainer Wittmann
1902*808c4840SOliver-Rainer Wittmann pNewColl->SetPoolFmtId( rColl.GetPoolFmtId() );
1903*808c4840SOliver-Rainer Wittmann pNewColl->SetPoolHelpId( rColl.GetPoolHelpId() );
1904cdf0e10cSrcweir
1905cdf0e10cSrcweir // HelpFile-Id immer auf dflt setzen !!
1906cdf0e10cSrcweir pNewColl->SetPoolHlpFileId( UCHAR_MAX );
1907cdf0e10cSrcweir
1908cdf0e10cSrcweir if( &rColl.GetNextTxtFmtColl() != &rColl )
1909cdf0e10cSrcweir pNewColl->SetNextTxtFmtColl( *CopyTxtColl( rColl.GetNextTxtFmtColl() ));
1910cdf0e10cSrcweir
1911cdf0e10cSrcweir // ggfs. die NumRule erzeugen
1912cdf0e10cSrcweir if( this != rColl.GetDoc() )
1913cdf0e10cSrcweir {
1914cdf0e10cSrcweir const SfxPoolItem* pItem;
1915cdf0e10cSrcweir if( SFX_ITEM_SET == pNewColl->GetItemState( RES_PARATR_NUMRULE,
1916cdf0e10cSrcweir sal_False, &pItem ))
1917cdf0e10cSrcweir {
1918cdf0e10cSrcweir const SwNumRule* pRule;
1919cdf0e10cSrcweir const String& rName = ((SwNumRuleItem*)pItem)->GetValue();
1920cdf0e10cSrcweir if( rName.Len() &&
1921cdf0e10cSrcweir 0 != ( pRule = rColl.GetDoc()->FindNumRulePtr( rName )) &&
1922cdf0e10cSrcweir !pRule->IsAutoRule() )
1923cdf0e10cSrcweir {
1924cdf0e10cSrcweir SwNumRule* pDestRule = FindNumRulePtr( rName );
1925cdf0e10cSrcweir if( pDestRule )
1926cdf0e10cSrcweir pDestRule->SetInvalidRule( sal_True );
1927cdf0e10cSrcweir else
1928cdf0e10cSrcweir MakeNumRule( rName, pRule );
1929cdf0e10cSrcweir }
1930cdf0e10cSrcweir }
1931cdf0e10cSrcweir }
1932cdf0e10cSrcweir return pNewColl;
1933cdf0e10cSrcweir }
1934cdf0e10cSrcweir
1935cdf0e10cSrcweir // --- Kopiere GrafikNodes ----
1936cdf0e10cSrcweir
CopyGrfColl(const SwGrfFmtColl & rColl)1937cdf0e10cSrcweir SwGrfFmtColl* SwDoc::CopyGrfColl( const SwGrfFmtColl& rColl )
1938cdf0e10cSrcweir {
1939cdf0e10cSrcweir SwGrfFmtColl* pNewColl = FindGrfFmtCollByName( rColl.GetName() );
1940cdf0e10cSrcweir if( pNewColl )
1941cdf0e10cSrcweir return pNewColl;
1942cdf0e10cSrcweir
1943cdf0e10cSrcweir // suche erstmal nach dem "Parent"
1944cdf0e10cSrcweir SwGrfFmtColl* pParent = pDfltGrfFmtColl;
1945cdf0e10cSrcweir if( pParent != rColl.DerivedFrom() )
1946cdf0e10cSrcweir pParent = CopyGrfColl( *(SwGrfFmtColl*)rColl.DerivedFrom() );
1947cdf0e10cSrcweir
1948cdf0e10cSrcweir // falls nicht, so kopiere sie
1949cdf0e10cSrcweir pNewColl = MakeGrfFmtColl( rColl.GetName(), pParent );
1950cdf0e10cSrcweir
1951cdf0e10cSrcweir // noch die Attribute kopieren
1952cdf0e10cSrcweir pNewColl->CopyAttrs( rColl );
1953cdf0e10cSrcweir
1954cdf0e10cSrcweir pNewColl->SetPoolFmtId( rColl.GetPoolFmtId() );
1955cdf0e10cSrcweir pNewColl->SetPoolHelpId( rColl.GetPoolHelpId() );
1956cdf0e10cSrcweir
1957cdf0e10cSrcweir // HelpFile-Id immer auf dflt setzen !!
1958cdf0e10cSrcweir pNewColl->SetPoolHlpFileId( UCHAR_MAX );
1959cdf0e10cSrcweir
1960cdf0e10cSrcweir return pNewColl;
1961cdf0e10cSrcweir }
1962cdf0e10cSrcweir
lcl_FindPageDesc(const SwPageDescs & rArr,const String & rName)1963cdf0e10cSrcweir SwPageDesc* lcl_FindPageDesc( const SwPageDescs& rArr, const String& rName )
1964cdf0e10cSrcweir {
1965cdf0e10cSrcweir for( sal_uInt16 n = rArr.Count(); n; )
1966cdf0e10cSrcweir {
1967cdf0e10cSrcweir SwPageDesc* pDesc = rArr[ --n ];
1968cdf0e10cSrcweir if( pDesc->GetName() == rName )
1969cdf0e10cSrcweir return pDesc;
1970cdf0e10cSrcweir }
1971cdf0e10cSrcweir return 0;
1972cdf0e10cSrcweir }
1973cdf0e10cSrcweir
CopyFmtArr(const SvPtrarr & rSourceArr,SvPtrarr & rDestArr,FNCopyFmt fnCopyFmt,SwFmt & rDfltFmt)1974cdf0e10cSrcweir void SwDoc::CopyFmtArr( const SvPtrarr& rSourceArr,
1975cdf0e10cSrcweir SvPtrarr& rDestArr,
1976cdf0e10cSrcweir FNCopyFmt fnCopyFmt,
1977cdf0e10cSrcweir SwFmt& rDfltFmt )
1978cdf0e10cSrcweir {
1979cdf0e10cSrcweir sal_uInt16 nSrc;
1980cdf0e10cSrcweir SwFmt* pSrc, *pDest;
1981cdf0e10cSrcweir
1982cdf0e10cSrcweir // 1. Schritt alle Formate anlegen (das 0. ueberspringen - Default!)
1983cdf0e10cSrcweir for( nSrc = rSourceArr.Count(); nSrc > 1; )
1984cdf0e10cSrcweir {
1985cdf0e10cSrcweir pSrc = (SwFmt*)rSourceArr[ --nSrc ];
1986cdf0e10cSrcweir if( pSrc->IsDefault() || pSrc->IsAuto() )
1987cdf0e10cSrcweir continue;
1988cdf0e10cSrcweir
1989cdf0e10cSrcweir if( 0 == FindFmtByName( rDestArr, pSrc->GetName() ) )
1990cdf0e10cSrcweir {
1991cdf0e10cSrcweir if( RES_CONDTXTFMTCOLL == pSrc->Which() )
1992cdf0e10cSrcweir MakeCondTxtFmtColl( pSrc->GetName(), (SwTxtFmtColl*)&rDfltFmt );
1993cdf0e10cSrcweir else
1994cdf0e10cSrcweir // --> OD 2005-01-13 #i40550#
1995cdf0e10cSrcweir (this->*fnCopyFmt)( pSrc->GetName(), &rDfltFmt, sal_False, sal_True );
1996cdf0e10cSrcweir // <--
1997cdf0e10cSrcweir }
1998cdf0e10cSrcweir }
1999cdf0e10cSrcweir
2000cdf0e10cSrcweir // 2. Schritt alle Attribute kopieren, richtige Parents setzen
2001cdf0e10cSrcweir for( nSrc = rSourceArr.Count(); nSrc > 1; )
2002cdf0e10cSrcweir {
2003cdf0e10cSrcweir pSrc = (SwFmt*)rSourceArr[ --nSrc ];
2004cdf0e10cSrcweir if( pSrc->IsDefault() || pSrc->IsAuto() )
2005cdf0e10cSrcweir continue;
2006cdf0e10cSrcweir
2007cdf0e10cSrcweir pDest = FindFmtByName( rDestArr, pSrc->GetName() );
2008cdf0e10cSrcweir pDest->SetAuto( sal_False );
2009cdf0e10cSrcweir pDest->DelDiffs( *pSrc );
2010cdf0e10cSrcweir
2011cdf0e10cSrcweir // #i94285#: existing <SwFmtPageDesc> instance, before copying attributes
2012cdf0e10cSrcweir const SfxPoolItem* pItem;
2013cdf0e10cSrcweir if( &GetAttrPool() != pSrc->GetAttrSet().GetPool() &&
2014cdf0e10cSrcweir SFX_ITEM_SET == pSrc->GetAttrSet().GetItemState(
2015cdf0e10cSrcweir RES_PAGEDESC, sal_False, &pItem ) &&
2016cdf0e10cSrcweir ((SwFmtPageDesc*)pItem)->GetPageDesc() )
2017cdf0e10cSrcweir {
2018cdf0e10cSrcweir SwFmtPageDesc aPageDesc( *(SwFmtPageDesc*)pItem );
2019cdf0e10cSrcweir const String& rNm = aPageDesc.GetPageDesc()->GetName();
2020cdf0e10cSrcweir SwPageDesc* pPageDesc = ::lcl_FindPageDesc( aPageDescs, rNm );
2021cdf0e10cSrcweir if( !pPageDesc )
2022cdf0e10cSrcweir {
2023cdf0e10cSrcweir pPageDesc = aPageDescs[ MakePageDesc( rNm ) ];
2024cdf0e10cSrcweir }
2025cdf0e10cSrcweir aPageDesc.RegisterToPageDesc( *pPageDesc );
2026cdf0e10cSrcweir SwAttrSet aTmpAttrSet( pSrc->GetAttrSet() );
2027cdf0e10cSrcweir aTmpAttrSet.Put( aPageDesc );
2028cdf0e10cSrcweir pDest->SetFmtAttr( aTmpAttrSet );
2029cdf0e10cSrcweir }
2030cdf0e10cSrcweir else
2031cdf0e10cSrcweir {
2032cdf0e10cSrcweir pDest->SetFmtAttr( pSrc->GetAttrSet() );
2033cdf0e10cSrcweir }
2034cdf0e10cSrcweir
2035cdf0e10cSrcweir pDest->SetPoolFmtId( pSrc->GetPoolFmtId() );
2036cdf0e10cSrcweir pDest->SetPoolHelpId( pSrc->GetPoolHelpId() );
2037cdf0e10cSrcweir
2038cdf0e10cSrcweir // HelpFile-Id immer auf dflt setzen !!
2039cdf0e10cSrcweir pDest->SetPoolHlpFileId( UCHAR_MAX );
2040cdf0e10cSrcweir
2041cdf0e10cSrcweir if( pSrc->DerivedFrom() )
2042cdf0e10cSrcweir pDest->SetDerivedFrom( FindFmtByName( rDestArr,
2043cdf0e10cSrcweir pSrc->DerivedFrom()->GetName() ) );
2044cdf0e10cSrcweir if( RES_TXTFMTCOLL == pSrc->Which() ||
2045cdf0e10cSrcweir RES_CONDTXTFMTCOLL == pSrc->Which() )
2046cdf0e10cSrcweir {
2047cdf0e10cSrcweir SwTxtFmtColl* pSrcColl = (SwTxtFmtColl*)pSrc,
2048cdf0e10cSrcweir * pDstColl = (SwTxtFmtColl*)pDest;
2049cdf0e10cSrcweir if( &pSrcColl->GetNextTxtFmtColl() != pSrcColl )
2050cdf0e10cSrcweir pDstColl->SetNextTxtFmtColl( *(SwTxtFmtColl*)FindFmtByName(
2051cdf0e10cSrcweir rDestArr, pSrcColl->GetNextTxtFmtColl().GetName() ) );
2052cdf0e10cSrcweir
2053cdf0e10cSrcweir // setze noch den Outline-Level
2054cdf0e10cSrcweir if(pSrcColl->IsAssignedToListLevelOfOutlineStyle())
2055*808c4840SOliver-Rainer Wittmann pDstColl->AssignToListLevelOfOutlineStyle(pSrcColl->GetAssignedOutlineStyleLevel());
2056cdf0e10cSrcweir
2057cdf0e10cSrcweir //FEATURE::CONDCOLL
2058cdf0e10cSrcweir if( RES_CONDTXTFMTCOLL == pSrc->Which() )
2059cdf0e10cSrcweir // Kopiere noch die Bedingungen
2060cdf0e10cSrcweir // aber erst die alten loeschen!
2061cdf0e10cSrcweir ((SwConditionTxtFmtColl*)pDstColl)->SetConditions(
2062cdf0e10cSrcweir ((SwConditionTxtFmtColl*)pSrc)->GetCondColls() );
2063cdf0e10cSrcweir //FEATURE::CONDCOLL
2064cdf0e10cSrcweir }
2065cdf0e10cSrcweir }
2066cdf0e10cSrcweir }
2067cdf0e10cSrcweir
CopyPageDescHeaderFooterImpl(bool bCpyHeader,const SwFrmFmt & rSrcFmt,SwFrmFmt & rDestFmt)2068cdf0e10cSrcweir void SwDoc::CopyPageDescHeaderFooterImpl( bool bCpyHeader,
2069cdf0e10cSrcweir const SwFrmFmt& rSrcFmt, SwFrmFmt& rDestFmt )
2070cdf0e10cSrcweir {
2071cdf0e10cSrcweir // jetzt noch Header-/Footer-Attribute richtig behandeln
2072cdf0e10cSrcweir // Contenten Nodes Dokumentuebergreifend kopieren!
2073cdf0e10cSrcweir sal_uInt16 nAttr = static_cast<sal_uInt16>( bCpyHeader ? RES_HEADER : RES_FOOTER );
2074cdf0e10cSrcweir const SfxPoolItem* pItem;
2075cdf0e10cSrcweir if( SFX_ITEM_SET != rSrcFmt.GetAttrSet().GetItemState( nAttr, sal_False, &pItem ))
2076cdf0e10cSrcweir return ;
2077cdf0e10cSrcweir
2078cdf0e10cSrcweir // Im Header steht noch der Verweis auf das Format aus dem
2079cdf0e10cSrcweir // anderen Document!!
2080cdf0e10cSrcweir SfxPoolItem* pNewItem = pItem->Clone();
2081cdf0e10cSrcweir
2082cdf0e10cSrcweir SwFrmFmt* pOldFmt;
2083cdf0e10cSrcweir if( bCpyHeader )
2084cdf0e10cSrcweir pOldFmt = ((SwFmtHeader*)pNewItem)->GetHeaderFmt();
2085cdf0e10cSrcweir else
2086cdf0e10cSrcweir pOldFmt = ((SwFmtFooter*)pNewItem)->GetFooterFmt();
2087cdf0e10cSrcweir
2088cdf0e10cSrcweir if( pOldFmt )
2089cdf0e10cSrcweir {
2090cdf0e10cSrcweir SwFrmFmt* pNewFmt = new SwFrmFmt( GetAttrPool(), "CpyDesc",
2091cdf0e10cSrcweir GetDfltFrmFmt() );
2092cdf0e10cSrcweir pNewFmt->CopyAttrs( *pOldFmt, sal_True );
2093cdf0e10cSrcweir
2094cdf0e10cSrcweir if( SFX_ITEM_SET == pNewFmt->GetAttrSet().GetItemState(
2095cdf0e10cSrcweir RES_CNTNT, sal_False, &pItem ))
2096cdf0e10cSrcweir {
2097cdf0e10cSrcweir SwFmtCntnt* pCntnt = (SwFmtCntnt*)pItem;
2098cdf0e10cSrcweir if( pCntnt->GetCntntIdx() )
2099cdf0e10cSrcweir {
2100cdf0e10cSrcweir SwNodeIndex aTmpIdx( GetNodes().GetEndOfAutotext() );
2101cdf0e10cSrcweir const SwNodes& rSrcNds = rSrcFmt.GetDoc()->GetNodes();
2102cdf0e10cSrcweir SwStartNode* pSttNd = GetNodes().MakeEmptySection( aTmpIdx,
2103cdf0e10cSrcweir bCpyHeader
2104cdf0e10cSrcweir ? SwHeaderStartNode
2105cdf0e10cSrcweir : SwFooterStartNode );
2106cdf0e10cSrcweir const SwNode& rCSttNd = pCntnt->GetCntntIdx()->GetNode();
2107cdf0e10cSrcweir SwNodeRange aRg( rCSttNd, 0, *rCSttNd.EndOfSectionNode() );
2108cdf0e10cSrcweir aTmpIdx = *pSttNd->EndOfSectionNode();
2109cdf0e10cSrcweir rSrcNds._Copy( aRg, aTmpIdx );
2110cdf0e10cSrcweir aTmpIdx = *pSttNd;
2111cdf0e10cSrcweir rSrcFmt.GetDoc()->CopyFlyInFlyImpl( aRg, 0, aTmpIdx );
2112cdf0e10cSrcweir pNewFmt->SetFmtAttr( SwFmtCntnt( pSttNd ));
2113cdf0e10cSrcweir }
2114cdf0e10cSrcweir else
2115cdf0e10cSrcweir pNewFmt->ResetFmtAttr( RES_CNTNT );
2116cdf0e10cSrcweir }
2117cdf0e10cSrcweir if( bCpyHeader )
2118cdf0e10cSrcweir ((SwFmtHeader*)pNewItem)->RegisterToFormat(*pNewFmt);
2119cdf0e10cSrcweir else
2120cdf0e10cSrcweir ((SwFmtFooter*)pNewItem)->RegisterToFormat(*pNewFmt);
2121cdf0e10cSrcweir rDestFmt.SetFmtAttr( *pNewItem );
2122cdf0e10cSrcweir }
2123cdf0e10cSrcweir delete pNewItem;
2124cdf0e10cSrcweir }
2125cdf0e10cSrcweir
CopyPageDesc(const SwPageDesc & rSrcDesc,SwPageDesc & rDstDesc,sal_Bool bCopyPoolIds)2126cdf0e10cSrcweir void SwDoc::CopyPageDesc( const SwPageDesc& rSrcDesc, SwPageDesc& rDstDesc,
2127cdf0e10cSrcweir sal_Bool bCopyPoolIds )
2128cdf0e10cSrcweir {
2129cdf0e10cSrcweir sal_Bool bNotifyLayout = sal_False;
2130cdf0e10cSrcweir SwRootFrm* pTmpRoot = GetCurrentLayout();//swmod 080219
2131cdf0e10cSrcweir
2132cdf0e10cSrcweir rDstDesc.SetLandscape( rSrcDesc.GetLandscape() );
2133cdf0e10cSrcweir rDstDesc.SetNumType( rSrcDesc.GetNumType() );
2134cdf0e10cSrcweir if( rDstDesc.ReadUseOn() != rSrcDesc.ReadUseOn() )
2135cdf0e10cSrcweir {
2136cdf0e10cSrcweir rDstDesc.WriteUseOn( rSrcDesc.ReadUseOn() );
2137cdf0e10cSrcweir bNotifyLayout = sal_True;
2138cdf0e10cSrcweir }
2139cdf0e10cSrcweir
2140cdf0e10cSrcweir if( bCopyPoolIds )
2141cdf0e10cSrcweir {
2142cdf0e10cSrcweir rDstDesc.SetPoolFmtId( rSrcDesc.GetPoolFmtId() );
2143cdf0e10cSrcweir rDstDesc.SetPoolHelpId( rSrcDesc.GetPoolHelpId() );
2144cdf0e10cSrcweir // HelpFile-Id immer auf dflt setzen !!
2145cdf0e10cSrcweir rDstDesc.SetPoolHlpFileId( UCHAR_MAX );
2146cdf0e10cSrcweir }
2147cdf0e10cSrcweir
2148cdf0e10cSrcweir if( rSrcDesc.GetFollow() != &rSrcDesc )
2149cdf0e10cSrcweir {
2150cdf0e10cSrcweir SwPageDesc* pFollow = ::lcl_FindPageDesc( aPageDescs,
2151cdf0e10cSrcweir rSrcDesc.GetFollow()->GetName() );
2152cdf0e10cSrcweir if( !pFollow )
2153cdf0e10cSrcweir {
2154cdf0e10cSrcweir // dann mal kopieren
2155cdf0e10cSrcweir sal_uInt16 nPos = MakePageDesc( rSrcDesc.GetFollow()->GetName() );
2156cdf0e10cSrcweir pFollow = aPageDescs[ nPos ];
2157cdf0e10cSrcweir CopyPageDesc( *rSrcDesc.GetFollow(), *pFollow );
2158cdf0e10cSrcweir }
2159cdf0e10cSrcweir rDstDesc.SetFollow( pFollow );
2160cdf0e10cSrcweir bNotifyLayout = sal_True;
2161cdf0e10cSrcweir }
2162cdf0e10cSrcweir
2163cdf0e10cSrcweir // die Header/Footer-Attribute werden gesondert kopiert, die Content-
2164cdf0e10cSrcweir // Sections muessen vollstaendig mitgenommen werden!
2165cdf0e10cSrcweir {
2166cdf0e10cSrcweir SfxItemSet aAttrSet( rSrcDesc.GetMaster().GetAttrSet() );
2167cdf0e10cSrcweir aAttrSet.ClearItem( RES_HEADER );
2168cdf0e10cSrcweir aAttrSet.ClearItem( RES_FOOTER );
2169cdf0e10cSrcweir
2170cdf0e10cSrcweir rDstDesc.GetMaster().DelDiffs( aAttrSet );
2171cdf0e10cSrcweir rDstDesc.GetMaster().SetFmtAttr( aAttrSet );
2172cdf0e10cSrcweir
2173cdf0e10cSrcweir aAttrSet.ClearItem();
2174cdf0e10cSrcweir aAttrSet.Put( rSrcDesc.GetLeft().GetAttrSet() );
2175cdf0e10cSrcweir aAttrSet.ClearItem( RES_HEADER );
2176cdf0e10cSrcweir aAttrSet.ClearItem( RES_FOOTER );
2177cdf0e10cSrcweir
2178cdf0e10cSrcweir rDstDesc.GetLeft().DelDiffs( aAttrSet );
2179cdf0e10cSrcweir rDstDesc.GetLeft().SetFmtAttr( aAttrSet );
2180cdf0e10cSrcweir }
2181cdf0e10cSrcweir
2182cdf0e10cSrcweir CopyHeader( rSrcDesc.GetMaster(), rDstDesc.GetMaster() );
2183cdf0e10cSrcweir CopyFooter( rSrcDesc.GetMaster(), rDstDesc.GetMaster() );
2184cdf0e10cSrcweir if( !rDstDesc.IsHeaderShared() )
2185cdf0e10cSrcweir CopyHeader( rSrcDesc.GetLeft(), rDstDesc.GetLeft() );
2186cdf0e10cSrcweir else
2187cdf0e10cSrcweir rDstDesc.GetLeft().SetFmtAttr( rDstDesc.GetMaster().GetHeader() );
2188cdf0e10cSrcweir
2189cdf0e10cSrcweir if( !rDstDesc.IsFooterShared() )
2190cdf0e10cSrcweir CopyFooter( rSrcDesc.GetLeft(), rDstDesc.GetLeft() );
2191cdf0e10cSrcweir else
2192cdf0e10cSrcweir rDstDesc.GetLeft().SetFmtAttr( rDstDesc.GetMaster().GetFooter() );
2193cdf0e10cSrcweir
2194cdf0e10cSrcweir if( bNotifyLayout && pTmpRoot )
2195cdf0e10cSrcweir {
2196cdf0e10cSrcweir std::set<SwRootFrm*> aAllLayouts = GetAllLayouts();//swmod 080225
2197cdf0e10cSrcweir std::for_each( aAllLayouts.begin(), aAllLayouts.end(),std::mem_fun(&SwRootFrm::AllCheckPageDescs));//swmod 080226
2198cdf0e10cSrcweir }
2199cdf0e10cSrcweir
2200cdf0e10cSrcweir //Wenn sich FussnotenInfo veraendert, so werden die Seiten
2201cdf0e10cSrcweir //angetriggert.
2202cdf0e10cSrcweir if( !(rDstDesc.GetFtnInfo() == rSrcDesc.GetFtnInfo()) )
2203cdf0e10cSrcweir {
2204cdf0e10cSrcweir rDstDesc.SetFtnInfo( rSrcDesc.GetFtnInfo() );
2205cdf0e10cSrcweir SwMsgPoolItem aInfo( RES_PAGEDESC_FTNINFO );
2206cdf0e10cSrcweir {
2207cdf0e10cSrcweir rDstDesc.GetMaster().ModifyBroadcast( &aInfo, 0, TYPE(SwFrm) );
2208cdf0e10cSrcweir }
2209cdf0e10cSrcweir {
2210cdf0e10cSrcweir rDstDesc.GetLeft().ModifyBroadcast( &aInfo, 0, TYPE(SwFrm) );
2211cdf0e10cSrcweir }
2212cdf0e10cSrcweir }
2213cdf0e10cSrcweir }
2214cdf0e10cSrcweir
ReplaceStyles(SwDoc & rSource)2215cdf0e10cSrcweir void SwDoc::ReplaceStyles( SwDoc& rSource )
2216cdf0e10cSrcweir {
2217cdf0e10cSrcweir ::sw::UndoGuard const undoGuard(GetIDocumentUndoRedo());
2218cdf0e10cSrcweir
2219cdf0e10cSrcweir CopyFmtArr( *rSource.pCharFmtTbl, *pCharFmtTbl,
2220cdf0e10cSrcweir &SwDoc::_MakeCharFmt, *pDfltCharFmt );
2221cdf0e10cSrcweir CopyFmtArr( *rSource.pFrmFmtTbl, *pFrmFmtTbl,
2222cdf0e10cSrcweir &SwDoc::_MakeFrmFmt, *pDfltFrmFmt );
2223cdf0e10cSrcweir CopyFmtArr( *rSource.pTxtFmtCollTbl, *pTxtFmtCollTbl,
2224cdf0e10cSrcweir &SwDoc::_MakeTxtFmtColl, *pDfltTxtFmtColl );
2225cdf0e10cSrcweir
2226cdf0e10cSrcweir // und jetzt noch die Seiten-Vorlagen
2227cdf0e10cSrcweir sal_uInt16 nCnt = rSource.aPageDescs.Count();
2228cdf0e10cSrcweir if( nCnt )
2229cdf0e10cSrcweir {
2230cdf0e10cSrcweir // ein anderes Doc -> Numberformatter muessen gemergt werden
2231cdf0e10cSrcweir SwTblNumFmtMerge aTNFM( rSource, *this );
2232cdf0e10cSrcweir
2233cdf0e10cSrcweir // 1. Schritt alle Formate anlegen (das 0. ueberspringen - Default!)
2234cdf0e10cSrcweir while( nCnt )
2235cdf0e10cSrcweir {
2236cdf0e10cSrcweir SwPageDesc *pSrc = rSource.aPageDescs[ --nCnt ];
2237cdf0e10cSrcweir if( 0 == ::lcl_FindPageDesc( aPageDescs, pSrc->GetName() ) )
2238cdf0e10cSrcweir MakePageDesc( pSrc->GetName() );
2239cdf0e10cSrcweir }
2240cdf0e10cSrcweir
2241cdf0e10cSrcweir // 2. Schritt alle Attribute kopieren, richtige Parents setzen
2242cdf0e10cSrcweir for( nCnt = rSource.aPageDescs.Count(); nCnt; )
2243cdf0e10cSrcweir {
2244cdf0e10cSrcweir SwPageDesc *pSrc = rSource.aPageDescs[ --nCnt ];
2245cdf0e10cSrcweir CopyPageDesc( *pSrc, *::lcl_FindPageDesc( aPageDescs, pSrc->GetName() ));
2246cdf0e10cSrcweir }
2247cdf0e10cSrcweir }
2248cdf0e10cSrcweir
2249cdf0e10cSrcweir //JP 08.04.99: und dann sind da noch die Numerierungs-Vorlagen
2250cdf0e10cSrcweir nCnt = rSource.GetNumRuleTbl().Count();
2251cdf0e10cSrcweir if( nCnt )
2252cdf0e10cSrcweir {
2253cdf0e10cSrcweir const SwNumRuleTbl& rArr = rSource.GetNumRuleTbl();
2254cdf0e10cSrcweir for( sal_uInt16 n = 0; n < nCnt; ++n )
2255cdf0e10cSrcweir {
2256cdf0e10cSrcweir const SwNumRule& rR = *rArr[ n ];
2257cdf0e10cSrcweir if( !rR.IsAutoRule() )
2258cdf0e10cSrcweir {
2259cdf0e10cSrcweir SwNumRule* pNew = FindNumRulePtr( rR.GetName());
2260cdf0e10cSrcweir if( pNew )
2261cdf0e10cSrcweir pNew->CopyNumRule( this, rR );
2262cdf0e10cSrcweir else
2263cdf0e10cSrcweir MakeNumRule( rR.GetName(), &rR );
2264cdf0e10cSrcweir }
2265cdf0e10cSrcweir }
2266cdf0e10cSrcweir }
2267cdf0e10cSrcweir
2268cdf0e10cSrcweir if (undoGuard.UndoWasEnabled())
2269cdf0e10cSrcweir {
2270cdf0e10cSrcweir // nodes array was modified!
2271cdf0e10cSrcweir GetIDocumentUndoRedo().DelAllUndoObj();
2272cdf0e10cSrcweir }
2273cdf0e10cSrcweir
2274cdf0e10cSrcweir SetModified();
2275cdf0e10cSrcweir }
2276cdf0e10cSrcweir
FindFmtByName(const SvPtrarr & rFmtArr,const String & rName) const2277cdf0e10cSrcweir SwFmt* SwDoc::FindFmtByName( const SvPtrarr& rFmtArr,
2278cdf0e10cSrcweir const String& rName ) const
2279cdf0e10cSrcweir {
2280cdf0e10cSrcweir SwFmt* pFnd = 0;
2281cdf0e10cSrcweir for( sal_uInt16 n = 0; n < rFmtArr.Count(); n++ )
2282cdf0e10cSrcweir {
2283cdf0e10cSrcweir // ist die Vorlage schon im Doc vorhanden ??
2284cdf0e10cSrcweir if( ((SwFmt*)rFmtArr[n])->GetName() == rName )
2285cdf0e10cSrcweir {
2286cdf0e10cSrcweir pFnd = (SwFmt*)rFmtArr[n];
2287cdf0e10cSrcweir break;
2288cdf0e10cSrcweir }
2289cdf0e10cSrcweir }
2290cdf0e10cSrcweir return pFnd;
2291cdf0e10cSrcweir }
2292cdf0e10cSrcweir
MoveLeftMargin(const SwPaM & rPam,sal_Bool bRight,sal_Bool bModulus)2293cdf0e10cSrcweir void SwDoc::MoveLeftMargin( const SwPaM& rPam, sal_Bool bRight, sal_Bool bModulus )
2294cdf0e10cSrcweir {
2295cdf0e10cSrcweir SwHistory* pHistory = 0;
2296cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
2297cdf0e10cSrcweir {
2298cdf0e10cSrcweir SwUndoMoveLeftMargin* pUndo = new SwUndoMoveLeftMargin( rPam, bRight,
2299cdf0e10cSrcweir bModulus );
2300cdf0e10cSrcweir pHistory = &pUndo->GetHistory();
2301cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo( pUndo );
2302cdf0e10cSrcweir }
2303cdf0e10cSrcweir
2304cdf0e10cSrcweir const SvxTabStopItem& rTabItem = (SvxTabStopItem&)GetDefault( RES_PARATR_TABSTOP );
2305cdf0e10cSrcweir sal_uInt16 nDefDist = rTabItem.Count() ?
2306cdf0e10cSrcweir static_cast<sal_uInt16>(rTabItem[0].GetTabPos()) : 1134;
2307cdf0e10cSrcweir const SwPosition &rStt = *rPam.Start(), &rEnd = *rPam.End();
2308cdf0e10cSrcweir SwNodeIndex aIdx( rStt.nNode );
2309cdf0e10cSrcweir while( aIdx <= rEnd.nNode )
2310cdf0e10cSrcweir {
2311cdf0e10cSrcweir SwTxtNode* pTNd = aIdx.GetNode().GetTxtNode();
2312cdf0e10cSrcweir if( pTNd )
2313cdf0e10cSrcweir {
2314cdf0e10cSrcweir SvxLRSpaceItem aLS( (SvxLRSpaceItem&)pTNd->SwCntntNode::GetAttr( RES_LR_SPACE ) );
2315cdf0e10cSrcweir
2316cdf0e10cSrcweir // --> FME 2008-09-16 #i93873# See also lcl_MergeListLevelIndentAsLRSpaceItem in thints.cxx
2317cdf0e10cSrcweir if ( pTNd->AreListLevelIndentsApplicable() )
2318cdf0e10cSrcweir {
2319cdf0e10cSrcweir const SwNumRule* pRule = pTNd->GetNumRule();
2320cdf0e10cSrcweir if ( pRule )
2321cdf0e10cSrcweir {
2322cdf0e10cSrcweir const int nListLevel = pTNd->GetActualListLevel();
2323cdf0e10cSrcweir if ( nListLevel >= 0 )
2324cdf0e10cSrcweir {
2325cdf0e10cSrcweir const SwNumFmt& rFmt = pRule->Get(static_cast<sal_uInt16>(nListLevel));
2326cdf0e10cSrcweir if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
2327cdf0e10cSrcweir {
2328cdf0e10cSrcweir aLS.SetTxtLeft( rFmt.GetIndentAt() );
2329cdf0e10cSrcweir aLS.SetTxtFirstLineOfst( static_cast<short>(rFmt.GetFirstLineIndent()) );
2330cdf0e10cSrcweir }
2331cdf0e10cSrcweir }
2332cdf0e10cSrcweir }
2333cdf0e10cSrcweir }
2334cdf0e10cSrcweir
2335cdf0e10cSrcweir long nNext = aLS.GetTxtLeft();
2336cdf0e10cSrcweir if( bModulus )
2337cdf0e10cSrcweir nNext = ( nNext / nDefDist ) * nDefDist;
2338cdf0e10cSrcweir
2339cdf0e10cSrcweir if( bRight )
2340cdf0e10cSrcweir nNext += nDefDist;
2341cdf0e10cSrcweir else
2342cdf0e10cSrcweir nNext -= nDefDist;
2343cdf0e10cSrcweir
2344cdf0e10cSrcweir aLS.SetTxtLeft( nNext );
2345cdf0e10cSrcweir
2346cdf0e10cSrcweir SwRegHistory aRegH( pTNd, *pTNd, pHistory );
2347cdf0e10cSrcweir pTNd->SetAttr( aLS );
2348cdf0e10cSrcweir }
2349cdf0e10cSrcweir aIdx++;
2350cdf0e10cSrcweir }
2351cdf0e10cSrcweir SetModified();
2352cdf0e10cSrcweir }
2353cdf0e10cSrcweir
DontExpandFmt(const SwPosition & rPos,sal_Bool bFlag)2354cdf0e10cSrcweir sal_Bool SwDoc::DontExpandFmt( const SwPosition& rPos, sal_Bool bFlag )
2355cdf0e10cSrcweir {
2356cdf0e10cSrcweir sal_Bool bRet = sal_False;
2357cdf0e10cSrcweir SwTxtNode* pTxtNd = rPos.nNode.GetNode().GetTxtNode();
2358cdf0e10cSrcweir if( pTxtNd )
2359cdf0e10cSrcweir {
2360cdf0e10cSrcweir bRet = pTxtNd->DontExpandFmt( rPos.nContent, bFlag );
2361cdf0e10cSrcweir if( bRet && GetIDocumentUndoRedo().DoesUndo() )
2362cdf0e10cSrcweir {
2363cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo( new SwUndoDontExpandFmt(rPos) );
2364cdf0e10cSrcweir }
2365cdf0e10cSrcweir }
2366cdf0e10cSrcweir return bRet;
2367cdf0e10cSrcweir }
2368cdf0e10cSrcweir
MakeTableBoxFmt()2369cdf0e10cSrcweir SwTableBoxFmt* SwDoc::MakeTableBoxFmt()
2370cdf0e10cSrcweir {
2371cdf0e10cSrcweir SwTableBoxFmt* pFmt = new SwTableBoxFmt( GetAttrPool(), aEmptyStr,
2372cdf0e10cSrcweir pDfltFrmFmt );
2373cdf0e10cSrcweir SetModified();
2374cdf0e10cSrcweir return pFmt;
2375cdf0e10cSrcweir }
2376cdf0e10cSrcweir
MakeTableLineFmt()2377cdf0e10cSrcweir SwTableLineFmt* SwDoc::MakeTableLineFmt()
2378cdf0e10cSrcweir {
2379cdf0e10cSrcweir SwTableLineFmt* pFmt = new SwTableLineFmt( GetAttrPool(), aEmptyStr,
2380cdf0e10cSrcweir pDfltFrmFmt );
2381cdf0e10cSrcweir SetModified();
2382cdf0e10cSrcweir return pFmt;
2383cdf0e10cSrcweir }
2384cdf0e10cSrcweir
_CreateNumberFormatter()2385cdf0e10cSrcweir void SwDoc::_CreateNumberFormatter()
2386cdf0e10cSrcweir {
2387cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLog, "SW", "JP93722", "SwDoc::_CreateNumberFormatter" );
2388cdf0e10cSrcweir
2389cdf0e10cSrcweir ASSERT( !pNumberFormatter, "ist doch schon vorhanden" );
2390cdf0e10cSrcweir
2391cdf0e10cSrcweir
2392cdf0e10cSrcweir LanguageType eLang = LANGUAGE_SYSTEM; //System::GetLanguage();
2393cdf0e10cSrcweir /* ((const SvxLanguageItem&)GetAttrPool().
2394cdf0e10cSrcweir GetDefaultItem( RES_CHRATR_LANGUAGE )).GetLanguage();
2395cdf0e10cSrcweir */
2396cdf0e10cSrcweir Reference< XMultiServiceFactory > xMSF = ::comphelper::getProcessServiceFactory();
2397cdf0e10cSrcweir pNumberFormatter = new SvNumberFormatter( xMSF, eLang );
2398cdf0e10cSrcweir pNumberFormatter->SetEvalDateFormat( NF_EVALDATEFORMAT_FORMAT_INTL );
2399cdf0e10cSrcweir pNumberFormatter->SetYear2000(static_cast<sal_uInt16>(::utl::MiscCfg().GetYear2000()));
2400cdf0e10cSrcweir
2401cdf0e10cSrcweir }
2402cdf0e10cSrcweir
SwTblNumFmtMerge(const SwDoc & rSrc,SwDoc & rDest)2403cdf0e10cSrcweir SwTblNumFmtMerge::SwTblNumFmtMerge( const SwDoc& rSrc, SwDoc& rDest )
2404cdf0e10cSrcweir : pNFmt( 0 )
2405cdf0e10cSrcweir {
2406cdf0e10cSrcweir // ein anderes Doc -> Numberformatter muessen gemergt werden
2407cdf0e10cSrcweir SvNumberFormatter* pN;
2408cdf0e10cSrcweir if( &rSrc != &rDest && 0 != ( pN = ((SwDoc&)rSrc).GetNumberFormatter( sal_False ) ))
2409cdf0e10cSrcweir ( pNFmt = rDest.GetNumberFormatter( sal_True ))->MergeFormatter( *pN );
2410cdf0e10cSrcweir
2411cdf0e10cSrcweir if( &rSrc != &rDest )
2412cdf0e10cSrcweir ((SwGetRefFieldType*)rSrc.GetSysFldType( RES_GETREFFLD ))->
2413cdf0e10cSrcweir MergeWithOtherDoc( rDest );
2414cdf0e10cSrcweir }
2415cdf0e10cSrcweir
~SwTblNumFmtMerge()2416cdf0e10cSrcweir SwTblNumFmtMerge::~SwTblNumFmtMerge()
2417cdf0e10cSrcweir {
2418cdf0e10cSrcweir if( pNFmt )
2419cdf0e10cSrcweir pNFmt->ClearMergeTable();
2420cdf0e10cSrcweir }
2421cdf0e10cSrcweir
2422cdf0e10cSrcweir
SetTxtFmtCollByAutoFmt(const SwPosition & rPos,sal_uInt16 nPoolId,const SfxItemSet * pSet)2423cdf0e10cSrcweir void SwDoc::SetTxtFmtCollByAutoFmt( const SwPosition& rPos, sal_uInt16 nPoolId,
2424cdf0e10cSrcweir const SfxItemSet* pSet )
2425cdf0e10cSrcweir {
2426cdf0e10cSrcweir SwPaM aPam( rPos );
2427cdf0e10cSrcweir SwTxtNode* pTNd = rPos.nNode.GetNode().GetTxtNode();
2428cdf0e10cSrcweir
2429cdf0e10cSrcweir if( mbIsAutoFmtRedline && pTNd )
2430cdf0e10cSrcweir {
2431cdf0e10cSrcweir // dann das Redline Object anlegen
2432cdf0e10cSrcweir const SwTxtFmtColl& rColl = *pTNd->GetTxtColl();
2433cdf0e10cSrcweir SwRedline* pRedl = new SwRedline( nsRedlineType_t::REDLINE_FMTCOLL, aPam );
2434cdf0e10cSrcweir pRedl->SetMark();
2435cdf0e10cSrcweir
2436cdf0e10cSrcweir // interressant sind nur die Items, die vom Set NICHT wieder
2437cdf0e10cSrcweir // in den Node gesetzt werden. Also muss man die Differenz nehmen
2438cdf0e10cSrcweir SwRedlineExtraData_FmtColl aExtraData( rColl.GetName(),
2439cdf0e10cSrcweir rColl.GetPoolFmtId() );
2440cdf0e10cSrcweir if( pSet && pTNd->HasSwAttrSet() )
2441cdf0e10cSrcweir {
2442cdf0e10cSrcweir SfxItemSet aTmp( *pTNd->GetpSwAttrSet() );
2443cdf0e10cSrcweir aTmp.Differentiate( *pSet );
2444cdf0e10cSrcweir // das Adjust Item behalten wir extra
2445cdf0e10cSrcweir const SfxPoolItem* pItem;
2446cdf0e10cSrcweir if( SFX_ITEM_SET == pTNd->GetpSwAttrSet()->GetItemState(
2447cdf0e10cSrcweir RES_PARATR_ADJUST, sal_False, &pItem ))
2448cdf0e10cSrcweir aTmp.Put( *pItem );
2449cdf0e10cSrcweir aExtraData.SetItemSet( aTmp );
2450cdf0e10cSrcweir }
2451cdf0e10cSrcweir pRedl->SetExtraData( &aExtraData );
2452cdf0e10cSrcweir
2453cdf0e10cSrcweir // !!!!!!!!! Undo fehlt noch !!!!!!!!!!!!!!!!!!
2454cdf0e10cSrcweir AppendRedline( pRedl, true );
2455cdf0e10cSrcweir }
2456cdf0e10cSrcweir
2457cdf0e10cSrcweir SetTxtFmtColl( aPam, GetTxtCollFromPool( nPoolId ) );
2458cdf0e10cSrcweir
2459cdf0e10cSrcweir if( pSet && pTNd && pSet->Count() )
2460cdf0e10cSrcweir {
2461cdf0e10cSrcweir aPam.SetMark();
2462cdf0e10cSrcweir aPam.GetMark()->nContent.Assign( pTNd, pTNd->GetTxt().Len() );
2463cdf0e10cSrcweir InsertItemSet( aPam, *pSet, 0 );
2464cdf0e10cSrcweir }
2465cdf0e10cSrcweir }
2466cdf0e10cSrcweir
SetFmtItemByAutoFmt(const SwPaM & rPam,const SfxItemSet & rSet)2467cdf0e10cSrcweir void SwDoc::SetFmtItemByAutoFmt( const SwPaM& rPam, const SfxItemSet& rSet )
2468cdf0e10cSrcweir {
2469cdf0e10cSrcweir SwTxtNode* pTNd = rPam.GetPoint()->nNode.GetNode().GetTxtNode();
2470cdf0e10cSrcweir
2471cdf0e10cSrcweir RedlineMode_t eOld = GetRedlineMode();
2472cdf0e10cSrcweir
2473cdf0e10cSrcweir if( mbIsAutoFmtRedline && pTNd )
2474cdf0e10cSrcweir {
2475cdf0e10cSrcweir // dann das Redline Object anlegen
2476cdf0e10cSrcweir SwRedline* pRedl = new SwRedline( nsRedlineType_t::REDLINE_FORMAT, rPam );
2477cdf0e10cSrcweir if( !pRedl->HasMark() )
2478cdf0e10cSrcweir pRedl->SetMark();
2479cdf0e10cSrcweir
2480cdf0e10cSrcweir // interressant sind nur die Items, die vom Set NICHT wieder
2481cdf0e10cSrcweir // in den Node gesetzt werden. Also muss man die Differenz nehmen
2482cdf0e10cSrcweir SwRedlineExtraData_Format aExtraData( rSet );
2483cdf0e10cSrcweir
2484cdf0e10cSrcweir /*
2485cdf0e10cSrcweir if( pSet && pTNd->HasSwAttrSet() )
2486cdf0e10cSrcweir {
2487cdf0e10cSrcweir SfxItemSet aTmp( *pTNd->GetpSwAttrSet() );
2488cdf0e10cSrcweir aTmp.Differentiate( *pSet );
2489cdf0e10cSrcweir // das Adjust Item behalten wir extra
2490cdf0e10cSrcweir const SfxPoolItem* pItem;
2491cdf0e10cSrcweir if( SFX_ITEM_SET == pTNd->GetpSwAttrSet()->GetItemState(
2492cdf0e10cSrcweir RES_PARATR_ADJUST, sal_False, &pItem ))
2493cdf0e10cSrcweir aTmp.Put( *pItem );
2494cdf0e10cSrcweir aExtraData.SetItemSet( aTmp );
2495cdf0e10cSrcweir }
2496cdf0e10cSrcweir */
2497cdf0e10cSrcweir pRedl->SetExtraData( &aExtraData );
2498cdf0e10cSrcweir
2499cdf0e10cSrcweir // !!!!!!!!! Undo fehlt noch !!!!!!!!!!!!!!!!!!
2500cdf0e10cSrcweir AppendRedline( pRedl, true );
2501cdf0e10cSrcweir
2502cdf0e10cSrcweir SetRedlineMode_intern( (RedlineMode_t)(eOld | nsRedlineMode_t::REDLINE_IGNORE));
2503cdf0e10cSrcweir }
2504cdf0e10cSrcweir
2505cdf0e10cSrcweir InsertItemSet( rPam, rSet, nsSetAttrMode::SETATTR_DONTEXPAND );
2506cdf0e10cSrcweir SetRedlineMode_intern( eOld );
2507cdf0e10cSrcweir }
2508cdf0e10cSrcweir
ChgFmt(SwFmt & rFmt,const SfxItemSet & rSet)2509cdf0e10cSrcweir void SwDoc::ChgFmt(SwFmt & rFmt, const SfxItemSet & rSet)
2510cdf0e10cSrcweir {
2511cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
2512cdf0e10cSrcweir {
2513cdf0e10cSrcweir // copying <rSet> to <aSet>
2514cdf0e10cSrcweir SfxItemSet aSet(rSet);
2515cdf0e10cSrcweir // remove from <aSet> all items, which are already set at the format
2516cdf0e10cSrcweir aSet.Differentiate(rFmt.GetAttrSet());
2517cdf0e10cSrcweir // <aSet> contains now all *new* items for the format
2518cdf0e10cSrcweir
2519cdf0e10cSrcweir // copying current format item set to <aOldSet>
2520cdf0e10cSrcweir SfxItemSet aOldSet(rFmt.GetAttrSet());
2521cdf0e10cSrcweir // insert new items into <aOldSet>
2522cdf0e10cSrcweir aOldSet.Put(aSet);
2523cdf0e10cSrcweir // invalidate all new items in <aOldSet> in order to clear these items,
2524cdf0e10cSrcweir // if the undo action is triggered.
2525cdf0e10cSrcweir {
2526cdf0e10cSrcweir SfxItemIter aIter(aSet);
2527cdf0e10cSrcweir
2528cdf0e10cSrcweir const SfxPoolItem * pItem = aIter.FirstItem();
2529cdf0e10cSrcweir while (pItem != NULL)
2530cdf0e10cSrcweir {
2531cdf0e10cSrcweir aOldSet.InvalidateItem(pItem->Which());
2532cdf0e10cSrcweir
2533cdf0e10cSrcweir pItem = aIter.NextItem();
2534cdf0e10cSrcweir }
2535cdf0e10cSrcweir }
2536cdf0e10cSrcweir
2537cdf0e10cSrcweir SwUndo * pUndo = new SwUndoFmtAttr(aOldSet, rFmt);
2538cdf0e10cSrcweir
2539cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo(pUndo);
2540cdf0e10cSrcweir }
2541cdf0e10cSrcweir
2542cdf0e10cSrcweir rFmt.SetFmtAttr(rSet);
2543cdf0e10cSrcweir }
2544cdf0e10cSrcweir
RenameFmt(SwFmt & rFmt,const String & sNewName,sal_Bool bBroadcast)2545cdf0e10cSrcweir void SwDoc::RenameFmt(SwFmt & rFmt, const String & sNewName,
2546cdf0e10cSrcweir sal_Bool bBroadcast)
2547cdf0e10cSrcweir {
2548cdf0e10cSrcweir SfxStyleFamily eFamily = SFX_STYLE_FAMILY_ALL;
2549cdf0e10cSrcweir
2550cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
2551cdf0e10cSrcweir {
2552cdf0e10cSrcweir SwUndo * pUndo = NULL;
2553cdf0e10cSrcweir
2554cdf0e10cSrcweir switch (rFmt.Which())
2555cdf0e10cSrcweir {
2556cdf0e10cSrcweir case RES_CHRFMT:
2557cdf0e10cSrcweir pUndo = new SwUndoRenameCharFmt(rFmt.GetName(), sNewName, this);
2558cdf0e10cSrcweir eFamily = SFX_STYLE_FAMILY_PARA;
2559cdf0e10cSrcweir break;
2560cdf0e10cSrcweir case RES_TXTFMTCOLL:
2561cdf0e10cSrcweir pUndo = new SwUndoRenameFmtColl(rFmt.GetName(), sNewName, this);
2562cdf0e10cSrcweir eFamily = SFX_STYLE_FAMILY_CHAR;
2563cdf0e10cSrcweir break;
2564cdf0e10cSrcweir case RES_FRMFMT:
2565cdf0e10cSrcweir pUndo = new SwUndoRenameFrmFmt(rFmt.GetName(), sNewName, this);
2566cdf0e10cSrcweir eFamily = SFX_STYLE_FAMILY_FRAME;
2567cdf0e10cSrcweir break;
2568cdf0e10cSrcweir
2569cdf0e10cSrcweir default:
2570cdf0e10cSrcweir break;
2571cdf0e10cSrcweir }
2572cdf0e10cSrcweir
2573cdf0e10cSrcweir if (pUndo)
2574cdf0e10cSrcweir {
2575cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo(pUndo);
2576cdf0e10cSrcweir }
2577cdf0e10cSrcweir }
2578cdf0e10cSrcweir
2579cdf0e10cSrcweir rFmt.SetName(sNewName);
2580cdf0e10cSrcweir
2581cdf0e10cSrcweir if (bBroadcast)
2582cdf0e10cSrcweir BroadcastStyleOperation(sNewName, eFamily, SFX_STYLESHEET_MODIFIED);
2583cdf0e10cSrcweir }
2584cdf0e10cSrcweir
2585cdf0e10cSrcweir // --> OD 2006-09-27 #i69627#
2586cdf0e10cSrcweir namespace docfunc
2587cdf0e10cSrcweir {
HasOutlineStyleToBeWrittenAsNormalListStyle(SwDoc & rDoc)2588cdf0e10cSrcweir bool HasOutlineStyleToBeWrittenAsNormalListStyle( SwDoc& rDoc )
2589cdf0e10cSrcweir {
2590cdf0e10cSrcweir // If a parent paragraph style of one of the parargraph styles, which
2591cdf0e10cSrcweir // are assigned to the list levels of the outline style, has a list style
2592cdf0e10cSrcweir // set or inherits a list style from its parent style, the outline style
2593cdf0e10cSrcweir // has to be written as a normal list style to the OpenDocument file
2594cdf0e10cSrcweir // format or the OpenOffice.org file format.
2595cdf0e10cSrcweir bool bRet( false );
2596cdf0e10cSrcweir
2597cdf0e10cSrcweir const SwTxtFmtColls* pTxtFmtColls( rDoc.GetTxtFmtColls() );
2598cdf0e10cSrcweir if ( pTxtFmtColls )
2599cdf0e10cSrcweir {
2600cdf0e10cSrcweir const sal_uInt16 nCount = pTxtFmtColls->Count();
2601cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < nCount; ++i )
2602cdf0e10cSrcweir {
2603cdf0e10cSrcweir SwTxtFmtColl* pTxtFmtColl = (*pTxtFmtColls)[i];
2604cdf0e10cSrcweir
2605cdf0e10cSrcweir if ( pTxtFmtColl->IsDefault() ||
2606cdf0e10cSrcweir // pTxtFmtColl->GetOutlineLevel() == NO_NUMBERING ) //#outline level,zhaojianwei
2607cdf0e10cSrcweir ! pTxtFmtColl->IsAssignedToListLevelOfOutlineStyle() ) //<-end,zhaojianwei
2608cdf0e10cSrcweir {
2609cdf0e10cSrcweir continue;
2610cdf0e10cSrcweir }
2611cdf0e10cSrcweir
2612cdf0e10cSrcweir const SwTxtFmtColl* pParentTxtFmtColl =
2613cdf0e10cSrcweir dynamic_cast<const SwTxtFmtColl*>( pTxtFmtColl->DerivedFrom());
2614cdf0e10cSrcweir if ( !pParentTxtFmtColl )
2615cdf0e10cSrcweir continue;
2616cdf0e10cSrcweir
2617cdf0e10cSrcweir if ( SFX_ITEM_SET == pParentTxtFmtColl->GetItemState( RES_PARATR_NUMRULE ) )
2618cdf0e10cSrcweir {
2619cdf0e10cSrcweir // --> OD 2009-11-12 #i106218#
2620cdf0e10cSrcweir // consider that the outline style is set
2621cdf0e10cSrcweir const SwNumRuleItem& rDirectItem = pParentTxtFmtColl->GetNumRule();
2622cdf0e10cSrcweir if ( rDirectItem.GetValue() != rDoc.GetOutlineNumRule()->GetName() )
2623cdf0e10cSrcweir {
2624cdf0e10cSrcweir bRet = true;
2625cdf0e10cSrcweir break;
2626cdf0e10cSrcweir }
2627cdf0e10cSrcweir // <--
2628cdf0e10cSrcweir }
2629cdf0e10cSrcweir }
2630cdf0e10cSrcweir
2631cdf0e10cSrcweir }
2632cdf0e10cSrcweir return bRet;
2633cdf0e10cSrcweir }
2634cdf0e10cSrcweir }
2635cdf0e10cSrcweir // <--
2636