merge the formfield patch from ooo-build
[ooovba.git] / sw / source / core / attr / format.cxx
blobc9d6abadae2ee052aad3966167060a1ee1b8e8da
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: format.cxx,v $
10 * $Revision: 1.17.146.1 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_sw.hxx"
35 #include <hintids.hxx> // fuer RES_..
36 #include <frame.hxx> // fuer AttrCache
37 #include <format.hxx>
38 #include <hints.hxx> // fuer SwFmtChg
39 #include <doc.hxx>
40 #include <paratr.hxx> // fuer SwParaFmt - SwHyphenBug
41 #include <swcache.hxx>
42 // --> OD 2006-11-22 #i71574#
43 #include <fmtcolfunc.hxx>
44 // <--
46 TYPEINIT1( SwFmt, SwClient ); //rtti fuer SwFmt
48 /*************************************************************************
49 |* SwFmt::SwFmt
50 *************************************************************************/
53 SwFmt::SwFmt( SwAttrPool& rPool, const sal_Char* pFmtNm,
54 const USHORT* pWhichRanges, SwFmt *pDrvdFrm, USHORT nFmtWhich )
55 : SwModify( pDrvdFrm ),
56 aSet( rPool, pWhichRanges ),
57 nWhichId( nFmtWhich ),
58 nFmtId( 0 ),
59 nPoolFmtId( USHRT_MAX ),
60 nPoolHelpId( USHRT_MAX ),
61 nPoolHlpFileId( UCHAR_MAX )
63 aFmtName.AssignAscii( pFmtNm );
64 bWritten = bFmtInDTOR = bAutoUpdateFmt = FALSE; // LAYER_IMPL
65 bAutoFmt = TRUE;
67 if( pDrvdFrm )
68 aSet.SetParent( &pDrvdFrm->aSet );
72 SwFmt::SwFmt( SwAttrPool& rPool, const String &rFmtNm,
73 const USHORT* pWhichRanges, SwFmt *pDrvdFrm, USHORT nFmtWhich )
74 : SwModify( pDrvdFrm ),
75 aFmtName( rFmtNm ),
76 aSet( rPool, pWhichRanges ),
77 nWhichId( nFmtWhich ),
78 nFmtId( 0 ),
79 nPoolFmtId( USHRT_MAX ),
80 nPoolHelpId( USHRT_MAX ),
81 nPoolHlpFileId( UCHAR_MAX )
83 bWritten = bFmtInDTOR = bAutoUpdateFmt = FALSE; // LAYER_IMPL
84 bAutoFmt = TRUE;
86 if( pDrvdFrm )
87 aSet.SetParent( &pDrvdFrm->aSet );
91 SwFmt::SwFmt( const SwFmt& rFmt )
92 : SwModify( rFmt.DerivedFrom() ),
93 aFmtName( rFmt.aFmtName ),
94 aSet( rFmt.aSet ),
95 nWhichId( rFmt.nWhichId ),
96 nFmtId( 0 ),
97 nPoolFmtId( rFmt.GetPoolFmtId() ),
98 nPoolHelpId( rFmt.GetPoolHelpId() ),
99 nPoolHlpFileId( rFmt.GetPoolHlpFileId() )
101 bWritten = bFmtInDTOR = FALSE; // LAYER_IMPL
102 bAutoFmt = rFmt.bAutoFmt;
103 bAutoUpdateFmt = rFmt.bAutoUpdateFmt;
105 if( rFmt.DerivedFrom() )
106 aSet.SetParent( &rFmt.DerivedFrom()->aSet );
107 // einige Sonderbehandlungen fuer Attribute
108 aSet.SetModifyAtAttr( this );
111 /*************************************************************************
112 |* SwFmt &SwFmt::operator=(const SwFmt& aFmt)
114 |* Beschreibung Dokument 1.14
115 |* Ersterstellung JP 22.11.90
116 |* Letzte Aenderung JP 05.08.94
117 *************************************************************************/
120 SwFmt &SwFmt::operator=(const SwFmt& rFmt)
122 nWhichId = rFmt.nWhichId;
123 nPoolFmtId = rFmt.GetPoolFmtId();
124 nPoolHelpId = rFmt.GetPoolHelpId();
125 nPoolHlpFileId = rFmt.GetPoolHlpFileId();
127 if ( IsInCache() )
129 SwFrm::GetCache().Delete( this );
130 SetInCache( FALSE );
132 SetInSwFntCache( FALSE );
134 // kopiere nur das Attribut-Delta Array
135 SwAttrSet aOld( *aSet.GetPool(), aSet.GetRanges() ),
136 aNew( *aSet.GetPool(), aSet.GetRanges() );
137 aSet.Intersect_BC( rFmt.aSet, &aOld, &aNew );
138 aSet.Put_BC( rFmt.aSet, &aOld, &aNew );
140 // einige Sonderbehandlungen fuer Attribute
141 aSet.SetModifyAtAttr( this );
143 // PoolItem-Attr erzeugen fuers Modify !!!
144 if( aOld.Count() )
146 SwAttrSetChg aChgOld( aSet, aOld );
147 SwAttrSetChg aChgNew( aSet, aNew );
148 Modify( &aChgOld, &aChgNew ); // alle veraenderten werden verschickt
151 if( pRegisteredIn != rFmt.pRegisteredIn )
153 if( pRegisteredIn )
154 pRegisteredIn->Remove(this);
155 if(rFmt.pRegisteredIn)
157 rFmt.pRegisteredIn->Add(this);
158 aSet.SetParent( &rFmt.aSet );
160 else
161 aSet.SetParent( 0 );
163 bAutoFmt = rFmt.bAutoFmt;
164 bAutoUpdateFmt = rFmt.bAutoUpdateFmt;
165 return *this;
168 void SwFmt::SetName( const String& rNewName, sal_Bool bBroadcast )
170 ASSERT(!IsDefault(), "SetName: Defaultformat" );
171 if( bBroadcast )
173 SwStringMsgPoolItem aOld( RES_NAME_CHANGED, aFmtName );
174 SwStringMsgPoolItem aNew( RES_NAME_CHANGED, rNewName );
175 aFmtName = rNewName;
176 Modify( &aOld, &aNew );
178 else
180 aFmtName = rNewName;
184 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
185 * diese Funktion wird in jedem Copy-Ctor gerufen, damit die
186 * Attribute kopiert werden. Diese koennen erst kopiert werden,
187 * wenn die abgeleitet Klasse existiert, denn beim Setzen der
188 * Attribute wird die Which()-Methode gerufen, die hier in der
189 * Basis-Klasse auf 0 defaultet ist.
191 * Zusatz: JP 8.4.1994
192 * Wird ueber Dokumentgrenzen kopiert, so muss das neue Dokument
193 * mit angeben werden, in dem this steht. Z.Z. ist das fuers
194 * DropCaps wichtig, dieses haelt Daten, die tief kopiert werden
195 * muessen !!
196 * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
199 void SwFmt::CopyAttrs( const SwFmt& rFmt, BOOL bReplace )
201 // kopiere nur das Attribut-Delta Array
203 if ( IsInCache() )
205 SwFrm::GetCache().Delete( this );
206 SetInCache( FALSE );
208 SetInSwFntCache( FALSE );
210 // Sonderbehandlung fuer einige Attribute
211 SwAttrSet* pChgSet = (SwAttrSet*)&rFmt.aSet;
213 if( !bReplace ) // nur die neu, die nicht gesetzt sind ??
215 if( pChgSet == (SwAttrSet*)&rFmt.aSet ) // Set hier kopieren
216 pChgSet = new SwAttrSet( rFmt.aSet );
217 pChgSet->Differentiate( aSet );
220 // kopiere nur das Attribut-Delta Array
221 if( pChgSet->GetPool() != aSet.GetPool() )
222 pChgSet->CopyToModify( *this );
223 else
225 SwAttrSet aOld( *aSet.GetPool(), aSet.GetRanges() ),
226 aNew( *aSet.GetPool(), aSet.GetRanges() );
228 if ( 0 != aSet.Put_BC( *pChgSet, &aOld, &aNew ) )
230 // einige Sonderbehandlungen fuer Attribute
231 aSet.SetModifyAtAttr( this );
233 SwAttrSetChg aChgOld( aSet, aOld );
234 SwAttrSetChg aChgNew( aSet, aNew );
235 Modify( &aChgOld, &aChgNew ); // alle veraenderten werden verschickt
239 if( pChgSet != (SwAttrSet*)&rFmt.aSet ) // Set hier angelegt ?
240 delete pChgSet;
243 /*************************************************************************
244 |* SwFmt::~SwFmt()
246 |* Beschreibung Dokument 1.14
247 |* Ersterstellung JP 22.11.90
248 |* Letzte Aenderung JP 14.02.91
249 *************************************************************************/
252 SwFmt::~SwFmt()
254 /* das passiert bei der ObjectDying Message */
255 /* alle Abhaengigen auf DerivedFrom umhaengen */
256 if( GetDepends() )
258 ASSERT(DerivedFrom(), "SwFmt::~SwFmt: Def Abhaengige!" );
260 bFmtInDTOR = TRUE;
262 SwFmt *pParentFmt = DerivedFrom();
263 if (!pParentFmt) // see #112405#
265 DBG_ERROR( "~SwFmt: parent format missing" );
267 else
269 while( GetDepends() )
271 SwFmtChg aOldFmt(this);
272 SwFmtChg aNewFmt(pParentFmt);
273 SwClient * pDepend = (SwClient*)GetDepends();
274 pParentFmt->Add(pDepend);
275 pDepend->Modify(&aOldFmt, &aNewFmt);
282 /*************************************************************************
283 |* void SwFmt::Modify( SfxPoolItem* pOldValue, SfxPoolItem* pNewValue )
285 |* Beschreibung Dokument 1.14
286 |* Ersterstellung JP 22.11.90
287 |* Letzte Aenderung JP 05.08.94
288 *************************************************************************/
291 void SwFmt::Modify( SfxPoolItem* pOldValue, SfxPoolItem* pNewValue )
293 BOOL bWeiter = TRUE; // TRUE = Propagierung an die Abhaengigen
295 USHORT nWhich = pOldValue ? pOldValue->Which() :
296 pNewValue ? pNewValue->Which() : 0 ;
297 switch( nWhich )
299 case 0: break; // Which-Id von 0 ???
301 case RES_OBJECTDYING :
303 // ist das sterbende Object das "Parent"-Format von diesen Format,
304 // dann haengt sich dieses Format an den Parent vom Parent
305 SwFmt * pFmt = (SwFmt *) ((SwPtrMsgPoolItem *)pNewValue)->pObject;
307 // nicht umhaengen wenn dieses das oberste Format ist !!
308 if( pRegisteredIn && pRegisteredIn == pFmt )
310 if( pFmt->pRegisteredIn )
312 // wenn Parent, dann im neuen Parent wieder anmelden
313 pFmt->DerivedFrom()->Add( this );
314 aSet.SetParent( &DerivedFrom()->aSet );
316 else
318 // sonst auf jeden Fall beim sterbenden abmelden
319 DerivedFrom()->Remove( this );
320 aSet.SetParent( 0 );
323 } // OBJECTDYING
324 break;
326 case RES_ATTRSET_CHG:
327 if( ((SwAttrSetChg*)pOldValue)->GetTheChgdSet() != &aSet )
329 //nur die weiter geben, die hier nicht gesetzt sind !!
330 SwAttrSetChg aOld( *(SwAttrSetChg*)pOldValue );
331 SwAttrSetChg aNew( *(SwAttrSetChg*)pNewValue );
333 aOld.GetChgSet()->Differentiate( aSet );
334 aNew.GetChgSet()->Differentiate( aSet );
336 if( aNew.Count() )
337 // keine mehr gesetzt, dann Ende !!
338 SwModify::Modify( &aOld, &aNew );
339 bWeiter = FALSE;
341 break;
342 case RES_FMT_CHG:
343 // falls mein Format Parent umgesetzt wird, dann melde ich
344 // meinen Attrset beim Neuen an.
346 // sein eigenes Modify ueberspringen !!
347 if( ((SwFmtChg*)pOldValue)->pChangedFmt != this &&
348 ((SwFmtChg*)pNewValue)->pChangedFmt == DerivedFrom() )
350 // den Set an den neuen Parent haengen
351 aSet.SetParent( DerivedFrom() ? &DerivedFrom()->aSet : 0 );
353 break;
355 case RES_RESET_FMTWRITTEN:
357 // IsWritten-Flag zuruecksetzen. Hint nur an abhanegige
358 // Formate (und keine Frames) propagieren.
359 ResetWritten();
360 SwClientIter aIter( *this );
361 for( SwClient *pClient = aIter.First( TYPE(SwFmt) ); pClient;
362 pClient = aIter.Next() )
363 pClient->Modify( pOldValue, pNewValue );
365 bWeiter = FALSE;
367 break;
369 default:
371 // Ist das Attribut in diesem Format definiert, dann auf
372 // NICHT weiter propagieren !!
373 if( SFX_ITEM_SET == aSet.GetItemState( nWhich, FALSE ))
375 // wie finde ich heraus, ob nicht ich die Message versende ??
376 // aber wer ruft das hier ????
377 //ASSERT( FALSE, "Modify ohne Absender verschickt" );
378 //JP 11.06.96: DropCaps koennen hierher kommen
379 ASSERT( RES_PARATR_DROP == nWhich, "Modify ohne Absender verschickt" );
380 bWeiter = FALSE;
383 } // default
384 } // switch
386 if( bWeiter )
388 // laufe durch alle abhaengigen Formate
389 SwModify::Modify( pOldValue, pNewValue );
395 BOOL SwFmt::SetDerivedFrom(SwFmt *pDerFrom)
397 if ( pDerFrom )
399 // Zyklus?
400 const SwFmt* pFmt = pDerFrom;
401 while ( pFmt != 0 )
403 if ( pFmt == this )
404 return FALSE;
406 pFmt=pFmt->DerivedFrom();
409 else
411 // Nichts angegeben, Dflt-Format suchen
412 pDerFrom = this;
413 while ( pDerFrom->DerivedFrom() )
414 pDerFrom = pDerFrom->DerivedFrom();
416 if ( (pDerFrom == DerivedFrom()) || (pDerFrom == this) )
417 return FALSE;
419 ASSERT( Which()==pDerFrom->Which()
420 || ( Which()==RES_CONDTXTFMTCOLL && pDerFrom->Which()==RES_TXTFMTCOLL)
421 || ( Which()==RES_TXTFMTCOLL && pDerFrom->Which()==RES_CONDTXTFMTCOLL)
422 || ( Which()==RES_FLYFRMFMT && pDerFrom->Which()==RES_FRMFMT ),
423 "SetDerivedFrom: Aepfel von Birnen ableiten?");
425 if ( IsInCache() )
427 SwFrm::GetCache().Delete( this );
428 SetInCache( FALSE );
430 SetInSwFntCache( FALSE );
432 pDerFrom->Add(this);
433 aSet.SetParent( &pDerFrom->aSet );
435 SwFmtChg aOldFmt(this);
436 SwFmtChg aNewFmt(this);
437 Modify( &aOldFmt, &aNewFmt );
439 return TRUE;
443 BOOL SwFmt::SetFmtAttr(const SfxPoolItem& rAttr )
445 if ( IsInCache() || IsInSwFntCache() )
447 const USHORT nWhich = rAttr.Which();
448 CheckCaching( nWhich );
451 // wenn Modify gelockt ist, werden keine Modifies verschickt;
452 // fuer FrmFmt's immer das Modify verschicken!
453 BOOL bRet = FALSE;
454 const USHORT nFmtWhich = Which();
455 if( IsModifyLocked() || (!GetDepends() &&
456 (RES_GRFFMTCOLL == nFmtWhich ||
457 RES_TXTFMTCOLL == nFmtWhich ) ) )
459 if( 0 != ( bRet = (0 != aSet.Put( rAttr ))) )
460 aSet.SetModifyAtAttr( this );
461 // --> OD 2006-11-22 #i71574#
462 if ( nFmtWhich == RES_TXTFMTCOLL && rAttr.Which() == RES_PARATR_NUMRULE )
464 TxtFmtCollFunc::CheckTxtFmtCollForDeletionOfAssignmentToOutlineStyle( this );
466 // <--
468 else
470 // kopiere nur das Attribut-Delta Array
471 SwAttrSet aOld( *aSet.GetPool(), aSet.GetRanges() ),
472 aNew( *aSet.GetPool(), aSet.GetRanges() );
474 bRet = 0 != aSet.Put_BC( rAttr, &aOld, &aNew );
475 if( bRet )
477 // einige Sonderbehandlungen fuer Attribute
478 aSet.SetModifyAtAttr( this );
480 SwAttrSetChg aChgOld( aSet, aOld );
481 SwAttrSetChg aChgNew( aSet, aNew );
482 Modify( &aChgOld, &aChgNew ); // alle veraenderten werden verschickt
485 return bRet;
489 BOOL SwFmt::SetFmtAttr( const SfxItemSet& rSet )
491 if( !rSet.Count() )
492 return FALSE;
494 if ( IsInCache() )
496 SwFrm::GetCache().Delete( this );
497 SetInCache( FALSE );
499 SetInSwFntCache( FALSE );
501 // wenn Modify gelockt ist, werden keine Modifies verschickt;
502 // fuer FrmFmt's immer das Modify verschicken!
503 BOOL bRet = FALSE;
504 const USHORT nFmtWhich = Which();
505 if ( IsModifyLocked() ||
506 ( !GetDepends() &&
507 ( RES_GRFFMTCOLL == nFmtWhich ||
508 RES_TXTFMTCOLL == nFmtWhich ) ) )
510 if( 0 != ( bRet = (0 != aSet.Put( rSet ))) )
511 aSet.SetModifyAtAttr( this );
512 // --> OD 2006-11-22 #i71574#
513 if ( nFmtWhich == RES_TXTFMTCOLL )
515 TxtFmtCollFunc::CheckTxtFmtCollForDeletionOfAssignmentToOutlineStyle( this );
517 // <--
519 else
521 SwAttrSet aOld( *aSet.GetPool(), aSet.GetRanges() ),
522 aNew( *aSet.GetPool(), aSet.GetRanges() );
523 bRet = 0 != aSet.Put_BC( rSet, &aOld, &aNew );
524 if( bRet )
526 // einige Sonderbehandlungen fuer Attribute
527 aSet.SetModifyAtAttr( this );
528 SwAttrSetChg aChgOld( aSet, aOld );
529 SwAttrSetChg aChgNew( aSet, aNew );
530 Modify( &aChgOld, &aChgNew ); // alle veraenderten werden verschickt
533 return bRet;
536 // Nimmt den Hint mit nWhich aus dem Delta-Array
539 BOOL SwFmt::ResetFmtAttr( USHORT nWhich1, USHORT nWhich2 )
541 if( !aSet.Count() )
542 return FALSE;
544 if( !nWhich2 || nWhich2 < nWhich1 )
545 nWhich2 = nWhich1; // dann setze auf 1. Id, nur dieses Item
547 if ( IsInCache() || IsInSwFntCache() )
549 for( USHORT n = nWhich1; n < nWhich2; ++n )
550 CheckCaching( n );
553 // wenn Modify gelockt ist, werden keine Modifies verschickt
554 if( IsModifyLocked() )
555 return 0 != (( nWhich2 == nWhich1 )
556 ? aSet.ClearItem( nWhich1 )
557 : aSet.ClearItem_BC( nWhich1, nWhich2 ));
559 SwAttrSet aOld( *aSet.GetPool(), aSet.GetRanges() ),
560 aNew( *aSet.GetPool(), aSet.GetRanges() );
561 BOOL bRet = 0 != aSet.ClearItem_BC( nWhich1, nWhich2, &aOld, &aNew );
563 if( bRet )
565 SwAttrSetChg aChgOld( aSet, aOld );
566 SwAttrSetChg aChgNew( aSet, aNew );
567 Modify( &aChgOld, &aChgNew ); // alle veraenderten werden verschickt
569 return bRet;
574 // --> OD 2007-01-24 #i73790#
575 // method renamed
576 USHORT SwFmt::ResetAllFmtAttr()
577 // <--
579 if( !aSet.Count() )
580 return 0;
582 if ( IsInCache() )
584 SwFrm::GetCache().Delete( this );
585 SetInCache( FALSE );
587 SetInSwFntCache( FALSE );
589 // wenn Modify gelockt ist, werden keine Modifies verschickt
590 if( IsModifyLocked() )
591 return aSet.ClearItem( 0 );
593 SwAttrSet aOld( *aSet.GetPool(), aSet.GetRanges() ),
594 aNew( *aSet.GetPool(), aSet.GetRanges() );
595 BOOL bRet = 0 != aSet.ClearItem_BC( 0, &aOld, &aNew );
597 if( bRet )
599 SwAttrSetChg aChgOld( aSet, aOld );
600 SwAttrSetChg aChgNew( aSet, aNew );
601 Modify( &aChgOld, &aChgNew ); // alle veraenderten werden verschickt
603 return aNew.Count();
607 /*************************************************************************
608 |* void SwFmt::GetInfo( const SfxPoolItem& ) const
610 |* Beschreibung
611 |* Ersterstellung JP 18.04.94
612 |* Letzte Aenderung JP 05.08.94
613 *************************************************************************/
616 BOOL SwFmt::GetInfo( SfxPoolItem& rInfo ) const
618 BOOL bRet = SwModify::GetInfo( rInfo );
619 return bRet;
623 void SwFmt::DelDiffs( const SfxItemSet& rSet )
625 if( !aSet.Count() )
626 return;
628 if ( IsInCache() )
630 SwFrm::GetCache().Delete( this );
631 SetInCache( FALSE );
633 SetInSwFntCache( FALSE );
635 // wenn Modify gelockt ist, werden keine Modifies verschickt
636 if( IsModifyLocked() )
638 aSet.Intersect( rSet );
639 return;
642 SwAttrSet aOld( *aSet.GetPool(), aSet.GetRanges() ),
643 aNew( *aSet.GetPool(), aSet.GetRanges() );
644 BOOL bRet = 0 != aSet.Intersect_BC( rSet, &aOld, &aNew );
646 if( bRet )
648 SwAttrSetChg aChgOld( aSet, aOld );
649 SwAttrSetChg aChgNew( aSet, aNew );
650 Modify( &aChgOld, &aChgNew ); // alle veraenderten werden verschickt
654 /** SwFmt::IsBackgroundTransparent - for feature #99657#
656 OD 22.08.2002
657 Virtual method to determine, if background of format is transparent.
658 Default implementation returns false. Thus, subclasses have to overload
659 method, if the specific subclass can have a transparent background.
661 @author OD
663 @return false, default implementation
665 sal_Bool SwFmt::IsBackgroundTransparent() const
667 return sal_False;
670 /** SwFmt::IsShadowTransparent - for feature #99657#
672 OD 22.08.2002
673 Virtual method to determine, if shadow of format is transparent.
674 Default implementation returns false. Thus, subclasses have to overload
675 method, if the specific subclass can have a transparent shadow.
677 @author OD
679 @return false, default implementation
681 sal_Bool SwFmt::IsShadowTransparent() const
683 return sal_False;
687 * Document Interface Access
689 const IDocumentSettingAccess* SwFmt::getIDocumentSettingAccess() const { return GetDoc(); }
690 const IDocumentDrawModelAccess* SwFmt::getIDocumentDrawModelAccess() const { return GetDoc(); }
691 IDocumentDrawModelAccess* SwFmt::getIDocumentDrawModelAccess() { return GetDoc(); }
692 const IDocumentLayoutAccess* SwFmt::getIDocumentLayoutAccess() const { return GetDoc(); }
693 IDocumentLayoutAccess* SwFmt::getIDocumentLayoutAccess() { return GetDoc(); }
694 IDocumentTimerAccess* SwFmt::getIDocumentTimerAccess() { return GetDoc(); }
695 IDocumentFieldsAccess* SwFmt::getIDocumentFieldsAccess() { return GetDoc(); }
696 IDocumentChartDataProviderAccess* SwFmt::getIDocumentChartDataProviderAccess() { return GetDoc(); }