1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: docsh.cxx,v $
10 * $Revision: 1.79.188.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"
34 #include <hintids.hxx>
35 #include <rtl/logfile.hxx>
36 #include <vcl/msgbox.hxx>
37 #include <vcl/svapp.hxx>
38 #include <vcl/wrkwin.hxx>
39 #include <vcl/jobset.hxx>
40 #include <tools/urlobj.hxx>
41 #include <svtools/whiter.hxx>
42 #include <svtools/zforlist.hxx>
43 #include <svtools/eitem.hxx>
44 #include <svtools/stritem.hxx>
45 #include <svx/adjitem.hxx>
46 #include <basic/sbx.hxx>
47 #include <svtools/moduleoptions.hxx>
48 #include <sfx2/app.hxx>
49 #include <sfx2/request.hxx>
50 #include <svtools/misccfg.hxx>
51 #include <sfx2/passwd.hxx>
52 #include <sfx2/bindings.hxx>
53 #include <sfx2/docfile.hxx>
54 #include <sfx2/evntconf.hxx>
55 #include <sfx2/docfilt.hxx>
56 #include <sfx2/printer.hxx>
57 #include <svx/linkmgr.hxx>
58 #include <svx/srchitem.hxx>
59 #include <svx/flstitem.hxx>
60 #include <svx/htmlmode.hxx>
61 #include <svx/svxmsbas.hxx>
62 #include <svtools/soerr.hxx>
63 #include <sot/clsids.hxx>
64 #include <basic/basmgr.hxx>
65 #include <basic/sbmod.hxx>
66 //#include <basic/sbjsmod.hxx>
67 #include <swevent.hxx>
68 #include <fmtpdsc.hxx>
69 #include <fmtfsize.hxx>
73 #include <swprtopt.hxx>
75 #include <view.hxx> // fuer die aktuelle Sicht
77 #include <PostItMgr.hxx>
79 #include <wrtsh.hxx> // Verbindung zur Core
80 #include <docsh.hxx> // Dokumenterzeugung
82 #include <viewopt.hxx>
84 #include <swmodule.hxx>
85 #include <globdoc.hxx>
86 #include <usrpref.hxx>
87 #include <shellio.hxx> // I/O
88 #include <docstyle.hxx>
90 #include <docstat.hxx>
91 #include <pagedesc.hxx>
94 #include <swbaslnk.hxx>
95 #include <srcview.hxx>
96 #include <ndindex.hxx>
100 #include <ftnidx.hxx>
102 // --> FME 2004-08-05 #i20883# Digital Signatures and Encryption
103 #include <fldbas.hxx>
104 #include <docary.hxx>
106 #include <swerror.h> // Fehlermeldungen
109 #include <globals.hrc>
111 #include "warnpassword.hxx"
114 #include <svtools/moduleoptions.hxx>
115 #include <svtools/fltrcfg.hxx>
116 #include <svx/htmlcfg.hxx>
117 #include <sfx2/fcontnr.hxx>
118 #include <sfx2/objface.hxx>
119 #include <comphelper/storagehelper.hxx>
122 #include <sfx2/msg.hxx>
123 #include <swslots.hxx>
124 #include <com/sun/star/document/UpdateDocMode.hpp>
126 #include <com/sun/star/document/XDocumentProperties.hpp>
127 #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
131 #include <sfx2/Metadatable.hxx>
135 using namespace ::com::sun::star
;
136 using namespace ::com::sun::star::uno
;
137 using namespace ::com::sun::star::script
;
138 using namespace ::com::sun::star::container
;
141 SFX_IMPL_INTERFACE( SwDocShell
, SfxObjectShell
, SW_RES(0) )
143 SFX_CHILDWINDOW_REGISTRATION( SID_HYPERLINK_INSERT
);
146 TYPEINIT2(SwDocShell
, SfxObjectShell
, SfxListener
);
148 //-------------------------------------------------------------------------
149 SFX_IMPL_OBJECTFACTORY(SwDocShell
, SvGlobalName(SO3_SW_CLASSID
), SFXOBJECTSHELL_STD_NORMAL
|SFXOBJECTSHELL_HASMENU
, "swriter" )
151 /*--------------------------------------------------------------------
152 Beschreibung: Laden vorbereiten
153 --------------------------------------------------------------------*/
156 Reader
* SwDocShell::StartConvertFrom(SfxMedium
& rMedium
, SwReader
** ppRdr
,
157 SwCrsrShell
*pCrsrShell
,
160 BOOL bAPICall
= FALSE
;
161 const SfxPoolItem
* pApiItem
;
162 const SfxItemSet
* pMedSet
;
163 if( 0 != ( pMedSet
= rMedium
.GetItemSet() ) && SFX_ITEM_SET
==
164 pMedSet
->GetItemState( FN_API_CALL
, TRUE
, &pApiItem
) )
165 bAPICall
= ((const SfxBoolItem
*)pApiItem
)->GetValue();
167 const SfxFilter
* pFlt
= rMedium
.GetFilter();
172 InfoBox( 0, SW_RESSTR(STR_CANTOPEN
)).Execute();
176 String
aFileName( rMedium
.GetName() );
177 SwRead pRead
= SwReaderWriter::GetReader( pFlt
->GetUserData() );
181 if( rMedium
.IsStorage()
182 ? SW_STORAGE_READER
& pRead
->GetReaderType()
183 : SW_STREAM_READER
& pRead
->GetReaderType() )
185 *ppRdr
= pPaM
? new SwReader( rMedium
, aFileName
, *pPaM
) :
187 new SwReader( rMedium
, aFileName
, *pCrsrShell
->GetCrsr() )
188 : new SwReader( rMedium
, aFileName
, pDoc
);
195 if ((*ppRdr
)->NeedsPasswd( *pRead
))
199 SfxPasswordDialog
* pPasswdDlg
=
200 new SfxPasswordDialog( 0 );
201 if(RET_OK
== pPasswdDlg
->Execute())
202 aPasswd
= pPasswdDlg
->GetPassword();
206 const SfxItemSet
* pSet
= rMedium
.GetItemSet();
207 const SfxPoolItem
*pPassItem
;
208 if(pSet
&& SFX_ITEM_SET
== pSet
->GetItemState(SID_PASSWORD
, TRUE
, &pPassItem
))
209 aPasswd
= ((const SfxStringItem
*)pPassItem
)->GetValue();
212 if (!(*ppRdr
)->CheckPasswd( aPasswd
, *pRead
))
214 InfoBox( 0, SW_RES(MSG_ERROR_PASSWD
)).Execute();
219 if(rMedium
.IsStorage())
221 //SvStorageRef aStor( rMedium.GetStorage() );
222 const SfxItemSet
* pSet
= rMedium
.GetItemSet();
223 const SfxPoolItem
*pItem
;
224 if(pSet
&& SFX_ITEM_SET
== pSet
->GetItemState(SID_PASSWORD
, TRUE
, &pItem
))
226 DBG_ASSERT(pItem
->IsA( TYPE(SfxStringItem
) ), "Fehler Parametertype");
227 comphelper::OStorageHelper::SetCommonStoragePassword( rMedium
.GetStorage(), ((const SfxStringItem
*)pItem
)->GetValue() );
229 // Fuer's Dokument-Einfuegen noch die FF-Version, wenn's der
230 // eigene Filter ist.
231 ASSERT( /*pRead != ReadSw3 || */pRead
!= ReadXML
|| pFlt
->GetVersion(),
232 "Am Filter ist keine FF-Version gesetzt" );
233 //if( (pRead == ReadSw3 || pRead == ReadXML) && pFlt->GetVersion() )
234 // aStor->SetVersion( (long)pFlt->GetVersion() );
236 // #i30171# set the UpdateDocMode at the SwDocShell
237 SFX_ITEMSET_ARG( rMedium
.GetItemSet(), pUpdateDocItem
, SfxUInt16Item
, SID_UPDATEDOCMODE
, sal_False
);
238 nUpdateDocMode
= pUpdateDocItem
? pUpdateDocItem
->GetValue() : document::UpdateDocMode::NO_UPDATE
;
240 if( pFlt
->GetDefaultTemplate().Len() )
241 pRead
->SetTemplateName( pFlt
->GetDefaultTemplate() );
243 if( pRead
== ReadAscii
&& 0 != rMedium
.GetInStream() &&
244 pFlt
->GetUserData().EqualsAscii( FILTER_TEXT_DLG
) )
247 const SfxItemSet
* pSet
;
248 const SfxPoolItem
* pItem
;
249 if( 0 != ( pSet
= rMedium
.GetItemSet() ) && SFX_ITEM_SET
==
250 pSet
->GetItemState( SID_FILE_FILTEROPTIONS
, TRUE
, &pItem
) )
251 aOpt
.ReadUserData( ((const SfxStringItem
*)pItem
)->GetValue() );
254 pRead
->GetReaderOpt().SetASCIIOpts( aOpt
);
260 /*--------------------------------------------------------------------
262 --------------------------------------------------------------------*/
264 BOOL
SwDocShell::ConvertFrom( SfxMedium
& rMedium
)
266 RTL_LOGFILE_CONTEXT_AUTHOR( aLog
, "SW", "JP93722", "SwDocShell::ConvertFrom" );
269 SwRead pRead
= StartConvertFrom(rMedium
, &pRdr
);
271 return FALSE
; // #129881# return if no reader is found
272 SotStorageRef pStg
=pRead
->getSotStorageRef(); // #i45333# save sot storage ref in case of recursive calls
274 SwWait
aWait( *this, TRUE
);
276 // SfxProgress unterdruecken, wenn man Embedded ist
277 SW_MOD()->SetEmbeddedLoadSave(
278 SFX_CREATE_MODE_EMBEDDED
== GetCreateMode() );
280 pRdr
->GetDoc()->set(IDocumentSettingAccess::HTML_MODE
, ISA(SwWebDocShell
));
282 /* #106748# Restore the pool default if reading a saved document. */
283 pDoc
->RemoveAllFmtLanguageDependencies();
285 ULONG nErr
= pRdr
->Read( *pRead
);
287 // Evtl. ein altes Doc weg
288 if ( pDoc
!= pRdr
->GetDoc() )
292 pDoc
= pRdr
->GetDoc();
296 if ( !mxBasePool
.is() )
297 mxBasePool
= new SwDocStyleSheetPool( *pDoc
, SFX_CREATE_MODE_ORGANIZER
== GetCreateMode() );
305 SW_MOD()->SetEmbeddedLoadSave( FALSE
);
307 SetError( nErr
, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX
) ) );
308 BOOL bOk
= !IsError( nErr
);
310 // --> OD 2006-11-07 #i59688#
311 // // StartFinishedLoading rufen. Nicht bei asynchronen Filtern!
312 // // Diese muessen das selbst rufen!
313 // if( bOk && !pDoc->IsInLoadAsynchron() )
314 // StartLoadFinishedTimer();
315 if ( bOk
&& !pDoc
->IsInLoadAsynchron() )
321 pRead
->setSotStorageRef(pStg
); // #i45333# save sot storage ref in case of recursive calls
326 /*--------------------------------------------------------------------
327 Beschreibung: Sichern des Default-Formats, Stg vorhanden
328 --------------------------------------------------------------------*/
331 BOOL
SwDocShell::Save()
333 RTL_LOGFILE_CONTEXT_AUTHOR( aLog
, "SW", "JP93722", "SwDocShell::Save" );
334 //#i3370# remove quick help to prevent saving of autocorrection suggestions
336 pView
->GetEditWin().StopQuickHelp();
337 SwWait
aWait( *this, TRUE
);
339 CalcLayoutForOLEObjects(); // format for OLE objets
340 // --> OD 2006-03-17 #i62875#
341 // reset compatibility flag <DoNotCaptureDrawObjsOnPage>, if possible
342 if ( pWrtShell
&& pDoc
&&
343 pDoc
->get(IDocumentSettingAccess::DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE
) &&
344 docfunc::AllDrawObjsOnPage( *pDoc
) )
346 pDoc
->set(IDocumentSettingAccess::DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE
, false);
350 ULONG nErr
= ERR_SWG_WRITE_ERROR
, nVBWarning
= ERRCODE_NONE
;
351 if( SfxObjectShell::Save() )
353 switch( GetCreateMode() )
355 case SFX_CREATE_MODE_INTERNAL
:
359 case SFX_CREATE_MODE_ORGANIZER
:
362 ::GetXMLWriter( aEmptyStr
, GetMedium()->GetBaseURL( true ), xWrt
);
363 xWrt
->SetOrganizerMode( TRUE
);
364 SwWriter
aWrt( *GetMedium(), *pDoc
);
365 nErr
= aWrt
.Write( xWrt
);
366 xWrt
->SetOrganizerMode( FALSE
);
370 case SFX_CREATE_MODE_EMBEDDED
:
371 // SfxProgress unterdruecken, wenn man Embedded ist
372 SW_MOD()->SetEmbeddedLoadSave( TRUE
);
375 case SFX_CREATE_MODE_STANDARD
:
376 case SFX_CREATE_MODE_PREVIEW
:
379 if( pDoc
->ContainsMSVBasic() )
381 //TODO/MBA: it looks as that this code can be removed!
382 //SvxImportMSVBasic aTmp( *this, pIo->GetStorage() );
383 //aTmp.SaveOrDelMSVBAStorage( FALSE, aEmptyStr );
384 if( SvtFilterOptions::Get()->IsLoadWordBasicStorage() )
385 nVBWarning
= SvxImportMSVBasic::
386 GetSaveWarningOfMSVBAStorage( *this );
387 pDoc
->SetContainsMSVBasic( FALSE
);
390 // TabellenBox Edit beenden!
392 pWrtShell
->EndAllTblBoxEdit();
395 ::GetXMLWriter( aEmptyStr
, GetMedium()->GetBaseURL( true ), xWrt
);
397 BOOL
bLockedView(FALSE
);
400 bLockedView
= pWrtShell
->IsViewLocked();
401 pWrtShell
->LockView( TRUE
); //lock visible section
404 SwWriter
aWrt( *GetMedium(), *pDoc
);
405 nErr
= aWrt
.Write( xWrt
);
408 pWrtShell
->LockView( bLockedView
);
412 SW_MOD()->SetEmbeddedLoadSave( FALSE
);
414 SetError( nErr
? nErr
: nVBWarning
, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX
) ) );
416 SfxViewFrame
* pFrm
= pWrtShell
? pWrtShell
->GetView().GetViewFrame() : 0;
419 pFrm
->GetBindings().SetState( SfxStringItem( SID_DOC_MODIFIED
, ' ' ));
421 return !IsError( nErr
);
424 /*--------------------------------------------------------------------
425 Beschreibung: Sichern im Defaultformat
426 --------------------------------------------------------------------*/
429 sal_Bool
SwDocShell::SaveAs( SfxMedium
& rMedium
)
431 RTL_LOGFILE_CONTEXT_AUTHOR( aLog
, "SW", "JP93722", "SwDocShell::SaveAs" );
433 SwWait
aWait( *this, TRUE
);
434 //#i3370# remove quick help to prevent saving of autocorrection suggestions
436 pView
->GetEditWin().StopQuickHelp();
438 //#i91811# mod if we have an active margin window, write back the text
439 if (pView
&& pView
->GetPostItMgr() && pView
->GetPostItMgr()->GetActivePostIt())
440 pView
->GetPostItMgr()->GetActivePostIt()->UpdateData();
442 if( pDoc
->get(IDocumentSettingAccess::GLOBAL_DOCUMENT
) &&
443 !pDoc
->get(IDocumentSettingAccess::GLOBAL_DOCUMENT_SAVE_LINKS
) )
447 // Task 75666 - is the Document imported by our Microsoft-Filters?
448 const SfxFilter
* pOldFilter
= GetMedium()->GetFilter();
450 ( pOldFilter
->GetUserData().EqualsAscii( FILTER_WW8
) ||
451 pOldFilter
->GetUserData().EqualsAscii( "CWW6" ) ||
452 pOldFilter
->GetUserData().EqualsAscii( "WW6" ) ||
453 pOldFilter
->GetUserData().EqualsAscii( "WW1" ) ))
455 // when saving it in our own fileformat, then remove the template
456 // name from the docinfo.
457 uno::Reference
<document::XDocumentPropertiesSupplier
> xDPS(
458 GetModel(), uno::UNO_QUERY_THROW
);
459 uno::Reference
<document::XDocumentProperties
> xDocProps
460 = xDPS
->getDocumentProperties();
461 xDocProps
->setTemplateName(::rtl::OUString::createFromAscii(""));
462 xDocProps
->setTemplateURL(::rtl::OUString::createFromAscii(""));
463 xDocProps
->setTemplateDate(::util::DateTime());
467 CalcLayoutForOLEObjects(); // format for OLE objets
468 // --> OD 2006-03-17 #i62875#
469 // reset compatibility flag <DoNotCaptureDrawObjsOnPage>, if possible
470 if ( pWrtShell
&& pDoc
&&
471 pDoc
->get(IDocumentSettingAccess::DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE
) &&
472 docfunc::AllDrawObjsOnPage( *pDoc
) )
474 pDoc
->set(IDocumentSettingAccess::DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE
, false);
478 ULONG nErr
= ERR_SWG_WRITE_ERROR
, nVBWarning
= ERRCODE_NONE
;
479 uno::Reference
< embed::XStorage
> xStor
= rMedium
.GetOutputStorage();
480 if( SfxObjectShell::SaveAs( rMedium
) )
482 if( GetDoc()->get(IDocumentSettingAccess::GLOBAL_DOCUMENT
) && !ISA( SwGlobalDocShell
) )
484 // This is to set the correct class id if SaveAs is
485 // called from SwDoc::SplitDoc to save a normal doc as
486 // global doc. In this case, SaveAs is called at a
487 // normal doc shell, therefore, SfxInplaceObject::SaveAs
488 // will set the wrong class id.
489 SvGlobalName aClassName
;
490 String aAppName
, aLongUserName
, aUserName
;
491 SfxObjectShellRef xDocSh
=
492 new SwGlobalDocShell( SFX_CREATE_MODE_INTERNAL
);
493 // the global document can not be a template
494 xDocSh
->SetupStorage( xStor
, SotStorage::GetVersion( xStor
), sal_False
);
499 // TabellenBox Edit beenden!
501 pWrtShell
->EndAllTblBoxEdit();
503 // Modified-Flag merken und erhalten ohne den Link zu Callen
504 // (fuer OLE; nach Anweisung von MM)
505 BOOL bIsModified
= pDoc
->IsModified();
506 SwUndoNoModifiedPosition aOldPos
= pDoc
->getUndoNoModifiedPosition();
507 Link
aOldOLELnk( pDoc
->GetOle2Link() );
508 pDoc
->SetOle2Link( Link() );
510 // SfxProgress unterdruecken, wenn man Embedded ist
511 SW_MOD()->SetEmbeddedLoadSave(
512 SFX_CREATE_MODE_EMBEDDED
== GetCreateMode() );
515 ::GetXMLWriter( aEmptyStr
, rMedium
.GetBaseURL( true ), xWrt
);
517 BOOL
bLockedView(FALSE
);
520 bLockedView
= pWrtShell
->IsViewLocked();
521 pWrtShell
->LockView( TRUE
); //lock visible section
524 SwWriter
aWrt( rMedium
, *pDoc
);
525 nErr
= aWrt
.Write( xWrt
);
528 pWrtShell
->LockView( bLockedView
);
533 pDoc
->setUndoNoModifiedPosition( aOldPos
);
535 pDoc
->SetOle2Link( aOldOLELnk
);
537 SW_MOD()->SetEmbeddedLoadSave( FALSE
);
539 SetError( nErr
? nErr
: nVBWarning
, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX
) ) );
541 return !IsError( nErr
);
544 /*--------------------------------------------------------------------
545 Beschreibung: Sichern aller Formate
546 --------------------------------------------------------------------*/
547 SwSrcView
* lcl_GetSourceView( SwDocShell
* pSh
)
549 // sind wir in der SourceView?
550 SfxViewFrame
* pVFrame
= SfxViewFrame::GetFirst( pSh
);
551 SfxViewShell
* pViewShell
= pVFrame
? pVFrame
->GetViewShell() : 0;
552 return PTR_CAST( SwSrcView
, pViewShell
);
555 BOOL
SwDocShell::ConvertTo( SfxMedium
& rMedium
)
557 RTL_LOGFILE_CONTEXT_AUTHOR( aLog
, "SW", "JP93722", "SwDocShell::ConvertTo" );
558 const SfxFilter
* pFlt
= rMedium
.GetFilter();
563 SwReaderWriter::GetWriter( pFlt
->GetUserData(), rMedium
.GetBaseURL( true ), xWriter
);
565 { // Der Filter ist nicht vorhanden
567 SW_RESSTR(STR_DLLNOTFOUND
) ).Execute();
571 //#i3370# remove quick help to prevent saving of autocorrection suggestions
573 pView
->GetEditWin().StopQuickHelp();
575 //#i91811# mod if we have an active margin window, write back the text
576 if (pView
&& pView
->GetPostItMgr() && pView
->GetPostItMgr()->GetActivePostIt())
577 pView
->GetPostItMgr()->GetActivePostIt()->UpdateData();
579 ULONG nVBWarning
= 0;
581 if( pDoc
->ContainsMSVBasic() )
583 BOOL bSave
= pFlt
->GetUserData().EqualsAscii( "CWW8" )
584 && SvtFilterOptions::Get()->IsLoadWordBasicStorage();
588 SvStorageRef xStg
= new SotStorage( rMedium
.GetOutStream(), FALSE
);
589 DBG_ASSERT( !xStg
->GetError(), "No storage available for storing VBA macros!" );
590 if ( !xStg
->GetError() )
592 SvxImportMSVBasic
aTmp( *this, *xStg
);
593 nVBWarning
= aTmp
.SaveOrDelMSVBAStorage( bSave
, String::CreateFromAscii("Macros") );
595 pDoc
->SetContainsMSVBasic( TRUE
);
600 // TabellenBox Edit beenden!
602 pWrtShell
->EndAllTblBoxEdit();
604 if( pFlt
->GetUserData().EqualsAscii( "HTML") )
606 SvxHtmlOptions
* pHtmlOpt
= SvxHtmlOptions::Get();
607 if( !pHtmlOpt
->IsStarBasic() && pHtmlOpt
->IsStarBasicWarning() && HasBasic() )
609 uno::Reference
< XLibraryContainer
> xLibCont(GetBasicContainer(), UNO_QUERY
);
610 uno::Reference
< XNameAccess
> xLib
;
611 Sequence
<rtl::OUString
> aNames
= xLibCont
->getElementNames();
612 const rtl::OUString
* pNames
= aNames
.getConstArray();
613 for(sal_Int32 nLib
= 0; nLib
< aNames
.getLength(); nLib
++)
615 Any aLib
= xLibCont
->getByName(pNames
[nLib
]);
619 Sequence
<rtl::OUString
> aModNames
= xLib
->getElementNames();
620 if(aModNames
.getLength())
622 SetError(WARN_SWG_HTML_NO_MACROS
, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX
) ) );
628 UpdateDocInfoForSave();
631 // --> FME 2007-5-7 #i76360# Update document statistics
632 SwDocStat
aDocStat( pDoc
->GetDocStat() );;
633 pDoc
->UpdateDocStat( aDocStat
);
635 CalcLayoutForOLEObjects(); // format for OLE objets
636 // --> OD 2006-03-17 #i62875#
637 // reset compatibility flag <DoNotCaptureDrawObjsOnPage>, if possible
638 if ( pWrtShell
&& pDoc
&&
639 pDoc
->get(IDocumentSettingAccess::DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE
) &&
640 docfunc::AllDrawObjsOnPage( *pDoc
) )
642 pDoc
->set(IDocumentSettingAccess::DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE
, false);
646 if( xWriter
->IsStgWriter() &&
647 ( /*xWriter->IsSw3Writer() ||*/
648 pFlt
->GetUserData().EqualsAscii( FILTER_XML
) ||
649 pFlt
->GetUserData().EqualsAscii( FILTER_XMLV
) ||
650 pFlt
->GetUserData().EqualsAscii( FILTER_XMLVW
) ) )
652 // eigenen Typ ermitteln
654 if( ISA( SwWebDocShell
) )
656 else if( ISA( SwGlobalDocShell
) )
659 // gewuenschten Typ ermitteln
661 ULONG nSaveClipId
= pFlt
->GetFormat();
662 if( SOT_FORMATSTR_ID_STARWRITERWEB_8
== nSaveClipId
||
663 SOT_FORMATSTR_ID_STARWRITERWEB_60
== nSaveClipId
||
664 SOT_FORMATSTR_ID_STARWRITERWEB_50
== nSaveClipId
||
665 SOT_FORMATSTR_ID_STARWRITERWEB_40
== nSaveClipId
)
667 else if( SOT_FORMATSTR_ID_STARWRITERGLOB_8
== nSaveClipId
||
668 SOT_FORMATSTR_ID_STARWRITERGLOB_60
== nSaveClipId
||
669 SOT_FORMATSTR_ID_STARWRITERGLOB_50
== nSaveClipId
||
670 SOT_FORMATSTR_ID_STARWRITERGLOB_40
== nSaveClipId
)
673 // Flags am Dokument entsprechend umsetzen
674 BOOL bIsHTMLModeSave
= GetDoc()->get(IDocumentSettingAccess::HTML_MODE
);
675 BOOL bIsGlobalDocSave
= GetDoc()->get(IDocumentSettingAccess::GLOBAL_DOCUMENT
);
676 BOOL bIsGlblDocSaveLinksSave
= GetDoc()->get(IDocumentSettingAccess::GLOBAL_DOCUMENT_SAVE_LINKS
);
677 if( nMyType
!= nSaveType
)
679 GetDoc()->set(IDocumentSettingAccess::HTML_MODE
, 1 == nSaveType
);
680 GetDoc()->set(IDocumentSettingAccess::GLOBAL_DOCUMENT
, 2 == nSaveType
);
682 GetDoc()->set(IDocumentSettingAccess::GLOBAL_DOCUMENT_SAVE_LINKS
, false);
685 // if the target format is storage based, then the output storage must be already created
686 if ( rMedium
.IsStorage() )
688 // set MediaType on target storage
689 // (MediaType will be queried during SaveAs)
693 uno::Reference
< beans::XPropertySet
> xSet( rMedium
.GetStorage(), uno::UNO_QUERY
);
695 xSet
->setPropertyValue( ::rtl::OUString::createFromAscii("MediaType"), uno::makeAny( ::rtl::OUString( SotExchange::GetFormatMimeType( nSaveClipId
) ) ) );
697 catch ( uno::Exception
& )
702 // Jetzt das Dokument normal speichern
703 BOOL bRet
= SaveAs( rMedium
);
705 if( nMyType
!= nSaveType
)
707 GetDoc()->set(IDocumentSettingAccess::HTML_MODE
, bIsHTMLModeSave
);
708 GetDoc()->set(IDocumentSettingAccess::GLOBAL_DOCUMENT
, bIsGlobalDocSave
);
709 GetDoc()->set(IDocumentSettingAccess::GLOBAL_DOCUMENT_SAVE_LINKS
, bIsGlblDocSaveLinksSave
);
712 if( bRet
&& nMyType
!= nSaveType
)
714 SvGlobalName aClassName
;
715 String aAppName
, aLongUserName
, aUserName
;
716 SfxObjectShellRef xDocSh
;
720 xDocSh
= new SwDocShell( SFX_CREATE_MODE_INTERNAL
);
723 xDocSh
= new SwWebDocShell( SFX_CREATE_MODE_INTERNAL
);
726 xDocSh
= new SwGlobalDocShell( SFX_CREATE_MODE_INTERNAL
);
734 if( pFlt
->GetUserData().EqualsAscii( FILTER_TEXT_DLG
) &&
735 ( pWrtShell
|| !::lcl_GetSourceView( this ) ))
739 const SfxItemSet
* pSet
;
740 const SfxPoolItem
* pItem
;
741 if( 0 != ( pSet
= rMedium
.GetItemSet() ) )
743 if( SFX_ITEM_SET
== pSet
->GetItemState( SID_FILE_FILTEROPTIONS
,
745 sItemOpt
= ((const SfxStringItem
*)pItem
)->GetValue();
748 aOpt
.ReadUserData( sItemOpt
);
750 xWriter
->SetAsciiOptions( aOpt
);
753 // SfxProgress unterdruecken, wenn man Embedded ist
754 SW_MOD()->SetEmbeddedLoadSave(
755 SFX_CREATE_MODE_EMBEDDED
== GetCreateMode());
757 // Kontext aufspannen, um die Anzeige der Selektion zu unterbinden
759 String
aFileName( rMedium
.GetName() );
761 //Keine View also das ganze Dokument!
764 SwWait
aWait( *this, TRUE
);
765 pWrtShell
->StartAllAction();
767 SwWriter
aWrt( rMedium
, *pWrtShell
, TRUE
);
768 nErrno
= aWrt
.Write( xWriter
, &aFileName
);
769 //JP 16.05.97: falls der SFX uns die View waehrend des speicherns
773 pWrtShell
->Pop(FALSE
);
774 pWrtShell
->EndAllAction();
779 // sind wir in der SourceView?
780 SwSrcView
* pSrcView
= ::lcl_GetSourceView( this );
783 pSrcView
->SaveContentTo(rMedium
);
788 SwWriter
aWrt( rMedium
, *pDoc
);
789 nErrno
= aWrt
.Write( xWriter
, &aFileName
);
793 SW_MOD()->SetEmbeddedLoadSave( FALSE
);
794 SetError( nErrno
? nErrno
: nVBWarning
, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX
) ) );
795 if( !rMedium
.IsStorage() )
796 rMedium
.CloseOutStream();
798 return !IsError( nErrno
);
801 /*--------------------------------------------------------------------
802 Beschreibung: Haende weg
803 --------------------------------------------------------------------*/
806 /*--------------------------------------------------------------------
807 Beschreibung: ??? noch nicht zu aktivieren, muss TRUE liefern
808 --------------------------------------------------------------------*/
811 sal_Bool
SwDocShell::SaveCompleted( const uno::Reference
< embed::XStorage
>& xStor
)
813 RTL_LOGFILE_CONTEXT_AUTHOR( aLog
, "SW", "JP93722", "SwDocShell::SaveCompleted" );
814 BOOL bRet
= SfxObjectShell::SaveCompleted( xStor
);
817 // erst hier entscheiden, ob das Speichern geklappt hat oder nicht
821 pDoc
->ResetModified();
826 BOOL bResetModified
= IsEnableSetModified();
828 EnableSetModified( FALSE
);
830 uno::Sequence
< rtl::OUString
> aNames
= pOLEChildList
->GetObjectNames();
831 for( sal_Int32 n
= aNames
.getLength(); n
; n
-- )
833 if ( !pOLEChildList
->MoveEmbeddedObject( aNames
[n
-1], GetEmbeddedObjectContainer() ) )
835 DBG_ERROR( "Copying of objects didn't work!" );
838 //SvPersist* pPersist = this;
839 //SvInfoObjectRef aRef( pInfList->GetObject( --n ));
840 //pPersist->Move( &aRef, aRef->GetStorageName() );
843 DELETEZ( pOLEChildList
);
845 EnableSetModified( TRUE
);
850 /*--------------------------------------------------------------------
851 Beschreibung: Draw()-Overload fuer OLE2 (Sfx)
852 --------------------------------------------------------------------*/
854 void SwDocShell::Draw( OutputDevice
* pDev
, const JobSetup
& rSetup
,
857 //fix #25341# Draw sollte das Modified nicht beeinflussen
859 if ( TRUE
== (bResetModified
= IsEnableSetModified()) )
860 EnableSetModified( FALSE
);
862 //sollte am Document ein JobSetup haengen, dann kopieren wir uns diesen,
863 //um nach dem PrtOle2 diesen wieder am Doc zu verankern.
864 //Einen leeren JobSetup setzen wir nicht ein, denn der wuerde nur zu
865 //fragwuerdigem Ergebnis nach teurer Neuformatierung fuehren (Preview!)
867 if ( rSetup
.GetPrinterName().Len() && ASPECT_THUMBNAIL
!= nAspect
)
869 pOrig
= const_cast<JobSetup
*>(pDoc
->getJobsetup());
870 if( pOrig
) // dann kopieren wir uns den
871 pOrig
= new JobSetup( *pOrig
);
872 pDoc
->setJobsetup( rSetup
);
875 Rectangle
aRect( nAspect
== ASPECT_THUMBNAIL
?
876 GetVisArea( nAspect
) : GetVisArea( ASPECT_CONTENT
) );
879 pDev
->SetFillColor();
880 pDev
->SetLineColor();
881 pDev
->SetBackground();
882 BOOL bWeb
= 0 != PTR_CAST(SwWebDocShell
, this);
883 SwPrtOptions
aOpts( aEmptyStr
);
884 ViewShell::PrtOle2( pDoc
, SW_MOD()->GetUsrPref(bWeb
), aOpts
, pDev
, aRect
);
889 pDoc
->setJobsetup( *pOrig
);
892 if ( bResetModified
)
893 EnableSetModified( TRUE
);
897 void SwDocShell::SetVisArea( const Rectangle
&rRect
)
899 Rectangle
aRect( rRect
);
902 Size
aSz( pView
->GetDocSz() );
903 aSz
.Width() += DOCUMENTBORDER
; aSz
.Height() += DOCUMENTBORDER
;
904 long nMoveX
= 0, nMoveY
= 0;
905 if ( aRect
.Right() > aSz
.Width() )
906 nMoveX
= aSz
.Width() - aRect
.Right();
907 if ( aRect
.Bottom() > aSz
.Height() )
908 nMoveY
= aSz
.Height() - aRect
.Bottom();
909 aRect
.Move( nMoveX
, nMoveY
);
910 nMoveX
= aRect
.Left() < 0 ? -aRect
.Left() : 0;
911 nMoveY
= aRect
.Top() < 0 ? -aRect
.Top() : 0;
912 aRect
.Move( nMoveX
, nMoveY
);
914 //Ruft das SfxInPlaceObject::SetVisArea()!
915 pView
->SetVisArea( aRect
, TRUE
);
918 SfxObjectShell::SetVisArea( aRect
);
922 Rectangle
SwDocShell::GetVisArea( USHORT nAspect
) const
924 if ( nAspect
== ASPECT_THUMBNAIL
)
926 //PreView: VisArea auf die erste Seite einstellen.
927 SwNodeIndex
aIdx( pDoc
->GetNodes().GetEndOfExtras(), 1 );
928 SwCntntNode
* pNd
= pDoc
->GetNodes().GoNext( &aIdx
);
930 const SwRect aPageRect
= pNd
->FindPageFrmRect( FALSE
, 0, FALSE
);
931 return aPageRect
.SVRect();
933 // Why does this have to be that complicated? I replaced this by the
934 // call of FindPageFrmRect():
936 //PageDesc besorgen, vom ersten Absatz oder den default.
937 const SwFmtPageDesc &rDesc = pNd->GetSwAttrSet().GetPageDesc();
938 const SwPageDesc* pDesc = rDesc.GetPageDesc();
940 pDesc = &const_cast<const SwDoc *>(pDoc)->GetPageDesc( 0 );
942 //Das Format wird evtl. von der virtuellen Seitennummer bestimmt.
943 const USHORT nPgNum = rDesc.GetNumOffset();
944 const BOOL bOdd = nPgNum % 2 ? TRUE : FALSE;
945 const SwFrmFmt *pFmt = bOdd ? pDesc->GetRightFmt() : pDesc->GetLeftFmt();
946 if ( !pFmt ) //#40568#
947 pFmt = bOdd ? pDesc->GetLeftFmt() : pDesc->GetRightFmt();
949 if ( pFmt->GetFrmSize().GetWidth() == LONG_MAX )
950 //Jetzt wird es aber Zeit fuer die Initialisierung
951 pDoc->getPrinter( true );
953 const SwFmtFrmSize& rFrmSz = pFmt->GetFrmSize();
954 const Size aSz( rFrmSz.GetWidth(), rFrmSz.GetHeight() );
955 const Point aPt( DOCUMENTBORDER, DOCUMENTBORDER );
956 const Rectangle aRect( aPt, aSz );
959 return SfxObjectShell::GetVisArea( nAspect
);
962 Printer
*SwDocShell::GetDocumentPrinter()
964 return pDoc
->getPrinter( false );
967 OutputDevice
* SwDocShell::GetDocumentRefDev()
969 return pDoc
->getReferenceDevice( false );
972 void SwDocShell::OnDocumentPrinterChanged( Printer
* pNewPrinter
)
975 GetDoc()->setJobsetup( pNewPrinter
->GetJobSetup() );
977 GetDoc()->setPrinter( 0, true, true );
980 ULONG
SwDocShell::GetMiscStatus() const
982 return SVOBJ_MISCSTATUS_RESIZEONPRINTERCHANGE
;
985 // --> FME 2004-08-05 #i20883# Digital Signatures and Encryption
986 sal_uInt16
SwDocShell::GetHiddenInformationState( sal_uInt16 nStates
)
988 // get global state like HIDDENINFORMATION_DOCUMENTVERSIONS
989 sal_uInt16 nState
= SfxObjectShell::GetHiddenInformationState( nStates
);
991 if ( nStates
& HIDDENINFORMATION_RECORDEDCHANGES
)
993 if ( GetDoc()->GetRedlineTbl().Count() )
994 nState
|= HIDDENINFORMATION_RECORDEDCHANGES
;
996 if ( nStates
& HIDDENINFORMATION_NOTES
)
998 ASSERT( GetWrtShell(), "No SwWrtShell, no information" )
1001 SwFieldType
* pType
= GetWrtShell()->GetFldType( RES_POSTITFLD
, aEmptyStr
);
1002 SwClientIter
aIter( *pType
);
1003 SwClient
* pFirst
= aIter
.GoStart();
1006 if( static_cast<SwFmtFld
*>(pFirst
)->GetTxtFld() &&
1007 static_cast<SwFmtFld
*>(pFirst
)->IsFldInDoc() )
1009 nState
|= HIDDENINFORMATION_NOTES
;
1022 /*--------------------------------------------------------------------
1024 --------------------------------------------------------------------*/
1027 void SwDocShell::GetState(SfxItemSet
& rSet
)
1029 SfxWhichIter
aIter(rSet
);
1030 USHORT nWhich
= aIter
.FirstWhich();
1036 // MT: MakroChosser immer enablen, weil Neu moeglich
1037 // case SID_BASICCHOOSER:
1039 // StarBASIC* pBasic = GetBasic();
1040 // StarBASIC* pAppBasic = SFX_APP()->GetBasic();
1041 // if ( !(pBasic->GetModules()->Count() ||
1042 // pAppBasic->GetModules()->Count()) )
1043 // rSet.DisableItem(nWhich);
1046 case SID_PRINTPREVIEW
:
1048 BOOL bDisable
= IsInPlaceActive();
1051 SfxViewFrame
*pTmpFrm
= SfxViewFrame::GetFirst(this);
1052 while (pTmpFrm
) // Preview suchen
1054 if ( PTR_CAST(SwView
, pTmpFrm
->GetViewShell()) &&
1055 ((SwView
*)pTmpFrm
->GetViewShell())->GetWrtShell().getIDocumentSettingAccess()->get(IDocumentSettingAccess::BROWSE_MODE
))
1060 pTmpFrm
= pTmpFrm
->GetNext(*pTmpFrm
, this);
1064 rSet
.DisableItem( SID_PRINTPREVIEW
);
1067 SfxBoolItem
aBool( SID_PRINTPREVIEW
, FALSE
);
1068 if( PTR_CAST( SwPagePreView
, SfxViewShell::Current()) )
1069 aBool
.SetValue( TRUE
);
1074 case SID_SOURCEVIEW
:
1076 SfxViewShell
* pCurrView
= GetView() ? (SfxViewShell
*)GetView()
1077 : SfxViewShell::Current();
1078 BOOL bSourceView
= 0 != PTR_CAST(SwSrcView
, pCurrView
);
1079 rSet
.Put(SfxBoolItem(SID_SOURCEVIEW
, bSourceView
));
1083 rSet
.Put(SfxUInt16Item(SID_HTML_MODE
, ::GetHtmlMode(this)));
1086 case FN_ABSTRACT_STARIMPRESS
:
1087 case FN_OUTLINE_TO_IMPRESS
:
1089 SvtModuleOptions aMOpt
;
1090 if ( !aMOpt
.IsImpress() )
1091 rSet
.DisableItem( nWhich
);
1094 case FN_ABSTRACT_NEWDOC
:
1095 case FN_OUTLINE_TO_CLIPBOARD
:
1097 if ( !GetDoc()->GetNodes().GetOutLineNds().Count() )
1098 rSet
.DisableItem( nWhich
);
1101 case SID_BROWSER_MODE
:
1102 case FN_PRINT_LAYOUT
:
1104 sal_Bool bState
= GetDoc()->get(IDocumentSettingAccess::BROWSE_MODE
);
1105 if(FN_PRINT_LAYOUT
== nWhich
)
1107 rSet
.Put( SfxBoolItem( nWhich
, bState
));
1111 case FN_NEW_GLOBAL_DOC
:
1112 if ( ISA(SwGlobalDocShell
) )
1113 rSet
.DisableItem( nWhich
);
1116 case FN_NEW_HTML_DOC
:
1117 if( ISA( SwWebDocShell
) )
1118 rSet
.DisableItem( nWhich
);
1121 case SID_ATTR_YEAR2000
:
1123 const SvNumberFormatter
* pFmtr
= pDoc
->GetNumberFormatter(FALSE
);
1124 rSet
.Put( SfxUInt16Item( nWhich
,
1125 static_cast< sal_uInt16
>(
1126 pFmtr
? pFmtr
->GetYear2000()
1127 : SFX_APP()->GetMiscConfig()->GetYear2000() )));
1130 case SID_ATTR_CHAR_FONTLIST
:
1132 rSet
.Put( SvxFontListItem( pFontList
, SID_ATTR_CHAR_FONTLIST
) );
1136 default: DBG_ASSERT(!this,"Hier darfst Du nicht hinein!");
1139 nWhich
= aIter
.NextWhich();
1143 /*--------------------------------------------------------------------
1144 Beschreibung: OLE-Hdls
1145 --------------------------------------------------------------------*/
1148 IMPL_LINK( SwDocShell
, Ole2ModifiedHdl
, void *, p
)
1150 // vom Doc wird der Status mitgegeben (siehe doc.cxx)
1151 // Bit 0: -> alter Zustand
1152 // Bit 1: -> neuer Zustand
1153 long nStatus
= (long)p
;
1154 if( IsEnableSetModified() )
1155 SetModified( (nStatus
& 2) ? TRUE
: FALSE
);
1159 /*--------------------------------------------------------------------
1160 Beschreibung: Pool returnen Hier weil virtuelll
1161 --------------------------------------------------------------------*/
1164 SfxStyleSheetBasePool
* SwDocShell::GetStyleSheetPool()
1166 return mxBasePool
.get();
1170 void SwDocShell::SetView(SwView
* pVw
)
1172 if ( 0 != (pView
= pVw
) )
1173 pWrtShell
= &pView
->GetWrtShell();
1179 void SwDocShell::PrepareReload()
1181 ::DelAllGrfCacheEntries( pDoc
);
1184 // --> OD 2006-11-07 #i59688#
1185 // linked graphics are now loaded on demand.
1186 // Thus, loading of linked graphics no longer needed and necessary for
1187 // the load of document being finished.
1188 void SwDocShell::LoadingFinished()
1190 // --> OD 2007-10-08 #i38810#
1191 // Original fix fails after integration of cws xmlsec11:
1192 // interface <SfxObjectShell::EnableSetModified(..)> no longer works, because
1193 // <SfxObjectShell::FinishedLoading(..)> doesn't care about its status and
1194 // enables the document modification again.
1195 // Thus, manuell modify the document, if its modified and its links are updated
1196 // before <FinishedLoading(..)> is called.
1197 const bool bHasDocToStayModified( pDoc
->IsModified() && pDoc
->LinksUpdated() );
1198 // // --> OD 2005-02-11 #i38810# - disable method <SetModified(..)>, if document
1199 // // has stay in modified state, due to the update of its links during load.
1200 // bool bResetEnableSetModified(false);
1201 // if ( IsEnableSetModified() &&
1202 // pDoc->IsModified() && pDoc->LinksUpdated() )
1204 // EnableSetModified( FALSE );
1205 // bResetEnableSetModified = true;
1208 FinishedLoading( SFX_LOADED_ALL
);
1209 // // --> OD 2005-02-11 #i38810#
1210 // if ( bResetEnableSetModified )
1212 // EnableSetModified( TRUE );
1215 SfxViewFrame
* pVFrame
= SfxViewFrame::GetFirst(this);
1218 SfxViewShell
* pShell
= pVFrame
->GetViewShell();
1219 if(PTR_CAST(SwSrcView
, pShell
))
1220 ((SwSrcView
*)pShell
)->Load(this);
1223 // --> OD 2007-10-08 #i38810#
1224 if ( bHasDocToStayModified
&& !pDoc
->IsModified() )
1226 pDoc
->SetModified();
1231 // eine Uebertragung wird abgebrochen (wird aus dem SFX gerufen)
1232 void SwDocShell::CancelTransfers()
1234 // alle Links vom LinkManager Canceln
1235 aFinishedTimer
.Stop();
1236 pDoc
->GetLinkManager().CancelTransfers();
1237 SfxObjectShell::CancelTransfers();
1240 SwFEShell
* SwDocShell::GetFEShell()
1245 void SwDocShell::RemoveOLEObjects()
1247 SwClientIter
aIter( *(SwModify
*)pDoc
->GetDfltGrfFmtColl() );
1248 for( SwCntntNode
* pNd
= (SwCntntNode
*)aIter
.First( TYPE( SwCntntNode
) );
1249 pNd
; pNd
= (SwCntntNode
*)aIter
.Next() )
1251 SwOLENode
* pOLENd
= pNd
->GetOLENode();
1252 if( pOLENd
&& ( pOLENd
->IsOLEObjectDeleted() ||
1253 pOLENd
->IsInGlobalDocSection() ) )
1255 if( !pOLEChildList
)
1256 pOLEChildList
= new comphelper::EmbeddedObjectContainer
;
1258 ::rtl::OUString aObjName
= pOLENd
->GetOLEObj().GetCurrentPersistName();
1259 GetEmbeddedObjectContainer().MoveEmbeddedObject( aObjName
, *pOLEChildList
);
1264 // When a document is loaded, SwDoc::PrtOLENotify is called to update
1265 // the sizes of math objects. However, for objects that do not have a
1266 // SwFrm at this time, only a flag is set (bIsOLESizeInvalid) and the
1267 // size change takes place later, while calculating the layout in the
1268 // idle handler. If this document is saved now, it is saved with invalid
1269 // sizes. For this reason, the layout has to be calculated before a document is
1270 // saved, but of course only id there are OLE objects with bOLESizeInvalid set.
1271 void SwDocShell::CalcLayoutForOLEObjects()
1276 SwClientIter
aIter( *(SwModify
*)pDoc
->GetDfltGrfFmtColl() );
1277 for( SwCntntNode
* pNd
= (SwCntntNode
*)aIter
.First( TYPE( SwCntntNode
) );
1278 pNd
; pNd
= (SwCntntNode
*)aIter
.Next() )
1280 SwOLENode
* pOLENd
= pNd
->GetOLENode();
1281 if( pOLENd
&& pOLENd
->IsOLESizeInvalid() )
1283 pWrtShell
->CalcLayout();
1290 // --> FME 2005-02-25 #i42634# Overwrites SfxObjectShell::UpdateLinks
1291 // This new function is necessary to trigger update of links in docs
1292 // read by the binary filter:
1293 void SwDocShell::UpdateLinks()
1295 GetDoc()->UpdateLinks(TRUE
);
1296 // --> FME 2005-07-27 #i50703# Update footnote numbers
1297 SwTxtFtn::SetUniqueSeqRefNo( *GetDoc() );
1298 SwNodeIndex
aTmp( GetDoc()->GetNodes() );
1299 GetDoc()->GetFtnIdxs().UpdateFtn( aTmp
);
1303 uno::Reference
< frame::XController
>
1304 SwDocShell::GetController()
1306 ::com::sun::star::uno::Reference
< ::com::sun::star::frame::XController
> aRet
;
1307 // --> FME 2007-10-15 #i82346# No view in page preview
1310 aRet
= GetView()->GetController();
1314 /* -----------------------------12.02.01 12:08--------------------------------
1316 ---------------------------------------------------------------------------*/
1317 static const char* pEventNames
[] =
1319 "OnPageCountChange",
1321 "OnMailMergeFinished",
1323 "OnFieldMergeFinished",
1327 Sequence
< OUString
> SwDocShell::GetEventNames()
1329 Sequence
< OUString
> aRet
= SfxObjectShell::GetEventNames();
1330 sal_Int32 nLen
= aRet
.getLength();
1331 aRet
.realloc(nLen
+ 6);
1332 OUString
* pNames
= aRet
.getArray();
1333 pNames
[nLen
++] = GetEventName(0);
1334 pNames
[nLen
++] = GetEventName(1);
1335 pNames
[nLen
++] = GetEventName(2);
1336 pNames
[nLen
++] = GetEventName(3);
1337 pNames
[nLen
++] = GetEventName(4);
1338 pNames
[nLen
] = GetEventName(5);
1343 static sal_Int32 nEvents
=13;
1345 rtl::OUString
SwDocShell::GetEventName( sal_Int32 nIndex
)
1347 if ( nIndex
<nEvents
)
1348 return ::rtl::OUString::createFromAscii(pEventNames
[nIndex
]);
1349 return rtl::OUString();
1352 const ::sfx2::IXmlIdRegistry
* SwDocShell::GetXmlIdRegistry() const
1354 return pDoc
? &pDoc
->GetXmlIdRegistry() : 0;