1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26
27
28 #include <hintids.hxx> // fuer RES_..
29 #include <frame.hxx> // fuer AttrCache
30 #include <format.hxx>
31 #include <hints.hxx> // fuer SwFmtChg
32 #include <doc.hxx>
33 #include <paratr.hxx> // fuer SwParaFmt - SwHyphenBug
34 #include <swcache.hxx>
35 #include <fmtcolfunc.hxx>
36
37 TYPEINIT1( SwFmt, SwClient ); //rtti fuer SwFmt
38
39 /*************************************************************************
40 |* SwFmt::SwFmt
41 *************************************************************************/
42
43
SwFmt(SwAttrPool & rPool,const sal_Char * pFmtNm,const sal_uInt16 * pWhichRanges,SwFmt * pDrvdFrm,sal_uInt16 nFmtWhich)44 SwFmt::SwFmt( SwAttrPool& rPool, const sal_Char* pFmtNm,
45 const sal_uInt16* pWhichRanges, SwFmt *pDrvdFrm, sal_uInt16 nFmtWhich )
46 : SwModify( pDrvdFrm ),
47 aSet( rPool, pWhichRanges ),
48 nWhichId( nFmtWhich ),
49 nFmtId( 0 ),
50 nPoolFmtId( USHRT_MAX ),
51 nPoolHelpId( USHRT_MAX ),
52 nPoolHlpFileId( UCHAR_MAX )
53 {
54 aFmtName.AssignAscii( pFmtNm );
55 bWritten = bFmtInDTOR = bAutoUpdateFmt = sal_False; // LAYER_IMPL
56 bAutoFmt = sal_True;
57
58 if( pDrvdFrm )
59 aSet.SetParent( &pDrvdFrm->aSet );
60 }
61
62
SwFmt(SwAttrPool & rPool,const String & rFmtNm,const sal_uInt16 * pWhichRanges,SwFmt * pDrvdFrm,sal_uInt16 nFmtWhich)63 SwFmt::SwFmt( SwAttrPool& rPool, const String &rFmtNm,
64 const sal_uInt16* pWhichRanges, SwFmt *pDrvdFrm, sal_uInt16 nFmtWhich )
65 : SwModify( pDrvdFrm ),
66 aFmtName( rFmtNm ),
67 aSet( rPool, pWhichRanges ),
68 nWhichId( nFmtWhich ),
69 nFmtId( 0 ),
70 nPoolFmtId( USHRT_MAX ),
71 nPoolHelpId( USHRT_MAX ),
72 nPoolHlpFileId( UCHAR_MAX )
73 {
74 bWritten = bFmtInDTOR = bAutoUpdateFmt = sal_False; // LAYER_IMPL
75 bAutoFmt = sal_True;
76
77 if( pDrvdFrm )
78 aSet.SetParent( &pDrvdFrm->aSet );
79 }
80
81
SwFmt(const SwFmt & rFmt)82 SwFmt::SwFmt( const SwFmt& rFmt )
83 : SwModify( rFmt.DerivedFrom() ),
84 aFmtName( rFmt.aFmtName ),
85 aSet( rFmt.aSet ),
86 nWhichId( rFmt.nWhichId ),
87 nFmtId( 0 ),
88 nPoolFmtId( rFmt.GetPoolFmtId() ),
89 nPoolHelpId( rFmt.GetPoolHelpId() ),
90 nPoolHlpFileId( rFmt.GetPoolHlpFileId() )
91 {
92 bWritten = bFmtInDTOR = sal_False; // LAYER_IMPL
93 bAutoFmt = rFmt.bAutoFmt;
94 bAutoUpdateFmt = rFmt.bAutoUpdateFmt;
95
96 if( rFmt.DerivedFrom() )
97 aSet.SetParent( &rFmt.DerivedFrom()->aSet );
98 // einige Sonderbehandlungen fuer Attribute
99 aSet.SetModifyAtAttr( this );
100 }
101
102 /*************************************************************************
103 |* SwFmt &SwFmt::operator=(const SwFmt& aFmt)
104 |*
105 |* Beschreibung Dokument 1.14
106 |* Ersterstellung JP 22.11.90
107 |* Letzte Aenderung JP 05.08.94
108 *************************************************************************/
109
110
operator =(const SwFmt & rFmt)111 SwFmt &SwFmt::operator=(const SwFmt& rFmt)
112 {
113 nWhichId = rFmt.nWhichId;
114 nPoolFmtId = rFmt.GetPoolFmtId();
115 nPoolHelpId = rFmt.GetPoolHelpId();
116 nPoolHlpFileId = rFmt.GetPoolHlpFileId();
117
118 if ( IsInCache() )
119 {
120 SwFrm::GetCache().Delete( this );
121 SetInCache( sal_False );
122 }
123 SetInSwFntCache( sal_False );
124
125 // kopiere nur das Attribut-Delta Array
126 SwAttrSet aOld( *aSet.GetPool(), aSet.GetRanges() ),
127 aNew( *aSet.GetPool(), aSet.GetRanges() );
128 aSet.Intersect_BC( rFmt.aSet, &aOld, &aNew );
129 aSet.Put_BC( rFmt.aSet, &aOld, &aNew );
130
131 // einige Sonderbehandlungen fuer Attribute
132 aSet.SetModifyAtAttr( this );
133
134 // PoolItem-Attr erzeugen fuers Modify !!!
135 if( aOld.Count() )
136 {
137 SwAttrSetChg aChgOld( aSet, aOld );
138 SwAttrSetChg aChgNew( aSet, aNew );
139 ModifyNotification( &aChgOld, &aChgNew ); // alle veraenderten werden verschickt
140 }
141
142 if( GetRegisteredIn() != rFmt.GetRegisteredIn() )
143 {
144 if( GetRegisteredIn() )
145 GetRegisteredInNonConst()->Remove(this);
146 if(rFmt.GetRegisteredIn())
147 {
148 const_cast<SwFmt&>(rFmt).GetRegisteredInNonConst()->Add(this);
149 aSet.SetParent( &rFmt.aSet );
150 }
151 else
152 aSet.SetParent( 0 );
153 }
154 bAutoFmt = rFmt.bAutoFmt;
155 bAutoUpdateFmt = rFmt.bAutoUpdateFmt;
156 return *this;
157 }
158
SetName(const String & rNewName,sal_Bool bBroadcast)159 void SwFmt::SetName( const String& rNewName, sal_Bool bBroadcast )
160 {
161 ASSERT(!IsDefault(), "SetName: Defaultformat" );
162 if( bBroadcast )
163 {
164 SwStringMsgPoolItem aOld( RES_NAME_CHANGED, aFmtName );
165 SwStringMsgPoolItem aNew( RES_NAME_CHANGED, rNewName );
166 aFmtName = rNewName;
167 ModifyNotification( &aOld, &aNew );
168 }
169 else
170 {
171 aFmtName = rNewName;
172 }
173 }
174
175 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
176 * diese Funktion wird in jedem Copy-Ctor gerufen, damit die
177 * Attribute kopiert werden. Diese koennen erst kopiert werden,
178 * wenn die abgeleitet Klasse existiert, denn beim Setzen der
179 * Attribute wird die Which()-Methode gerufen, die hier in der
180 * Basis-Klasse auf 0 defaultet ist.
181 *
182 * Zusatz: JP 8.4.1994
183 * Wird ueber Dokumentgrenzen kopiert, so muss das neue Dokument
184 * mit angeben werden, in dem this steht. Z.Z. ist das fuers
185 * DropCaps wichtig, dieses haelt Daten, die tief kopiert werden
186 * muessen !!
187 * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
188
189
CopyAttrs(const SwFmt & rFmt,sal_Bool bReplace)190 void SwFmt::CopyAttrs( const SwFmt& rFmt, sal_Bool bReplace )
191 {
192 // kopiere nur das Attribut-Delta Array
193
194 if ( IsInCache() )
195 {
196 SwFrm::GetCache().Delete( this );
197 SetInCache( sal_False );
198 }
199 SetInSwFntCache( sal_False );
200
201 // Sonderbehandlung fuer einige Attribute
202 SwAttrSet* pChgSet = (SwAttrSet*)&rFmt.aSet;
203
204 if( !bReplace ) // nur die neu, die nicht gesetzt sind ??
205 {
206 if( pChgSet == (SwAttrSet*)&rFmt.aSet ) // Set hier kopieren
207 pChgSet = new SwAttrSet( rFmt.aSet );
208 pChgSet->Differentiate( aSet );
209 }
210
211 // kopiere nur das Attribut-Delta Array
212 if( pChgSet->GetPool() != aSet.GetPool() )
213 pChgSet->CopyToModify( *this );
214 else
215 {
216 SwAttrSet aOld( *aSet.GetPool(), aSet.GetRanges() ),
217 aNew( *aSet.GetPool(), aSet.GetRanges() );
218
219 if ( 0 != aSet.Put_BC( *pChgSet, &aOld, &aNew ) )
220 {
221 // einige Sonderbehandlungen fuer Attribute
222 aSet.SetModifyAtAttr( this );
223
224 SwAttrSetChg aChgOld( aSet, aOld );
225 SwAttrSetChg aChgNew( aSet, aNew );
226 ModifyNotification( &aChgOld, &aChgNew ); // alle veraenderten werden verschickt
227 }
228 }
229
230 if( pChgSet != (SwAttrSet*)&rFmt.aSet ) // Set hier angelegt ?
231 delete pChgSet;
232 }
233
234 /*************************************************************************
235 |* SwFmt::~SwFmt()
236 |*
237 |* Beschreibung Dokument 1.14
238 |* Ersterstellung JP 22.11.90
239 |* Letzte Aenderung JP 14.02.91
240 *************************************************************************/
241
242
~SwFmt()243 SwFmt::~SwFmt()
244 {
245 /* das passiert bei der ObjectDying Message */
246 /* alle Abhaengigen auf DerivedFrom umhaengen */
247 if( GetDepends() )
248 {
249 ASSERT(DerivedFrom(), "SwFmt::~SwFmt: Def Abhaengige!" );
250
251 bFmtInDTOR = sal_True;
252
253 SwFmt *pParentFmt = DerivedFrom();
254 if (!pParentFmt) // see #112405#
255 {
256 DBG_ERROR( "~SwFmt: parent format missing" );
257 }
258 else
259 {
260 while( GetDepends() && pParentFmt)
261 {
262 SwFmtChg aOldFmt(this);
263 SwFmtChg aNewFmt(pParentFmt);
264 SwClient * pDepend = (SwClient*)GetDepends();
265 pParentFmt->Add(pDepend);
266 pDepend->ModifyNotification(&aOldFmt, &aNewFmt);
267 }
268 }
269 }
270 }
271
272
273 /*************************************************************************
274 |* void SwFmt::Modify( const SfxPoolItem* pOldValue, const SfxPoolItem* pNewValue )
275 |*
276 |* Beschreibung Dokument 1.14
277 |* Ersterstellung JP 22.11.90
278 |* Letzte Aenderung JP 05.08.94
279 *************************************************************************/
280
281
Modify(const SfxPoolItem * pOldValue,const SfxPoolItem * pNewValue)282 void SwFmt::Modify( const SfxPoolItem* pOldValue, const SfxPoolItem* pNewValue )
283 {
284 sal_Bool bWeiter = sal_True; // sal_True = Propagierung an die Abhaengigen
285
286 sal_uInt16 nWhich = pOldValue ? pOldValue->Which() :
287 pNewValue ? pNewValue->Which() : 0 ;
288 switch( nWhich )
289 {
290 case 0: break; // Which-Id von 0 ???
291
292 case RES_OBJECTDYING :
293 {
294 // ist das sterbende Object das "Parent"-Format von diesen Format,
295 // dann haengt sich dieses Format an den Parent vom Parent
296 SwFmt * pFmt = (SwFmt *) ((SwPtrMsgPoolItem *)pNewValue)->pObject;
297
298 // nicht umhaengen wenn dieses das oberste Format ist !!
299 if( GetRegisteredIn() && GetRegisteredIn() == pFmt )
300 {
301 if( pFmt->GetRegisteredIn() )
302 {
303 // wenn Parent, dann im neuen Parent wieder anmelden
304 pFmt->DerivedFrom()->Add( this );
305 aSet.SetParent( &DerivedFrom()->aSet );
306 }
307 else
308 {
309 // sonst auf jeden Fall beim sterbenden abmelden
310 DerivedFrom()->Remove( this );
311 aSet.SetParent( 0 );
312 }
313 }
314 } // OBJECTDYING
315 break;
316
317 case RES_ATTRSET_CHG:
318 if( ((SwAttrSetChg*)pOldValue)->GetTheChgdSet() != &aSet )
319 {
320 //nur die weiter geben, die hier nicht gesetzt sind !!
321 SwAttrSetChg aOld( *(SwAttrSetChg*)pOldValue );
322 SwAttrSetChg aNew( *(SwAttrSetChg*)pNewValue );
323
324 aOld.GetChgSet()->Differentiate( aSet );
325 aNew.GetChgSet()->Differentiate( aSet );
326
327 if( aNew.Count() )
328 // keine mehr gesetzt, dann Ende !!
329 NotifyClients( &aOld, &aNew );
330 bWeiter = sal_False;
331 }
332 break;
333 case RES_FMT_CHG:
334 // falls mein Format Parent umgesetzt wird, dann melde ich
335 // meinen Attrset beim Neuen an.
336
337 // sein eigenes Modify ueberspringen !!
338 if( ((SwFmtChg*)pOldValue)->pChangedFmt != this &&
339 ((SwFmtChg*)pNewValue)->pChangedFmt == DerivedFrom() )
340 {
341 // den Set an den neuen Parent haengen
342 aSet.SetParent( DerivedFrom() ? &DerivedFrom()->aSet : 0 );
343 }
344 break;
345
346 case RES_RESET_FMTWRITTEN:
347 {
348 // IsWritten-Flag zuruecksetzen. Hint nur an abhanegige
349 // Formate (und keine Frames) propagieren.
350 // mba: the code does the opposite from what is written in the comment!
351 ResetWritten();
352 // mba: here we don't use the additional stuff from NotifyClients().
353 // should we?!
354 // mba: move the code that ignores this event to the clients
355 ModifyBroadcast( pOldValue, pNewValue, TYPE(SwFmt) );
356 bWeiter = sal_False;
357 }
358 break;
359
360 default:
361 {
362 // Ist das Attribut in diesem Format definiert, dann auf
363 // NICHT weiter propagieren !!
364 if( SFX_ITEM_SET == aSet.GetItemState( nWhich, sal_False ))
365 {
366 // wie finde ich heraus, ob nicht ich die Message versende ??
367 // aber wer ruft das hier ????
368 //ASSERT( sal_False, "Modify ohne Absender verschickt" );
369 //JP 11.06.96: DropCaps koennen hierher kommen
370 ASSERT( RES_PARATR_DROP == nWhich, "Modify ohne Absender verschickt" );
371 bWeiter = sal_False;
372 }
373
374 } // default
375 } // switch
376
377 if( bWeiter )
378 {
379 // laufe durch alle abhaengigen Formate
380 NotifyClients( pOldValue, pNewValue );
381 }
382
383 }
384
385
SetDerivedFrom(SwFmt * pDerFrom)386 sal_Bool SwFmt::SetDerivedFrom(SwFmt *pDerFrom)
387 {
388 if ( pDerFrom )
389 {
390 // Zyklus?
391 const SwFmt* pFmt = pDerFrom;
392 while ( pFmt != 0 )
393 {
394 if ( pFmt == this )
395 return sal_False;
396
397 pFmt=pFmt->DerivedFrom();
398 }
399 }
400 else
401 {
402 // Nichts angegeben, Dflt-Format suchen
403 pDerFrom = this;
404 while ( pDerFrom->DerivedFrom() )
405 pDerFrom = pDerFrom->DerivedFrom();
406 }
407 if ( (pDerFrom == DerivedFrom()) || (pDerFrom == this) )
408 return sal_False;
409
410 ASSERT( Which()==pDerFrom->Which()
411 || ( Which()==RES_CONDTXTFMTCOLL && pDerFrom->Which()==RES_TXTFMTCOLL)
412 || ( Which()==RES_TXTFMTCOLL && pDerFrom->Which()==RES_CONDTXTFMTCOLL)
413 || ( Which()==RES_FLYFRMFMT && pDerFrom->Which()==RES_FRMFMT ),
414 "SetDerivedFrom: Aepfel von Birnen ableiten?");
415
416 if ( IsInCache() )
417 {
418 SwFrm::GetCache().Delete( this );
419 SetInCache( sal_False );
420 }
421 SetInSwFntCache( sal_False );
422
423 pDerFrom->Add(this);
424 aSet.SetParent( &pDerFrom->aSet );
425
426 SwFmtChg aOldFmt(this);
427 SwFmtChg aNewFmt(this);
428 ModifyNotification( &aOldFmt, &aNewFmt );
429
430 return sal_True;
431 }
432
433
SetFmtAttr(const SfxPoolItem & rAttr)434 sal_Bool SwFmt::SetFmtAttr(const SfxPoolItem& rAttr )
435 {
436 if ( IsInCache() || IsInSwFntCache() )
437 {
438 const sal_uInt16 nWhich = rAttr.Which();
439 CheckCaching( nWhich );
440 }
441
442 // wenn Modify gelockt ist, werden keine Modifies verschickt;
443 // fuer FrmFmt's immer das Modify verschicken!
444 sal_Bool bRet = sal_False;
445 const sal_uInt16 nFmtWhich = Which();
446 if( IsModifyLocked() || (!GetDepends() &&
447 (RES_GRFFMTCOLL == nFmtWhich ||
448 RES_TXTFMTCOLL == nFmtWhich ) ) )
449 {
450 if( 0 != ( bRet = (0 != aSet.Put( rAttr ))) )
451 aSet.SetModifyAtAttr( this );
452 if ( nFmtWhich == RES_TXTFMTCOLL && rAttr.Which() == RES_PARATR_NUMRULE )
453 {
454 TxtFmtCollFunc::CheckTxtFmtCollForDeletionOfAssignmentToOutlineStyle( this );
455 }
456 }
457 else
458 {
459 // kopiere nur das Attribut-Delta Array
460 SwAttrSet aOld( *aSet.GetPool(), aSet.GetRanges() ),
461 aNew( *aSet.GetPool(), aSet.GetRanges() );
462
463 bRet = 0 != aSet.Put_BC( rAttr, &aOld, &aNew );
464 if( bRet )
465 {
466 // einige Sonderbehandlungen fuer Attribute
467 aSet.SetModifyAtAttr( this );
468
469 SwAttrSetChg aChgOld( aSet, aOld );
470 SwAttrSetChg aChgNew( aSet, aNew );
471 ModifyNotification( &aChgOld, &aChgNew ); // alle veraenderten werden verschickt
472 }
473 }
474 return bRet;
475 }
476
477
SetFmtAttr(const SfxItemSet & rSet)478 sal_Bool SwFmt::SetFmtAttr( const SfxItemSet& rSet )
479 {
480 if( !rSet.Count() )
481 return sal_False;
482
483 if ( IsInCache() )
484 {
485 SwFrm::GetCache().Delete( this );
486 SetInCache( sal_False );
487 }
488 SetInSwFntCache( sal_False );
489
490 // wenn Modify gelockt ist, werden keine Modifies verschickt;
491 // fuer FrmFmt's immer das Modify verschicken!
492 sal_Bool bRet = sal_False;
493 const sal_uInt16 nFmtWhich = Which();
494 if ( IsModifyLocked() ||
495 ( !GetDepends() &&
496 ( RES_GRFFMTCOLL == nFmtWhich ||
497 RES_TXTFMTCOLL == nFmtWhich ) ) )
498 {
499 if( 0 != ( bRet = (0 != aSet.Put( rSet ))) )
500 aSet.SetModifyAtAttr( this );
501 if ( nFmtWhich == RES_TXTFMTCOLL )
502 {
503 TxtFmtCollFunc::CheckTxtFmtCollForDeletionOfAssignmentToOutlineStyle( this );
504 }
505 }
506 else
507 {
508 SwAttrSet aOld( *aSet.GetPool(), aSet.GetRanges() ),
509 aNew( *aSet.GetPool(), aSet.GetRanges() );
510 bRet = 0 != aSet.Put_BC( rSet, &aOld, &aNew );
511 if( bRet )
512 {
513 // einige Sonderbehandlungen fuer Attribute
514 aSet.SetModifyAtAttr( this );
515 SwAttrSetChg aChgOld( aSet, aOld );
516 SwAttrSetChg aChgNew( aSet, aNew );
517 ModifyNotification( &aChgOld, &aChgNew ); // alle veraenderten werden verschickt
518 }
519 }
520 return bRet;
521 }
522
523 // Nimmt den Hint mit nWhich aus dem Delta-Array
524
525
ResetFmtAttr(sal_uInt16 nWhich1,sal_uInt16 nWhich2)526 sal_Bool SwFmt::ResetFmtAttr( sal_uInt16 nWhich1, sal_uInt16 nWhich2 )
527 {
528 if( !aSet.Count() )
529 return sal_False;
530
531 if( !nWhich2 || nWhich2 < nWhich1 )
532 nWhich2 = nWhich1; // dann setze auf 1. Id, nur dieses Item
533
534 if ( IsInCache() || IsInSwFntCache() )
535 {
536 for( sal_uInt16 n = nWhich1; n < nWhich2; ++n )
537 CheckCaching( n );
538 }
539
540 // wenn Modify gelockt ist, werden keine Modifies verschickt
541 if( IsModifyLocked() )
542 return 0 != (( nWhich2 == nWhich1 )
543 ? aSet.ClearItem( nWhich1 )
544 : aSet.ClearItem_BC( nWhich1, nWhich2 ));
545
546 SwAttrSet aOld( *aSet.GetPool(), aSet.GetRanges() ),
547 aNew( *aSet.GetPool(), aSet.GetRanges() );
548 sal_Bool bRet = 0 != aSet.ClearItem_BC( nWhich1, nWhich2, &aOld, &aNew );
549
550 if( bRet )
551 {
552 SwAttrSetChg aChgOld( aSet, aOld );
553 SwAttrSetChg aChgNew( aSet, aNew );
554 ModifyNotification( &aChgOld, &aChgNew ); // alle veraenderten werden verschickt
555 }
556 return bRet;
557 }
558
559
560
561 // --> OD 2007-01-24 #i73790#
562 // method renamed
ResetAllFmtAttr()563 sal_uInt16 SwFmt::ResetAllFmtAttr()
564 // <--
565 {
566 if( !aSet.Count() )
567 return 0;
568
569 if ( IsInCache() )
570 {
571 SwFrm::GetCache().Delete( this );
572 SetInCache( sal_False );
573 }
574 SetInSwFntCache( sal_False );
575
576 // wenn Modify gelockt ist, werden keine Modifies verschickt
577 if( IsModifyLocked() )
578 return aSet.ClearItem( 0 );
579
580 SwAttrSet aOld( *aSet.GetPool(), aSet.GetRanges() ),
581 aNew( *aSet.GetPool(), aSet.GetRanges() );
582 sal_Bool bRet = 0 != aSet.ClearItem_BC( 0, &aOld, &aNew );
583
584 if( bRet )
585 {
586 SwAttrSetChg aChgOld( aSet, aOld );
587 SwAttrSetChg aChgNew( aSet, aNew );
588 ModifyNotification( &aChgOld, &aChgNew ); // alle veraenderten werden verschickt
589 }
590 return aNew.Count();
591 }
592
593
594 /*************************************************************************
595 |* void SwFmt::GetInfo( const SfxPoolItem& ) const
596 |*
597 |* Beschreibung
598 |* Ersterstellung JP 18.04.94
599 |* Letzte Aenderung JP 05.08.94
600 *************************************************************************/
601
602
GetInfo(SfxPoolItem & rInfo) const603 sal_Bool SwFmt::GetInfo( SfxPoolItem& rInfo ) const
604 {
605 sal_Bool bRet = SwModify::GetInfo( rInfo );
606 return bRet;
607 }
608
609
DelDiffs(const SfxItemSet & rSet)610 void SwFmt::DelDiffs( const SfxItemSet& rSet )
611 {
612 if( !aSet.Count() )
613 return;
614
615 if ( IsInCache() )
616 {
617 SwFrm::GetCache().Delete( this );
618 SetInCache( sal_False );
619 }
620 SetInSwFntCache( sal_False );
621
622 // wenn Modify gelockt ist, werden keine Modifies verschickt
623 if( IsModifyLocked() )
624 {
625 aSet.Intersect( rSet );
626 return;
627 }
628
629 SwAttrSet aOld( *aSet.GetPool(), aSet.GetRanges() ),
630 aNew( *aSet.GetPool(), aSet.GetRanges() );
631 sal_Bool bRet = 0 != aSet.Intersect_BC( rSet, &aOld, &aNew );
632
633 if( bRet )
634 {
635 SwAttrSetChg aChgOld( aSet, aOld );
636 SwAttrSetChg aChgNew( aSet, aNew );
637 ModifyNotification( &aChgOld, &aChgNew ); // alle veraenderten werden verschickt
638 }
639 }
640
641 /** SwFmt::IsBackgroundTransparent - for feature #99657#
642
643 OD 22.08.2002
644 Virtual method to determine, if background of format is transparent.
645 Default implementation returns false. Thus, subclasses have to overload
646 method, if the specific subclass can have a transparent background.
647
648 @author OD
649
650 @return false, default implementation
651 */
IsBackgroundTransparent() const652 sal_Bool SwFmt::IsBackgroundTransparent() const
653 {
654 return sal_False;
655 }
656
657 /** SwFmt::IsShadowTransparent - for feature #99657#
658
659 OD 22.08.2002
660 Virtual method to determine, if shadow of format is transparent.
661 Default implementation returns false. Thus, subclasses have to overload
662 method, if the specific subclass can have a transparent shadow.
663
664 @author OD
665
666 @return false, default implementation
667 */
IsShadowTransparent() const668 sal_Bool SwFmt::IsShadowTransparent() const
669 {
670 return sal_False;
671 }
672
673 /*
674 * Document Interface Access
675 */
getIDocumentSettingAccess() const676 const IDocumentSettingAccess* SwFmt::getIDocumentSettingAccess() const { return GetDoc(); }
getIDocumentDrawModelAccess() const677 const IDocumentDrawModelAccess* SwFmt::getIDocumentDrawModelAccess() const { return GetDoc(); }
getIDocumentDrawModelAccess()678 IDocumentDrawModelAccess* SwFmt::getIDocumentDrawModelAccess() { return GetDoc(); }
getIDocumentLayoutAccess() const679 const IDocumentLayoutAccess* SwFmt::getIDocumentLayoutAccess() const { return GetDoc(); }
getIDocumentLayoutAccess()680 IDocumentLayoutAccess* SwFmt::getIDocumentLayoutAccess() { return GetDoc(); }
getIDocumentTimerAccess()681 IDocumentTimerAccess* SwFmt::getIDocumentTimerAccess() { return GetDoc(); }
getIDocumentFieldsAccess()682 IDocumentFieldsAccess* SwFmt::getIDocumentFieldsAccess() { return GetDoc(); }
getIDocumentChartDataProviderAccess()683 IDocumentChartDataProviderAccess* SwFmt::getIDocumentChartDataProviderAccess() { return GetDoc(); }
684
685