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
10cdf0e10cSrcweir *
11efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
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.
19cdf0e10cSrcweir *
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 ),
13428f5a95aSOliver-Rainer Wittmann bInclRefToxMark( false )
13528f5a95aSOliver-Rainer Wittmann {
13628f5a95aSOliver-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 ),
14828f5a95aSOliver-Rainer Wittmann bInclRefToxMark( false )
14928f5a95aSOliver-Rainer Wittmann {
15028f5a95aSOliver-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 {
159cdf0e10cSrcweir ParaRstFmt* pPara = (ParaRstFmt*)pArgs;
160cdf0e10cSrcweir SwTxtNode * pTxtNode = (SwTxtNode*)rpNd->GetTxtNode();
161cdf0e10cSrcweir if( pTxtNode && pTxtNode->GetpSwpHints() )
162cdf0e10cSrcweir {
163cdf0e10cSrcweir SwIndex aSt( pTxtNode, 0 );
164cdf0e10cSrcweir sal_uInt16 nEnd = pTxtNode->Len();
165cdf0e10cSrcweir
166cdf0e10cSrcweir if( &pPara->pSttNd->nNode.GetNode() == pTxtNode &&
167cdf0e10cSrcweir pPara->pSttNd->nContent.GetIndex() )
168cdf0e10cSrcweir aSt = pPara->pSttNd->nContent.GetIndex();
169cdf0e10cSrcweir
170cdf0e10cSrcweir if( &pPara->pEndNd->nNode.GetNode() == rpNd )
171cdf0e10cSrcweir nEnd = pPara->pEndNd->nContent.GetIndex();
172cdf0e10cSrcweir
173cdf0e10cSrcweir if( pPara->pHistory )
174cdf0e10cSrcweir {
175cdf0e10cSrcweir // fuers Undo alle Attribute sichern
176cdf0e10cSrcweir SwRegHistory aRHst( *pTxtNode, pPara->pHistory );
177cdf0e10cSrcweir pTxtNode->GetpSwpHints()->Register( &aRHst );
17869a74367SOliver-Rainer Wittmann pTxtNode->RstTxtAttr( aSt, nEnd - aSt.GetIndex(), pPara->nWhich,
179cdf0e10cSrcweir pPara->pDelSet, pPara->bInclRefToxMark );
180cdf0e10cSrcweir if( pTxtNode->GetpSwpHints() )
181cdf0e10cSrcweir pTxtNode->GetpSwpHints()->DeRegister();
182cdf0e10cSrcweir }
183cdf0e10cSrcweir else
18469a74367SOliver-Rainer Wittmann pTxtNode->RstTxtAttr( aSt, nEnd - aSt.GetIndex(), pPara->nWhich,
185cdf0e10cSrcweir pPara->pDelSet, pPara->bInclRefToxMark );
186cdf0e10cSrcweir }
187cdf0e10cSrcweir return sal_True;
188cdf0e10cSrcweir }
189cdf0e10cSrcweir
lcl_RstAttr(const SwNodePtr & rpNd,void * pArgs)190cdf0e10cSrcweir sal_Bool lcl_RstAttr( const SwNodePtr& rpNd, void* pArgs )
191cdf0e10cSrcweir {
19228f5a95aSOliver-Rainer Wittmann const ParaRstFmt* pPara = (ParaRstFmt*) pArgs;
193cdf0e10cSrcweir 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
20128f5a95aSOliver-Rainer Wittmann SfxItemSet aSavedAttrsSet(
20228f5a95aSOliver-Rainer Wittmann pDoc->GetAttrPool(),
203cdf0e10cSrcweir RES_PAGEDESC, RES_BREAK,
204cdf0e10cSrcweir RES_PARATR_NUMRULE, RES_PARATR_NUMRULE,
205cdf0e10cSrcweir RES_PARATR_LIST_BEGIN, RES_PARATR_LIST_END - 1,
206cdf0e10cSrcweir 0 );
20728f5a95aSOliver-Rainer Wittmann const SfxItemSet* pAttrSetOfNode = pNode->GetpSwAttrSet();
208cdf0e10cSrcweir
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 );
21528f5a95aSOliver-Rainer Wittmann aListAttrSet.Set( *pAttrSetOfNode );
216cdf0e10cSrcweir if ( aListAttrSet.Count() )
217cdf0e10cSrcweir {
21828f5a95aSOliver-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
229cdf0e10cSrcweir const SfxPoolItem* pItem;
23028f5a95aSOliver-Rainer Wittmann sal_uInt16 __READONLY_DATA aSavIds[3] =
23128f5a95aSOliver-Rainer Wittmann { RES_PAGEDESC, RES_BREAK, RES_PARATR_NUMRULE };
23228f5a95aSOliver-Rainer Wittmann for ( sal_uInt16 n = 0; n < 3; ++n )
233cdf0e10cSrcweir {
23428f5a95aSOliver-Rainer Wittmann if ( SFX_ITEM_SET == pAttrSetOfNode->GetItemState( aSavIds[n], sal_False, &pItem ) )
235cdf0e10cSrcweir {
236cdf0e10cSrcweir bool bSave = false;
237cdf0e10cSrcweir switch (aSavIds[n])
238cdf0e10cSrcweir {
239cdf0e10cSrcweir case RES_PAGEDESC:
240cdf0e10cSrcweir bSave = 0 != ( (SwFmtPageDesc*) pItem )->GetPageDesc();
241cdf0e10cSrcweir break;
242cdf0e10cSrcweir case RES_BREAK:
243cdf0e10cSrcweir bSave = SVX_BREAK_NONE != ( (SvxFmtBreakItem*) pItem )->GetBreak();
244cdf0e10cSrcweir break;
245cdf0e10cSrcweir case RES_PARATR_NUMRULE:
246cdf0e10cSrcweir bSave = 0 != ( (SwNumRuleItem*) pItem )->GetValue().Len();
247cdf0e10cSrcweir break;
248cdf0e10cSrcweir }
249cdf0e10cSrcweir if ( bSave )
250cdf0e10cSrcweir {
25128f5a95aSOliver-Rainer Wittmann aSavedAttrsSet.Put( *pItem );
252cdf0e10cSrcweir aClearWhichIds.Insert( aSavIds[n], aClearWhichIds.Count() );
253cdf0e10cSrcweir }
254cdf0e10cSrcweir }
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
269cdf0e10cSrcweir if ( pPara )
270cdf0e10cSrcweir {
271cdf0e10cSrcweir SwRegHistory aRegH( pNode, *pNode, pPara->pHistory );
272cdf0e10cSrcweir
273cdf0e10cSrcweir if ( pPara->pDelSet && pPara->pDelSet->Count() )
274cdf0e10cSrcweir {
275cdf0e10cSrcweir ASSERT( !bKeepAttributes,
276cdf0e10cSrcweir "<lcl_RstAttr(..)> - certain attributes are kept, but not needed. -> please inform OD" );
277cdf0e10cSrcweir SfxItemIter aIter( *pPara->pDelSet );
278cdf0e10cSrcweir pItem = aIter.FirstItem();
279cdf0e10cSrcweir while ( sal_True )
280cdf0e10cSrcweir {
281cdf0e10cSrcweir if ( ( pItem->Which() != RES_PAGEDESC &&
282cdf0e10cSrcweir pItem->Which() != RES_BREAK &&
283cdf0e10cSrcweir pItem->Which() != RES_PARATR_NUMRULE ) ||
28428f5a95aSOliver-Rainer Wittmann ( aSavedAttrsSet.GetItemState( pItem->Which(), sal_False ) != SFX_ITEM_SET ) )
285cdf0e10cSrcweir {
286cdf0e10cSrcweir pNode->ResetAttr( pItem->Which() );
287cdf0e10cSrcweir }
288cdf0e10cSrcweir if ( aIter.IsAtEnd() )
289cdf0e10cSrcweir break;
290cdf0e10cSrcweir pItem = aIter.NextItem();
291cdf0e10cSrcweir }
292cdf0e10cSrcweir }
293cdf0e10cSrcweir else if ( pPara->bResetAll )
294cdf0e10cSrcweir pNode->ResetAllAttr();
295cdf0e10cSrcweir else
296cdf0e10cSrcweir pNode->ResetAttr( RES_PARATR_BEGIN, POOLATTR_END - 1 );
297cdf0e10cSrcweir }
298cdf0e10cSrcweir else
299cdf0e10cSrcweir pNode->ResetAllAttr();
300cdf0e10cSrcweir
301cdf0e10cSrcweir // only restore saved attributes, if needed
30228f5a95aSOliver-Rainer Wittmann if ( bKeepAttributes && aSavedAttrsSet.Count() )
303cdf0e10cSrcweir {
304cdf0e10cSrcweir pNode->LockModify();
305cdf0e10cSrcweir
30628f5a95aSOliver-Rainer Wittmann pNode->SetAttr( aSavedAttrsSet );
307cdf0e10cSrcweir
308cdf0e10cSrcweir if ( !bLocked )
309cdf0e10cSrcweir pNode->UnlockModify();
310cdf0e10cSrcweir }
311cdf0e10cSrcweir }
312cdf0e10cSrcweir return sal_True;
313cdf0e10cSrcweir }
314cdf0e10cSrcweir
31528f5a95aSOliver-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,
520abbaf3ecSJian Hong Cheng //Modify here for #119405, by easyfan, 2012-05-24
52169a74367SOliver-Rainer Wittmann const bool bExpandCharToPara=false)
522abbaf3ecSJian Hong Cheng //End of modification, by easyfan
523cdf0e10cSrcweir {
524cdf0e10cSrcweir // 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();
53625beb051SJürgen Schmidt
53725beb051SJürgen Schmidt if (!IsInvalidItem(pItem))
53825beb051SJürgen Schmidt {
539cdf0e10cSrcweir const sal_uInt16 nWhich = pItem->Which();
540cdf0e10cSrcweir
541cdf0e10cSrcweir if ( isCHRATR(nWhich) ||
542cdf0e10cSrcweir (RES_TXTATR_CHARFMT == nWhich) ||
543cdf0e10cSrcweir (RES_TXTATR_INETFMT == nWhich) ||
544cdf0e10cSrcweir (RES_TXTATR_AUTOFMT == nWhich) ||
545cdf0e10cSrcweir (RES_TXTATR_UNKNOWN_CONTAINER == nWhich) )
546cdf0e10cSrcweir {
547cdf0e10cSrcweir pCharSet = &rChgSet;
548cdf0e10cSrcweir bCharAttr = true;
549cdf0e10cSrcweir }
550cdf0e10cSrcweir
551cdf0e10cSrcweir if ( isPARATR(nWhich)
552cdf0e10cSrcweir || isPARATR_LIST(nWhich)
553cdf0e10cSrcweir || isFRMATR(nWhich)
554cdf0e10cSrcweir || isGRFATR(nWhich)
55556b35d86SArmin Le Grand || isUNKNOWNATR(nWhich)
55656b35d86SArmin Le Grand || isDrawingLayerAttribute(nWhich) ) //UUUU
557cdf0e10cSrcweir {
558cdf0e10cSrcweir pOtherSet = &rChgSet;
559cdf0e10cSrcweir bOtherAttr = true;
560cdf0e10cSrcweir }
561cdf0e10cSrcweir }
56225beb051SJürgen Schmidt }
563cdf0e10cSrcweir
564cdf0e10cSrcweir // Build new itemset if either
565cdf0e10cSrcweir // - rChgSet.Count() > 1 or
566cdf0e10cSrcweir // - The attribute in rChgSet does not belong to one of the above categories
567cdf0e10cSrcweir if ( !bCharAttr && !bOtherAttr )
568cdf0e10cSrcweir {
569cdf0e10cSrcweir SfxItemSet* pTmpCharItemSet = new SfxItemSet( pDoc->GetAttrPool(),
570cdf0e10cSrcweir RES_CHRATR_BEGIN, RES_CHRATR_END-1,
571cdf0e10cSrcweir RES_TXTATR_AUTOFMT, RES_TXTATR_AUTOFMT,
572cdf0e10cSrcweir RES_TXTATR_INETFMT, RES_TXTATR_INETFMT,
573cdf0e10cSrcweir RES_TXTATR_CHARFMT, RES_TXTATR_CHARFMT,
574cdf0e10cSrcweir RES_TXTATR_UNKNOWN_CONTAINER, RES_TXTATR_UNKNOWN_CONTAINER,
575cdf0e10cSrcweir 0 );
576cdf0e10cSrcweir
577cdf0e10cSrcweir SfxItemSet* pTmpOtherItemSet = new SfxItemSet( pDoc->GetAttrPool(),
578cdf0e10cSrcweir RES_PARATR_BEGIN, RES_PARATR_END-1,
579cdf0e10cSrcweir RES_PARATR_LIST_BEGIN, RES_PARATR_LIST_END-1,
580cdf0e10cSrcweir RES_FRMATR_BEGIN, RES_FRMATR_END-1,
581cdf0e10cSrcweir RES_GRFATR_BEGIN, RES_GRFATR_END-1,
582cdf0e10cSrcweir RES_UNKNOWNATR_BEGIN, RES_UNKNOWNATR_END-1,
58356b35d86SArmin Le Grand
58456b35d86SArmin Le Grand //UUUU FillAttribute support
58556b35d86SArmin Le Grand XATTR_FILL_FIRST, XATTR_FILL_LAST,
58656b35d86SArmin Le Grand
587cdf0e10cSrcweir 0 );
588cdf0e10cSrcweir
589cdf0e10cSrcweir pTmpCharItemSet->Put( rChgSet );
590cdf0e10cSrcweir pTmpOtherItemSet->Put( rChgSet );
591cdf0e10cSrcweir
592cdf0e10cSrcweir pCharSet = pTmpCharItemSet;
593cdf0e10cSrcweir pOtherSet = pTmpOtherItemSet;
594cdf0e10cSrcweir
595cdf0e10cSrcweir bDelete = true;
596cdf0e10cSrcweir }
597cdf0e10cSrcweir
598cdf0e10cSrcweir SwHistory* pHistory = pUndo ? &pUndo->GetHistory() : 0;
599cdf0e10cSrcweir bool bRet = false;
600cdf0e10cSrcweir const SwPosition *pStt = rRg.Start(), *pEnd = rRg.End();
601cdf0e10cSrcweir SwCntntNode* pNode = pStt->nNode.GetNode().GetCntntNode();
602cdf0e10cSrcweir
603cdf0e10cSrcweir if( pNode && pNode->IsTxtNode() )
604cdf0e10cSrcweir {
605cdf0e10cSrcweir // -> #i27615#
606cdf0e10cSrcweir if (rRg.IsInFrontOfLabel())
607cdf0e10cSrcweir {
608cdf0e10cSrcweir SwTxtNode * pTxtNd = pNode->GetTxtNode();
609cdf0e10cSrcweir SwNumRule * pNumRule = pTxtNd->GetNumRule();
610cdf0e10cSrcweir
611cdf0e10cSrcweir if ( !pNumRule )
612cdf0e10cSrcweir {
613cdf0e10cSrcweir ASSERT( false,
614cdf0e10cSrcweir "<InsAttr(..)> - PaM in front of label, but text node has no numbering rule set. This is a serious defect, please inform OD." );
615cdf0e10cSrcweir DELETECHARSETS
616cdf0e10cSrcweir return false;
617cdf0e10cSrcweir }
618cdf0e10cSrcweir
619cdf0e10cSrcweir SwNumFmt aNumFmt = pNumRule->Get(static_cast<sal_uInt16>(pTxtNd->GetActualListLevel()));
620cdf0e10cSrcweir SwCharFmt * pCharFmt =
621cdf0e10cSrcweir pDoc->FindCharFmtByName(aNumFmt.GetCharFmtName());
622cdf0e10cSrcweir
623cdf0e10cSrcweir if (pCharFmt)
624cdf0e10cSrcweir {
625cdf0e10cSrcweir if (pHistory)
626cdf0e10cSrcweir pHistory->Add(pCharFmt->GetAttrSet(), *pCharFmt);
627cdf0e10cSrcweir
628cdf0e10cSrcweir if ( pCharSet )
629cdf0e10cSrcweir pCharFmt->SetFmtAttr(*pCharSet);
630cdf0e10cSrcweir }
631cdf0e10cSrcweir
632cdf0e10cSrcweir DELETECHARSETS
633cdf0e10cSrcweir return true;
634cdf0e10cSrcweir }
635cdf0e10cSrcweir
636cdf0e10cSrcweir const SwIndex& rSt = pStt->nContent;
637cdf0e10cSrcweir
638cdf0e10cSrcweir // Attribute ohne Ende haben keinen Bereich
639cdf0e10cSrcweir if ( !bCharAttr && !bOtherAttr )
640cdf0e10cSrcweir {
641cdf0e10cSrcweir SfxItemSet aTxtSet( pDoc->GetAttrPool(),
642cdf0e10cSrcweir RES_TXTATR_NOEND_BEGIN, RES_TXTATR_NOEND_END-1 );
643cdf0e10cSrcweir aTxtSet.Put( rChgSet );
644cdf0e10cSrcweir if( aTxtSet.Count() )
645cdf0e10cSrcweir {
646cdf0e10cSrcweir SwRegHistory history( pNode, *pNode, pHistory );
647cdf0e10cSrcweir bRet = history.InsertItems(
648cdf0e10cSrcweir aTxtSet, rSt.GetIndex(), rSt.GetIndex(), nFlags ) || bRet;
649cdf0e10cSrcweir
650cdf0e10cSrcweir if (bRet && (pDoc->IsRedlineOn() || (!pDoc->IsIgnoreRedline()
651cdf0e10cSrcweir && pDoc->GetRedlineTbl().Count())))
652cdf0e10cSrcweir {
653cdf0e10cSrcweir SwPaM aPam( pStt->nNode, pStt->nContent.GetIndex()-1,
654cdf0e10cSrcweir pStt->nNode, pStt->nContent.GetIndex() );
655cdf0e10cSrcweir
656cdf0e10cSrcweir if( pUndo )
657cdf0e10cSrcweir pUndo->SaveRedlineData( aPam, sal_True );
658cdf0e10cSrcweir
659cdf0e10cSrcweir if( pDoc->IsRedlineOn() )
660cdf0e10cSrcweir pDoc->AppendRedline( new SwRedline( nsRedlineType_t::REDLINE_INSERT, aPam ), true);
661cdf0e10cSrcweir else
662cdf0e10cSrcweir pDoc->SplitRedline( aPam );
663cdf0e10cSrcweir }
664cdf0e10cSrcweir }
665cdf0e10cSrcweir }
666cdf0e10cSrcweir
667cdf0e10cSrcweir // TextAttribute mit Ende expandieren nie ihren Bereich
668cdf0e10cSrcweir if ( !bCharAttr && !bOtherAttr )
669cdf0e10cSrcweir {
670cdf0e10cSrcweir // CharFmt wird gesondert behandelt !!!
671cdf0e10cSrcweir // JP 22.08.96: URL-Attribute auch!!
672cdf0e10cSrcweir // TEST_TEMP ToDo: AutoFmt!
673cdf0e10cSrcweir SfxItemSet aTxtSet( pDoc->GetAttrPool(),
674cdf0e10cSrcweir RES_TXTATR_REFMARK, RES_TXTATR_TOXMARK,
675cdf0e10cSrcweir RES_TXTATR_META, RES_TXTATR_METAFIELD,
676cdf0e10cSrcweir RES_TXTATR_CJK_RUBY, RES_TXTATR_CJK_RUBY,
67769a74367SOliver-Rainer Wittmann RES_TXTATR_INPUTFIELD, RES_TXTATR_INPUTFIELD,
678cdf0e10cSrcweir 0 );
679cdf0e10cSrcweir
680cdf0e10cSrcweir aTxtSet.Put( rChgSet );
681cdf0e10cSrcweir if( aTxtSet.Count() )
682cdf0e10cSrcweir {
683cdf0e10cSrcweir sal_uInt16 nInsCnt = rSt.GetIndex();
684cdf0e10cSrcweir sal_uInt16 nEnd = pStt->nNode == pEnd->nNode
685cdf0e10cSrcweir ? pEnd->nContent.GetIndex()
686cdf0e10cSrcweir : pNode->Len();
687cdf0e10cSrcweir SwRegHistory history( pNode, *pNode, pHistory );
688cdf0e10cSrcweir bRet = history.InsertItems( aTxtSet, nInsCnt, nEnd, nFlags )
689cdf0e10cSrcweir || bRet;
690cdf0e10cSrcweir
691cdf0e10cSrcweir if (bRet && (pDoc->IsRedlineOn() || (!pDoc->IsIgnoreRedline()
692cdf0e10cSrcweir && pDoc->GetRedlineTbl().Count())))
693cdf0e10cSrcweir {
694cdf0e10cSrcweir // wurde Text-Inhalt eingefuegt? (RefMark/TOXMarks ohne Ende)
695cdf0e10cSrcweir sal_Bool bTxtIns = nInsCnt != rSt.GetIndex();
696cdf0e10cSrcweir // wurde Inhalt eingefuegt oder ueber die Selektion gesetzt?
697cdf0e10cSrcweir SwPaM aPam( pStt->nNode, bTxtIns ? nInsCnt + 1 : nEnd,
698cdf0e10cSrcweir pStt->nNode, nInsCnt );
699cdf0e10cSrcweir if( pUndo )
700cdf0e10cSrcweir pUndo->SaveRedlineData( aPam, bTxtIns );
701cdf0e10cSrcweir
702cdf0e10cSrcweir if( pDoc->IsRedlineOn() )
703dec99bbdSOliver-Rainer Wittmann pDoc->AppendRedline(
704dec99bbdSOliver-Rainer Wittmann new SwRedline(
705dec99bbdSOliver-Rainer Wittmann bTxtIns ? nsRedlineType_t::REDLINE_INSERT : nsRedlineType_t::REDLINE_FORMAT, aPam ),
706dec99bbdSOliver-Rainer Wittmann true);
707cdf0e10cSrcweir else if( bTxtIns )
708cdf0e10cSrcweir pDoc->SplitRedline( aPam );
709cdf0e10cSrcweir }
710cdf0e10cSrcweir }
711cdf0e10cSrcweir }
712cdf0e10cSrcweir }
713cdf0e10cSrcweir
714cdf0e10cSrcweir // bei PageDesc's, die am Node gesetzt werden, muss immer das
715cdf0e10cSrcweir // Auto-Flag gesetzt werden!!
716cdf0e10cSrcweir if( pOtherSet && pOtherSet->Count() )
717cdf0e10cSrcweir {
718cdf0e10cSrcweir SwTableNode* pTblNd;
719cdf0e10cSrcweir const SwFmtPageDesc* pDesc;
720cdf0e10cSrcweir if( SFX_ITEM_SET == pOtherSet->GetItemState( RES_PAGEDESC,
721cdf0e10cSrcweir sal_False, (const SfxPoolItem**)&pDesc ))
722cdf0e10cSrcweir {
723cdf0e10cSrcweir if( pNode )
724cdf0e10cSrcweir {
725cdf0e10cSrcweir // Auto-Flag setzen, nur in Vorlagen ist ohne Auto !
726cdf0e10cSrcweir SwFmtPageDesc aNew( *pDesc );
727cdf0e10cSrcweir // Bug 38479: AutoFlag wird jetzt in der WrtShell gesetzt
728cdf0e10cSrcweir // aNew.SetAuto();
729cdf0e10cSrcweir
730cdf0e10cSrcweir // Tabellen kennen jetzt auch Umbrueche
731cdf0e10cSrcweir if( 0 == (nFlags & nsSetAttrMode::SETATTR_APICALL) &&
732cdf0e10cSrcweir 0 != ( pTblNd = pNode->FindTableNode() ) )
733cdf0e10cSrcweir {
734cdf0e10cSrcweir SwTableNode* pCurTblNd = pTblNd;
735cdf0e10cSrcweir while ( 0 != ( pCurTblNd = pCurTblNd->StartOfSectionNode()->FindTableNode() ) )
736cdf0e10cSrcweir pTblNd = pCurTblNd;
737cdf0e10cSrcweir
738cdf0e10cSrcweir // dann am Tabellen Format setzen
739cdf0e10cSrcweir SwFrmFmt* pFmt = pTblNd->GetTable().GetFrmFmt();
740cdf0e10cSrcweir SwRegHistory aRegH( pFmt, *pTblNd, pHistory );
741cdf0e10cSrcweir pFmt->SetFmtAttr( aNew );
742cdf0e10cSrcweir bRet = true;
743cdf0e10cSrcweir }
744cdf0e10cSrcweir else
745cdf0e10cSrcweir {
746cdf0e10cSrcweir SwRegHistory aRegH( pNode, *pNode, pHistory );
747cdf0e10cSrcweir bRet = pNode->SetAttr( aNew ) || bRet;
748cdf0e10cSrcweir }
749cdf0e10cSrcweir }
750cdf0e10cSrcweir
751cdf0e10cSrcweir // bOtherAttr = true means that pOtherSet == rChgSet. In this case
752cdf0e10cSrcweir // we know, that there is only one attribute in pOtherSet. We cannot
753cdf0e10cSrcweir // perform the following operations, instead we return:
754cdf0e10cSrcweir if ( bOtherAttr )
755cdf0e10cSrcweir return bRet;
756cdf0e10cSrcweir
757cdf0e10cSrcweir const_cast<SfxItemSet*>(pOtherSet)->ClearItem( RES_PAGEDESC );
758cdf0e10cSrcweir if( !pOtherSet->Count() )
759cdf0e10cSrcweir {
760cdf0e10cSrcweir DELETECHARSETS
761cdf0e10cSrcweir return bRet;
762cdf0e10cSrcweir }
763cdf0e10cSrcweir }
764cdf0e10cSrcweir
765cdf0e10cSrcweir // Tabellen kennen jetzt auch Umbrueche
766cdf0e10cSrcweir const SvxFmtBreakItem* pBreak;
767cdf0e10cSrcweir if( pNode && 0 == (nFlags & nsSetAttrMode::SETATTR_APICALL) &&
768cdf0e10cSrcweir 0 != (pTblNd = pNode->FindTableNode() ) &&
769cdf0e10cSrcweir SFX_ITEM_SET == pOtherSet->GetItemState( RES_BREAK,
770cdf0e10cSrcweir sal_False, (const SfxPoolItem**)&pBreak ) )
771cdf0e10cSrcweir {
772cdf0e10cSrcweir SwTableNode* pCurTblNd = pTblNd;
773cdf0e10cSrcweir while ( 0 != ( pCurTblNd = pCurTblNd->StartOfSectionNode()->FindTableNode() ) )
774cdf0e10cSrcweir pTblNd = pCurTblNd;
775cdf0e10cSrcweir
776cdf0e10cSrcweir // dann am Tabellen Format setzen
777cdf0e10cSrcweir SwFrmFmt* pFmt = pTblNd->GetTable().GetFrmFmt();
778cdf0e10cSrcweir SwRegHistory aRegH( pFmt, *pTblNd, pHistory );
779cdf0e10cSrcweir pFmt->SetFmtAttr( *pBreak );
780cdf0e10cSrcweir bRet = true;
781cdf0e10cSrcweir
782cdf0e10cSrcweir // bOtherAttr = true means that pOtherSet == rChgSet. In this case
783cdf0e10cSrcweir // we know, that there is only one attribute in pOtherSet. We cannot
784cdf0e10cSrcweir // perform the following operations, instead we return:
785cdf0e10cSrcweir if ( bOtherAttr )
786cdf0e10cSrcweir return bRet;
787cdf0e10cSrcweir
788cdf0e10cSrcweir const_cast<SfxItemSet*>(pOtherSet)->ClearItem( RES_BREAK );
789cdf0e10cSrcweir if( !pOtherSet->Count() )
790cdf0e10cSrcweir {
791cdf0e10cSrcweir DELETECHARSETS
792cdf0e10cSrcweir return bRet;
793cdf0e10cSrcweir }
794cdf0e10cSrcweir }
795cdf0e10cSrcweir
796cdf0e10cSrcweir {
797cdf0e10cSrcweir // wenns eine PoolNumRule ist, diese ggfs. anlegen
798cdf0e10cSrcweir const SwNumRuleItem* pRule;
799cdf0e10cSrcweir sal_uInt16 nPoolId;
800cdf0e10cSrcweir if( SFX_ITEM_SET == pOtherSet->GetItemState( RES_PARATR_NUMRULE,
801cdf0e10cSrcweir sal_False, (const SfxPoolItem**)&pRule ) &&
802cdf0e10cSrcweir !pDoc->FindNumRulePtr( pRule->GetValue() ) &&
803cdf0e10cSrcweir USHRT_MAX != (nPoolId = SwStyleNameMapper::GetPoolIdFromUIName ( pRule->GetValue(),
804cdf0e10cSrcweir nsSwGetPoolIdFromName::GET_POOLID_NUMRULE )) )
805cdf0e10cSrcweir pDoc->GetNumRuleFromPool( nPoolId );
806cdf0e10cSrcweir }
807cdf0e10cSrcweir
808cdf0e10cSrcweir }
809cdf0e10cSrcweir
810cdf0e10cSrcweir if( !rRg.HasMark() ) // kein Bereich
811cdf0e10cSrcweir {
812cdf0e10cSrcweir if( !pNode )
813cdf0e10cSrcweir {
814cdf0e10cSrcweir DELETECHARSETS
815cdf0e10cSrcweir return bRet;
816cdf0e10cSrcweir }
817cdf0e10cSrcweir
818cdf0e10cSrcweir if( pNode->IsTxtNode() && pCharSet && pCharSet->Count() )
819cdf0e10cSrcweir {
820cdf0e10cSrcweir SwTxtNode* pTxtNd = static_cast<SwTxtNode*>(pNode);
821cdf0e10cSrcweir const SwIndex& rSt = pStt->nContent;
822cdf0e10cSrcweir sal_uInt16 nMkPos, nPtPos = rSt.GetIndex();
823cdf0e10cSrcweir const String& rStr = pTxtNd->GetTxt();
824cdf0e10cSrcweir
825cdf0e10cSrcweir // JP 22.08.96: Sonderfall: steht der Crsr in einem URL-Attribut
826cdf0e10cSrcweir // dann wird dessen Bereich genommen
827cdf0e10cSrcweir SwTxtAttr const*const pURLAttr(
828cdf0e10cSrcweir pTxtNd->GetTxtAttrAt(rSt.GetIndex(), RES_TXTATR_INETFMT));
829cdf0e10cSrcweir if (pURLAttr && pURLAttr->GetINetFmt().GetValue().Len())
830cdf0e10cSrcweir {
831cdf0e10cSrcweir nMkPos = *pURLAttr->GetStart();
83269a74367SOliver-Rainer Wittmann nPtPos = *pURLAttr->End();
833cdf0e10cSrcweir }
834cdf0e10cSrcweir else
835cdf0e10cSrcweir {
836cdf0e10cSrcweir Boundary aBndry;
837cdf0e10cSrcweir if( pBreakIt->GetBreakIter().is() )
838cdf0e10cSrcweir aBndry = pBreakIt->GetBreakIter()->getWordBoundary(
839cdf0e10cSrcweir pTxtNd->GetTxt(), nPtPos,
840cdf0e10cSrcweir pBreakIt->GetLocale( pTxtNd->GetLang( nPtPos ) ),
841cdf0e10cSrcweir WordType::ANY_WORD /*ANYWORD_IGNOREWHITESPACES*/,
842cdf0e10cSrcweir sal_True );
843cdf0e10cSrcweir
844cdf0e10cSrcweir if( aBndry.startPos < nPtPos && nPtPos < aBndry.endPos )
845cdf0e10cSrcweir {
846cdf0e10cSrcweir nMkPos = (xub_StrLen)aBndry.startPos;
847cdf0e10cSrcweir nPtPos = (xub_StrLen)aBndry.endPos;
848cdf0e10cSrcweir }
849cdf0e10cSrcweir else
850cdf0e10cSrcweir nPtPos = nMkPos = rSt.GetIndex();
851cdf0e10cSrcweir }
852cdf0e10cSrcweir
853cdf0e10cSrcweir // erstmal die zu ueberschreibenden Attribute aus dem
854cdf0e10cSrcweir // SwpHintsArray entfernen, wenn die Selektion den gesamten
855cdf0e10cSrcweir // Absatz umspannt. (Diese Attribute werden als FormatAttr.
856cdf0e10cSrcweir // eingefuegt und verdraengen nie die TextAttr.!)
857cdf0e10cSrcweir if( !(nFlags & nsSetAttrMode::SETATTR_DONTREPLACE ) &&
858cdf0e10cSrcweir pTxtNd->HasHints() && !nMkPos && nPtPos == rStr.Len() )
859cdf0e10cSrcweir {
860cdf0e10cSrcweir SwIndex aSt( pTxtNd );
861cdf0e10cSrcweir if( pHistory )
862cdf0e10cSrcweir {
863cdf0e10cSrcweir // fuers Undo alle Attribute sichern
864cdf0e10cSrcweir SwRegHistory aRHst( *pTxtNd, pHistory );
865cdf0e10cSrcweir pTxtNd->GetpSwpHints()->Register( &aRHst );
86669a74367SOliver-Rainer Wittmann pTxtNd->RstTxtAttr( aSt, nPtPos, 0, pCharSet );
867cdf0e10cSrcweir if( pTxtNd->GetpSwpHints() )
868cdf0e10cSrcweir pTxtNd->GetpSwpHints()->DeRegister();
869cdf0e10cSrcweir }
870cdf0e10cSrcweir else
87169a74367SOliver-Rainer Wittmann pTxtNd->RstTxtAttr( aSt, nPtPos, 0, pCharSet );
872cdf0e10cSrcweir }
873cdf0e10cSrcweir
874cdf0e10cSrcweir // the SwRegHistory inserts the attribute into the TxtNode!
875cdf0e10cSrcweir SwRegHistory history( pNode, *pNode, pHistory );
876cdf0e10cSrcweir bRet = history.InsertItems( *pCharSet, nMkPos, nPtPos, nFlags )
877cdf0e10cSrcweir || bRet;
878cdf0e10cSrcweir
879cdf0e10cSrcweir if( pDoc->IsRedlineOn() )
880cdf0e10cSrcweir {
881cdf0e10cSrcweir SwPaM aPam( *pNode, nMkPos, *pNode, nPtPos );
882cdf0e10cSrcweir
883cdf0e10cSrcweir if( pUndo )
884cdf0e10cSrcweir pUndo->SaveRedlineData( aPam, sal_False );
885cdf0e10cSrcweir pDoc->AppendRedline( new SwRedline( nsRedlineType_t::REDLINE_FORMAT, aPam ), true);
886cdf0e10cSrcweir }
887cdf0e10cSrcweir }
888cdf0e10cSrcweir if( pOtherSet && pOtherSet->Count() )
889cdf0e10cSrcweir {
890cdf0e10cSrcweir SwRegHistory aRegH( pNode, *pNode, pHistory );
89156b35d86SArmin Le Grand
89256b35d86SArmin Le Grand //UUUU Need to check for unique item for DrawingLayer items of type NameOrIndex
89356b35d86SArmin Le Grand // and evtl. correct that item to ensure unique names for that type. This call may
89456b35d86SArmin Le Grand // modify/correct entries inside of the given SfxItemSet
89556b35d86SArmin Le Grand SfxItemSet aTempLocalCopy(*pOtherSet);
89656b35d86SArmin Le Grand
89756b35d86SArmin Le Grand pDoc->CheckForUniqueItemForLineFillNameOrIndex(aTempLocalCopy);
89856b35d86SArmin Le Grand bRet = pNode->SetAttr(aTempLocalCopy) || bRet;
899cdf0e10cSrcweir }
900cdf0e10cSrcweir
901cdf0e10cSrcweir DELETECHARSETS
902cdf0e10cSrcweir return bRet;
903cdf0e10cSrcweir }
904cdf0e10cSrcweir
905cdf0e10cSrcweir if( pDoc->IsRedlineOn() && pCharSet && pCharSet->Count() )
906cdf0e10cSrcweir {
907cdf0e10cSrcweir if( pUndo )
908cdf0e10cSrcweir pUndo->SaveRedlineData( rRg, sal_False );
909cdf0e10cSrcweir pDoc->AppendRedline( new SwRedline( nsRedlineType_t::REDLINE_FORMAT, rRg ), true);
910cdf0e10cSrcweir }
911cdf0e10cSrcweir
912cdf0e10cSrcweir /* jetzt wenn Bereich */
913cdf0e10cSrcweir sal_uLong nNodes = 0;
914cdf0e10cSrcweir
915cdf0e10cSrcweir SwNodeIndex aSt( pDoc->GetNodes() );
916cdf0e10cSrcweir SwNodeIndex aEnd( pDoc->GetNodes() );
917cdf0e10cSrcweir SwIndex aCntEnd( pEnd->nContent );
918cdf0e10cSrcweir
919cdf0e10cSrcweir if( pNode )
920cdf0e10cSrcweir {
921cdf0e10cSrcweir sal_uInt16 nLen = pNode->Len();
922cdf0e10cSrcweir if( pStt->nNode != pEnd->nNode )
923cdf0e10cSrcweir aCntEnd.Assign( pNode, nLen );
924cdf0e10cSrcweir
925cdf0e10cSrcweir if( pStt->nContent.GetIndex() != 0 || aCntEnd.GetIndex() != nLen )
926cdf0e10cSrcweir {
927cdf0e10cSrcweir // the SwRegHistory inserts the attribute into the TxtNode!
928cdf0e10cSrcweir if( pNode->IsTxtNode() && pCharSet && pCharSet->Count() )
929cdf0e10cSrcweir {
930cdf0e10cSrcweir SwRegHistory history( pNode, *pNode, pHistory );
931cdf0e10cSrcweir bRet = history.InsertItems(*pCharSet,
932cdf0e10cSrcweir pStt->nContent.GetIndex(), aCntEnd.GetIndex(), nFlags)
933cdf0e10cSrcweir || bRet;
934cdf0e10cSrcweir }
935cdf0e10cSrcweir
936cdf0e10cSrcweir if( pOtherSet && pOtherSet->Count() )
937cdf0e10cSrcweir {
938cdf0e10cSrcweir SwRegHistory aRegH( pNode, *pNode, pHistory );
939cdf0e10cSrcweir bRet = pNode->SetAttr( *pOtherSet ) || bRet;
940cdf0e10cSrcweir }
941cdf0e10cSrcweir
942cdf0e10cSrcweir // lediglich Selektion in einem Node.
943cdf0e10cSrcweir if( pStt->nNode == pEnd->nNode )
944cdf0e10cSrcweir {
945abbaf3ecSJian Hong Cheng //Modify here for #119405, by easyfan, 2012-05-24
946abbaf3ecSJian Hong Cheng //The data parameter flag: bExpandCharToPara, comes from the data member of SwDoc,
947abbaf3ecSJian Hong Cheng //Which is set in SW MS word Binary filter WW8ImplRreader. With this flag on, means that
948abbaf3ecSJian Hong Cheng //current setting attribute set is a character range properties set and comes from a MS word
949abbaf3ecSJian Hong Cheng //binary file, And the setting range include a paragraph end position (0X0D);
950abbaf3ecSJian Hong Cheng //More specifications, as such property inside the character range properties set recorded in
951abbaf3ecSJian Hong Cheng //MS word binary file are dealed and inserted into data model (SwDoc) one by one, so we
952abbaf3ecSJian Hong Cheng //only dealing the scenario that the char properties set with 1 item inside;
953abbaf3ecSJian Hong Cheng
954abbaf3ecSJian Hong Cheng if (bExpandCharToPara && pCharSet && pCharSet->Count() ==1 )
955abbaf3ecSJian Hong Cheng {
956abbaf3ecSJian Hong Cheng SwTxtNode* pCurrentNd = pStt->nNode.GetNode().GetTxtNode();
957abbaf3ecSJian Hong Cheng
958abbaf3ecSJian Hong Cheng if (pCurrentNd)
959abbaf3ecSJian Hong Cheng {
960abbaf3ecSJian Hong Cheng pCurrentNd->TryCharSetExpandToNum(*pCharSet);
961abbaf3ecSJian Hong Cheng
962abbaf3ecSJian Hong Cheng }
963abbaf3ecSJian Hong Cheng }
964abbaf3ecSJian Hong Cheng //End of modification, by easyfan
965cdf0e10cSrcweir DELETECHARSETS
966cdf0e10cSrcweir return bRet;
967cdf0e10cSrcweir }
968cdf0e10cSrcweir ++nNodes;
969cdf0e10cSrcweir aSt.Assign( pStt->nNode.GetNode(), +1 );
970cdf0e10cSrcweir }
971cdf0e10cSrcweir else
972cdf0e10cSrcweir aSt = pStt->nNode;
973cdf0e10cSrcweir aCntEnd = pEnd->nContent; // aEnd wurde veraendert !!
974cdf0e10cSrcweir }
975cdf0e10cSrcweir else
976cdf0e10cSrcweir aSt.Assign( pStt->nNode.GetNode(), +1 );
977cdf0e10cSrcweir
978cdf0e10cSrcweir // aSt zeigt jetzt auf den ersten vollen Node
979cdf0e10cSrcweir
980cdf0e10cSrcweir /*
981cdf0e10cSrcweir * die Selektion umfasst mehr als einen Node
982cdf0e10cSrcweir */
983cdf0e10cSrcweir if( pStt->nNode < pEnd->nNode )
984cdf0e10cSrcweir {
985cdf0e10cSrcweir pNode = pEnd->nNode.GetNode().GetCntntNode();
986cdf0e10cSrcweir if(pNode)
987cdf0e10cSrcweir {
988cdf0e10cSrcweir sal_uInt16 nLen = pNode->Len();
989cdf0e10cSrcweir if( aCntEnd.GetIndex() != nLen )
990cdf0e10cSrcweir {
991cdf0e10cSrcweir // the SwRegHistory inserts the attribute into the TxtNode!
992cdf0e10cSrcweir if( pNode->IsTxtNode() && pCharSet && pCharSet->Count() )
993cdf0e10cSrcweir {
994cdf0e10cSrcweir SwRegHistory history( pNode, *pNode, pHistory );
995cdf0e10cSrcweir history.InsertItems(*pCharSet,
996cdf0e10cSrcweir 0, aCntEnd.GetIndex(), nFlags);
997cdf0e10cSrcweir }
998cdf0e10cSrcweir
999cdf0e10cSrcweir if( pOtherSet && pOtherSet->Count() )
1000cdf0e10cSrcweir {
1001cdf0e10cSrcweir SwRegHistory aRegH( pNode, *pNode, pHistory );
1002cdf0e10cSrcweir pNode->SetAttr( *pOtherSet );
1003cdf0e10cSrcweir }
1004cdf0e10cSrcweir
1005cdf0e10cSrcweir ++nNodes;
1006cdf0e10cSrcweir aEnd = pEnd->nNode;
1007cdf0e10cSrcweir }
1008cdf0e10cSrcweir else
1009cdf0e10cSrcweir aEnd.Assign( pEnd->nNode.GetNode(), +1 );
1010cdf0e10cSrcweir }
1011cdf0e10cSrcweir else
1012cdf0e10cSrcweir aEnd = pEnd->nNode;
1013cdf0e10cSrcweir }
1014cdf0e10cSrcweir else
1015cdf0e10cSrcweir aEnd.Assign( pEnd->nNode.GetNode(), +1 );
1016cdf0e10cSrcweir
1017cdf0e10cSrcweir // aEnd zeigt jetzt HINTER den letzten voll Node
1018cdf0e10cSrcweir
1019cdf0e10cSrcweir /* Bearbeitung der vollstaendig selektierten Nodes. */
1020cdf0e10cSrcweir // alle Attribute aus dem Set zuruecksetzen !!
1021cdf0e10cSrcweir if( pCharSet && pCharSet->Count() && !( nsSetAttrMode::SETATTR_DONTREPLACE & nFlags ) )
1022cdf0e10cSrcweir {
1023cdf0e10cSrcweir
1024cdf0e10cSrcweir ParaRstFmt aPara( pStt, pEnd, pHistory, 0, pCharSet );
1025cdf0e10cSrcweir pDoc->GetNodes().ForEach( aSt, aEnd, lcl_RstTxtAttr, &aPara );
1026cdf0e10cSrcweir }
1027cdf0e10cSrcweir
1028cdf0e10cSrcweir sal_Bool bCreateSwpHints = pCharSet && (
1029cdf0e10cSrcweir SFX_ITEM_SET == pCharSet->GetItemState( RES_TXTATR_CHARFMT, sal_False ) ||
1030cdf0e10cSrcweir SFX_ITEM_SET == pCharSet->GetItemState( RES_TXTATR_INETFMT, sal_False ) );
1031cdf0e10cSrcweir
1032cdf0e10cSrcweir for(; aSt < aEnd; aSt++ )
1033cdf0e10cSrcweir {
1034cdf0e10cSrcweir pNode = aSt.GetNode().GetCntntNode();
1035cdf0e10cSrcweir if( !pNode )
1036cdf0e10cSrcweir continue;
1037cdf0e10cSrcweir
1038cdf0e10cSrcweir SwTxtNode* pTNd = pNode->GetTxtNode();
1039cdf0e10cSrcweir if( pHistory )
1040cdf0e10cSrcweir {
1041cdf0e10cSrcweir SwRegHistory aRegH( pNode, *pNode, pHistory );
1042cdf0e10cSrcweir SwpHints *pSwpHints;
1043cdf0e10cSrcweir
1044cdf0e10cSrcweir if( pTNd && pCharSet && pCharSet->Count() )
1045cdf0e10cSrcweir {
1046cdf0e10cSrcweir pSwpHints = bCreateSwpHints ? &pTNd->GetOrCreateSwpHints()
1047cdf0e10cSrcweir : pTNd->GetpSwpHints();
1048cdf0e10cSrcweir if( pSwpHints )
1049cdf0e10cSrcweir pSwpHints->Register( &aRegH );
1050cdf0e10cSrcweir
1051cdf0e10cSrcweir pTNd->SetAttr( *pCharSet, 0, pTNd->GetTxt().Len(), nFlags );
1052cdf0e10cSrcweir if( pSwpHints )
1053cdf0e10cSrcweir pSwpHints->DeRegister();
1054cdf0e10cSrcweir }
1055cdf0e10cSrcweir if( pOtherSet && pOtherSet->Count() )
1056cdf0e10cSrcweir pNode->SetAttr( *pOtherSet );
1057cdf0e10cSrcweir }
1058cdf0e10cSrcweir else
1059cdf0e10cSrcweir {
1060cdf0e10cSrcweir if( pTNd && pCharSet && pCharSet->Count() )
1061cdf0e10cSrcweir pTNd->SetAttr( *pCharSet, 0, pTNd->GetTxt().Len(), nFlags );
1062cdf0e10cSrcweir if( pOtherSet && pOtherSet->Count() )
1063cdf0e10cSrcweir pNode->SetAttr( *pOtherSet );
1064cdf0e10cSrcweir }
1065cdf0e10cSrcweir ++nNodes;
1066cdf0e10cSrcweir }
1067cdf0e10cSrcweir
1068abbaf3ecSJian Hong Cheng //The data parameter flag: bExpandCharToPara, comes from the data member of SwDoc,
1069abbaf3ecSJian Hong Cheng //Which is set in SW MS word Binary filter WW8ImplRreader. With this flag on, means that
1070abbaf3ecSJian Hong Cheng //current setting attribute set is a character range properties set and comes from a MS word
1071abbaf3ecSJian Hong Cheng //binary file, And the setting range include a paragraph end position (0X0D);
1072abbaf3ecSJian Hong Cheng //More specifications, as such property inside the character range properties set recorded in
1073abbaf3ecSJian Hong Cheng //MS word binary file are dealed and inserted into data model (SwDoc) one by one, so we
1074abbaf3ecSJian Hong Cheng //only dealing the scenario that the char properties set with 1 item inside;
1075abbaf3ecSJian Hong Cheng if (bExpandCharToPara && pCharSet && pCharSet->Count() ==1)
1076abbaf3ecSJian Hong Cheng {
1077abbaf3ecSJian Hong Cheng SwPosition aStartPos (*rRg.Start());
1078abbaf3ecSJian Hong Cheng SwPosition aEndPos (*rRg.End());
1079abbaf3ecSJian Hong Cheng
1080abbaf3ecSJian Hong Cheng if (aEndPos.nNode.GetNode().GetTxtNode() && aEndPos.nContent != aEndPos.nNode.GetNode().GetTxtNode()->Len())
1081abbaf3ecSJian Hong Cheng aEndPos.nNode--;
1082abbaf3ecSJian Hong Cheng
1083abbaf3ecSJian Hong Cheng for (;aStartPos<=aEndPos;aStartPos.nNode++)
1084abbaf3ecSJian Hong Cheng {
1085abbaf3ecSJian Hong Cheng SwTxtNode* pCurrentNd = aStartPos.nNode.GetNode().GetTxtNode();
1086abbaf3ecSJian Hong Cheng
1087abbaf3ecSJian Hong Cheng if (pCurrentNd)
1088abbaf3ecSJian Hong Cheng {
1089abbaf3ecSJian Hong Cheng pCurrentNd->TryCharSetExpandToNum(*pCharSet);
1090abbaf3ecSJian Hong Cheng
1091abbaf3ecSJian Hong Cheng }
1092abbaf3ecSJian Hong Cheng
1093abbaf3ecSJian Hong Cheng }
1094abbaf3ecSJian Hong Cheng }
1095abbaf3ecSJian Hong Cheng
1096cdf0e10cSrcweir DELETECHARSETS
1097cdf0e10cSrcweir return (nNodes != 0) || bRet;
1098cdf0e10cSrcweir }
1099cdf0e10cSrcweir
InsertPoolItem(const SwPaM & rRg,const SfxPoolItem & rHt,const SetAttrMode nFlags,const bool bExpandCharToPara)110069a74367SOliver-Rainer Wittmann bool SwDoc::InsertPoolItem(
110169a74367SOliver-Rainer Wittmann const SwPaM &rRg,
110269a74367SOliver-Rainer Wittmann const SfxPoolItem &rHt,
110369a74367SOliver-Rainer Wittmann const SetAttrMode nFlags,
110469a74367SOliver-Rainer Wittmann const bool bExpandCharToPara)
1105cdf0e10cSrcweir {
1106cdf0e10cSrcweir SwDataChanged aTmp( rRg, 0 );
1107cdf0e10cSrcweir SwUndoAttr* pUndoAttr = 0;
1108cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1109cdf0e10cSrcweir {
1110cdf0e10cSrcweir GetIDocumentUndoRedo().ClearRedo();
1111cdf0e10cSrcweir pUndoAttr = new SwUndoAttr( rRg, rHt, nFlags );
1112cdf0e10cSrcweir }
1113cdf0e10cSrcweir
1114cdf0e10cSrcweir SfxItemSet aSet( GetAttrPool(), rHt.Which(), rHt.Which() );
1115cdf0e10cSrcweir aSet.Put( rHt );
111669a74367SOliver-Rainer Wittmann const bool bRet = lcl_InsAttr( this, rRg, aSet, nFlags, pUndoAttr,bExpandCharToPara );
1117cdf0e10cSrcweir
1118cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1119cdf0e10cSrcweir {
1120cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo( pUndoAttr );
1121cdf0e10cSrcweir }
1122cdf0e10cSrcweir
1123cdf0e10cSrcweir if( bRet )
112469a74367SOliver-Rainer Wittmann {
1125cdf0e10cSrcweir SetModified();
112669a74367SOliver-Rainer Wittmann }
1127cdf0e10cSrcweir return bRet;
1128cdf0e10cSrcweir }
1129cdf0e10cSrcweir
InsertItemSet(const SwPaM & rRg,const SfxItemSet & rSet,const SetAttrMode nFlags)1130cdf0e10cSrcweir bool SwDoc::InsertItemSet ( const SwPaM &rRg, const SfxItemSet &rSet,
1131cdf0e10cSrcweir const SetAttrMode nFlags )
1132cdf0e10cSrcweir {
1133cdf0e10cSrcweir SwDataChanged aTmp( rRg, 0 );
1134cdf0e10cSrcweir SwUndoAttr* pUndoAttr = 0;
1135cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1136cdf0e10cSrcweir {
1137cdf0e10cSrcweir GetIDocumentUndoRedo().ClearRedo();
1138cdf0e10cSrcweir pUndoAttr = new SwUndoAttr( rRg, rSet, nFlags );
1139cdf0e10cSrcweir }
1140cdf0e10cSrcweir
1141cdf0e10cSrcweir bool bRet = lcl_InsAttr( this, rRg, rSet, nFlags, pUndoAttr );
1142cdf0e10cSrcweir
1143cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1144cdf0e10cSrcweir {
1145cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo( pUndoAttr );
1146cdf0e10cSrcweir }
1147cdf0e10cSrcweir
1148cdf0e10cSrcweir if( bRet )
1149cdf0e10cSrcweir SetModified();
1150cdf0e10cSrcweir return bRet;
1151cdf0e10cSrcweir }
1152cdf0e10cSrcweir
1153cdf0e10cSrcweir
1154cdf0e10cSrcweir // Setze das Attribut im angegebenen Format. Ist Undo aktiv, wird
1155cdf0e10cSrcweir // das alte in die Undo-History aufgenommen
SetAttr(const SfxPoolItem & rAttr,SwFmt & rFmt)1156cdf0e10cSrcweir void SwDoc::SetAttr( const SfxPoolItem& rAttr, SwFmt& rFmt )
1157cdf0e10cSrcweir {
1158cdf0e10cSrcweir SfxItemSet aSet( GetAttrPool(), rAttr.Which(), rAttr.Which() );
1159cdf0e10cSrcweir aSet.Put( rAttr );
1160cdf0e10cSrcweir SetAttr( aSet, rFmt );
1161cdf0e10cSrcweir }
1162cdf0e10cSrcweir
1163cdf0e10cSrcweir
1164cdf0e10cSrcweir // Setze das Attribut im angegebenen Format. Ist Undo aktiv, wird
1165cdf0e10cSrcweir // das alte in die Undo-History aufgenommen
SetAttr(const SfxItemSet & rSet,SwFmt & rFmt)1166cdf0e10cSrcweir void SwDoc::SetAttr( const SfxItemSet& rSet, SwFmt& rFmt )
1167cdf0e10cSrcweir {
1168cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1169cdf0e10cSrcweir {
1170cdf0e10cSrcweir SwUndoFmtAttrHelper aTmp( rFmt );
1171cdf0e10cSrcweir rFmt.SetFmtAttr( rSet );
1172cdf0e10cSrcweir if ( aTmp.GetUndo() )
1173cdf0e10cSrcweir {
1174cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo( aTmp.ReleaseUndo() );
1175cdf0e10cSrcweir }
1176cdf0e10cSrcweir else
1177cdf0e10cSrcweir {
1178cdf0e10cSrcweir GetIDocumentUndoRedo().ClearRedo();
1179cdf0e10cSrcweir }
1180cdf0e10cSrcweir }
1181cdf0e10cSrcweir else
1182cdf0e10cSrcweir {
1183cdf0e10cSrcweir rFmt.SetFmtAttr( rSet );
1184cdf0e10cSrcweir }
1185cdf0e10cSrcweir SetModified();
1186cdf0e10cSrcweir }
1187cdf0e10cSrcweir
1188cdf0e10cSrcweir // --> OD 2008-02-12 #newlistlevelattrs#
ResetAttrAtFormat(const sal_uInt16 nWhichId,SwFmt & rChangedFormat)1189cdf0e10cSrcweir void SwDoc::ResetAttrAtFormat( const sal_uInt16 nWhichId,
1190cdf0e10cSrcweir SwFmt& rChangedFormat )
1191cdf0e10cSrcweir {
1192cdf0e10cSrcweir SwUndo *const pUndo = (GetIDocumentUndoRedo().DoesUndo())
1193cdf0e10cSrcweir ? new SwUndoFmtResetAttr( rChangedFormat, nWhichId )
1194cdf0e10cSrcweir : 0;
1195cdf0e10cSrcweir
1196cdf0e10cSrcweir const sal_Bool bAttrReset = rChangedFormat.ResetFmtAttr( nWhichId );
1197cdf0e10cSrcweir
1198cdf0e10cSrcweir if ( bAttrReset )
1199cdf0e10cSrcweir {
1200cdf0e10cSrcweir if ( pUndo )
1201cdf0e10cSrcweir {
1202cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo( pUndo );
1203cdf0e10cSrcweir }
1204cdf0e10cSrcweir
1205cdf0e10cSrcweir SetModified();
1206cdf0e10cSrcweir }
1207cdf0e10cSrcweir else if ( pUndo )
1208cdf0e10cSrcweir delete pUndo;
1209cdf0e10cSrcweir }
1210cdf0e10cSrcweir // <--
1211cdf0e10cSrcweir
lcl_SetNewDefTabStops(SwTwips nOldWidth,SwTwips nNewWidth,SvxTabStopItem & rChgTabStop)1212cdf0e10cSrcweir int lcl_SetNewDefTabStops( SwTwips nOldWidth, SwTwips nNewWidth,
1213cdf0e10cSrcweir SvxTabStopItem& rChgTabStop )
1214cdf0e10cSrcweir {
1215cdf0e10cSrcweir // dann aender bei allen TabStop die default's auf den neuen Wert
1216cdf0e10cSrcweir // !!! Achtung: hier wird immer auf dem PoolAttribut gearbeitet,
1217cdf0e10cSrcweir // damit nicht in allen Sets die gleiche Berechnung
1218cdf0e10cSrcweir // auf dem gleichen TabStop (gepoolt!) vorgenommen
1219cdf0e10cSrcweir // wird. Als Modify wird ein FmtChg verschickt.
1220cdf0e10cSrcweir
1221cdf0e10cSrcweir sal_uInt16 nOldCnt = rChgTabStop.Count();
1222cdf0e10cSrcweir if( !nOldCnt || nOldWidth == nNewWidth )
1223cdf0e10cSrcweir return sal_False;
1224cdf0e10cSrcweir
1225cdf0e10cSrcweir // suche den Anfang der Defaults
1226cdf0e10cSrcweir SvxTabStop* pTabs = ((SvxTabStop*)rChgTabStop.GetStart())
1227cdf0e10cSrcweir + (nOldCnt-1);
1228cdf0e10cSrcweir sal_uInt16 n;
1229cdf0e10cSrcweir
1230cdf0e10cSrcweir for( n = nOldCnt; n ; --n, --pTabs )
1231cdf0e10cSrcweir if( SVX_TAB_ADJUST_DEFAULT != pTabs->GetAdjustment() )
1232cdf0e10cSrcweir break;
1233cdf0e10cSrcweir ++n;
1234cdf0e10cSrcweir if( n < nOldCnt ) // die DefTabStops loeschen
1235cdf0e10cSrcweir rChgTabStop.Remove( n, nOldCnt - n );
1236cdf0e10cSrcweir return sal_True;
1237cdf0e10cSrcweir }
1238cdf0e10cSrcweir
1239cdf0e10cSrcweir // Setze das Attribut als neues default Attribut in diesem Dokument.
1240cdf0e10cSrcweir // Ist Undo aktiv, wird das alte in die Undo-History aufgenommen
SetDefault(const SfxPoolItem & rAttr)1241cdf0e10cSrcweir void SwDoc::SetDefault( const SfxPoolItem& rAttr )
1242cdf0e10cSrcweir {
1243cdf0e10cSrcweir SfxItemSet aSet( GetAttrPool(), rAttr.Which(), rAttr.Which() );
1244cdf0e10cSrcweir aSet.Put( rAttr );
1245cdf0e10cSrcweir SetDefault( aSet );
1246cdf0e10cSrcweir }
1247cdf0e10cSrcweir
SetDefault(const SfxItemSet & rSet)1248cdf0e10cSrcweir void SwDoc::SetDefault( const SfxItemSet& rSet )
1249cdf0e10cSrcweir {
1250cdf0e10cSrcweir if( !rSet.Count() )
1251cdf0e10cSrcweir return;
1252cdf0e10cSrcweir
1253cdf0e10cSrcweir SwModify aCallMod( 0 );
1254cdf0e10cSrcweir SwAttrSet aOld( GetAttrPool(), rSet.GetRanges() ),
1255cdf0e10cSrcweir aNew( GetAttrPool(), rSet.GetRanges() );
1256cdf0e10cSrcweir SfxItemIter aIter( rSet );
1257cdf0e10cSrcweir sal_uInt16 nWhich;
1258cdf0e10cSrcweir const SfxPoolItem* pItem = aIter.GetCurItem();
1259cdf0e10cSrcweir SfxItemPool* pSdrPool = GetAttrPool().GetSecondaryPool();
1260cdf0e10cSrcweir while( sal_True )
1261cdf0e10cSrcweir {
1262cdf0e10cSrcweir sal_Bool bCheckSdrDflt = sal_False;
1263cdf0e10cSrcweir nWhich = pItem->Which();
1264cdf0e10cSrcweir aOld.Put( GetAttrPool().GetDefaultItem( nWhich ) );
1265cdf0e10cSrcweir GetAttrPool().SetPoolDefaultItem( *pItem );
1266cdf0e10cSrcweir aNew.Put( GetAttrPool().GetDefaultItem( nWhich ) );
1267cdf0e10cSrcweir
1268cdf0e10cSrcweir if (isCHRATR(nWhich) || isTXTATR(nWhich))
1269cdf0e10cSrcweir {
1270cdf0e10cSrcweir aCallMod.Add( pDfltTxtFmtColl );
1271cdf0e10cSrcweir aCallMod.Add( pDfltCharFmt );
1272cdf0e10cSrcweir bCheckSdrDflt = 0 != pSdrPool;
1273cdf0e10cSrcweir }
1274cdf0e10cSrcweir else if ( isPARATR(nWhich) ||
1275cdf0e10cSrcweir // --> OD 2008-02-25 #refactorlists#
1276cdf0e10cSrcweir isPARATR_LIST(nWhich) )
1277cdf0e10cSrcweir // <--
1278cdf0e10cSrcweir {
1279cdf0e10cSrcweir aCallMod.Add( pDfltTxtFmtColl );
1280cdf0e10cSrcweir bCheckSdrDflt = 0 != pSdrPool;
1281cdf0e10cSrcweir }
1282cdf0e10cSrcweir else if (isGRFATR(nWhich))
1283cdf0e10cSrcweir {
1284cdf0e10cSrcweir aCallMod.Add( pDfltGrfFmtColl );
1285cdf0e10cSrcweir }
128656b35d86SArmin Le Grand else if (isFRMATR(nWhich) || isDrawingLayerAttribute(nWhich) ) //UUUU
1287cdf0e10cSrcweir {
1288cdf0e10cSrcweir aCallMod.Add( pDfltGrfFmtColl );
1289cdf0e10cSrcweir aCallMod.Add( pDfltTxtFmtColl );
1290cdf0e10cSrcweir aCallMod.Add( pDfltFrmFmt );
1291cdf0e10cSrcweir }
1292cdf0e10cSrcweir else if (isBOXATR(nWhich))
1293cdf0e10cSrcweir {
1294cdf0e10cSrcweir aCallMod.Add( pDfltFrmFmt );
1295cdf0e10cSrcweir }
1296cdf0e10cSrcweir
1297cdf0e10cSrcweir // copy also the defaults
1298cdf0e10cSrcweir if( bCheckSdrDflt )
1299cdf0e10cSrcweir {
1300cdf0e10cSrcweir sal_uInt16 nEdtWhich, nSlotId;
1301cdf0e10cSrcweir if( 0 != (nSlotId = GetAttrPool().GetSlotId( nWhich ) ) &&
1302cdf0e10cSrcweir nSlotId != nWhich &&
1303cdf0e10cSrcweir 0 != (nEdtWhich = pSdrPool->GetWhich( nSlotId )) &&
1304cdf0e10cSrcweir nSlotId != nEdtWhich )
1305cdf0e10cSrcweir {
1306cdf0e10cSrcweir SfxPoolItem* pCpy = pItem->Clone();
1307cdf0e10cSrcweir pCpy->SetWhich( nEdtWhich );
1308cdf0e10cSrcweir pSdrPool->SetPoolDefaultItem( *pCpy );
1309cdf0e10cSrcweir delete pCpy;
1310cdf0e10cSrcweir }
1311cdf0e10cSrcweir }
1312cdf0e10cSrcweir
1313cdf0e10cSrcweir if( aIter.IsAtEnd() )
1314cdf0e10cSrcweir break;
1315cdf0e10cSrcweir pItem = aIter.NextItem();
1316cdf0e10cSrcweir }
1317cdf0e10cSrcweir
1318cdf0e10cSrcweir if( aNew.Count() && aCallMod.GetDepends() )
1319cdf0e10cSrcweir {
1320cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1321cdf0e10cSrcweir {
1322cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo( new SwUndoDefaultAttr( aOld ) );
1323cdf0e10cSrcweir }
1324cdf0e10cSrcweir
1325cdf0e10cSrcweir const SfxPoolItem* pTmpItem;
1326cdf0e10cSrcweir if( ( SFX_ITEM_SET ==
1327cdf0e10cSrcweir aNew.GetItemState( RES_PARATR_TABSTOP, sal_False, &pTmpItem ) ) &&
1328cdf0e10cSrcweir ((SvxTabStopItem*)pTmpItem)->Count() )
1329cdf0e10cSrcweir {
1330cdf0e10cSrcweir // TabStop-Aenderungen behandeln wir erstmal anders:
1331cdf0e10cSrcweir // dann aender bei allen TabStop die dafault's auf den neuen Wert
1332cdf0e10cSrcweir // !!! Achtung: hier wird immer auf dem PoolAttribut gearbeitet,
1333cdf0e10cSrcweir // damit nicht in allen Sets die gleiche Berechnung
1334cdf0e10cSrcweir // auf dem gleichen TabStop (gepoolt!) vorgenommen
1335cdf0e10cSrcweir // wird. Als Modify wird ein FmtChg verschickt.
1336cdf0e10cSrcweir SwTwips nNewWidth = (*(SvxTabStopItem*)pTmpItem)[ 0 ].GetTabPos(),
1337cdf0e10cSrcweir nOldWidth = ((SvxTabStopItem&)aOld.Get(RES_PARATR_TABSTOP))[ 0 ].GetTabPos();
1338cdf0e10cSrcweir
1339cdf0e10cSrcweir int bChg = sal_False;
1340cdf0e10cSrcweir sal_uInt32 nMaxItems = GetAttrPool().GetItemCount2( RES_PARATR_TABSTOP );
1341cdf0e10cSrcweir for( sal_uInt32 n = 0; n < nMaxItems; ++n )
1342cdf0e10cSrcweir if( 0 != (pTmpItem = GetAttrPool().GetItem2( RES_PARATR_TABSTOP, n ) ))
1343cdf0e10cSrcweir bChg |= lcl_SetNewDefTabStops( nOldWidth, nNewWidth,
1344cdf0e10cSrcweir *(SvxTabStopItem*)pTmpItem );
1345cdf0e10cSrcweir
1346cdf0e10cSrcweir aNew.ClearItem( RES_PARATR_TABSTOP );
1347cdf0e10cSrcweir aOld.ClearItem( RES_PARATR_TABSTOP );
1348cdf0e10cSrcweir if( bChg )
1349cdf0e10cSrcweir {
1350cdf0e10cSrcweir SwFmtChg aChgFmt( pDfltCharFmt );
1351cdf0e10cSrcweir // dann sage mal den Frames bescheid
1352cdf0e10cSrcweir aCallMod.ModifyNotification( &aChgFmt, &aChgFmt );
1353cdf0e10cSrcweir }
1354cdf0e10cSrcweir }
1355cdf0e10cSrcweir }
1356cdf0e10cSrcweir
1357cdf0e10cSrcweir if( aNew.Count() && aCallMod.GetDepends() )
1358cdf0e10cSrcweir {
1359cdf0e10cSrcweir SwAttrSetChg aChgOld( aOld, aOld );
1360cdf0e10cSrcweir SwAttrSetChg aChgNew( aNew, aNew );
1361cdf0e10cSrcweir aCallMod.ModifyNotification( &aChgOld, &aChgNew ); // alle veraenderten werden verschickt
1362cdf0e10cSrcweir }
1363cdf0e10cSrcweir
1364cdf0e10cSrcweir // und die default-Formate wieder beim Object austragen
1365cdf0e10cSrcweir SwClient* pDep;
1366cdf0e10cSrcweir while( 0 != ( pDep = (SwClient*)aCallMod.GetDepends()) )
1367cdf0e10cSrcweir aCallMod.Remove( pDep );
1368cdf0e10cSrcweir
1369cdf0e10cSrcweir SetModified();
1370cdf0e10cSrcweir }
1371cdf0e10cSrcweir
1372cdf0e10cSrcweir // Erfrage das Default Attribut in diesem Dokument.
GetDefault(sal_uInt16 nFmtHint) const1373cdf0e10cSrcweir const SfxPoolItem& SwDoc::GetDefault( sal_uInt16 nFmtHint ) const
1374cdf0e10cSrcweir {
1375cdf0e10cSrcweir return GetAttrPool().GetDefaultItem( nFmtHint );
1376cdf0e10cSrcweir }
1377cdf0e10cSrcweir
1378cdf0e10cSrcweir /*
1379cdf0e10cSrcweir * Loeschen der Formate
1380cdf0e10cSrcweir */
DelCharFmt(sal_uInt16 nFmt,sal_Bool bBroadcast)1381cdf0e10cSrcweir void SwDoc::DelCharFmt(sal_uInt16 nFmt, sal_Bool bBroadcast)
1382cdf0e10cSrcweir {
1383cdf0e10cSrcweir SwCharFmt * pDel = (*pCharFmtTbl)[nFmt];
1384cdf0e10cSrcweir
1385cdf0e10cSrcweir if (bBroadcast)
1386cdf0e10cSrcweir BroadcastStyleOperation(pDel->GetName(), SFX_STYLE_FAMILY_CHAR,
1387cdf0e10cSrcweir SFX_STYLESHEET_ERASED);
1388cdf0e10cSrcweir
1389cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1390cdf0e10cSrcweir {
1391cdf0e10cSrcweir SwUndo * pUndo =
1392cdf0e10cSrcweir new SwUndoCharFmtDelete(pDel, this);
1393cdf0e10cSrcweir
1394cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo(pUndo);
1395cdf0e10cSrcweir }
1396cdf0e10cSrcweir
1397cdf0e10cSrcweir pCharFmtTbl->DeleteAndDestroy(nFmt);
1398cdf0e10cSrcweir
1399cdf0e10cSrcweir SetModified();
1400cdf0e10cSrcweir }
1401cdf0e10cSrcweir
DelCharFmt(SwCharFmt * pFmt,sal_Bool bBroadcast)1402cdf0e10cSrcweir void SwDoc::DelCharFmt( SwCharFmt *pFmt, sal_Bool bBroadcast )
1403cdf0e10cSrcweir {
1404cdf0e10cSrcweir sal_uInt16 nFmt = pCharFmtTbl->GetPos( pFmt );
1405cdf0e10cSrcweir ASSERT( USHRT_MAX != nFmt, "Fmt not found," );
1406cdf0e10cSrcweir
1407cdf0e10cSrcweir DelCharFmt( nFmt, bBroadcast );
1408cdf0e10cSrcweir }
1409cdf0e10cSrcweir
DelFrmFmt(SwFrmFmt * pFmt,sal_Bool bBroadcast)1410cdf0e10cSrcweir void SwDoc::DelFrmFmt( SwFrmFmt *pFmt, sal_Bool bBroadcast )
1411cdf0e10cSrcweir {
1412cdf0e10cSrcweir if( pFmt->ISA( SwTableBoxFmt ) || pFmt->ISA( SwTableLineFmt ))
1413cdf0e10cSrcweir {
1414*870262e3SDon Lewis ASSERT( sal_False, "Format is no longer in DocArray, "
1415*870262e3SDon Lewis "can be deleted by delete" );
1416cdf0e10cSrcweir delete pFmt;
1417cdf0e10cSrcweir }
1418cdf0e10cSrcweir else
1419cdf0e10cSrcweir {
1420cdf0e10cSrcweir
1421cdf0e10cSrcweir //Das Format muss in einem der beiden Arrays stehen, in welchem
1422cdf0e10cSrcweir //werden wir schon merken.
1423cdf0e10cSrcweir sal_uInt16 nPos;
1424cdf0e10cSrcweir if ( USHRT_MAX != ( nPos = pFrmFmtTbl->GetPos( pFmt )) )
1425cdf0e10cSrcweir {
1426cdf0e10cSrcweir if (bBroadcast)
1427cdf0e10cSrcweir BroadcastStyleOperation(pFmt->GetName(),
1428cdf0e10cSrcweir SFX_STYLE_FAMILY_FRAME,
1429cdf0e10cSrcweir SFX_STYLESHEET_ERASED);
1430cdf0e10cSrcweir
1431cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1432cdf0e10cSrcweir {
1433cdf0e10cSrcweir SwUndo * pUndo = new SwUndoFrmFmtDelete(pFmt, this);
1434cdf0e10cSrcweir
1435cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo(pUndo);
1436cdf0e10cSrcweir }
1437cdf0e10cSrcweir
1438cdf0e10cSrcweir pFrmFmtTbl->DeleteAndDestroy( nPos );
1439cdf0e10cSrcweir }
1440cdf0e10cSrcweir else
1441cdf0e10cSrcweir {
1442cdf0e10cSrcweir nPos = GetSpzFrmFmts()->GetPos( pFmt );
1443cdf0e10cSrcweir ASSERT( nPos != USHRT_MAX, "FrmFmt not found." );
1444cdf0e10cSrcweir if( USHRT_MAX != nPos )
1445cdf0e10cSrcweir GetSpzFrmFmts()->DeleteAndDestroy( nPos );
1446cdf0e10cSrcweir }
1447cdf0e10cSrcweir }
1448cdf0e10cSrcweir }
1449cdf0e10cSrcweir
DelTblFrmFmt(SwTableFmt * pFmt)1450cdf0e10cSrcweir void SwDoc::DelTblFrmFmt( SwTableFmt *pFmt )
1451cdf0e10cSrcweir {
1452cdf0e10cSrcweir sal_uInt16 nPos = pTblFrmFmtTbl->GetPos( pFmt );
1453cdf0e10cSrcweir ASSERT( USHRT_MAX != nPos, "Fmt not found," );
1454cdf0e10cSrcweir pTblFrmFmtTbl->DeleteAndDestroy( nPos );
1455cdf0e10cSrcweir }
1456cdf0e10cSrcweir
1457cdf0e10cSrcweir /*
1458cdf0e10cSrcweir * Erzeugen der Formate
1459cdf0e10cSrcweir */
MakeFlyFrmFmt(const String & rFmtName,SwFrmFmt * pDerivedFrom)1460cdf0e10cSrcweir SwFlyFrmFmt *SwDoc::MakeFlyFrmFmt( const String &rFmtName,
1461cdf0e10cSrcweir SwFrmFmt *pDerivedFrom )
1462cdf0e10cSrcweir {
1463cdf0e10cSrcweir SwFlyFrmFmt *pFmt = new SwFlyFrmFmt( GetAttrPool(), rFmtName, pDerivedFrom );
1464cdf0e10cSrcweir GetSpzFrmFmts()->Insert(pFmt, GetSpzFrmFmts()->Count());
1465cdf0e10cSrcweir SetModified();
1466cdf0e10cSrcweir return pFmt;
1467cdf0e10cSrcweir }
1468cdf0e10cSrcweir
MakeDrawFrmFmt(const String & rFmtName,SwFrmFmt * pDerivedFrom)1469cdf0e10cSrcweir SwDrawFrmFmt *SwDoc::MakeDrawFrmFmt( const String &rFmtName,
1470cdf0e10cSrcweir SwFrmFmt *pDerivedFrom )
1471cdf0e10cSrcweir {
1472cdf0e10cSrcweir SwDrawFrmFmt *pFmt = new SwDrawFrmFmt( GetAttrPool(), rFmtName, pDerivedFrom);
1473cdf0e10cSrcweir GetSpzFrmFmts()->Insert(pFmt,GetSpzFrmFmts()->Count());
1474cdf0e10cSrcweir SetModified();
1475cdf0e10cSrcweir return pFmt;
1476cdf0e10cSrcweir }
1477cdf0e10cSrcweir
1478cdf0e10cSrcweir
GetTblFrmFmtCount(sal_Bool bUsed) const1479cdf0e10cSrcweir sal_uInt16 SwDoc::GetTblFrmFmtCount(sal_Bool bUsed) const
1480cdf0e10cSrcweir {
1481cdf0e10cSrcweir sal_uInt16 nCount = pTblFrmFmtTbl->Count();
1482cdf0e10cSrcweir if(bUsed)
1483cdf0e10cSrcweir {
1484cdf0e10cSrcweir SwAutoFmtGetDocNode aGetHt( &GetNodes() );
1485cdf0e10cSrcweir for ( sal_uInt16 i = nCount; i; )
1486cdf0e10cSrcweir {
1487cdf0e10cSrcweir if((*pTblFrmFmtTbl)[--i]->GetInfo( aGetHt ))
1488cdf0e10cSrcweir
1489cdf0e10cSrcweir --nCount;
1490cdf0e10cSrcweir }
1491cdf0e10cSrcweir }
1492cdf0e10cSrcweir
1493cdf0e10cSrcweir return nCount;
1494cdf0e10cSrcweir }
1495cdf0e10cSrcweir
1496cdf0e10cSrcweir
GetTblFrmFmt(sal_uInt16 nFmt,sal_Bool bUsed) const1497cdf0e10cSrcweir SwFrmFmt& SwDoc::GetTblFrmFmt(sal_uInt16 nFmt, sal_Bool bUsed ) const
1498cdf0e10cSrcweir {
1499cdf0e10cSrcweir sal_uInt16 nRemoved = 0;
1500cdf0e10cSrcweir if(bUsed)
1501cdf0e10cSrcweir {
1502cdf0e10cSrcweir SwAutoFmtGetDocNode aGetHt( &GetNodes() );
1503cdf0e10cSrcweir for ( sal_uInt16 i = 0; i <= nFmt; i++ )
1504cdf0e10cSrcweir {
1505cdf0e10cSrcweir while ( (*pTblFrmFmtTbl)[ i + nRemoved]->GetInfo( aGetHt ))
1506cdf0e10cSrcweir {
1507cdf0e10cSrcweir nRemoved++;
1508cdf0e10cSrcweir }
1509cdf0e10cSrcweir }
1510cdf0e10cSrcweir }
1511cdf0e10cSrcweir return *((*pTblFrmFmtTbl)[nRemoved + nFmt]);
1512cdf0e10cSrcweir }
1513cdf0e10cSrcweir
MakeTblFrmFmt(const String & rFmtName,SwFrmFmt * pDerivedFrom)1514cdf0e10cSrcweir SwTableFmt* SwDoc::MakeTblFrmFmt( const String &rFmtName,
1515cdf0e10cSrcweir SwFrmFmt *pDerivedFrom )
1516cdf0e10cSrcweir {
1517cdf0e10cSrcweir SwTableFmt* pFmt = new SwTableFmt( GetAttrPool(), rFmtName, pDerivedFrom );
1518cdf0e10cSrcweir pTblFrmFmtTbl->Insert( pFmt, pTblFrmFmtTbl->Count() );
1519cdf0e10cSrcweir SetModified();
1520cdf0e10cSrcweir
1521cdf0e10cSrcweir return pFmt;
1522cdf0e10cSrcweir }
1523cdf0e10cSrcweir
MakeFrmFmt(const String & rFmtName,SwFrmFmt * pDerivedFrom,sal_Bool bBroadcast,sal_Bool bAuto)1524cdf0e10cSrcweir SwFrmFmt *SwDoc::MakeFrmFmt(const String &rFmtName,
1525cdf0e10cSrcweir SwFrmFmt *pDerivedFrom,
1526cdf0e10cSrcweir sal_Bool bBroadcast, sal_Bool bAuto)
1527cdf0e10cSrcweir {
1528cdf0e10cSrcweir
1529cdf0e10cSrcweir SwFrmFmt *pFmt = new SwFrmFmt( GetAttrPool(), rFmtName, pDerivedFrom );
1530cdf0e10cSrcweir
1531cdf0e10cSrcweir pFmt->SetAuto(bAuto);
1532cdf0e10cSrcweir pFrmFmtTbl->Insert( pFmt, pFrmFmtTbl->Count());
1533cdf0e10cSrcweir SetModified();
1534cdf0e10cSrcweir
1535cdf0e10cSrcweir if (bBroadcast)
1536cdf0e10cSrcweir {
1537cdf0e10cSrcweir BroadcastStyleOperation(rFmtName, SFX_STYLE_FAMILY_PARA,
1538cdf0e10cSrcweir SFX_STYLESHEET_CREATED);
1539cdf0e10cSrcweir
1540cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1541cdf0e10cSrcweir {
1542cdf0e10cSrcweir SwUndo * pUndo = new SwUndoFrmFmtCreate(pFmt, pDerivedFrom, this);
1543cdf0e10cSrcweir
1544cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo(pUndo);
1545cdf0e10cSrcweir }
1546cdf0e10cSrcweir }
1547cdf0e10cSrcweir
1548cdf0e10cSrcweir return pFmt;
1549cdf0e10cSrcweir }
1550cdf0e10cSrcweir
_MakeFrmFmt(const String & rFmtName,SwFmt * pDerivedFrom,sal_Bool bBroadcast,sal_Bool bAuto)1551cdf0e10cSrcweir SwFmt *SwDoc::_MakeFrmFmt(const String &rFmtName,
1552cdf0e10cSrcweir SwFmt *pDerivedFrom,
1553cdf0e10cSrcweir sal_Bool bBroadcast, sal_Bool bAuto)
1554cdf0e10cSrcweir {
1555cdf0e10cSrcweir SwFrmFmt *pFrmFmt = dynamic_cast<SwFrmFmt*>(pDerivedFrom);
1556cdf0e10cSrcweir pFrmFmt = MakeFrmFmt( rFmtName, pFrmFmt, bBroadcast, bAuto );
1557cdf0e10cSrcweir return dynamic_cast<SwFmt*>(pFrmFmt);
1558cdf0e10cSrcweir }
1559cdf0e10cSrcweir
1560cdf0e10cSrcweir
1561cdf0e10cSrcweir // --> OD 2005-01-13 #i40550# - add parameter <bAuto> - not relevant
MakeCharFmt(const String & rFmtName,SwCharFmt * pDerivedFrom,sal_Bool bBroadcast,sal_Bool)1562cdf0e10cSrcweir SwCharFmt *SwDoc::MakeCharFmt( const String &rFmtName,
1563cdf0e10cSrcweir SwCharFmt *pDerivedFrom,
1564cdf0e10cSrcweir sal_Bool bBroadcast,
1565cdf0e10cSrcweir sal_Bool )
1566cdf0e10cSrcweir // <--
1567cdf0e10cSrcweir {
1568cdf0e10cSrcweir SwCharFmt *pFmt = new SwCharFmt( GetAttrPool(), rFmtName, pDerivedFrom );
1569cdf0e10cSrcweir pCharFmtTbl->Insert( pFmt, pCharFmtTbl->Count() );
1570cdf0e10cSrcweir pFmt->SetAuto( sal_False );
1571cdf0e10cSrcweir SetModified();
1572cdf0e10cSrcweir
1573cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1574cdf0e10cSrcweir {
1575cdf0e10cSrcweir SwUndo * pUndo = new SwUndoCharFmtCreate(pFmt, pDerivedFrom, this);
1576cdf0e10cSrcweir
1577cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo(pUndo);
1578cdf0e10cSrcweir }
1579cdf0e10cSrcweir
1580cdf0e10cSrcweir if (bBroadcast)
1581cdf0e10cSrcweir {
1582cdf0e10cSrcweir BroadcastStyleOperation(rFmtName, SFX_STYLE_FAMILY_CHAR,
1583cdf0e10cSrcweir SFX_STYLESHEET_CREATED);
1584cdf0e10cSrcweir }
1585cdf0e10cSrcweir
1586cdf0e10cSrcweir return pFmt;
1587cdf0e10cSrcweir }
1588cdf0e10cSrcweir
_MakeCharFmt(const String & rFmtName,SwFmt * pDerivedFrom,sal_Bool bBroadcast,sal_Bool bAuto)1589cdf0e10cSrcweir SwFmt *SwDoc::_MakeCharFmt(const String &rFmtName,
1590cdf0e10cSrcweir SwFmt *pDerivedFrom,
1591cdf0e10cSrcweir sal_Bool bBroadcast, sal_Bool bAuto)
1592cdf0e10cSrcweir {
1593cdf0e10cSrcweir SwCharFmt *pCharFmt = dynamic_cast<SwCharFmt*>(pDerivedFrom);
1594cdf0e10cSrcweir pCharFmt = MakeCharFmt( rFmtName, pCharFmt, bBroadcast, bAuto );
1595cdf0e10cSrcweir return dynamic_cast<SwFmt*>(pCharFmt);
1596cdf0e10cSrcweir }
1597cdf0e10cSrcweir
1598cdf0e10cSrcweir
1599cdf0e10cSrcweir /*
1600cdf0e10cSrcweir * Erzeugen der FormatCollections
1601cdf0e10cSrcweir */
1602cdf0e10cSrcweir // TXT
1603cdf0e10cSrcweir // --> OD 2005-01-13 #i40550# - add parameter <bAuto> - not relevant
MakeTxtFmtColl(const String & rFmtName,SwTxtFmtColl * pDerivedFrom,sal_Bool bBroadcast,sal_Bool)1604cdf0e10cSrcweir SwTxtFmtColl* SwDoc::MakeTxtFmtColl( const String &rFmtName,
1605cdf0e10cSrcweir SwTxtFmtColl *pDerivedFrom,
1606cdf0e10cSrcweir sal_Bool bBroadcast,
1607cdf0e10cSrcweir sal_Bool )
1608cdf0e10cSrcweir // <--
1609cdf0e10cSrcweir {
1610cdf0e10cSrcweir SwTxtFmtColl *pFmtColl = new SwTxtFmtColl( GetAttrPool(), rFmtName,
1611cdf0e10cSrcweir pDerivedFrom );
1612cdf0e10cSrcweir pTxtFmtCollTbl->Insert(pFmtColl, pTxtFmtCollTbl->Count());
1613cdf0e10cSrcweir pFmtColl->SetAuto( sal_False );
1614cdf0e10cSrcweir SetModified();
1615cdf0e10cSrcweir
1616cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1617cdf0e10cSrcweir {
1618cdf0e10cSrcweir SwUndo * pUndo = new SwUndoTxtFmtCollCreate(pFmtColl, pDerivedFrom,
1619cdf0e10cSrcweir this);
1620cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo(pUndo);
1621cdf0e10cSrcweir }
1622cdf0e10cSrcweir
1623cdf0e10cSrcweir if (bBroadcast)
1624cdf0e10cSrcweir BroadcastStyleOperation(rFmtName, SFX_STYLE_FAMILY_PARA,
1625cdf0e10cSrcweir SFX_STYLESHEET_CREATED);
1626cdf0e10cSrcweir
1627cdf0e10cSrcweir return pFmtColl;
1628cdf0e10cSrcweir }
1629cdf0e10cSrcweir
_MakeTxtFmtColl(const String & rFmtName,SwFmt * pDerivedFrom,sal_Bool bBroadcast,sal_Bool bAuto)1630cdf0e10cSrcweir SwFmt *SwDoc::_MakeTxtFmtColl(const String &rFmtName,
1631cdf0e10cSrcweir SwFmt *pDerivedFrom,
1632cdf0e10cSrcweir sal_Bool bBroadcast, sal_Bool bAuto)
1633cdf0e10cSrcweir {
1634cdf0e10cSrcweir SwTxtFmtColl *pTxtFmtColl = dynamic_cast<SwTxtFmtColl*>(pDerivedFrom);
1635cdf0e10cSrcweir pTxtFmtColl = MakeTxtFmtColl( rFmtName, pTxtFmtColl, bBroadcast, bAuto );
1636cdf0e10cSrcweir return dynamic_cast<SwFmt*>(pTxtFmtColl);
1637cdf0e10cSrcweir }
1638cdf0e10cSrcweir
1639cdf0e10cSrcweir
1640cdf0e10cSrcweir //FEATURE::CONDCOLL
MakeCondTxtFmtColl(const String & rFmtName,SwTxtFmtColl * pDerivedFrom,sal_Bool bBroadcast)1641cdf0e10cSrcweir SwConditionTxtFmtColl* SwDoc::MakeCondTxtFmtColl( const String &rFmtName,
1642cdf0e10cSrcweir SwTxtFmtColl *pDerivedFrom,
1643cdf0e10cSrcweir sal_Bool bBroadcast)
1644cdf0e10cSrcweir {
1645cdf0e10cSrcweir SwConditionTxtFmtColl*pFmtColl = new SwConditionTxtFmtColl( GetAttrPool(),
1646cdf0e10cSrcweir rFmtName, pDerivedFrom );
1647cdf0e10cSrcweir pTxtFmtCollTbl->Insert(pFmtColl, pTxtFmtCollTbl->Count());
1648cdf0e10cSrcweir pFmtColl->SetAuto( sal_False );
1649cdf0e10cSrcweir SetModified();
1650cdf0e10cSrcweir
1651cdf0e10cSrcweir if (bBroadcast)
1652cdf0e10cSrcweir BroadcastStyleOperation(rFmtName, SFX_STYLE_FAMILY_PARA,
1653cdf0e10cSrcweir SFX_STYLESHEET_CREATED);
1654cdf0e10cSrcweir
1655cdf0e10cSrcweir return pFmtColl;
1656cdf0e10cSrcweir }
1657cdf0e10cSrcweir //FEATURE::CONDCOLL
1658cdf0e10cSrcweir
1659cdf0e10cSrcweir // GRF
1660cdf0e10cSrcweir
MakeGrfFmtColl(const String & rFmtName,SwGrfFmtColl * pDerivedFrom)1661cdf0e10cSrcweir SwGrfFmtColl* SwDoc::MakeGrfFmtColl( const String &rFmtName,
1662cdf0e10cSrcweir SwGrfFmtColl *pDerivedFrom )
1663cdf0e10cSrcweir {
1664cdf0e10cSrcweir SwGrfFmtColl *pFmtColl = new SwGrfFmtColl( GetAttrPool(), rFmtName,
1665cdf0e10cSrcweir pDerivedFrom );
1666cdf0e10cSrcweir pGrfFmtCollTbl->Insert( pFmtColl, pGrfFmtCollTbl->Count() );
1667cdf0e10cSrcweir pFmtColl->SetAuto( sal_False );
1668cdf0e10cSrcweir SetModified();
1669cdf0e10cSrcweir return pFmtColl;
1670cdf0e10cSrcweir }
1671cdf0e10cSrcweir
DelTxtFmtColl(sal_uInt16 nFmtColl,sal_Bool bBroadcast)1672cdf0e10cSrcweir void SwDoc::DelTxtFmtColl(sal_uInt16 nFmtColl, sal_Bool bBroadcast)
1673cdf0e10cSrcweir {
1674cdf0e10cSrcweir ASSERT( nFmtColl, "Remove fuer Coll 0." );
1675cdf0e10cSrcweir
1676cdf0e10cSrcweir // Wer hat die zu loeschende als Next
1677cdf0e10cSrcweir SwTxtFmtColl *pDel = (*pTxtFmtCollTbl)[nFmtColl];
1678cdf0e10cSrcweir if( pDfltTxtFmtColl == pDel )
1679cdf0e10cSrcweir return; // default nie loeschen !!
1680cdf0e10cSrcweir
1681cdf0e10cSrcweir if (bBroadcast)
1682cdf0e10cSrcweir BroadcastStyleOperation(pDel->GetName(), SFX_STYLE_FAMILY_PARA,
1683cdf0e10cSrcweir SFX_STYLESHEET_ERASED);
1684cdf0e10cSrcweir
1685cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1686cdf0e10cSrcweir {
1687cdf0e10cSrcweir SwUndoTxtFmtCollDelete * pUndo =
1688cdf0e10cSrcweir new SwUndoTxtFmtCollDelete(pDel, this);
1689cdf0e10cSrcweir
1690cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo(pUndo);
1691cdf0e10cSrcweir }
1692cdf0e10cSrcweir
1693cdf0e10cSrcweir // Die FmtColl austragen
1694cdf0e10cSrcweir pTxtFmtCollTbl->Remove(nFmtColl);
1695cdf0e10cSrcweir // Next korrigieren
1696cdf0e10cSrcweir pTxtFmtCollTbl->ForEach( 1, pTxtFmtCollTbl->Count(),
1697cdf0e10cSrcweir &SetTxtFmtCollNext, pDel );
1698cdf0e10cSrcweir delete pDel;
1699cdf0e10cSrcweir SetModified();
1700cdf0e10cSrcweir }
1701cdf0e10cSrcweir
DelTxtFmtColl(SwTxtFmtColl * pColl,sal_Bool bBroadcast)1702cdf0e10cSrcweir void SwDoc::DelTxtFmtColl( SwTxtFmtColl *pColl, sal_Bool bBroadcast )
1703cdf0e10cSrcweir {
1704cdf0e10cSrcweir sal_uInt16 nFmt = pTxtFmtCollTbl->GetPos( pColl );
1705cdf0e10cSrcweir ASSERT( USHRT_MAX != nFmt, "Collection not found," );
1706cdf0e10cSrcweir DelTxtFmtColl( nFmt, bBroadcast );
1707cdf0e10cSrcweir }
1708cdf0e10cSrcweir
lcl_SetTxtFmtColl(const SwNodePtr & rpNode,void * pArgs)1709cdf0e10cSrcweir sal_Bool lcl_SetTxtFmtColl( const SwNodePtr& rpNode, void* pArgs )
1710cdf0e10cSrcweir {
1711cdf0e10cSrcweir SwCntntNode* pCNd = (SwCntntNode*) rpNode->GetTxtNode();
1712cdf0e10cSrcweir if ( pCNd )
1713cdf0e10cSrcweir {
1714cdf0e10cSrcweir ParaRstFmt* pPara = (ParaRstFmt*) pArgs;
1715cdf0e10cSrcweir
1716cdf0e10cSrcweir SwTxtFmtColl* pFmt = static_cast< SwTxtFmtColl* >( pPara->pFmtColl );
1717cdf0e10cSrcweir if ( pPara->bReset )
1718cdf0e10cSrcweir {
1719cdf0e10cSrcweir
1720cdf0e10cSrcweir lcl_RstAttr( pCNd, pPara );
1721cdf0e10cSrcweir
1722cdf0e10cSrcweir // check, if paragraph style has changed
1723cdf0e10cSrcweir if ( pPara->bResetListAttrs &&
1724cdf0e10cSrcweir pFmt != pCNd->GetFmtColl() &&
1725cdf0e10cSrcweir pFmt->GetItemState( RES_PARATR_NUMRULE ) == SFX_ITEM_SET )
1726cdf0e10cSrcweir {
1727cdf0e10cSrcweir // --> OD 2009-09-07 #b6876367#
1728cdf0e10cSrcweir // Check, if the list style of the paragraph will change.
1729cdf0e10cSrcweir bool bChangeOfListStyleAtParagraph( true );
1730cdf0e10cSrcweir SwTxtNode* pTNd( dynamic_cast<SwTxtNode*>(pCNd) );
1731cdf0e10cSrcweir ASSERT( pTNd,
1732cdf0e10cSrcweir "<lcl_SetTxtFmtColl(..)> - text node expected -> crash" );
1733cdf0e10cSrcweir {
1734cdf0e10cSrcweir SwNumRule* pNumRuleAtParagraph( pTNd->GetNumRule() );
1735cdf0e10cSrcweir if ( pNumRuleAtParagraph )
1736cdf0e10cSrcweir {
1737cdf0e10cSrcweir const SwNumRuleItem& rNumRuleItemAtParagraphStyle =
1738cdf0e10cSrcweir pFmt->GetNumRule();
1739cdf0e10cSrcweir if ( rNumRuleItemAtParagraphStyle.GetValue() ==
1740cdf0e10cSrcweir pNumRuleAtParagraph->GetName() )
1741cdf0e10cSrcweir {
1742cdf0e10cSrcweir bChangeOfListStyleAtParagraph = false;
1743cdf0e10cSrcweir }
1744cdf0e10cSrcweir }
1745cdf0e10cSrcweir }
1746cdf0e10cSrcweir
1747cdf0e10cSrcweir if ( bChangeOfListStyleAtParagraph )
1748cdf0e10cSrcweir {
1749cdf0e10cSrcweir std::auto_ptr< SwRegHistory > pRegH;
1750cdf0e10cSrcweir if ( pPara->pHistory )
1751cdf0e10cSrcweir {
1752cdf0e10cSrcweir pRegH.reset( new SwRegHistory( pTNd, *pTNd, pPara->pHistory ) );
1753cdf0e10cSrcweir }
1754cdf0e10cSrcweir
1755cdf0e10cSrcweir pCNd->ResetAttr( RES_PARATR_NUMRULE );
1756cdf0e10cSrcweir
1757cdf0e10cSrcweir // reset all list attributes
1758cdf0e10cSrcweir pCNd->ResetAttr( RES_PARATR_LIST_LEVEL );
1759cdf0e10cSrcweir pCNd->ResetAttr( RES_PARATR_LIST_ISRESTART );
1760cdf0e10cSrcweir pCNd->ResetAttr( RES_PARATR_LIST_RESTARTVALUE );
1761cdf0e10cSrcweir pCNd->ResetAttr( RES_PARATR_LIST_ISCOUNTED );
1762cdf0e10cSrcweir pCNd->ResetAttr( RES_PARATR_LIST_ID );
1763cdf0e10cSrcweir }
1764cdf0e10cSrcweir }
1765cdf0e10cSrcweir }
1766cdf0e10cSrcweir
1767cdf0e10cSrcweir // erst in die History aufnehmen, damit ggfs. alte Daten
1768cdf0e10cSrcweir // gesichert werden koennen
1769cdf0e10cSrcweir if( pPara->pHistory )
1770cdf0e10cSrcweir pPara->pHistory->Add( pCNd->GetFmtColl(), pCNd->GetIndex(),
1771cdf0e10cSrcweir ND_TEXTNODE );
1772cdf0e10cSrcweir
1773cdf0e10cSrcweir pCNd->ChgFmtColl( pFmt );
1774cdf0e10cSrcweir
1775cdf0e10cSrcweir pPara->nWhich++;
1776cdf0e10cSrcweir }
1777cdf0e10cSrcweir return sal_True;
1778cdf0e10cSrcweir }
1779cdf0e10cSrcweir
178028f5a95aSOliver-Rainer Wittmann
SetTxtFmtColl(const SwPaM & rRg,SwTxtFmtColl * pFmt,const bool bReset,const bool bResetListAttrs)178128f5a95aSOliver-Rainer Wittmann sal_Bool SwDoc::SetTxtFmtColl(
178228f5a95aSOliver-Rainer Wittmann const SwPaM &rRg,
1783cdf0e10cSrcweir SwTxtFmtColl *pFmt,
178428f5a95aSOliver-Rainer Wittmann const bool bReset,
178528f5a95aSOliver-Rainer Wittmann const bool bResetListAttrs )
1786cdf0e10cSrcweir {
1787cdf0e10cSrcweir SwDataChanged aTmp( rRg, 0 );
1788cdf0e10cSrcweir const SwPosition *pStt = rRg.Start(), *pEnd = rRg.End();
1789cdf0e10cSrcweir SwHistory* pHst = 0;
1790cdf0e10cSrcweir sal_Bool bRet = sal_True;
1791cdf0e10cSrcweir
1792cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
1793cdf0e10cSrcweir {
1794cdf0e10cSrcweir SwUndoFmtColl* pUndo = new SwUndoFmtColl( rRg, pFmt,
1795cdf0e10cSrcweir bReset,
1796cdf0e10cSrcweir bResetListAttrs );
1797cdf0e10cSrcweir pHst = pUndo->GetHistory();
1798cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo(pUndo);
1799cdf0e10cSrcweir }
1800cdf0e10cSrcweir
1801cdf0e10cSrcweir ParaRstFmt aPara( pStt, pEnd, pHst );
1802cdf0e10cSrcweir aPara.pFmtColl = pFmt;
1803cdf0e10cSrcweir aPara.bReset = bReset;
1804cdf0e10cSrcweir aPara.bResetListAttrs = bResetListAttrs;
1805cdf0e10cSrcweir
1806cdf0e10cSrcweir GetNodes().ForEach( pStt->nNode.GetIndex(), pEnd->nNode.GetIndex()+1,
1807cdf0e10cSrcweir lcl_SetTxtFmtColl, &aPara );
1808cdf0e10cSrcweir if ( !aPara.nWhich )
1809cdf0e10cSrcweir bRet = sal_False; // keinen gueltigen Node gefunden
1810cdf0e10cSrcweir
1811cdf0e10cSrcweir if ( bRet )
181228f5a95aSOliver-Rainer Wittmann {
1813cdf0e10cSrcweir SetModified();
181428f5a95aSOliver-Rainer Wittmann }
181528f5a95aSOliver-Rainer Wittmann
1816cdf0e10cSrcweir return bRet;
1817cdf0e10cSrcweir }
1818cdf0e10cSrcweir
1819cdf0e10cSrcweir
1820cdf0e10cSrcweir // ---- Kopiere die Formate in sich selbst (SwDoc) ----------------------
1821cdf0e10cSrcweir
CopyFmt(const SwFmt & rFmt,const SvPtrarr & rFmtArr,FNCopyFmt fnCopyFmt,const SwFmt & rDfltFmt)1822cdf0e10cSrcweir SwFmt* SwDoc::CopyFmt( const SwFmt& rFmt,
1823cdf0e10cSrcweir const SvPtrarr& rFmtArr,
1824cdf0e10cSrcweir FNCopyFmt fnCopyFmt, const SwFmt& rDfltFmt )
1825cdf0e10cSrcweir {
1826cdf0e10cSrcweir // kein-Autoformat || default Format || Collection-Format
1827cdf0e10cSrcweir // dann suche danach.
1828cdf0e10cSrcweir if( !rFmt.IsAuto() || !rFmt.GetRegisteredIn() )
1829cdf0e10cSrcweir for( sal_uInt16 n = 0; n < rFmtArr.Count(); n++ )
1830cdf0e10cSrcweir {
1831cdf0e10cSrcweir // ist die Vorlage schon im Doc vorhanden ??
1832cdf0e10cSrcweir if( ((SwFmt*)rFmtArr[n])->GetName().Equals( rFmt.GetName() ))
1833cdf0e10cSrcweir return (SwFmt*)rFmtArr[n];
1834cdf0e10cSrcweir }
1835cdf0e10cSrcweir
1836cdf0e10cSrcweir // suche erstmal nach dem "Parent"
1837cdf0e10cSrcweir SwFmt* pParent = (SwFmt*)&rDfltFmt;
1838cdf0e10cSrcweir if( rFmt.DerivedFrom() && pParent != rFmt.DerivedFrom() )
1839cdf0e10cSrcweir pParent = CopyFmt( *rFmt.DerivedFrom(), rFmtArr,
1840cdf0e10cSrcweir fnCopyFmt, rDfltFmt );
1841cdf0e10cSrcweir
1842cdf0e10cSrcweir // erzeuge das Format und kopiere die Attribute
1843cdf0e10cSrcweir // --> OD 2005-01-13 #i40550#
1844cdf0e10cSrcweir SwFmt* pNewFmt = (this->*fnCopyFmt)( rFmt.GetName(), pParent, sal_False, sal_True );
1845cdf0e10cSrcweir // <--
1846cdf0e10cSrcweir pNewFmt->SetAuto( rFmt.IsAuto() );
1847cdf0e10cSrcweir pNewFmt->CopyAttrs( rFmt, sal_True ); // kopiere Attribute
1848cdf0e10cSrcweir
1849cdf0e10cSrcweir pNewFmt->SetPoolFmtId( rFmt.GetPoolFmtId() );
1850cdf0e10cSrcweir pNewFmt->SetPoolHelpId( rFmt.GetPoolHelpId() );
1851cdf0e10cSrcweir
1852cdf0e10cSrcweir // HelpFile-Id immer auf dflt setzen !!
1853cdf0e10cSrcweir pNewFmt->SetPoolHlpFileId( UCHAR_MAX );
1854cdf0e10cSrcweir
1855cdf0e10cSrcweir return pNewFmt;
1856cdf0e10cSrcweir }
1857cdf0e10cSrcweir
1858cdf0e10cSrcweir
1859cdf0e10cSrcweir // ---- kopiere das Frame-Format --------
CopyFrmFmt(const SwFrmFmt & rFmt)1860cdf0e10cSrcweir SwFrmFmt* SwDoc::CopyFrmFmt( const SwFrmFmt& rFmt )
1861cdf0e10cSrcweir {
1862cdf0e10cSrcweir
1863cdf0e10cSrcweir return (SwFrmFmt*)CopyFmt( rFmt, *GetFrmFmts(), &SwDoc::_MakeFrmFmt,
1864cdf0e10cSrcweir *GetDfltFrmFmt() );
1865cdf0e10cSrcweir }
1866cdf0e10cSrcweir
1867cdf0e10cSrcweir // ---- kopiere das Char-Format --------
CopyCharFmt(const SwCharFmt & rFmt)1868cdf0e10cSrcweir SwCharFmt* SwDoc::CopyCharFmt( const SwCharFmt& rFmt )
1869cdf0e10cSrcweir {
1870cdf0e10cSrcweir return (SwCharFmt*)CopyFmt( rFmt, *GetCharFmts(),
1871cdf0e10cSrcweir &SwDoc::_MakeCharFmt,
1872cdf0e10cSrcweir *GetDfltCharFmt() );
1873cdf0e10cSrcweir }
1874cdf0e10cSrcweir
1875cdf0e10cSrcweir
1876cdf0e10cSrcweir // --- Kopiere TextNodes ----
1877cdf0e10cSrcweir
CopyTxtColl(const SwTxtFmtColl & rColl)1878cdf0e10cSrcweir SwTxtFmtColl* SwDoc::CopyTxtColl( const SwTxtFmtColl& rColl )
1879cdf0e10cSrcweir {
1880cdf0e10cSrcweir SwTxtFmtColl* pNewColl = FindTxtFmtCollByName( rColl.GetName() );
1881cdf0e10cSrcweir if( pNewColl )
1882cdf0e10cSrcweir return pNewColl;
1883cdf0e10cSrcweir
1884cdf0e10cSrcweir // suche erstmal nach dem "Parent"
1885cdf0e10cSrcweir SwTxtFmtColl* pParent = pDfltTxtFmtColl;
1886cdf0e10cSrcweir if( pParent != rColl.DerivedFrom() )
1887cdf0e10cSrcweir pParent = CopyTxtColl( *(SwTxtFmtColl*)rColl.DerivedFrom() );
1888cdf0e10cSrcweir
1889cdf0e10cSrcweir
1890cdf0e10cSrcweir //FEATURE::CONDCOLL
1891cdf0e10cSrcweir if( RES_CONDTXTFMTCOLL == rColl.Which() )
1892cdf0e10cSrcweir {
1893cdf0e10cSrcweir pNewColl = new SwConditionTxtFmtColl( GetAttrPool(), rColl.GetName(),
1894cdf0e10cSrcweir pParent);
1895cdf0e10cSrcweir pTxtFmtCollTbl->Insert( pNewColl, pTxtFmtCollTbl->Count() );
1896cdf0e10cSrcweir pNewColl->SetAuto( sal_False );
1897cdf0e10cSrcweir SetModified();
1898cdf0e10cSrcweir
1899cdf0e10cSrcweir // Kopiere noch die Bedingungen
1900cdf0e10cSrcweir ((SwConditionTxtFmtColl*)pNewColl)->SetConditions(
1901cdf0e10cSrcweir ((SwConditionTxtFmtColl&)rColl).GetCondColls() );
1902cdf0e10cSrcweir }
1903cdf0e10cSrcweir else
1904cdf0e10cSrcweir //FEATURE::CONDCOLL
1905cdf0e10cSrcweir pNewColl = MakeTxtFmtColl( rColl.GetName(), pParent );
1906cdf0e10cSrcweir
1907cdf0e10cSrcweir // kopiere jetzt noch die Auto-Formate oder kopiere die Attribute
1908cdf0e10cSrcweir pNewColl->CopyAttrs( rColl, sal_True );
1909cdf0e10cSrcweir
1910cdf0e10cSrcweir // setze noch den Outline-Level
1911cdf0e10cSrcweir if ( rColl.IsAssignedToListLevelOfOutlineStyle() )
191228f5a95aSOliver-Rainer Wittmann pNewColl->AssignToListLevelOfOutlineStyle( rColl.GetAssignedOutlineStyleLevel() );
191328f5a95aSOliver-Rainer Wittmann
1914cdf0e10cSrcweir pNewColl->SetPoolFmtId( rColl.GetPoolFmtId() );
1915cdf0e10cSrcweir pNewColl->SetPoolHelpId( rColl.GetPoolHelpId() );
1916cdf0e10cSrcweir
1917cdf0e10cSrcweir // HelpFile-Id immer auf dflt setzen !!
1918cdf0e10cSrcweir pNewColl->SetPoolHlpFileId( UCHAR_MAX );
1919cdf0e10cSrcweir
1920cdf0e10cSrcweir if( &rColl.GetNextTxtFmtColl() != &rColl )
1921cdf0e10cSrcweir pNewColl->SetNextTxtFmtColl( *CopyTxtColl( rColl.GetNextTxtFmtColl() ));
1922cdf0e10cSrcweir
1923cdf0e10cSrcweir // ggfs. die NumRule erzeugen
1924cdf0e10cSrcweir if( this != rColl.GetDoc() )
1925cdf0e10cSrcweir {
1926cdf0e10cSrcweir const SfxPoolItem* pItem;
1927cdf0e10cSrcweir if( SFX_ITEM_SET == pNewColl->GetItemState( RES_PARATR_NUMRULE,
1928cdf0e10cSrcweir sal_False, &pItem ))
1929cdf0e10cSrcweir {
1930cdf0e10cSrcweir const SwNumRule* pRule;
1931cdf0e10cSrcweir const String& rName = ((SwNumRuleItem*)pItem)->GetValue();
1932cdf0e10cSrcweir if( rName.Len() &&
1933cdf0e10cSrcweir 0 != ( pRule = rColl.GetDoc()->FindNumRulePtr( rName )) &&
1934cdf0e10cSrcweir !pRule->IsAutoRule() )
1935cdf0e10cSrcweir {
1936cdf0e10cSrcweir SwNumRule* pDestRule = FindNumRulePtr( rName );
1937cdf0e10cSrcweir if( pDestRule )
1938cdf0e10cSrcweir pDestRule->SetInvalidRule( sal_True );
1939cdf0e10cSrcweir else
1940cdf0e10cSrcweir MakeNumRule( rName, pRule );
1941cdf0e10cSrcweir }
1942cdf0e10cSrcweir }
1943cdf0e10cSrcweir }
1944cdf0e10cSrcweir return pNewColl;
1945cdf0e10cSrcweir }
1946cdf0e10cSrcweir
1947cdf0e10cSrcweir // --- Kopiere GrafikNodes ----
1948cdf0e10cSrcweir
CopyGrfColl(const SwGrfFmtColl & rColl)1949cdf0e10cSrcweir SwGrfFmtColl* SwDoc::CopyGrfColl( const SwGrfFmtColl& rColl )
1950cdf0e10cSrcweir {
1951cdf0e10cSrcweir SwGrfFmtColl* pNewColl = FindGrfFmtCollByName( rColl.GetName() );
1952cdf0e10cSrcweir if( pNewColl )
1953cdf0e10cSrcweir return pNewColl;
1954cdf0e10cSrcweir
1955cdf0e10cSrcweir // suche erstmal nach dem "Parent"
1956cdf0e10cSrcweir SwGrfFmtColl* pParent = pDfltGrfFmtColl;
1957cdf0e10cSrcweir if( pParent != rColl.DerivedFrom() )
1958cdf0e10cSrcweir pParent = CopyGrfColl( *(SwGrfFmtColl*)rColl.DerivedFrom() );
1959cdf0e10cSrcweir
1960cdf0e10cSrcweir // falls nicht, so kopiere sie
1961cdf0e10cSrcweir pNewColl = MakeGrfFmtColl( rColl.GetName(), pParent );
1962cdf0e10cSrcweir
1963cdf0e10cSrcweir // noch die Attribute kopieren
1964cdf0e10cSrcweir pNewColl->CopyAttrs( rColl );
1965cdf0e10cSrcweir
1966cdf0e10cSrcweir pNewColl->SetPoolFmtId( rColl.GetPoolFmtId() );
1967cdf0e10cSrcweir pNewColl->SetPoolHelpId( rColl.GetPoolHelpId() );
1968cdf0e10cSrcweir
1969cdf0e10cSrcweir // HelpFile-Id immer auf dflt setzen !!
1970cdf0e10cSrcweir pNewColl->SetPoolHlpFileId( UCHAR_MAX );
1971cdf0e10cSrcweir
1972cdf0e10cSrcweir return pNewColl;
1973cdf0e10cSrcweir }
1974cdf0e10cSrcweir
lcl_FindPageDesc(const SwPageDescs & rArr,const String & rName)1975cdf0e10cSrcweir SwPageDesc* lcl_FindPageDesc( const SwPageDescs& rArr, const String& rName )
1976cdf0e10cSrcweir {
1977cdf0e10cSrcweir for( sal_uInt16 n = rArr.Count(); n; )
1978cdf0e10cSrcweir {
1979cdf0e10cSrcweir SwPageDesc* pDesc = rArr[ --n ];
1980cdf0e10cSrcweir if( pDesc->GetName() == rName )
1981cdf0e10cSrcweir return pDesc;
1982cdf0e10cSrcweir }
1983cdf0e10cSrcweir return 0;
1984cdf0e10cSrcweir }
1985cdf0e10cSrcweir
CopyFmtArr(const SvPtrarr & rSourceArr,SvPtrarr & rDestArr,FNCopyFmt fnCopyFmt,SwFmt & rDfltFmt)1986cdf0e10cSrcweir void SwDoc::CopyFmtArr( const SvPtrarr& rSourceArr,
1987cdf0e10cSrcweir SvPtrarr& rDestArr,
1988cdf0e10cSrcweir FNCopyFmt fnCopyFmt,
1989cdf0e10cSrcweir SwFmt& rDfltFmt )
1990cdf0e10cSrcweir {
1991cdf0e10cSrcweir sal_uInt16 nSrc;
1992cdf0e10cSrcweir SwFmt* pSrc, *pDest;
1993cdf0e10cSrcweir
1994cdf0e10cSrcweir // 1. Schritt alle Formate anlegen (das 0. ueberspringen - Default!)
1995cdf0e10cSrcweir for( nSrc = rSourceArr.Count(); nSrc > 1; )
1996cdf0e10cSrcweir {
1997cdf0e10cSrcweir pSrc = (SwFmt*)rSourceArr[ --nSrc ];
1998cdf0e10cSrcweir if( pSrc->IsDefault() || pSrc->IsAuto() )
1999cdf0e10cSrcweir continue;
2000cdf0e10cSrcweir
2001cdf0e10cSrcweir if( 0 == FindFmtByName( rDestArr, pSrc->GetName() ) )
2002cdf0e10cSrcweir {
2003cdf0e10cSrcweir if( RES_CONDTXTFMTCOLL == pSrc->Which() )
2004cdf0e10cSrcweir MakeCondTxtFmtColl( pSrc->GetName(), (SwTxtFmtColl*)&rDfltFmt );
2005cdf0e10cSrcweir else
2006cdf0e10cSrcweir // --> OD 2005-01-13 #i40550#
2007cdf0e10cSrcweir (this->*fnCopyFmt)( pSrc->GetName(), &rDfltFmt, sal_False, sal_True );
2008cdf0e10cSrcweir // <--
2009cdf0e10cSrcweir }
2010cdf0e10cSrcweir }
2011cdf0e10cSrcweir
2012cdf0e10cSrcweir // 2. Schritt alle Attribute kopieren, richtige Parents setzen
2013cdf0e10cSrcweir for( nSrc = rSourceArr.Count(); nSrc > 1; )
2014cdf0e10cSrcweir {
2015cdf0e10cSrcweir pSrc = (SwFmt*)rSourceArr[ --nSrc ];
2016cdf0e10cSrcweir if( pSrc->IsDefault() || pSrc->IsAuto() )
2017cdf0e10cSrcweir continue;
2018cdf0e10cSrcweir
2019cdf0e10cSrcweir pDest = FindFmtByName( rDestArr, pSrc->GetName() );
2020cdf0e10cSrcweir pDest->SetAuto( sal_False );
2021cdf0e10cSrcweir pDest->DelDiffs( *pSrc );
2022cdf0e10cSrcweir
2023cdf0e10cSrcweir // #i94285#: existing <SwFmtPageDesc> instance, before copying attributes
2024cdf0e10cSrcweir const SfxPoolItem* pItem;
2025cdf0e10cSrcweir if( &GetAttrPool() != pSrc->GetAttrSet().GetPool() &&
2026cdf0e10cSrcweir SFX_ITEM_SET == pSrc->GetAttrSet().GetItemState(
2027cdf0e10cSrcweir RES_PAGEDESC, sal_False, &pItem ) &&
2028cdf0e10cSrcweir ((SwFmtPageDesc*)pItem)->GetPageDesc() )
2029cdf0e10cSrcweir {
2030cdf0e10cSrcweir SwFmtPageDesc aPageDesc( *(SwFmtPageDesc*)pItem );
2031cdf0e10cSrcweir const String& rNm = aPageDesc.GetPageDesc()->GetName();
2032cdf0e10cSrcweir SwPageDesc* pPageDesc = ::lcl_FindPageDesc( aPageDescs, rNm );
2033cdf0e10cSrcweir if( !pPageDesc )
2034cdf0e10cSrcweir {
2035cdf0e10cSrcweir pPageDesc = aPageDescs[ MakePageDesc( rNm ) ];
2036cdf0e10cSrcweir }
2037cdf0e10cSrcweir aPageDesc.RegisterToPageDesc( *pPageDesc );
2038cdf0e10cSrcweir SwAttrSet aTmpAttrSet( pSrc->GetAttrSet() );
2039cdf0e10cSrcweir aTmpAttrSet.Put( aPageDesc );
2040cdf0e10cSrcweir pDest->SetFmtAttr( aTmpAttrSet );
2041cdf0e10cSrcweir }
2042cdf0e10cSrcweir else
2043cdf0e10cSrcweir {
2044cdf0e10cSrcweir pDest->SetFmtAttr( pSrc->GetAttrSet() );
2045cdf0e10cSrcweir }
2046cdf0e10cSrcweir
2047cdf0e10cSrcweir pDest->SetPoolFmtId( pSrc->GetPoolFmtId() );
2048cdf0e10cSrcweir pDest->SetPoolHelpId( pSrc->GetPoolHelpId() );
2049cdf0e10cSrcweir
2050cdf0e10cSrcweir // HelpFile-Id immer auf dflt setzen !!
2051cdf0e10cSrcweir pDest->SetPoolHlpFileId( UCHAR_MAX );
2052cdf0e10cSrcweir
2053cdf0e10cSrcweir if( pSrc->DerivedFrom() )
2054cdf0e10cSrcweir pDest->SetDerivedFrom( FindFmtByName( rDestArr,
2055cdf0e10cSrcweir pSrc->DerivedFrom()->GetName() ) );
2056cdf0e10cSrcweir if( RES_TXTFMTCOLL == pSrc->Which() ||
2057cdf0e10cSrcweir RES_CONDTXTFMTCOLL == pSrc->Which() )
2058cdf0e10cSrcweir {
2059cdf0e10cSrcweir SwTxtFmtColl* pSrcColl = (SwTxtFmtColl*)pSrc,
2060cdf0e10cSrcweir * pDstColl = (SwTxtFmtColl*)pDest;
2061cdf0e10cSrcweir if( &pSrcColl->GetNextTxtFmtColl() != pSrcColl )
2062cdf0e10cSrcweir pDstColl->SetNextTxtFmtColl( *(SwTxtFmtColl*)FindFmtByName(
2063cdf0e10cSrcweir rDestArr, pSrcColl->GetNextTxtFmtColl().GetName() ) );
2064cdf0e10cSrcweir
2065cdf0e10cSrcweir // setze noch den Outline-Level
2066cdf0e10cSrcweir if(pSrcColl->IsAssignedToListLevelOfOutlineStyle())
206728f5a95aSOliver-Rainer Wittmann pDstColl->AssignToListLevelOfOutlineStyle(pSrcColl->GetAssignedOutlineStyleLevel());
2068cdf0e10cSrcweir
2069cdf0e10cSrcweir //FEATURE::CONDCOLL
2070cdf0e10cSrcweir if( RES_CONDTXTFMTCOLL == pSrc->Which() )
2071cdf0e10cSrcweir // Kopiere noch die Bedingungen
2072cdf0e10cSrcweir // aber erst die alten loeschen!
2073cdf0e10cSrcweir ((SwConditionTxtFmtColl*)pDstColl)->SetConditions(
2074cdf0e10cSrcweir ((SwConditionTxtFmtColl*)pSrc)->GetCondColls() );
2075cdf0e10cSrcweir //FEATURE::CONDCOLL
2076cdf0e10cSrcweir }
2077cdf0e10cSrcweir }
2078cdf0e10cSrcweir }
2079cdf0e10cSrcweir
CopyPageDescHeaderFooterImpl(bool bCpyHeader,const SwFrmFmt & rSrcFmt,SwFrmFmt & rDestFmt)2080cdf0e10cSrcweir void SwDoc::CopyPageDescHeaderFooterImpl( bool bCpyHeader,
2081cdf0e10cSrcweir const SwFrmFmt& rSrcFmt, SwFrmFmt& rDestFmt )
2082cdf0e10cSrcweir {
2083cdf0e10cSrcweir // jetzt noch Header-/Footer-Attribute richtig behandeln
2084cdf0e10cSrcweir // Contenten Nodes Dokumentuebergreifend kopieren!
2085cdf0e10cSrcweir sal_uInt16 nAttr = static_cast<sal_uInt16>( bCpyHeader ? RES_HEADER : RES_FOOTER );
2086cdf0e10cSrcweir const SfxPoolItem* pItem;
2087cdf0e10cSrcweir if( SFX_ITEM_SET != rSrcFmt.GetAttrSet().GetItemState( nAttr, sal_False, &pItem ))
2088cdf0e10cSrcweir return ;
2089cdf0e10cSrcweir
2090cdf0e10cSrcweir // Im Header steht noch der Verweis auf das Format aus dem
2091cdf0e10cSrcweir // anderen Document!!
2092cdf0e10cSrcweir SfxPoolItem* pNewItem = pItem->Clone();
2093cdf0e10cSrcweir
2094cdf0e10cSrcweir SwFrmFmt* pOldFmt;
2095cdf0e10cSrcweir if( bCpyHeader )
2096cdf0e10cSrcweir pOldFmt = ((SwFmtHeader*)pNewItem)->GetHeaderFmt();
2097cdf0e10cSrcweir else
2098cdf0e10cSrcweir pOldFmt = ((SwFmtFooter*)pNewItem)->GetFooterFmt();
2099cdf0e10cSrcweir
2100cdf0e10cSrcweir if( pOldFmt )
2101cdf0e10cSrcweir {
2102cdf0e10cSrcweir SwFrmFmt* pNewFmt = new SwFrmFmt( GetAttrPool(), "CpyDesc",
2103cdf0e10cSrcweir GetDfltFrmFmt() );
2104cdf0e10cSrcweir pNewFmt->CopyAttrs( *pOldFmt, sal_True );
2105cdf0e10cSrcweir
2106cdf0e10cSrcweir if( SFX_ITEM_SET == pNewFmt->GetAttrSet().GetItemState(
2107cdf0e10cSrcweir RES_CNTNT, sal_False, &pItem ))
2108cdf0e10cSrcweir {
2109cdf0e10cSrcweir SwFmtCntnt* pCntnt = (SwFmtCntnt*)pItem;
2110cdf0e10cSrcweir if( pCntnt->GetCntntIdx() )
2111cdf0e10cSrcweir {
2112cdf0e10cSrcweir SwNodeIndex aTmpIdx( GetNodes().GetEndOfAutotext() );
2113cdf0e10cSrcweir const SwNodes& rSrcNds = rSrcFmt.GetDoc()->GetNodes();
2114cdf0e10cSrcweir SwStartNode* pSttNd = GetNodes().MakeEmptySection( aTmpIdx,
2115cdf0e10cSrcweir bCpyHeader
2116cdf0e10cSrcweir ? SwHeaderStartNode
2117cdf0e10cSrcweir : SwFooterStartNode );
2118cdf0e10cSrcweir const SwNode& rCSttNd = pCntnt->GetCntntIdx()->GetNode();
2119cdf0e10cSrcweir SwNodeRange aRg( rCSttNd, 0, *rCSttNd.EndOfSectionNode() );
2120cdf0e10cSrcweir aTmpIdx = *pSttNd->EndOfSectionNode();
2121cdf0e10cSrcweir rSrcNds._Copy( aRg, aTmpIdx );
2122cdf0e10cSrcweir aTmpIdx = *pSttNd;
2123cdf0e10cSrcweir rSrcFmt.GetDoc()->CopyFlyInFlyImpl( aRg, 0, aTmpIdx );
2124cdf0e10cSrcweir pNewFmt->SetFmtAttr( SwFmtCntnt( pSttNd ));
2125cdf0e10cSrcweir }
2126cdf0e10cSrcweir else
2127cdf0e10cSrcweir pNewFmt->ResetFmtAttr( RES_CNTNT );
2128cdf0e10cSrcweir }
2129cdf0e10cSrcweir if( bCpyHeader )
2130cdf0e10cSrcweir ((SwFmtHeader*)pNewItem)->RegisterToFormat(*pNewFmt);
2131cdf0e10cSrcweir else
2132cdf0e10cSrcweir ((SwFmtFooter*)pNewItem)->RegisterToFormat(*pNewFmt);
2133cdf0e10cSrcweir rDestFmt.SetFmtAttr( *pNewItem );
2134cdf0e10cSrcweir }
2135cdf0e10cSrcweir delete pNewItem;
2136cdf0e10cSrcweir }
2137cdf0e10cSrcweir
CopyPageDesc(const SwPageDesc & rSrcDesc,SwPageDesc & rDstDesc,sal_Bool bCopyPoolIds)2138cdf0e10cSrcweir void SwDoc::CopyPageDesc( const SwPageDesc& rSrcDesc, SwPageDesc& rDstDesc,
2139cdf0e10cSrcweir sal_Bool bCopyPoolIds )
2140cdf0e10cSrcweir {
2141cdf0e10cSrcweir sal_Bool bNotifyLayout = sal_False;
2142cdf0e10cSrcweir SwRootFrm* pTmpRoot = GetCurrentLayout();//swmod 080219
2143cdf0e10cSrcweir
2144cdf0e10cSrcweir rDstDesc.SetLandscape( rSrcDesc.GetLandscape() );
2145cdf0e10cSrcweir rDstDesc.SetNumType( rSrcDesc.GetNumType() );
2146cdf0e10cSrcweir if( rDstDesc.ReadUseOn() != rSrcDesc.ReadUseOn() )
2147cdf0e10cSrcweir {
2148cdf0e10cSrcweir rDstDesc.WriteUseOn( rSrcDesc.ReadUseOn() );
2149cdf0e10cSrcweir bNotifyLayout = sal_True;
2150cdf0e10cSrcweir }
2151cdf0e10cSrcweir
2152cdf0e10cSrcweir if( bCopyPoolIds )
2153cdf0e10cSrcweir {
2154cdf0e10cSrcweir rDstDesc.SetPoolFmtId( rSrcDesc.GetPoolFmtId() );
2155cdf0e10cSrcweir rDstDesc.SetPoolHelpId( rSrcDesc.GetPoolHelpId() );
2156cdf0e10cSrcweir // HelpFile-Id immer auf dflt setzen !!
2157cdf0e10cSrcweir rDstDesc.SetPoolHlpFileId( UCHAR_MAX );
2158cdf0e10cSrcweir }
2159cdf0e10cSrcweir
2160cdf0e10cSrcweir if( rSrcDesc.GetFollow() != &rSrcDesc )
2161cdf0e10cSrcweir {
2162cdf0e10cSrcweir SwPageDesc* pFollow = ::lcl_FindPageDesc( aPageDescs,
2163cdf0e10cSrcweir rSrcDesc.GetFollow()->GetName() );
2164cdf0e10cSrcweir if( !pFollow )
2165cdf0e10cSrcweir {
2166cdf0e10cSrcweir // dann mal kopieren
2167cdf0e10cSrcweir sal_uInt16 nPos = MakePageDesc( rSrcDesc.GetFollow()->GetName() );
2168cdf0e10cSrcweir pFollow = aPageDescs[ nPos ];
2169cdf0e10cSrcweir CopyPageDesc( *rSrcDesc.GetFollow(), *pFollow );
2170cdf0e10cSrcweir }
2171cdf0e10cSrcweir rDstDesc.SetFollow( pFollow );
2172cdf0e10cSrcweir bNotifyLayout = sal_True;
2173cdf0e10cSrcweir }
2174cdf0e10cSrcweir
2175cdf0e10cSrcweir // die Header/Footer-Attribute werden gesondert kopiert, die Content-
2176cdf0e10cSrcweir // Sections muessen vollstaendig mitgenommen werden!
2177cdf0e10cSrcweir {
2178cdf0e10cSrcweir SfxItemSet aAttrSet( rSrcDesc.GetMaster().GetAttrSet() );
2179cdf0e10cSrcweir aAttrSet.ClearItem( RES_HEADER );
2180cdf0e10cSrcweir aAttrSet.ClearItem( RES_FOOTER );
2181cdf0e10cSrcweir
2182cdf0e10cSrcweir rDstDesc.GetMaster().DelDiffs( aAttrSet );
2183cdf0e10cSrcweir rDstDesc.GetMaster().SetFmtAttr( aAttrSet );
2184cdf0e10cSrcweir
2185cdf0e10cSrcweir aAttrSet.ClearItem();
2186cdf0e10cSrcweir aAttrSet.Put( rSrcDesc.GetLeft().GetAttrSet() );
2187cdf0e10cSrcweir aAttrSet.ClearItem( RES_HEADER );
2188cdf0e10cSrcweir aAttrSet.ClearItem( RES_FOOTER );
2189cdf0e10cSrcweir
2190cdf0e10cSrcweir rDstDesc.GetLeft().DelDiffs( aAttrSet );
2191cdf0e10cSrcweir rDstDesc.GetLeft().SetFmtAttr( aAttrSet );
2192cdf0e10cSrcweir }
2193cdf0e10cSrcweir
2194cdf0e10cSrcweir CopyHeader( rSrcDesc.GetMaster(), rDstDesc.GetMaster() );
2195cdf0e10cSrcweir CopyFooter( rSrcDesc.GetMaster(), rDstDesc.GetMaster() );
2196cdf0e10cSrcweir if( !rDstDesc.IsHeaderShared() )
2197cdf0e10cSrcweir CopyHeader( rSrcDesc.GetLeft(), rDstDesc.GetLeft() );
2198cdf0e10cSrcweir else
2199cdf0e10cSrcweir rDstDesc.GetLeft().SetFmtAttr( rDstDesc.GetMaster().GetHeader() );
2200cdf0e10cSrcweir
2201cdf0e10cSrcweir if( !rDstDesc.IsFooterShared() )
2202cdf0e10cSrcweir CopyFooter( rSrcDesc.GetLeft(), rDstDesc.GetLeft() );
2203cdf0e10cSrcweir else
2204cdf0e10cSrcweir rDstDesc.GetLeft().SetFmtAttr( rDstDesc.GetMaster().GetFooter() );
2205cdf0e10cSrcweir
2206cdf0e10cSrcweir if( bNotifyLayout && pTmpRoot )
2207cdf0e10cSrcweir {
2208cdf0e10cSrcweir std::set<SwRootFrm*> aAllLayouts = GetAllLayouts();//swmod 080225
2209cdf0e10cSrcweir std::for_each( aAllLayouts.begin(), aAllLayouts.end(),std::mem_fun(&SwRootFrm::AllCheckPageDescs));//swmod 080226
2210cdf0e10cSrcweir }
2211cdf0e10cSrcweir
2212cdf0e10cSrcweir //Wenn sich FussnotenInfo veraendert, so werden die Seiten
2213cdf0e10cSrcweir //angetriggert.
2214cdf0e10cSrcweir if( !(rDstDesc.GetFtnInfo() == rSrcDesc.GetFtnInfo()) )
2215cdf0e10cSrcweir {
2216cdf0e10cSrcweir rDstDesc.SetFtnInfo( rSrcDesc.GetFtnInfo() );
2217cdf0e10cSrcweir SwMsgPoolItem aInfo( RES_PAGEDESC_FTNINFO );
2218cdf0e10cSrcweir {
2219cdf0e10cSrcweir rDstDesc.GetMaster().ModifyBroadcast( &aInfo, 0, TYPE(SwFrm) );
2220cdf0e10cSrcweir }
2221cdf0e10cSrcweir {
2222cdf0e10cSrcweir rDstDesc.GetLeft().ModifyBroadcast( &aInfo, 0, TYPE(SwFrm) );
2223cdf0e10cSrcweir }
2224cdf0e10cSrcweir }
2225cdf0e10cSrcweir }
2226cdf0e10cSrcweir
ReplaceStyles(SwDoc & rSource)2227cdf0e10cSrcweir void SwDoc::ReplaceStyles( SwDoc& rSource )
2228cdf0e10cSrcweir {
2229cdf0e10cSrcweir ::sw::UndoGuard const undoGuard(GetIDocumentUndoRedo());
2230cdf0e10cSrcweir
2231cdf0e10cSrcweir CopyFmtArr( *rSource.pCharFmtTbl, *pCharFmtTbl,
2232cdf0e10cSrcweir &SwDoc::_MakeCharFmt, *pDfltCharFmt );
2233cdf0e10cSrcweir CopyFmtArr( *rSource.pFrmFmtTbl, *pFrmFmtTbl,
2234cdf0e10cSrcweir &SwDoc::_MakeFrmFmt, *pDfltFrmFmt );
2235cdf0e10cSrcweir CopyFmtArr( *rSource.pTxtFmtCollTbl, *pTxtFmtCollTbl,
2236cdf0e10cSrcweir &SwDoc::_MakeTxtFmtColl, *pDfltTxtFmtColl );
2237cdf0e10cSrcweir
2238cdf0e10cSrcweir // und jetzt noch die Seiten-Vorlagen
2239cdf0e10cSrcweir sal_uInt16 nCnt = rSource.aPageDescs.Count();
2240cdf0e10cSrcweir if( nCnt )
2241cdf0e10cSrcweir {
2242cdf0e10cSrcweir // ein anderes Doc -> Numberformatter muessen gemergt werden
2243cdf0e10cSrcweir SwTblNumFmtMerge aTNFM( rSource, *this );
2244cdf0e10cSrcweir
2245cdf0e10cSrcweir // 1. Schritt alle Formate anlegen (das 0. ueberspringen - Default!)
2246cdf0e10cSrcweir while( nCnt )
2247cdf0e10cSrcweir {
2248cdf0e10cSrcweir SwPageDesc *pSrc = rSource.aPageDescs[ --nCnt ];
2249cdf0e10cSrcweir if( 0 == ::lcl_FindPageDesc( aPageDescs, pSrc->GetName() ) )
2250cdf0e10cSrcweir MakePageDesc( pSrc->GetName() );
2251cdf0e10cSrcweir }
2252cdf0e10cSrcweir
2253cdf0e10cSrcweir // 2. Schritt alle Attribute kopieren, richtige Parents setzen
2254cdf0e10cSrcweir for( nCnt = rSource.aPageDescs.Count(); nCnt; )
2255cdf0e10cSrcweir {
2256cdf0e10cSrcweir SwPageDesc *pSrc = rSource.aPageDescs[ --nCnt ];
2257cdf0e10cSrcweir CopyPageDesc( *pSrc, *::lcl_FindPageDesc( aPageDescs, pSrc->GetName() ));
2258cdf0e10cSrcweir }
2259cdf0e10cSrcweir }
2260cdf0e10cSrcweir
2261cdf0e10cSrcweir //JP 08.04.99: und dann sind da noch die Numerierungs-Vorlagen
2262cdf0e10cSrcweir nCnt = rSource.GetNumRuleTbl().Count();
2263cdf0e10cSrcweir if( nCnt )
2264cdf0e10cSrcweir {
2265cdf0e10cSrcweir const SwNumRuleTbl& rArr = rSource.GetNumRuleTbl();
2266cdf0e10cSrcweir for( sal_uInt16 n = 0; n < nCnt; ++n )
2267cdf0e10cSrcweir {
2268cdf0e10cSrcweir const SwNumRule& rR = *rArr[ n ];
2269cdf0e10cSrcweir if( !rR.IsAutoRule() )
2270cdf0e10cSrcweir {
2271cdf0e10cSrcweir SwNumRule* pNew = FindNumRulePtr( rR.GetName());
2272cdf0e10cSrcweir if( pNew )
2273cdf0e10cSrcweir pNew->CopyNumRule( this, rR );
2274cdf0e10cSrcweir else
2275cdf0e10cSrcweir MakeNumRule( rR.GetName(), &rR );
2276cdf0e10cSrcweir }
2277cdf0e10cSrcweir }
2278cdf0e10cSrcweir }
2279cdf0e10cSrcweir
2280cdf0e10cSrcweir if (undoGuard.UndoWasEnabled())
2281cdf0e10cSrcweir {
2282cdf0e10cSrcweir // nodes array was modified!
2283cdf0e10cSrcweir GetIDocumentUndoRedo().DelAllUndoObj();
2284cdf0e10cSrcweir }
2285cdf0e10cSrcweir
2286cdf0e10cSrcweir SetModified();
2287cdf0e10cSrcweir }
2288cdf0e10cSrcweir
FindFmtByName(const SvPtrarr & rFmtArr,const String & rName) const2289cdf0e10cSrcweir SwFmt* SwDoc::FindFmtByName( const SvPtrarr& rFmtArr,
2290cdf0e10cSrcweir const String& rName ) const
2291cdf0e10cSrcweir {
2292cdf0e10cSrcweir SwFmt* pFnd = 0;
2293cdf0e10cSrcweir for( sal_uInt16 n = 0; n < rFmtArr.Count(); n++ )
2294cdf0e10cSrcweir {
2295cdf0e10cSrcweir // ist die Vorlage schon im Doc vorhanden ??
2296cdf0e10cSrcweir if( ((SwFmt*)rFmtArr[n])->GetName() == rName )
2297cdf0e10cSrcweir {
2298cdf0e10cSrcweir pFnd = (SwFmt*)rFmtArr[n];
2299cdf0e10cSrcweir break;
2300cdf0e10cSrcweir }
2301cdf0e10cSrcweir }
2302cdf0e10cSrcweir return pFnd;
2303cdf0e10cSrcweir }
2304cdf0e10cSrcweir
MoveLeftMargin(const SwPaM & rPam,sal_Bool bRight,sal_Bool bModulus)2305cdf0e10cSrcweir void SwDoc::MoveLeftMargin( const SwPaM& rPam, sal_Bool bRight, sal_Bool bModulus )
2306cdf0e10cSrcweir {
2307cdf0e10cSrcweir SwHistory* pHistory = 0;
2308cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
2309cdf0e10cSrcweir {
2310cdf0e10cSrcweir SwUndoMoveLeftMargin* pUndo = new SwUndoMoveLeftMargin( rPam, bRight,
2311cdf0e10cSrcweir bModulus );
2312cdf0e10cSrcweir pHistory = &pUndo->GetHistory();
2313cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo( pUndo );
2314cdf0e10cSrcweir }
2315cdf0e10cSrcweir
2316cdf0e10cSrcweir const SvxTabStopItem& rTabItem = (SvxTabStopItem&)GetDefault( RES_PARATR_TABSTOP );
2317cdf0e10cSrcweir sal_uInt16 nDefDist = rTabItem.Count() ?
2318cdf0e10cSrcweir static_cast<sal_uInt16>(rTabItem[0].GetTabPos()) : 1134;
2319cdf0e10cSrcweir const SwPosition &rStt = *rPam.Start(), &rEnd = *rPam.End();
2320cdf0e10cSrcweir SwNodeIndex aIdx( rStt.nNode );
2321cdf0e10cSrcweir while( aIdx <= rEnd.nNode )
2322cdf0e10cSrcweir {
2323cdf0e10cSrcweir SwTxtNode* pTNd = aIdx.GetNode().GetTxtNode();
2324cdf0e10cSrcweir if( pTNd )
2325cdf0e10cSrcweir {
2326cdf0e10cSrcweir SvxLRSpaceItem aLS( (SvxLRSpaceItem&)pTNd->SwCntntNode::GetAttr( RES_LR_SPACE ) );
2327cdf0e10cSrcweir
2328cdf0e10cSrcweir // --> FME 2008-09-16 #i93873# See also lcl_MergeListLevelIndentAsLRSpaceItem in thints.cxx
2329cdf0e10cSrcweir if ( pTNd->AreListLevelIndentsApplicable() )
2330cdf0e10cSrcweir {
2331cdf0e10cSrcweir const SwNumRule* pRule = pTNd->GetNumRule();
2332cdf0e10cSrcweir if ( pRule )
2333cdf0e10cSrcweir {
2334cdf0e10cSrcweir const int nListLevel = pTNd->GetActualListLevel();
2335cdf0e10cSrcweir if ( nListLevel >= 0 )
2336cdf0e10cSrcweir {
2337cdf0e10cSrcweir const SwNumFmt& rFmt = pRule->Get(static_cast<sal_uInt16>(nListLevel));
2338cdf0e10cSrcweir if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
2339cdf0e10cSrcweir {
2340cdf0e10cSrcweir aLS.SetTxtLeft( rFmt.GetIndentAt() );
2341cdf0e10cSrcweir aLS.SetTxtFirstLineOfst( static_cast<short>(rFmt.GetFirstLineIndent()) );
2342cdf0e10cSrcweir }
2343cdf0e10cSrcweir }
2344cdf0e10cSrcweir }
2345cdf0e10cSrcweir }
2346cdf0e10cSrcweir
2347cdf0e10cSrcweir long nNext = aLS.GetTxtLeft();
2348cdf0e10cSrcweir if( bModulus )
2349cdf0e10cSrcweir nNext = ( nNext / nDefDist ) * nDefDist;
2350cdf0e10cSrcweir
2351cdf0e10cSrcweir if( bRight )
2352cdf0e10cSrcweir nNext += nDefDist;
2353cdf0e10cSrcweir else
2354cdf0e10cSrcweir nNext -= nDefDist;
2355cdf0e10cSrcweir
2356cdf0e10cSrcweir aLS.SetTxtLeft( nNext );
2357cdf0e10cSrcweir
2358cdf0e10cSrcweir SwRegHistory aRegH( pTNd, *pTNd, pHistory );
2359cdf0e10cSrcweir pTNd->SetAttr( aLS );
2360cdf0e10cSrcweir }
2361cdf0e10cSrcweir aIdx++;
2362cdf0e10cSrcweir }
2363cdf0e10cSrcweir SetModified();
2364cdf0e10cSrcweir }
2365cdf0e10cSrcweir
DontExpandFmt(const SwPosition & rPos,sal_Bool bFlag)2366cdf0e10cSrcweir sal_Bool SwDoc::DontExpandFmt( const SwPosition& rPos, sal_Bool bFlag )
2367cdf0e10cSrcweir {
2368cdf0e10cSrcweir sal_Bool bRet = sal_False;
2369cdf0e10cSrcweir SwTxtNode* pTxtNd = rPos.nNode.GetNode().GetTxtNode();
2370cdf0e10cSrcweir if( pTxtNd )
2371cdf0e10cSrcweir {
2372cdf0e10cSrcweir bRet = pTxtNd->DontExpandFmt( rPos.nContent, bFlag );
2373cdf0e10cSrcweir if( bRet && GetIDocumentUndoRedo().DoesUndo() )
2374cdf0e10cSrcweir {
2375cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo( new SwUndoDontExpandFmt(rPos) );
2376cdf0e10cSrcweir }
2377cdf0e10cSrcweir }
2378cdf0e10cSrcweir return bRet;
2379cdf0e10cSrcweir }
2380cdf0e10cSrcweir
MakeTableBoxFmt()2381cdf0e10cSrcweir SwTableBoxFmt* SwDoc::MakeTableBoxFmt()
2382cdf0e10cSrcweir {
2383cdf0e10cSrcweir SwTableBoxFmt* pFmt = new SwTableBoxFmt( GetAttrPool(), aEmptyStr,
2384cdf0e10cSrcweir pDfltFrmFmt );
2385cdf0e10cSrcweir SetModified();
2386cdf0e10cSrcweir return pFmt;
2387cdf0e10cSrcweir }
2388cdf0e10cSrcweir
MakeTableLineFmt()2389cdf0e10cSrcweir SwTableLineFmt* SwDoc::MakeTableLineFmt()
2390cdf0e10cSrcweir {
2391cdf0e10cSrcweir SwTableLineFmt* pFmt = new SwTableLineFmt( GetAttrPool(), aEmptyStr,
2392cdf0e10cSrcweir pDfltFrmFmt );
2393cdf0e10cSrcweir SetModified();
2394cdf0e10cSrcweir return pFmt;
2395cdf0e10cSrcweir }
2396cdf0e10cSrcweir
_CreateNumberFormatter()2397cdf0e10cSrcweir void SwDoc::_CreateNumberFormatter()
2398cdf0e10cSrcweir {
2399cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLog, "SW", "JP93722", "SwDoc::_CreateNumberFormatter" );
2400cdf0e10cSrcweir
2401cdf0e10cSrcweir ASSERT( !pNumberFormatter, "ist doch schon vorhanden" );
2402cdf0e10cSrcweir
2403cdf0e10cSrcweir
2404cdf0e10cSrcweir LanguageType eLang = LANGUAGE_SYSTEM; //System::GetLanguage();
2405cdf0e10cSrcweir /* ((const SvxLanguageItem&)GetAttrPool().
2406cdf0e10cSrcweir GetDefaultItem( RES_CHRATR_LANGUAGE )).GetLanguage();
2407cdf0e10cSrcweir */
2408cdf0e10cSrcweir Reference< XMultiServiceFactory > xMSF = ::comphelper::getProcessServiceFactory();
2409cdf0e10cSrcweir pNumberFormatter = new SvNumberFormatter( xMSF, eLang );
2410cdf0e10cSrcweir pNumberFormatter->SetEvalDateFormat( NF_EVALDATEFORMAT_FORMAT_INTL );
2411cdf0e10cSrcweir pNumberFormatter->SetYear2000(static_cast<sal_uInt16>(::utl::MiscCfg().GetYear2000()));
2412cdf0e10cSrcweir
2413cdf0e10cSrcweir }
2414cdf0e10cSrcweir
SwTblNumFmtMerge(const SwDoc & rSrc,SwDoc & rDest)2415cdf0e10cSrcweir SwTblNumFmtMerge::SwTblNumFmtMerge( const SwDoc& rSrc, SwDoc& rDest )
2416cdf0e10cSrcweir : pNFmt( 0 )
2417cdf0e10cSrcweir {
2418cdf0e10cSrcweir // ein anderes Doc -> Numberformatter muessen gemergt werden
2419cdf0e10cSrcweir SvNumberFormatter* pN;
2420cdf0e10cSrcweir if( &rSrc != &rDest && 0 != ( pN = ((SwDoc&)rSrc).GetNumberFormatter( sal_False ) ))
2421cdf0e10cSrcweir ( pNFmt = rDest.GetNumberFormatter( sal_True ))->MergeFormatter( *pN );
2422cdf0e10cSrcweir
2423cdf0e10cSrcweir if( &rSrc != &rDest )
2424cdf0e10cSrcweir ((SwGetRefFieldType*)rSrc.GetSysFldType( RES_GETREFFLD ))->
2425cdf0e10cSrcweir MergeWithOtherDoc( rDest );
2426cdf0e10cSrcweir }
2427cdf0e10cSrcweir
~SwTblNumFmtMerge()2428cdf0e10cSrcweir SwTblNumFmtMerge::~SwTblNumFmtMerge()
2429cdf0e10cSrcweir {
2430cdf0e10cSrcweir if( pNFmt )
2431cdf0e10cSrcweir pNFmt->ClearMergeTable();
2432cdf0e10cSrcweir }
2433cdf0e10cSrcweir
2434cdf0e10cSrcweir
SetTxtFmtCollByAutoFmt(const SwPosition & rPos,sal_uInt16 nPoolId,const SfxItemSet * pSet)2435cdf0e10cSrcweir void SwDoc::SetTxtFmtCollByAutoFmt( const SwPosition& rPos, sal_uInt16 nPoolId,
2436cdf0e10cSrcweir const SfxItemSet* pSet )
2437cdf0e10cSrcweir {
2438cdf0e10cSrcweir SwPaM aPam( rPos );
2439cdf0e10cSrcweir SwTxtNode* pTNd = rPos.nNode.GetNode().GetTxtNode();
2440cdf0e10cSrcweir
2441cdf0e10cSrcweir if( mbIsAutoFmtRedline && pTNd )
2442cdf0e10cSrcweir {
2443cdf0e10cSrcweir // dann das Redline Object anlegen
2444cdf0e10cSrcweir const SwTxtFmtColl& rColl = *pTNd->GetTxtColl();
2445cdf0e10cSrcweir SwRedline* pRedl = new SwRedline( nsRedlineType_t::REDLINE_FMTCOLL, aPam );
2446cdf0e10cSrcweir pRedl->SetMark();
2447cdf0e10cSrcweir
2448cdf0e10cSrcweir // interressant sind nur die Items, die vom Set NICHT wieder
2449cdf0e10cSrcweir // in den Node gesetzt werden. Also muss man die Differenz nehmen
2450cdf0e10cSrcweir SwRedlineExtraData_FmtColl aExtraData( rColl.GetName(),
2451cdf0e10cSrcweir rColl.GetPoolFmtId() );
2452cdf0e10cSrcweir if( pSet && pTNd->HasSwAttrSet() )
2453cdf0e10cSrcweir {
2454cdf0e10cSrcweir SfxItemSet aTmp( *pTNd->GetpSwAttrSet() );
2455cdf0e10cSrcweir aTmp.Differentiate( *pSet );
2456cdf0e10cSrcweir // das Adjust Item behalten wir extra
2457cdf0e10cSrcweir const SfxPoolItem* pItem;
2458cdf0e10cSrcweir if( SFX_ITEM_SET == pTNd->GetpSwAttrSet()->GetItemState(
2459cdf0e10cSrcweir RES_PARATR_ADJUST, sal_False, &pItem ))
2460cdf0e10cSrcweir aTmp.Put( *pItem );
2461cdf0e10cSrcweir aExtraData.SetItemSet( aTmp );
2462cdf0e10cSrcweir }
2463cdf0e10cSrcweir pRedl->SetExtraData( &aExtraData );
2464cdf0e10cSrcweir
2465cdf0e10cSrcweir // !!!!!!!!! Undo fehlt noch !!!!!!!!!!!!!!!!!!
2466cdf0e10cSrcweir AppendRedline( pRedl, true );
2467cdf0e10cSrcweir }
2468cdf0e10cSrcweir
2469cdf0e10cSrcweir SetTxtFmtColl( aPam, GetTxtCollFromPool( nPoolId ) );
2470cdf0e10cSrcweir
2471cdf0e10cSrcweir if( pSet && pTNd && pSet->Count() )
2472cdf0e10cSrcweir {
2473cdf0e10cSrcweir aPam.SetMark();
2474cdf0e10cSrcweir aPam.GetMark()->nContent.Assign( pTNd, pTNd->GetTxt().Len() );
2475cdf0e10cSrcweir InsertItemSet( aPam, *pSet, 0 );
2476cdf0e10cSrcweir }
2477cdf0e10cSrcweir }
2478cdf0e10cSrcweir
SetFmtItemByAutoFmt(const SwPaM & rPam,const SfxItemSet & rSet)2479cdf0e10cSrcweir void SwDoc::SetFmtItemByAutoFmt( const SwPaM& rPam, const SfxItemSet& rSet )
2480cdf0e10cSrcweir {
2481cdf0e10cSrcweir SwTxtNode* pTNd = rPam.GetPoint()->nNode.GetNode().GetTxtNode();
2482cdf0e10cSrcweir
2483cdf0e10cSrcweir RedlineMode_t eOld = GetRedlineMode();
2484cdf0e10cSrcweir
2485cdf0e10cSrcweir if( mbIsAutoFmtRedline && pTNd )
2486cdf0e10cSrcweir {
2487cdf0e10cSrcweir // dann das Redline Object anlegen
2488cdf0e10cSrcweir SwRedline* pRedl = new SwRedline( nsRedlineType_t::REDLINE_FORMAT, rPam );
2489cdf0e10cSrcweir if( !pRedl->HasMark() )
2490cdf0e10cSrcweir pRedl->SetMark();
2491cdf0e10cSrcweir
2492cdf0e10cSrcweir // interressant sind nur die Items, die vom Set NICHT wieder
2493cdf0e10cSrcweir // in den Node gesetzt werden. Also muss man die Differenz nehmen
2494cdf0e10cSrcweir SwRedlineExtraData_Format aExtraData( rSet );
2495cdf0e10cSrcweir
2496cdf0e10cSrcweir /*
2497cdf0e10cSrcweir if( pSet && pTNd->HasSwAttrSet() )
2498cdf0e10cSrcweir {
2499cdf0e10cSrcweir SfxItemSet aTmp( *pTNd->GetpSwAttrSet() );
2500cdf0e10cSrcweir aTmp.Differentiate( *pSet );
2501cdf0e10cSrcweir // das Adjust Item behalten wir extra
2502cdf0e10cSrcweir const SfxPoolItem* pItem;
2503cdf0e10cSrcweir if( SFX_ITEM_SET == pTNd->GetpSwAttrSet()->GetItemState(
2504cdf0e10cSrcweir RES_PARATR_ADJUST, sal_False, &pItem ))
2505cdf0e10cSrcweir aTmp.Put( *pItem );
2506cdf0e10cSrcweir aExtraData.SetItemSet( aTmp );
2507cdf0e10cSrcweir }
2508cdf0e10cSrcweir */
2509cdf0e10cSrcweir pRedl->SetExtraData( &aExtraData );
2510cdf0e10cSrcweir
2511cdf0e10cSrcweir // !!!!!!!!! Undo fehlt noch !!!!!!!!!!!!!!!!!!
2512cdf0e10cSrcweir AppendRedline( pRedl, true );
2513cdf0e10cSrcweir
2514cdf0e10cSrcweir SetRedlineMode_intern( (RedlineMode_t)(eOld | nsRedlineMode_t::REDLINE_IGNORE));
2515cdf0e10cSrcweir }
2516cdf0e10cSrcweir
2517cdf0e10cSrcweir InsertItemSet( rPam, rSet, nsSetAttrMode::SETATTR_DONTEXPAND );
2518cdf0e10cSrcweir SetRedlineMode_intern( eOld );
2519cdf0e10cSrcweir }
2520cdf0e10cSrcweir
ChgFmt(SwFmt & rFmt,const SfxItemSet & rSet)2521cdf0e10cSrcweir void SwDoc::ChgFmt(SwFmt & rFmt, const SfxItemSet & rSet)
2522cdf0e10cSrcweir {
2523cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
2524cdf0e10cSrcweir {
2525cdf0e10cSrcweir // copying <rSet> to <aSet>
2526cdf0e10cSrcweir SfxItemSet aSet(rSet);
2527cdf0e10cSrcweir // remove from <aSet> all items, which are already set at the format
2528cdf0e10cSrcweir aSet.Differentiate(rFmt.GetAttrSet());
2529cdf0e10cSrcweir // <aSet> contains now all *new* items for the format
2530cdf0e10cSrcweir
2531cdf0e10cSrcweir // copying current format item set to <aOldSet>
2532cdf0e10cSrcweir SfxItemSet aOldSet(rFmt.GetAttrSet());
2533cdf0e10cSrcweir // insert new items into <aOldSet>
2534cdf0e10cSrcweir aOldSet.Put(aSet);
2535cdf0e10cSrcweir // invalidate all new items in <aOldSet> in order to clear these items,
2536cdf0e10cSrcweir // if the undo action is triggered.
2537cdf0e10cSrcweir {
2538cdf0e10cSrcweir SfxItemIter aIter(aSet);
2539cdf0e10cSrcweir
2540cdf0e10cSrcweir const SfxPoolItem * pItem = aIter.FirstItem();
2541cdf0e10cSrcweir while (pItem != NULL)
2542cdf0e10cSrcweir {
2543cdf0e10cSrcweir aOldSet.InvalidateItem(pItem->Which());
2544cdf0e10cSrcweir
2545cdf0e10cSrcweir pItem = aIter.NextItem();
2546cdf0e10cSrcweir }
2547cdf0e10cSrcweir }
2548cdf0e10cSrcweir
2549cdf0e10cSrcweir SwUndo * pUndo = new SwUndoFmtAttr(aOldSet, rFmt);
2550cdf0e10cSrcweir
2551cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo(pUndo);
2552cdf0e10cSrcweir }
2553cdf0e10cSrcweir
2554cdf0e10cSrcweir rFmt.SetFmtAttr(rSet);
2555cdf0e10cSrcweir }
2556cdf0e10cSrcweir
RenameFmt(SwFmt & rFmt,const String & sNewName,sal_Bool bBroadcast)2557cdf0e10cSrcweir void SwDoc::RenameFmt(SwFmt & rFmt, const String & sNewName,
2558cdf0e10cSrcweir sal_Bool bBroadcast)
2559cdf0e10cSrcweir {
2560cdf0e10cSrcweir SfxStyleFamily eFamily = SFX_STYLE_FAMILY_ALL;
2561cdf0e10cSrcweir
2562cdf0e10cSrcweir if (GetIDocumentUndoRedo().DoesUndo())
2563cdf0e10cSrcweir {
2564cdf0e10cSrcweir SwUndo * pUndo = NULL;
2565cdf0e10cSrcweir
2566cdf0e10cSrcweir switch (rFmt.Which())
2567cdf0e10cSrcweir {
2568cdf0e10cSrcweir case RES_CHRFMT:
2569cdf0e10cSrcweir pUndo = new SwUndoRenameCharFmt(rFmt.GetName(), sNewName, this);
2570cdf0e10cSrcweir eFamily = SFX_STYLE_FAMILY_PARA;
2571cdf0e10cSrcweir break;
2572cdf0e10cSrcweir case RES_TXTFMTCOLL:
2573cdf0e10cSrcweir pUndo = new SwUndoRenameFmtColl(rFmt.GetName(), sNewName, this);
2574cdf0e10cSrcweir eFamily = SFX_STYLE_FAMILY_CHAR;
2575cdf0e10cSrcweir break;
2576cdf0e10cSrcweir case RES_FRMFMT:
2577cdf0e10cSrcweir pUndo = new SwUndoRenameFrmFmt(rFmt.GetName(), sNewName, this);
2578cdf0e10cSrcweir eFamily = SFX_STYLE_FAMILY_FRAME;
2579cdf0e10cSrcweir break;
2580cdf0e10cSrcweir
2581cdf0e10cSrcweir default:
2582cdf0e10cSrcweir break;
2583cdf0e10cSrcweir }
2584cdf0e10cSrcweir
2585cdf0e10cSrcweir if (pUndo)
2586cdf0e10cSrcweir {
2587cdf0e10cSrcweir GetIDocumentUndoRedo().AppendUndo(pUndo);
2588cdf0e10cSrcweir }
2589cdf0e10cSrcweir }
2590cdf0e10cSrcweir
2591cdf0e10cSrcweir rFmt.SetName(sNewName);
2592cdf0e10cSrcweir
2593cdf0e10cSrcweir if (bBroadcast)
2594cdf0e10cSrcweir BroadcastStyleOperation(sNewName, eFamily, SFX_STYLESHEET_MODIFIED);
2595cdf0e10cSrcweir }
2596cdf0e10cSrcweir
2597cdf0e10cSrcweir // --> OD 2006-09-27 #i69627#
2598cdf0e10cSrcweir namespace docfunc
2599cdf0e10cSrcweir {
HasOutlineStyleToBeWrittenAsNormalListStyle(SwDoc & rDoc)2600cdf0e10cSrcweir bool HasOutlineStyleToBeWrittenAsNormalListStyle( SwDoc& rDoc )
2601cdf0e10cSrcweir {
2602cdf0e10cSrcweir // If a parent paragraph style of one of the parargraph styles, which
2603cdf0e10cSrcweir // are assigned to the list levels of the outline style, has a list style
2604cdf0e10cSrcweir // set or inherits a list style from its parent style, the outline style
2605cdf0e10cSrcweir // has to be written as a normal list style to the OpenDocument file
2606cdf0e10cSrcweir // format or the OpenOffice.org file format.
2607cdf0e10cSrcweir bool bRet( false );
2608cdf0e10cSrcweir
2609cdf0e10cSrcweir const SwTxtFmtColls* pTxtFmtColls( rDoc.GetTxtFmtColls() );
2610cdf0e10cSrcweir if ( pTxtFmtColls )
2611cdf0e10cSrcweir {
2612cdf0e10cSrcweir const sal_uInt16 nCount = pTxtFmtColls->Count();
2613cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < nCount; ++i )
2614cdf0e10cSrcweir {
2615cdf0e10cSrcweir SwTxtFmtColl* pTxtFmtColl = (*pTxtFmtColls)[i];
2616cdf0e10cSrcweir
2617cdf0e10cSrcweir if ( pTxtFmtColl->IsDefault() ||
2618cdf0e10cSrcweir // pTxtFmtColl->GetOutlineLevel() == NO_NUMBERING ) //#outline level,zhaojianwei
2619cdf0e10cSrcweir ! pTxtFmtColl->IsAssignedToListLevelOfOutlineStyle() ) //<-end,zhaojianwei
2620cdf0e10cSrcweir {
2621cdf0e10cSrcweir continue;
2622cdf0e10cSrcweir }
2623cdf0e10cSrcweir
2624cdf0e10cSrcweir const SwTxtFmtColl* pParentTxtFmtColl =
2625cdf0e10cSrcweir dynamic_cast<const SwTxtFmtColl*>( pTxtFmtColl->DerivedFrom());
2626cdf0e10cSrcweir if ( !pParentTxtFmtColl )
2627cdf0e10cSrcweir continue;
2628cdf0e10cSrcweir
2629cdf0e10cSrcweir if ( SFX_ITEM_SET == pParentTxtFmtColl->GetItemState( RES_PARATR_NUMRULE ) )
2630cdf0e10cSrcweir {
2631cdf0e10cSrcweir // --> OD 2009-11-12 #i106218#
2632cdf0e10cSrcweir // consider that the outline style is set
2633cdf0e10cSrcweir const SwNumRuleItem& rDirectItem = pParentTxtFmtColl->GetNumRule();
2634cdf0e10cSrcweir if ( rDirectItem.GetValue() != rDoc.GetOutlineNumRule()->GetName() )
2635cdf0e10cSrcweir {
2636cdf0e10cSrcweir bRet = true;
2637cdf0e10cSrcweir break;
2638cdf0e10cSrcweir }
2639cdf0e10cSrcweir // <--
2640cdf0e10cSrcweir }
2641cdf0e10cSrcweir }
2642cdf0e10cSrcweir
2643cdf0e10cSrcweir }
2644cdf0e10cSrcweir return bRet;
2645cdf0e10cSrcweir }
2646cdf0e10cSrcweir }
2647cdf0e10cSrcweir // <--
2648