1efeef26fSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file 5efeef26fSAndrew Rist * distributed with this work for additional information 6efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the 8efeef26fSAndrew Rist * "License"); you may not use this file except in compliance 9efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at 10efeef26fSAndrew Rist * 11efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12efeef26fSAndrew Rist * 13efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing, 14efeef26fSAndrew Rist * software distributed under the License is distributed on an 15efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16efeef26fSAndrew Rist * KIND, either express or implied. See the License for the 17efeef26fSAndrew Rist * specific language governing permissions and limitations 18efeef26fSAndrew Rist * under the License. 19efeef26fSAndrew Rist * 20efeef26fSAndrew Rist *************************************************************/ 21efeef26fSAndrew Rist 22efeef26fSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_sw.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include <hintids.hxx> 28cdf0e10cSrcweir #include <rtl/logfile.hxx> 29cdf0e10cSrcweir #include <vcl/msgbox.hxx> 30cdf0e10cSrcweir #include <vcl/svapp.hxx> 31cdf0e10cSrcweir #include <vcl/wrkwin.hxx> 32cdf0e10cSrcweir #include <vcl/jobset.hxx> 33cdf0e10cSrcweir #include <tools/urlobj.hxx> 34cdf0e10cSrcweir #include <svl/whiter.hxx> 35cdf0e10cSrcweir #include <svl/zforlist.hxx> 36cdf0e10cSrcweir #include <svl/eitem.hxx> 37cdf0e10cSrcweir #include <svl/stritem.hxx> 38cdf0e10cSrcweir #include <svl/PasswordHelper.hxx> 39cdf0e10cSrcweir #include <editeng/adjitem.hxx> 40cdf0e10cSrcweir #include <basic/sbx.hxx> 41cdf0e10cSrcweir #include <unotools/moduleoptions.hxx> 42cdf0e10cSrcweir #include <unotools/misccfg.hxx> 43cdf0e10cSrcweir #include <sfx2/request.hxx> 44cdf0e10cSrcweir #include <sfx2/passwd.hxx> 45cdf0e10cSrcweir #include <sfx2/bindings.hxx> 46cdf0e10cSrcweir #include <sfx2/docfile.hxx> 47cdf0e10cSrcweir #include <sfx2/evntconf.hxx> 48cdf0e10cSrcweir #include <sfx2/docfilt.hxx> 49cdf0e10cSrcweir #include <sfx2/printer.hxx> 50cdf0e10cSrcweir #include <sfx2/linkmgr.hxx> 51cdf0e10cSrcweir #include <svl/srchitem.hxx> 52cdf0e10cSrcweir #include <editeng/flstitem.hxx> 53cdf0e10cSrcweir #include <svx/htmlmode.hxx> 54cdf0e10cSrcweir #include <svtools/soerr.hxx> 55cdf0e10cSrcweir #include <sot/clsids.hxx> 56cdf0e10cSrcweir #include <basic/basmgr.hxx> 57cdf0e10cSrcweir #include <basic/sbmod.hxx> 58cdf0e10cSrcweir #include <swevent.hxx> 59cdf0e10cSrcweir #include <fmtpdsc.hxx> 60cdf0e10cSrcweir #include <fmtfsize.hxx> 61cdf0e10cSrcweir #include <fmtfld.hxx> 62cdf0e10cSrcweir #include <node.hxx> 63cdf0e10cSrcweir #include <swwait.hxx> 64cdf0e10cSrcweir #include <printdata.hxx> 65cdf0e10cSrcweir #include <frmatr.hxx> 66cdf0e10cSrcweir #include <view.hxx> // fuer die aktuelle Sicht 67cdf0e10cSrcweir #include <edtwin.hxx> 68cdf0e10cSrcweir #include <PostItMgr.hxx> 69cdf0e10cSrcweir #include <wrtsh.hxx> // Verbindung zur Core 70cdf0e10cSrcweir #include <docsh.hxx> // Dokumenterzeugung 71cdf0e10cSrcweir #include <basesh.hxx> 72cdf0e10cSrcweir #include <viewopt.hxx> 73cdf0e10cSrcweir #include <wdocsh.hxx> 74cdf0e10cSrcweir #include <swmodule.hxx> 75cdf0e10cSrcweir #include <globdoc.hxx> 76cdf0e10cSrcweir #include <usrpref.hxx> 77cdf0e10cSrcweir #include <shellio.hxx> // I/O 78cdf0e10cSrcweir #include <docstyle.hxx> 79cdf0e10cSrcweir #include <doc.hxx> 8025cebbc8SOliver-Rainer Wittmann #include <unotxdoc.hxx> 81cdf0e10cSrcweir #include <IDocumentUndoRedo.hxx> 82cdf0e10cSrcweir #include <docstat.hxx> 83cdf0e10cSrcweir #include <pagedesc.hxx> 84cdf0e10cSrcweir #include <pview.hxx> 85cdf0e10cSrcweir #include <mdiexp.hxx> 86cdf0e10cSrcweir #include <swbaslnk.hxx> 87cdf0e10cSrcweir #include <srcview.hxx> 88cdf0e10cSrcweir #include <ndindex.hxx> 89cdf0e10cSrcweir #include <ndole.hxx> 90cdf0e10cSrcweir #include <swcli.hxx> 91cdf0e10cSrcweir #include <txtftn.hxx> 92cdf0e10cSrcweir #include <ftnidx.hxx> 93cdf0e10cSrcweir #include <fldbas.hxx> 94cdf0e10cSrcweir #include <docary.hxx> 95cdf0e10cSrcweir #include <swerror.h> // Fehlermeldungen 96cdf0e10cSrcweir #include <helpid.h> 97cdf0e10cSrcweir #include <cmdid.h> 98cdf0e10cSrcweir #include <globals.hrc> 99cdf0e10cSrcweir #include <app.hrc> 100cdf0e10cSrcweir 101cdf0e10cSrcweir #include <cfgid.h> 102cdf0e10cSrcweir #include <unotools/moduleoptions.hxx> 103cdf0e10cSrcweir #include <unotools/fltrcfg.hxx> 104cdf0e10cSrcweir #include <svtools/htmlcfg.hxx> 105cdf0e10cSrcweir #include <sfx2/fcontnr.hxx> 106ca62e2c2SSteve Yin #include <sfx2/viewfrm.hxx> 107cdf0e10cSrcweir #include <sfx2/objface.hxx> 108cdf0e10cSrcweir #include <comphelper/storagehelper.hxx> 109cdf0e10cSrcweir 110cdf0e10cSrcweir #define SwDocShell 111cdf0e10cSrcweir #include <sfx2/msg.hxx> 112cdf0e10cSrcweir #include <swslots.hxx> 113cdf0e10cSrcweir #include <com/sun/star/document/UpdateDocMode.hpp> 114cdf0e10cSrcweir 115cdf0e10cSrcweir #include <com/sun/star/document/XDocumentProperties.hpp> 116cdf0e10cSrcweir #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp> 117cdf0e10cSrcweir 118cdf0e10cSrcweir #include <unomid.h> 119cdf0e10cSrcweir 120cdf0e10cSrcweir #include <sfx2/Metadatable.hxx> 121cdf0e10cSrcweir #include <switerator.hxx> 122cdf0e10cSrcweir 123cdf0e10cSrcweir using rtl::OUString; 124cdf0e10cSrcweir using namespace ::com::sun::star; 125cdf0e10cSrcweir using namespace ::com::sun::star::uno; 126cdf0e10cSrcweir using namespace ::com::sun::star::script; 127cdf0e10cSrcweir using namespace ::com::sun::star::container; 128cdf0e10cSrcweir 129cdf0e10cSrcweir 130cdf0e10cSrcweir SFX_IMPL_INTERFACE( SwDocShell, SfxObjectShell, SW_RES(0) ) 131cdf0e10cSrcweir { 132cdf0e10cSrcweir SFX_CHILDWINDOW_REGISTRATION( SID_HYPERLINK_INSERT ); 133cdf0e10cSrcweir } 134cdf0e10cSrcweir 135cdf0e10cSrcweir TYPEINIT2(SwDocShell, SfxObjectShell, SfxListener); 136cdf0e10cSrcweir 137cdf0e10cSrcweir //------------------------------------------------------------------------- 138cdf0e10cSrcweir SFX_IMPL_OBJECTFACTORY(SwDocShell, SvGlobalName(SO3_SW_CLASSID), SFXOBJECTSHELL_STD_NORMAL|SFXOBJECTSHELL_HASMENU, "swriter" ) 139cdf0e10cSrcweir 140cdf0e10cSrcweir /*-------------------------------------------------------------------- 141cdf0e10cSrcweir Beschreibung: Laden vorbereiten 142cdf0e10cSrcweir --------------------------------------------------------------------*/ 143cdf0e10cSrcweir 144cdf0e10cSrcweir 145cdf0e10cSrcweir Reader* SwDocShell::StartConvertFrom(SfxMedium& rMedium, SwReader** ppRdr, 146cdf0e10cSrcweir SwCrsrShell *pCrsrShell, 147cdf0e10cSrcweir SwPaM* pPaM ) 148cdf0e10cSrcweir { 149cdf0e10cSrcweir sal_Bool bAPICall = sal_False; 150cdf0e10cSrcweir const SfxPoolItem* pApiItem; 151cdf0e10cSrcweir const SfxItemSet* pMedSet; 152cdf0e10cSrcweir if( 0 != ( pMedSet = rMedium.GetItemSet() ) && SFX_ITEM_SET == 153cdf0e10cSrcweir pMedSet->GetItemState( FN_API_CALL, sal_True, &pApiItem ) ) 154cdf0e10cSrcweir bAPICall = ((const SfxBoolItem*)pApiItem)->GetValue(); 155cdf0e10cSrcweir 156cdf0e10cSrcweir const SfxFilter* pFlt = rMedium.GetFilter(); 157cdf0e10cSrcweir if( !pFlt ) 158cdf0e10cSrcweir { 159cdf0e10cSrcweir if(!bAPICall) 160cdf0e10cSrcweir { 161cdf0e10cSrcweir InfoBox( 0, SW_RESSTR(STR_CANTOPEN)).Execute(); 162cdf0e10cSrcweir } 163cdf0e10cSrcweir return 0; 164cdf0e10cSrcweir } 165cdf0e10cSrcweir String aFileName( rMedium.GetName() ); 166cdf0e10cSrcweir SwRead pRead = SwReaderWriter::GetReader( pFlt->GetUserData() ); 167cdf0e10cSrcweir if( !pRead ) 168cdf0e10cSrcweir return 0; 169cdf0e10cSrcweir 170cdf0e10cSrcweir if( rMedium.IsStorage() 171cdf0e10cSrcweir ? SW_STORAGE_READER & pRead->GetReaderType() 172cdf0e10cSrcweir : SW_STREAM_READER & pRead->GetReaderType() ) 173cdf0e10cSrcweir { 174cdf0e10cSrcweir *ppRdr = pPaM ? new SwReader( rMedium, aFileName, *pPaM ) : 175cdf0e10cSrcweir pCrsrShell ? 176cdf0e10cSrcweir new SwReader( rMedium, aFileName, *pCrsrShell->GetCrsr() ) 177baef7ff7SOliver-Rainer Wittmann : new SwReader( rMedium, aFileName, mpDoc ); 178cdf0e10cSrcweir } 179cdf0e10cSrcweir else 180cdf0e10cSrcweir return 0; 181cdf0e10cSrcweir 182cdf0e10cSrcweir // PassWord Checken 183cdf0e10cSrcweir String aPasswd; 184cdf0e10cSrcweir if ((*ppRdr)->NeedsPasswd( *pRead )) 185cdf0e10cSrcweir { 186cdf0e10cSrcweir if(!bAPICall) 187cdf0e10cSrcweir { 188cdf0e10cSrcweir SfxPasswordDialog* pPasswdDlg = 189cdf0e10cSrcweir new SfxPasswordDialog( 0 ); 190cdf0e10cSrcweir if(RET_OK == pPasswdDlg->Execute()) 191cdf0e10cSrcweir aPasswd = pPasswdDlg->GetPassword(); 192cdf0e10cSrcweir } 193cdf0e10cSrcweir else 194cdf0e10cSrcweir { 195cdf0e10cSrcweir const SfxItemSet* pSet = rMedium.GetItemSet(); 196cdf0e10cSrcweir const SfxPoolItem *pPassItem; 197cdf0e10cSrcweir if(pSet && SFX_ITEM_SET == pSet->GetItemState(SID_PASSWORD, sal_True, &pPassItem)) 198cdf0e10cSrcweir aPasswd = ((const SfxStringItem *)pPassItem)->GetValue(); 199cdf0e10cSrcweir } 200cdf0e10cSrcweir 201cdf0e10cSrcweir if (!(*ppRdr)->CheckPasswd( aPasswd, *pRead )) 202cdf0e10cSrcweir { 203cdf0e10cSrcweir InfoBox( 0, SW_RES(MSG_ERROR_PASSWD)).Execute(); 204cdf0e10cSrcweir delete *ppRdr; 205cdf0e10cSrcweir return 0; 206cdf0e10cSrcweir } 207cdf0e10cSrcweir } 208cdf0e10cSrcweir 209cdf0e10cSrcweir // #i30171# set the UpdateDocMode at the SwDocShell 210cdf0e10cSrcweir SFX_ITEMSET_ARG( rMedium.GetItemSet(), pUpdateDocItem, SfxUInt16Item, SID_UPDATEDOCMODE, sal_False); 211baef7ff7SOliver-Rainer Wittmann mnUpdateDocMode = pUpdateDocItem ? pUpdateDocItem->GetValue() : document::UpdateDocMode::NO_UPDATE; 212cdf0e10cSrcweir 213cdf0e10cSrcweir if( pFlt->GetDefaultTemplate().Len() ) 214cdf0e10cSrcweir pRead->SetTemplateName( pFlt->GetDefaultTemplate() ); 215cdf0e10cSrcweir 216cdf0e10cSrcweir if( pRead == ReadAscii && 0 != rMedium.GetInStream() && 217cdf0e10cSrcweir pFlt->GetUserData().EqualsAscii( FILTER_TEXT_DLG ) ) 218cdf0e10cSrcweir { 219cdf0e10cSrcweir SwAsciiOptions aOpt; 220cdf0e10cSrcweir const SfxItemSet* pSet; 221cdf0e10cSrcweir const SfxPoolItem* pItem; 222cdf0e10cSrcweir if( 0 != ( pSet = rMedium.GetItemSet() ) && SFX_ITEM_SET == 223cdf0e10cSrcweir pSet->GetItemState( SID_FILE_FILTEROPTIONS, sal_True, &pItem ) ) 224cdf0e10cSrcweir aOpt.ReadUserData( ((const SfxStringItem*)pItem)->GetValue() ); 225cdf0e10cSrcweir 226cdf0e10cSrcweir if( pRead ) 227cdf0e10cSrcweir pRead->GetReaderOpt().SetASCIIOpts( aOpt ); 228cdf0e10cSrcweir } 229cdf0e10cSrcweir 230cdf0e10cSrcweir return pRead; 231cdf0e10cSrcweir } 232cdf0e10cSrcweir 233cdf0e10cSrcweir /*-------------------------------------------------------------------- 234cdf0e10cSrcweir Beschreibung: Laden 235cdf0e10cSrcweir --------------------------------------------------------------------*/ 236cdf0e10cSrcweir 237cdf0e10cSrcweir sal_Bool SwDocShell::ConvertFrom( SfxMedium& rMedium ) 238cdf0e10cSrcweir { 239cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLog, "SW", "JP93722", "SwDocShell::ConvertFrom" ); 240cdf0e10cSrcweir 241cdf0e10cSrcweir SwReader* pRdr; 242cdf0e10cSrcweir SwRead pRead = StartConvertFrom(rMedium, &pRdr); 243cdf0e10cSrcweir if (!pRead) 244cdf0e10cSrcweir return sal_False; // #129881# return if no reader is found 245cdf0e10cSrcweir SotStorageRef pStg=pRead->getSotStorageRef(); // #i45333# save sot storage ref in case of recursive calls 246cdf0e10cSrcweir 2478ef2f12bSOliver-Rainer Wittmann SwWait aWait( *this, true ); 248cdf0e10cSrcweir 249cdf0e10cSrcweir // SfxProgress unterdruecken, wenn man Embedded ist 250cdf0e10cSrcweir SW_MOD()->SetEmbeddedLoadSave( 251cdf0e10cSrcweir SFX_CREATE_MODE_EMBEDDED == GetCreateMode() ); 252cdf0e10cSrcweir 253cdf0e10cSrcweir pRdr->GetDoc()->set(IDocumentSettingAccess::HTML_MODE, ISA(SwWebDocShell)); 254cdf0e10cSrcweir 255baef7ff7SOliver-Rainer Wittmann // Restore the pool default if reading a saved document. 256baef7ff7SOliver-Rainer Wittmann mpDoc->RemoveAllFmtLanguageDependencies(); 257cdf0e10cSrcweir 258cdf0e10cSrcweir sal_uLong nErr = pRdr->Read( *pRead ); 259cdf0e10cSrcweir 260cdf0e10cSrcweir // Evtl. ein altes Doc weg 261baef7ff7SOliver-Rainer Wittmann if ( mpDoc != pRdr->GetDoc() ) 262cdf0e10cSrcweir { 263baef7ff7SOliver-Rainer Wittmann if( mpDoc ) 264cdf0e10cSrcweir RemoveLink(); 265baef7ff7SOliver-Rainer Wittmann mpDoc = pRdr->GetDoc(); 266cdf0e10cSrcweir 267cdf0e10cSrcweir AddLink(); 268cdf0e10cSrcweir 269cdf0e10cSrcweir if ( !mxBasePool.is() ) 270baef7ff7SOliver-Rainer Wittmann mxBasePool = new SwDocStyleSheetPool( *mpDoc, SFX_CREATE_MODE_ORGANIZER == GetCreateMode() ); 271cdf0e10cSrcweir } 272cdf0e10cSrcweir 273cdf0e10cSrcweir UpdateFontList(); 274baef7ff7SOliver-Rainer Wittmann InitDrawModelAndDocShell(this, mpDoc ? mpDoc->GetDrawModel() : 0); 275cdf0e10cSrcweir 276cdf0e10cSrcweir delete pRdr; 277cdf0e10cSrcweir 278cdf0e10cSrcweir SW_MOD()->SetEmbeddedLoadSave( sal_False ); 279cdf0e10cSrcweir 280cdf0e10cSrcweir SetError( nErr, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ) ); 281cdf0e10cSrcweir sal_Bool bOk = !IsError( nErr ); 282cdf0e10cSrcweir 283baef7ff7SOliver-Rainer Wittmann if ( bOk && !mpDoc->IsInLoadAsynchron() ) 284cdf0e10cSrcweir { 285cdf0e10cSrcweir LoadingFinished(); 286cdf0e10cSrcweir } 287cdf0e10cSrcweir 288cdf0e10cSrcweir pRead->setSotStorageRef(pStg); // #i45333# save sot storage ref in case of recursive calls 289cdf0e10cSrcweir 290cdf0e10cSrcweir return bOk; 291cdf0e10cSrcweir } 292cdf0e10cSrcweir 293baef7ff7SOliver-Rainer Wittmann 294baef7ff7SOliver-Rainer Wittmann void SwDocShell::BeforeLoading( SfxMedium&, const ::rtl::OUString &, const ::rtl::OUString & ) 295baef7ff7SOliver-Rainer Wittmann { 296baef7ff7SOliver-Rainer Wittmann if ( mpDoc == NULL ) 297baef7ff7SOliver-Rainer Wittmann { 298baef7ff7SOliver-Rainer Wittmann return; 299baef7ff7SOliver-Rainer Wittmann } 300baef7ff7SOliver-Rainer Wittmann 301baef7ff7SOliver-Rainer Wittmann mpDoc->RemoveAllFmtLanguageDependencies(); 302baef7ff7SOliver-Rainer Wittmann } 303baef7ff7SOliver-Rainer Wittmann 304cdf0e10cSrcweir /*-------------------------------------------------------------------- 305cdf0e10cSrcweir Beschreibung: Sichern des Default-Formats, Stg vorhanden 306cdf0e10cSrcweir --------------------------------------------------------------------*/ 307cdf0e10cSrcweir 308cdf0e10cSrcweir 309cdf0e10cSrcweir sal_Bool SwDocShell::Save() 310cdf0e10cSrcweir { 311cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLog, "SW", "JP93722", "SwDocShell::Save" ); 312cdf0e10cSrcweir //#i3370# remove quick help to prevent saving of autocorrection suggestions 313baef7ff7SOliver-Rainer Wittmann if(mpView) 314baef7ff7SOliver-Rainer Wittmann mpView->GetEditWin().StopQuickHelp(); 3158ef2f12bSOliver-Rainer Wittmann SwWait aWait( *this, true ); 316cdf0e10cSrcweir 317cdf0e10cSrcweir CalcLayoutForOLEObjects(); // format for OLE objets 318cdf0e10cSrcweir // --> OD 2006-03-17 #i62875# 319cdf0e10cSrcweir // reset compatibility flag <DoNotCaptureDrawObjsOnPage>, if possible 320baef7ff7SOliver-Rainer Wittmann if ( mpWrtShell && mpDoc && 321baef7ff7SOliver-Rainer Wittmann mpDoc->get(IDocumentSettingAccess::DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE) && 322baef7ff7SOliver-Rainer Wittmann docfunc::AllDrawObjsOnPage( *mpDoc ) ) 323cdf0e10cSrcweir { 324baef7ff7SOliver-Rainer Wittmann mpDoc->set(IDocumentSettingAccess::DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE, false); 325cdf0e10cSrcweir } 326cdf0e10cSrcweir // <-- 327cdf0e10cSrcweir 328cdf0e10cSrcweir sal_uLong nErr = ERR_SWG_WRITE_ERROR, nVBWarning = ERRCODE_NONE; 329cdf0e10cSrcweir if( SfxObjectShell::Save() ) 330cdf0e10cSrcweir { 331cdf0e10cSrcweir switch( GetCreateMode() ) 332cdf0e10cSrcweir { 333cdf0e10cSrcweir case SFX_CREATE_MODE_INTERNAL: 334cdf0e10cSrcweir nErr = 0; 335cdf0e10cSrcweir break; 336cdf0e10cSrcweir 337cdf0e10cSrcweir case SFX_CREATE_MODE_ORGANIZER: 338cdf0e10cSrcweir { 339cdf0e10cSrcweir WriterRef xWrt; 340cdf0e10cSrcweir ::GetXMLWriter( aEmptyStr, GetMedium()->GetBaseURL( true ), xWrt ); 341cdf0e10cSrcweir xWrt->SetOrganizerMode( sal_True ); 342baef7ff7SOliver-Rainer Wittmann SwWriter aWrt( *GetMedium(), *mpDoc ); 343cdf0e10cSrcweir nErr = aWrt.Write( xWrt ); 344cdf0e10cSrcweir xWrt->SetOrganizerMode( sal_False ); 345cdf0e10cSrcweir } 346cdf0e10cSrcweir break; 347cdf0e10cSrcweir 348cdf0e10cSrcweir case SFX_CREATE_MODE_EMBEDDED: 349cdf0e10cSrcweir // SfxProgress unterdruecken, wenn man Embedded ist 350cdf0e10cSrcweir SW_MOD()->SetEmbeddedLoadSave( sal_True ); 351cdf0e10cSrcweir // kein break; 352cdf0e10cSrcweir 353cdf0e10cSrcweir case SFX_CREATE_MODE_STANDARD: 354cdf0e10cSrcweir case SFX_CREATE_MODE_PREVIEW: 355cdf0e10cSrcweir default: 356cdf0e10cSrcweir { 357baef7ff7SOliver-Rainer Wittmann if( mpDoc->ContainsMSVBasic() ) 358cdf0e10cSrcweir { 359cdf0e10cSrcweir //TODO/MBA: it looks as that this code can be removed! 360cdf0e10cSrcweir //SvxImportMSVBasic aTmp( *this, pIo->GetStorage() ); 361cdf0e10cSrcweir //aTmp.SaveOrDelMSVBAStorage( sal_False, aEmptyStr ); 362cdf0e10cSrcweir if( SvtFilterOptions::Get()->IsLoadWordBasicStorage() ) 363cdf0e10cSrcweir nVBWarning = GetSaveWarningOfMSVBAStorage( (SfxObjectShell&) (*this) ); 364baef7ff7SOliver-Rainer Wittmann mpDoc->SetContainsMSVBasic( sal_False ); 365cdf0e10cSrcweir } 366cdf0e10cSrcweir 367cdf0e10cSrcweir // TabellenBox Edit beenden! 368baef7ff7SOliver-Rainer Wittmann if( mpWrtShell ) 369baef7ff7SOliver-Rainer Wittmann mpWrtShell->EndAllTblBoxEdit(); 370cdf0e10cSrcweir 371cdf0e10cSrcweir WriterRef xWrt; 372cdf0e10cSrcweir ::GetXMLWriter( aEmptyStr, GetMedium()->GetBaseURL( true ), xWrt ); 373cdf0e10cSrcweir 374cdf0e10cSrcweir sal_Bool bLockedView(sal_False); 375baef7ff7SOliver-Rainer Wittmann if ( mpWrtShell ) 376cdf0e10cSrcweir { 377baef7ff7SOliver-Rainer Wittmann bLockedView = mpWrtShell->IsViewLocked(); 378baef7ff7SOliver-Rainer Wittmann mpWrtShell->LockView( sal_True ); //lock visible section 379cdf0e10cSrcweir } 380cdf0e10cSrcweir 381baef7ff7SOliver-Rainer Wittmann SwWriter aWrt( *GetMedium(), *mpDoc ); 382cdf0e10cSrcweir nErr = aWrt.Write( xWrt ); 383cdf0e10cSrcweir 384baef7ff7SOliver-Rainer Wittmann if ( mpWrtShell ) 385baef7ff7SOliver-Rainer Wittmann mpWrtShell->LockView( bLockedView ); 386cdf0e10cSrcweir } 387cdf0e10cSrcweir break; 388cdf0e10cSrcweir } 389cdf0e10cSrcweir SW_MOD()->SetEmbeddedLoadSave( sal_False ); 390cdf0e10cSrcweir } 391cdf0e10cSrcweir SetError( nErr ? nErr : nVBWarning, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ) ); 392cdf0e10cSrcweir 393baef7ff7SOliver-Rainer Wittmann SfxViewFrame* pFrm = mpWrtShell ? mpWrtShell->GetView().GetViewFrame() : 0; 394cdf0e10cSrcweir if( pFrm ) 395cdf0e10cSrcweir { 396cdf0e10cSrcweir pFrm->GetBindings().SetState( SfxStringItem( SID_DOC_MODIFIED, ' ' )); 397cdf0e10cSrcweir } 398cdf0e10cSrcweir return !IsError( nErr ); 399cdf0e10cSrcweir } 400cdf0e10cSrcweir 401cdf0e10cSrcweir /*-------------------------------------------------------------------- 402cdf0e10cSrcweir Beschreibung: Sichern im Defaultformat 403cdf0e10cSrcweir --------------------------------------------------------------------*/ 404cdf0e10cSrcweir 405cdf0e10cSrcweir 406cdf0e10cSrcweir sal_Bool SwDocShell::SaveAs( SfxMedium& rMedium ) 407cdf0e10cSrcweir { 408cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLog, "SW", "JP93722", "SwDocShell::SaveAs" ); 409cdf0e10cSrcweir 410baef7ff7SOliver-Rainer Wittmann mpDoc->setDocAccTitle(String()); 411ca62e2c2SSteve Yin SfxViewFrame* pFrame1 = SfxViewFrame::GetFirst( this ); 412ca62e2c2SSteve Yin if (pFrame1) 413ca62e2c2SSteve Yin { 414ca62e2c2SSteve Yin Window* pWindow = &pFrame1->GetWindow(); 415ca62e2c2SSteve Yin if ( pWindow ) 416ca62e2c2SSteve Yin { 417ca62e2c2SSteve Yin Window* pSysWin = pWindow->GetSystemWindow(); 418ca62e2c2SSteve Yin if ( pSysWin ) 419ca62e2c2SSteve Yin { 420ca62e2c2SSteve Yin pSysWin->SetAccessibleName(String()); 421ca62e2c2SSteve Yin } 422ca62e2c2SSteve Yin } 423ca62e2c2SSteve Yin } 4248ef2f12bSOliver-Rainer Wittmann SwWait aWait( *this, true ); 425cdf0e10cSrcweir //#i3370# remove quick help to prevent saving of autocorrection suggestions 426baef7ff7SOliver-Rainer Wittmann if(mpView) 427baef7ff7SOliver-Rainer Wittmann mpView->GetEditWin().StopQuickHelp(); 428cdf0e10cSrcweir 429cdf0e10cSrcweir //#i91811# mod if we have an active margin window, write back the text 430baef7ff7SOliver-Rainer Wittmann if ( mpView && 431baef7ff7SOliver-Rainer Wittmann mpView->GetPostItMgr() && 432baef7ff7SOliver-Rainer Wittmann mpView->GetPostItMgr()->HasActiveSidebarWin() ) 433cdf0e10cSrcweir { 434baef7ff7SOliver-Rainer Wittmann mpView->GetPostItMgr()->UpdateDataOnActiveSidebarWin(); 435cdf0e10cSrcweir } 436cdf0e10cSrcweir 437baef7ff7SOliver-Rainer Wittmann if( mpDoc->get(IDocumentSettingAccess::GLOBAL_DOCUMENT) && 438baef7ff7SOliver-Rainer Wittmann !mpDoc->get(IDocumentSettingAccess::GLOBAL_DOCUMENT_SAVE_LINKS) ) 439cdf0e10cSrcweir RemoveOLEObjects(); 440cdf0e10cSrcweir 441cdf0e10cSrcweir { 442cdf0e10cSrcweir // Task 75666 - is the Document imported by our Microsoft-Filters? 443cdf0e10cSrcweir const SfxFilter* pOldFilter = GetMedium()->GetFilter(); 444cdf0e10cSrcweir if( pOldFilter && 445cdf0e10cSrcweir ( pOldFilter->GetUserData().EqualsAscii( FILTER_WW8 ) || 446cdf0e10cSrcweir pOldFilter->GetUserData().EqualsAscii( "CWW6" ) || 447cdf0e10cSrcweir pOldFilter->GetUserData().EqualsAscii( "WW6" ) || 448cdf0e10cSrcweir pOldFilter->GetUserData().EqualsAscii( "WW1" ) )) 449cdf0e10cSrcweir { 450cdf0e10cSrcweir // when saving it in our own fileformat, then remove the template 451cdf0e10cSrcweir // name from the docinfo. 452cdf0e10cSrcweir uno::Reference<document::XDocumentPropertiesSupplier> xDPS( 453cdf0e10cSrcweir GetModel(), uno::UNO_QUERY_THROW); 454cdf0e10cSrcweir uno::Reference<document::XDocumentProperties> xDocProps 455cdf0e10cSrcweir = xDPS->getDocumentProperties(); 456cdf0e10cSrcweir xDocProps->setTemplateName(::rtl::OUString::createFromAscii("")); 457cdf0e10cSrcweir xDocProps->setTemplateURL(::rtl::OUString::createFromAscii("")); 458cdf0e10cSrcweir xDocProps->setTemplateDate(::util::DateTime()); 459cdf0e10cSrcweir } 460cdf0e10cSrcweir } 461cdf0e10cSrcweir 462cdf0e10cSrcweir CalcLayoutForOLEObjects(); // format for OLE objets 463cdf0e10cSrcweir // --> OD 2006-03-17 #i62875# 464cdf0e10cSrcweir // reset compatibility flag <DoNotCaptureDrawObjsOnPage>, if possible 465baef7ff7SOliver-Rainer Wittmann if ( mpWrtShell && mpDoc && 466baef7ff7SOliver-Rainer Wittmann mpDoc->get(IDocumentSettingAccess::DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE) && 467baef7ff7SOliver-Rainer Wittmann docfunc::AllDrawObjsOnPage( *mpDoc ) ) 468cdf0e10cSrcweir { 469baef7ff7SOliver-Rainer Wittmann mpDoc->set(IDocumentSettingAccess::DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE, false); 470cdf0e10cSrcweir } 471cdf0e10cSrcweir // <-- 472cdf0e10cSrcweir 473cdf0e10cSrcweir sal_uLong nErr = ERR_SWG_WRITE_ERROR, nVBWarning = ERRCODE_NONE; 474cdf0e10cSrcweir uno::Reference < embed::XStorage > xStor = rMedium.GetOutputStorage(); 475cdf0e10cSrcweir if( SfxObjectShell::SaveAs( rMedium ) ) 476cdf0e10cSrcweir { 477cdf0e10cSrcweir if( GetDoc()->get(IDocumentSettingAccess::GLOBAL_DOCUMENT) && !ISA( SwGlobalDocShell ) ) 478cdf0e10cSrcweir { 479cdf0e10cSrcweir // This is to set the correct class id if SaveAs is 480cdf0e10cSrcweir // called from SwDoc::SplitDoc to save a normal doc as 481cdf0e10cSrcweir // global doc. In this case, SaveAs is called at a 482cdf0e10cSrcweir // normal doc shell, therefore, SfxInplaceObject::SaveAs 483cdf0e10cSrcweir // will set the wrong class id. 484cdf0e10cSrcweir SvGlobalName aClassName; 485cdf0e10cSrcweir String aAppName, aLongUserName, aUserName; 486cdf0e10cSrcweir 487cdf0e10cSrcweir // The document is closed explicitly, but using SfxObjectShellLock is still more correct here 488cdf0e10cSrcweir SfxObjectShellLock xDocSh = 489cdf0e10cSrcweir new SwGlobalDocShell( SFX_CREATE_MODE_INTERNAL ); 490cdf0e10cSrcweir // the global document can not be a template 491cdf0e10cSrcweir xDocSh->SetupStorage( xStor, SotStorage::GetVersion( xStor ), sal_False ); 492cdf0e10cSrcweir xDocSh->DoClose(); 493cdf0e10cSrcweir } 494cdf0e10cSrcweir 495baef7ff7SOliver-Rainer Wittmann if( mpDoc->ContainsMSVBasic() ) 496cdf0e10cSrcweir { 497cdf0e10cSrcweir //TODO/MBA: it looks as that this code can be removed! 498cdf0e10cSrcweir //SvxImportMSVBasic aTmp( *this, pIo->GetStorage() ); 499cdf0e10cSrcweir //aTmp.SaveOrDelMSVBAStorage( sal_False, aEmptyStr ); 500cdf0e10cSrcweir if( SvtFilterOptions::Get()->IsLoadWordBasicStorage() ) 501cdf0e10cSrcweir nVBWarning = GetSaveWarningOfMSVBAStorage( (SfxObjectShell&) *this ); 502baef7ff7SOliver-Rainer Wittmann mpDoc->SetContainsMSVBasic( sal_False ); 503cdf0e10cSrcweir } 504cdf0e10cSrcweir 505cdf0e10cSrcweir // TabellenBox Edit beenden! 506baef7ff7SOliver-Rainer Wittmann if( mpWrtShell ) 507baef7ff7SOliver-Rainer Wittmann mpWrtShell->EndAllTblBoxEdit(); 508cdf0e10cSrcweir 509cdf0e10cSrcweir // Modified-Flag merken und erhalten ohne den Link zu Callen 510cdf0e10cSrcweir // (fuer OLE; nach Anweisung von MM) 511baef7ff7SOliver-Rainer Wittmann sal_Bool bIsModified = mpDoc->IsModified(); 512baef7ff7SOliver-Rainer Wittmann mpDoc->GetIDocumentUndoRedo().LockUndoNoModifiedPosition(); 513baef7ff7SOliver-Rainer Wittmann Link aOldOLELnk( mpDoc->GetOle2Link() ); 514baef7ff7SOliver-Rainer Wittmann mpDoc->SetOle2Link( Link() ); 515cdf0e10cSrcweir 516cdf0e10cSrcweir // SfxProgress unterdruecken, wenn man Embedded ist 517cdf0e10cSrcweir SW_MOD()->SetEmbeddedLoadSave( 518cdf0e10cSrcweir SFX_CREATE_MODE_EMBEDDED == GetCreateMode() ); 519cdf0e10cSrcweir 520cdf0e10cSrcweir WriterRef xWrt; 521cdf0e10cSrcweir ::GetXMLWriter( aEmptyStr, rMedium.GetBaseURL( true ), xWrt ); 522cdf0e10cSrcweir 523cdf0e10cSrcweir sal_Bool bLockedView(sal_False); 524baef7ff7SOliver-Rainer Wittmann if ( mpWrtShell ) 525cdf0e10cSrcweir { 526baef7ff7SOliver-Rainer Wittmann bLockedView = mpWrtShell->IsViewLocked(); 527baef7ff7SOliver-Rainer Wittmann mpWrtShell->LockView( sal_True ); //lock visible section 528cdf0e10cSrcweir } 529cdf0e10cSrcweir 530baef7ff7SOliver-Rainer Wittmann SwWriter aWrt( rMedium, *mpDoc ); 531cdf0e10cSrcweir nErr = aWrt.Write( xWrt ); 532cdf0e10cSrcweir 533baef7ff7SOliver-Rainer Wittmann if ( mpWrtShell ) 534baef7ff7SOliver-Rainer Wittmann mpWrtShell->LockView( bLockedView ); 535cdf0e10cSrcweir 536cdf0e10cSrcweir if( bIsModified ) 537cdf0e10cSrcweir { 538baef7ff7SOliver-Rainer Wittmann mpDoc->SetModified(); 539baef7ff7SOliver-Rainer Wittmann mpDoc->GetIDocumentUndoRedo().UnLockUndoNoModifiedPosition(); 540cdf0e10cSrcweir } 541baef7ff7SOliver-Rainer Wittmann mpDoc->SetOle2Link( aOldOLELnk ); 542cdf0e10cSrcweir 543cdf0e10cSrcweir SW_MOD()->SetEmbeddedLoadSave( sal_False ); 544cdf0e10cSrcweir } 545cdf0e10cSrcweir SetError( nErr ? nErr : nVBWarning, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ) ); 546cdf0e10cSrcweir 547cdf0e10cSrcweir return !IsError( nErr ); 548cdf0e10cSrcweir } 549cdf0e10cSrcweir 550cdf0e10cSrcweir /*-------------------------------------------------------------------- 551cdf0e10cSrcweir Beschreibung: Sichern aller Formate 552cdf0e10cSrcweir --------------------------------------------------------------------*/ 553cdf0e10cSrcweir SwSrcView* lcl_GetSourceView( SwDocShell* pSh ) 554cdf0e10cSrcweir { 555cdf0e10cSrcweir // sind wir in der SourceView? 556cdf0e10cSrcweir SfxViewFrame* pVFrame = SfxViewFrame::GetFirst( pSh ); 557cdf0e10cSrcweir SfxViewShell* pViewShell = pVFrame ? pVFrame->GetViewShell() : 0; 558cdf0e10cSrcweir return PTR_CAST( SwSrcView, pViewShell); 559cdf0e10cSrcweir } 560cdf0e10cSrcweir 561cdf0e10cSrcweir sal_Bool SwDocShell::ConvertTo( SfxMedium& rMedium ) 562cdf0e10cSrcweir { 563cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLog, "SW", "JP93722", "SwDocShell::ConvertTo" ); 564cdf0e10cSrcweir const SfxFilter* pFlt = rMedium.GetFilter(); 565cdf0e10cSrcweir if( !pFlt ) 566cdf0e10cSrcweir return sal_False; 567cdf0e10cSrcweir 568cdf0e10cSrcweir WriterRef xWriter; 569cdf0e10cSrcweir SwReaderWriter::GetWriter( pFlt->GetUserData(), rMedium.GetBaseURL( true ), xWriter ); 570cdf0e10cSrcweir if( !xWriter.Is() ) 571cdf0e10cSrcweir { // Der Filter ist nicht vorhanden 572cdf0e10cSrcweir InfoBox( 0, 573cdf0e10cSrcweir SW_RESSTR(STR_DLLNOTFOUND) ).Execute(); 574cdf0e10cSrcweir return sal_False; 575cdf0e10cSrcweir } 576cdf0e10cSrcweir 577cdf0e10cSrcweir //#i3370# remove quick help to prevent saving of autocorrection suggestions 578baef7ff7SOliver-Rainer Wittmann if(mpView) 579baef7ff7SOliver-Rainer Wittmann mpView->GetEditWin().StopQuickHelp(); 580cdf0e10cSrcweir 581cdf0e10cSrcweir //#i91811# mod if we have an active margin window, write back the text 582baef7ff7SOliver-Rainer Wittmann if ( mpView && 583baef7ff7SOliver-Rainer Wittmann mpView->GetPostItMgr() && 584baef7ff7SOliver-Rainer Wittmann mpView->GetPostItMgr()->HasActiveSidebarWin() ) 585cdf0e10cSrcweir { 586baef7ff7SOliver-Rainer Wittmann mpView->GetPostItMgr()->UpdateDataOnActiveSidebarWin(); 587cdf0e10cSrcweir } 588cdf0e10cSrcweir 589cdf0e10cSrcweir sal_uLong nVBWarning = 0; 590cdf0e10cSrcweir 591baef7ff7SOliver-Rainer Wittmann if( mpDoc->ContainsMSVBasic() ) 592cdf0e10cSrcweir { 593cdf0e10cSrcweir sal_Bool bSave = pFlt->GetUserData().EqualsAscii( "CWW8" ) 594cdf0e10cSrcweir && SvtFilterOptions::Get()->IsLoadWordBasicStorage(); 595cdf0e10cSrcweir 596cdf0e10cSrcweir if ( bSave ) 597cdf0e10cSrcweir { 598cdf0e10cSrcweir SvStorageRef xStg = new SotStorage( rMedium.GetOutStream(), sal_False ); 599cdf0e10cSrcweir DBG_ASSERT( !xStg->GetError(), "No storage available for storing VBA macros!" ); 600cdf0e10cSrcweir if ( !xStg->GetError() ) 601cdf0e10cSrcweir { 602cdf0e10cSrcweir nVBWarning = SaveOrDelMSVBAStorage( (SfxObjectShell&) *this, *xStg, bSave, String::CreateFromAscii("Macros") ); 603cdf0e10cSrcweir xStg->Commit(); 604baef7ff7SOliver-Rainer Wittmann mpDoc->SetContainsMSVBasic( sal_True ); 605cdf0e10cSrcweir } 606cdf0e10cSrcweir } 607cdf0e10cSrcweir } 608cdf0e10cSrcweir 609cdf0e10cSrcweir // TabellenBox Edit beenden! 610baef7ff7SOliver-Rainer Wittmann if( mpWrtShell ) 611baef7ff7SOliver-Rainer Wittmann mpWrtShell->EndAllTblBoxEdit(); 612cdf0e10cSrcweir 613cdf0e10cSrcweir if( pFlt->GetUserData().EqualsAscii( "HTML") ) 614cdf0e10cSrcweir { 615cdf0e10cSrcweir SvxHtmlOptions* pHtmlOpt = SvxHtmlOptions::Get(); 616cdf0e10cSrcweir if( !pHtmlOpt->IsStarBasic() && pHtmlOpt->IsStarBasicWarning() && HasBasic() ) 617cdf0e10cSrcweir { 618cdf0e10cSrcweir uno::Reference< XLibraryContainer > xLibCont(GetBasicContainer(), UNO_QUERY); 619cdf0e10cSrcweir uno::Reference< XNameAccess > xLib; 620cdf0e10cSrcweir Sequence<rtl::OUString> aNames = xLibCont->getElementNames(); 621cdf0e10cSrcweir const rtl::OUString* pNames = aNames.getConstArray(); 622cdf0e10cSrcweir for(sal_Int32 nLib = 0; nLib < aNames.getLength(); nLib++) 623cdf0e10cSrcweir { 624cdf0e10cSrcweir Any aLib = xLibCont->getByName(pNames[nLib]); 625cdf0e10cSrcweir aLib >>= xLib; 626cdf0e10cSrcweir if(xLib.is()) 627cdf0e10cSrcweir { 628cdf0e10cSrcweir Sequence<rtl::OUString> aModNames = xLib->getElementNames(); 629cdf0e10cSrcweir if(aModNames.getLength()) 630cdf0e10cSrcweir { 631cdf0e10cSrcweir SetError(WARN_SWG_HTML_NO_MACROS, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ) ); 632cdf0e10cSrcweir break; 633cdf0e10cSrcweir } 634cdf0e10cSrcweir } 635cdf0e10cSrcweir } 636cdf0e10cSrcweir } 637cdf0e10cSrcweir UpdateDocInfoForSave(); 638cdf0e10cSrcweir } 639cdf0e10cSrcweir 640cdf0e10cSrcweir // --> FME 2007-5-7 #i76360# Update document statistics 641baef7ff7SOliver-Rainer Wittmann SwDocStat aDocStat( mpDoc->GetDocStat() );; 642baef7ff7SOliver-Rainer Wittmann mpDoc->UpdateDocStat( aDocStat ); 643cdf0e10cSrcweir // <-- 644cdf0e10cSrcweir CalcLayoutForOLEObjects(); // format for OLE objets 645cdf0e10cSrcweir // --> OD 2006-03-17 #i62875# 646cdf0e10cSrcweir // reset compatibility flag <DoNotCaptureDrawObjsOnPage>, if possible 647baef7ff7SOliver-Rainer Wittmann if ( mpWrtShell && mpDoc && 648baef7ff7SOliver-Rainer Wittmann mpDoc->get(IDocumentSettingAccess::DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE) && 649baef7ff7SOliver-Rainer Wittmann docfunc::AllDrawObjsOnPage( *mpDoc ) ) 650cdf0e10cSrcweir { 651baef7ff7SOliver-Rainer Wittmann mpDoc->set(IDocumentSettingAccess::DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE, false); 652cdf0e10cSrcweir } 653cdf0e10cSrcweir // <-- 654cdf0e10cSrcweir 655cdf0e10cSrcweir if( xWriter->IsStgWriter() && 656cdf0e10cSrcweir ( /*xWriter->IsSw3Writer() ||*/ 657cdf0e10cSrcweir pFlt->GetUserData().EqualsAscii( FILTER_XML ) || 658cdf0e10cSrcweir pFlt->GetUserData().EqualsAscii( FILTER_XMLV ) || 659cdf0e10cSrcweir pFlt->GetUserData().EqualsAscii( FILTER_XMLVW ) ) ) 660cdf0e10cSrcweir { 661cdf0e10cSrcweir // eigenen Typ ermitteln 662cdf0e10cSrcweir sal_uInt8 nMyType = 0; 663cdf0e10cSrcweir if( ISA( SwWebDocShell) ) 664cdf0e10cSrcweir nMyType = 1; 665cdf0e10cSrcweir else if( ISA( SwGlobalDocShell) ) 666cdf0e10cSrcweir nMyType = 2; 667cdf0e10cSrcweir 668cdf0e10cSrcweir // gewuenschten Typ ermitteln 669cdf0e10cSrcweir sal_uInt8 nSaveType = 0; 670cdf0e10cSrcweir sal_uLong nSaveClipId = pFlt->GetFormat(); 671cdf0e10cSrcweir if( SOT_FORMATSTR_ID_STARWRITERWEB_8 == nSaveClipId || 672cdf0e10cSrcweir SOT_FORMATSTR_ID_STARWRITERWEB_60 == nSaveClipId || 673cdf0e10cSrcweir SOT_FORMATSTR_ID_STARWRITERWEB_50 == nSaveClipId || 674cdf0e10cSrcweir SOT_FORMATSTR_ID_STARWRITERWEB_40 == nSaveClipId ) 675cdf0e10cSrcweir nSaveType = 1; 676cdf0e10cSrcweir else if( SOT_FORMATSTR_ID_STARWRITERGLOB_8 == nSaveClipId || 677cdf0e10cSrcweir SOT_FORMATSTR_ID_STARWRITERGLOB_60 == nSaveClipId || 678cdf0e10cSrcweir SOT_FORMATSTR_ID_STARWRITERGLOB_50 == nSaveClipId || 679cdf0e10cSrcweir SOT_FORMATSTR_ID_STARWRITERGLOB_40 == nSaveClipId ) 680cdf0e10cSrcweir nSaveType = 2; 681cdf0e10cSrcweir 682cdf0e10cSrcweir // Flags am Dokument entsprechend umsetzen 683cdf0e10cSrcweir sal_Bool bIsHTMLModeSave = GetDoc()->get(IDocumentSettingAccess::HTML_MODE); 684cdf0e10cSrcweir sal_Bool bIsGlobalDocSave = GetDoc()->get(IDocumentSettingAccess::GLOBAL_DOCUMENT); 685cdf0e10cSrcweir sal_Bool bIsGlblDocSaveLinksSave = GetDoc()->get(IDocumentSettingAccess::GLOBAL_DOCUMENT_SAVE_LINKS); 686cdf0e10cSrcweir if( nMyType != nSaveType ) 687cdf0e10cSrcweir { 688cdf0e10cSrcweir GetDoc()->set(IDocumentSettingAccess::HTML_MODE, 1 == nSaveType); 689cdf0e10cSrcweir GetDoc()->set(IDocumentSettingAccess::GLOBAL_DOCUMENT, 2 == nSaveType); 690cdf0e10cSrcweir if( 2 != nSaveType ) 691cdf0e10cSrcweir GetDoc()->set(IDocumentSettingAccess::GLOBAL_DOCUMENT_SAVE_LINKS, false); 692cdf0e10cSrcweir } 693cdf0e10cSrcweir 694cdf0e10cSrcweir // if the target format is storage based, then the output storage must be already created 695cdf0e10cSrcweir if ( rMedium.IsStorage() ) 696cdf0e10cSrcweir { 697cdf0e10cSrcweir // set MediaType on target storage 698cdf0e10cSrcweir // (MediaType will be queried during SaveAs) 699cdf0e10cSrcweir try 700cdf0e10cSrcweir { 701cdf0e10cSrcweir // TODO/MBA: testing 702cdf0e10cSrcweir uno::Reference < beans::XPropertySet > xSet( rMedium.GetStorage(), uno::UNO_QUERY ); 703cdf0e10cSrcweir if ( xSet.is() ) 704cdf0e10cSrcweir xSet->setPropertyValue( ::rtl::OUString::createFromAscii("MediaType"), uno::makeAny( ::rtl::OUString( SotExchange::GetFormatMimeType( nSaveClipId ) ) ) ); 705cdf0e10cSrcweir } 706cdf0e10cSrcweir catch ( uno::Exception& ) 707cdf0e10cSrcweir { 708cdf0e10cSrcweir } 709cdf0e10cSrcweir } 710cdf0e10cSrcweir 711cdf0e10cSrcweir // Jetzt das Dokument normal speichern 712cdf0e10cSrcweir sal_Bool bRet = SaveAs( rMedium ); 713cdf0e10cSrcweir 714cdf0e10cSrcweir if( nMyType != nSaveType ) 715cdf0e10cSrcweir { 716cdf0e10cSrcweir GetDoc()->set(IDocumentSettingAccess::HTML_MODE, bIsHTMLModeSave ); 717cdf0e10cSrcweir GetDoc()->set(IDocumentSettingAccess::GLOBAL_DOCUMENT, bIsGlobalDocSave); 718cdf0e10cSrcweir GetDoc()->set(IDocumentSettingAccess::GLOBAL_DOCUMENT_SAVE_LINKS, bIsGlblDocSaveLinksSave); 719cdf0e10cSrcweir } 720cdf0e10cSrcweir 721cdf0e10cSrcweir return bRet; 722cdf0e10cSrcweir } 723cdf0e10cSrcweir 724cdf0e10cSrcweir if( pFlt->GetUserData().EqualsAscii( FILTER_TEXT_DLG ) && 725baef7ff7SOliver-Rainer Wittmann ( mpWrtShell || !::lcl_GetSourceView( this ) )) 726cdf0e10cSrcweir { 727cdf0e10cSrcweir SwAsciiOptions aOpt; 728cdf0e10cSrcweir String sItemOpt; 729cdf0e10cSrcweir const SfxItemSet* pSet; 730cdf0e10cSrcweir const SfxPoolItem* pItem; 731cdf0e10cSrcweir if( 0 != ( pSet = rMedium.GetItemSet() ) ) 732cdf0e10cSrcweir { 733cdf0e10cSrcweir if( SFX_ITEM_SET == pSet->GetItemState( SID_FILE_FILTEROPTIONS, 734cdf0e10cSrcweir sal_True, &pItem ) ) 735cdf0e10cSrcweir sItemOpt = ((const SfxStringItem*)pItem)->GetValue(); 736cdf0e10cSrcweir } 737cdf0e10cSrcweir if(sItemOpt.Len()) 738cdf0e10cSrcweir aOpt.ReadUserData( sItemOpt ); 739cdf0e10cSrcweir 740cdf0e10cSrcweir xWriter->SetAsciiOptions( aOpt ); 741cdf0e10cSrcweir } 742cdf0e10cSrcweir 743cdf0e10cSrcweir // SfxProgress unterdruecken, wenn man Embedded ist 744cdf0e10cSrcweir SW_MOD()->SetEmbeddedLoadSave( 745cdf0e10cSrcweir SFX_CREATE_MODE_EMBEDDED == GetCreateMode()); 746cdf0e10cSrcweir 747cdf0e10cSrcweir // Kontext aufspannen, um die Anzeige der Selektion zu unterbinden 748cdf0e10cSrcweir sal_uLong nErrno; 749cdf0e10cSrcweir String aFileName( rMedium.GetName() ); 750cdf0e10cSrcweir 751cdf0e10cSrcweir //Keine View also das ganze Dokument! 752baef7ff7SOliver-Rainer Wittmann if ( mpWrtShell ) 753cdf0e10cSrcweir { 7548ef2f12bSOliver-Rainer Wittmann SwWait aWait( *this, true ); 755cdf0e10cSrcweir // --> OD 2009-12-31 #i106906# 756baef7ff7SOliver-Rainer Wittmann const sal_Bool bFormerLockView = mpWrtShell->IsViewLocked(); 757baef7ff7SOliver-Rainer Wittmann mpWrtShell->LockView( sal_True ); 758cdf0e10cSrcweir // <-- 759baef7ff7SOliver-Rainer Wittmann mpWrtShell->StartAllAction(); 760baef7ff7SOliver-Rainer Wittmann mpWrtShell->Push(); 761baef7ff7SOliver-Rainer Wittmann SwWriter aWrt( rMedium, *mpWrtShell, sal_True ); 762cdf0e10cSrcweir nErrno = aWrt.Write( xWriter, &aFileName ); 763cdf0e10cSrcweir //JP 16.05.97: falls der SFX uns die View waehrend des speicherns 764cdf0e10cSrcweir // entzieht 765baef7ff7SOliver-Rainer Wittmann if( mpWrtShell ) 766cdf0e10cSrcweir { 767baef7ff7SOliver-Rainer Wittmann mpWrtShell->Pop(sal_False); 768baef7ff7SOliver-Rainer Wittmann mpWrtShell->EndAllAction(); 769cdf0e10cSrcweir // --> OD 2009-12-31 #i106906# 770baef7ff7SOliver-Rainer Wittmann mpWrtShell->LockView( bFormerLockView ); 771cdf0e10cSrcweir // <-- 772cdf0e10cSrcweir } 773cdf0e10cSrcweir } 774cdf0e10cSrcweir else 775cdf0e10cSrcweir { 776cdf0e10cSrcweir // sind wir in der SourceView? 777cdf0e10cSrcweir SwSrcView* pSrcView = ::lcl_GetSourceView( this ); 778cdf0e10cSrcweir if( pSrcView ) 779cdf0e10cSrcweir { 780cdf0e10cSrcweir pSrcView->SaveContentTo(rMedium); 781cdf0e10cSrcweir nErrno = 0; 782cdf0e10cSrcweir } 783cdf0e10cSrcweir else 784cdf0e10cSrcweir { 785baef7ff7SOliver-Rainer Wittmann SwWriter aWrt( rMedium, *mpDoc ); 786cdf0e10cSrcweir nErrno = aWrt.Write( xWriter, &aFileName ); 787cdf0e10cSrcweir } 788cdf0e10cSrcweir } 789cdf0e10cSrcweir 790cdf0e10cSrcweir SW_MOD()->SetEmbeddedLoadSave( sal_False ); 791cdf0e10cSrcweir SetError( nErrno ? nErrno : nVBWarning, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ) ); 792cdf0e10cSrcweir if( !rMedium.IsStorage() ) 793cdf0e10cSrcweir rMedium.CloseOutStream(); 794cdf0e10cSrcweir 795cdf0e10cSrcweir return !IsError( nErrno ); 796cdf0e10cSrcweir } 797cdf0e10cSrcweir 798cdf0e10cSrcweir /*-------------------------------------------------------------------- 799cdf0e10cSrcweir Beschreibung: Haende weg 800cdf0e10cSrcweir --------------------------------------------------------------------*/ 801cdf0e10cSrcweir 802cdf0e10cSrcweir 803cdf0e10cSrcweir /*-------------------------------------------------------------------- 804cdf0e10cSrcweir Beschreibung: ??? noch nicht zu aktivieren, muss sal_True liefern 805cdf0e10cSrcweir --------------------------------------------------------------------*/ 806cdf0e10cSrcweir 807cdf0e10cSrcweir 808cdf0e10cSrcweir sal_Bool SwDocShell::SaveCompleted( const uno::Reference < embed::XStorage >& xStor ) 809cdf0e10cSrcweir { 81025cebbc8SOliver-Rainer Wittmann RTL_LOGFILE_CONTEXT_AUTHOR( aLog, "SW", "JP93722", "SwDocShell::SaveCompleted" ); 811cdf0e10cSrcweir sal_Bool bRet = SfxObjectShell::SaveCompleted( xStor ); 81225cebbc8SOliver-Rainer Wittmann if( bRet ) 81325cebbc8SOliver-Rainer Wittmann { 81425cebbc8SOliver-Rainer Wittmann // erst hier entscheiden, ob das Speichern geklappt hat oder nicht 81525cebbc8SOliver-Rainer Wittmann if( IsModified() ) 816baef7ff7SOliver-Rainer Wittmann mpDoc->SetModified(); 81725cebbc8SOliver-Rainer Wittmann else 818baef7ff7SOliver-Rainer Wittmann mpDoc->ResetModified(); 81925cebbc8SOliver-Rainer Wittmann } 820cdf0e10cSrcweir 821baef7ff7SOliver-Rainer Wittmann if( mpOLEChildList ) 82225cebbc8SOliver-Rainer Wittmann { 82325cebbc8SOliver-Rainer Wittmann sal_Bool bResetModified = IsEnableSetModified(); 82425cebbc8SOliver-Rainer Wittmann if( bResetModified ) 82525cebbc8SOliver-Rainer Wittmann EnableSetModified( sal_False ); 826cdf0e10cSrcweir 827baef7ff7SOliver-Rainer Wittmann uno::Sequence < rtl::OUString > aNames = mpOLEChildList->GetObjectNames(); 828cdf0e10cSrcweir for( sal_Int32 n = aNames.getLength(); n; n-- ) 82925cebbc8SOliver-Rainer Wittmann { 830baef7ff7SOliver-Rainer Wittmann if ( !mpOLEChildList->MoveEmbeddedObject( aNames[n-1], GetEmbeddedObjectContainer() ) ) 831cdf0e10cSrcweir { 832cdf0e10cSrcweir DBG_ERROR( "Copying of objects didn't work!" ); 833cdf0e10cSrcweir } 834cdf0e10cSrcweir 835cdf0e10cSrcweir //SvPersist* pPersist = this; 836cdf0e10cSrcweir //SvInfoObjectRef aRef( pInfList->GetObject( --n )); 837cdf0e10cSrcweir //pPersist->Move( &aRef, aRef->GetStorageName() ); 83825cebbc8SOliver-Rainer Wittmann } 839cdf0e10cSrcweir 840baef7ff7SOliver-Rainer Wittmann DELETEZ( mpOLEChildList ); 84125cebbc8SOliver-Rainer Wittmann if( bResetModified ) 84225cebbc8SOliver-Rainer Wittmann EnableSetModified( sal_True ); 843cdf0e10cSrcweir } 84425cebbc8SOliver-Rainer Wittmann 84525cebbc8SOliver-Rainer Wittmann // #121125#, #122868# 84625cebbc8SOliver-Rainer Wittmann // Clean up rendering data created by the usage of <XRenderable> interface 84725cebbc8SOliver-Rainer Wittmann // of <SwXDocument> (e.g. export to PDF) and which is not cleaned up by 84825cebbc8SOliver-Rainer Wittmann // "rendering the last page". 84925cebbc8SOliver-Rainer Wittmann // This is needed to restore former <ViewOptions>. This is performed via 85025cebbc8SOliver-Rainer Wittmann // a <ViewShell> reference hold by the rendering data. The rendering data 85125cebbc8SOliver-Rainer Wittmann // also needs to loose the hold <ViewShell> reference. Otherwise, the application 85225cebbc8SOliver-Rainer Wittmann // will crash on closing the document. 85325cebbc8SOliver-Rainer Wittmann uno::Reference< text::XTextDocument > xDoc(GetBaseModel(), uno::UNO_QUERY); 85425cebbc8SOliver-Rainer Wittmann ((SwXTextDocument*)xDoc.get())->CleanUpRenderingData(); 85525cebbc8SOliver-Rainer Wittmann 85625cebbc8SOliver-Rainer Wittmann return bRet; 857cdf0e10cSrcweir } 858cdf0e10cSrcweir 859cdf0e10cSrcweir /*-------------------------------------------------------------------- 860cdf0e10cSrcweir Beschreibung: Draw()-Overload fuer OLE2 (Sfx) 861cdf0e10cSrcweir --------------------------------------------------------------------*/ 862cdf0e10cSrcweir 863cdf0e10cSrcweir void SwDocShell::Draw( OutputDevice* pDev, const JobSetup& rSetup, 864cdf0e10cSrcweir sal_uInt16 nAspect ) 865cdf0e10cSrcweir { 866cdf0e10cSrcweir //fix #25341# Draw sollte das Modified nicht beeinflussen 867cdf0e10cSrcweir sal_Bool bResetModified; 868cdf0e10cSrcweir if ( sal_True == (bResetModified = IsEnableSetModified()) ) 869cdf0e10cSrcweir EnableSetModified( sal_False ); 870cdf0e10cSrcweir 871cdf0e10cSrcweir //sollte am Document ein JobSetup haengen, dann kopieren wir uns diesen, 872cdf0e10cSrcweir //um nach dem PrtOle2 diesen wieder am Doc zu verankern. 873cdf0e10cSrcweir //Einen leeren JobSetup setzen wir nicht ein, denn der wuerde nur zu 874cdf0e10cSrcweir //fragwuerdigem Ergebnis nach teurer Neuformatierung fuehren (Preview!) 875cdf0e10cSrcweir JobSetup *pOrig = 0; 876cdf0e10cSrcweir if ( rSetup.GetPrinterName().Len() && ASPECT_THUMBNAIL != nAspect ) 877cdf0e10cSrcweir { 878baef7ff7SOliver-Rainer Wittmann pOrig = const_cast<JobSetup*>(mpDoc->getJobsetup()); 879cdf0e10cSrcweir if( pOrig ) // dann kopieren wir uns den 880cdf0e10cSrcweir pOrig = new JobSetup( *pOrig ); 881baef7ff7SOliver-Rainer Wittmann mpDoc->setJobsetup( rSetup ); 882cdf0e10cSrcweir } 883cdf0e10cSrcweir 884cdf0e10cSrcweir Rectangle aRect( nAspect == ASPECT_THUMBNAIL ? 885cdf0e10cSrcweir GetVisArea( nAspect ) : GetVisArea( ASPECT_CONTENT ) ); 886cdf0e10cSrcweir 887cdf0e10cSrcweir pDev->Push(); 888cdf0e10cSrcweir pDev->SetFillColor(); 889cdf0e10cSrcweir pDev->SetLineColor(); 890cdf0e10cSrcweir pDev->SetBackground(); 891cdf0e10cSrcweir sal_Bool bWeb = 0 != PTR_CAST(SwWebDocShell, this); 892cdf0e10cSrcweir SwPrintData aOpts; 893baef7ff7SOliver-Rainer Wittmann ViewShell::PrtOle2( mpDoc, SW_MOD()->GetUsrPref(bWeb), aOpts, pDev, aRect ); 894cdf0e10cSrcweir pDev->Pop(); 895cdf0e10cSrcweir 896cdf0e10cSrcweir if( pOrig ) 897cdf0e10cSrcweir { 898baef7ff7SOliver-Rainer Wittmann mpDoc->setJobsetup( *pOrig ); 899cdf0e10cSrcweir delete pOrig; 900cdf0e10cSrcweir } 901cdf0e10cSrcweir if ( bResetModified ) 902cdf0e10cSrcweir EnableSetModified( sal_True ); 903cdf0e10cSrcweir } 904cdf0e10cSrcweir 905cdf0e10cSrcweir 906cdf0e10cSrcweir void SwDocShell::SetVisArea( const Rectangle &rRect ) 907cdf0e10cSrcweir { 908cdf0e10cSrcweir Rectangle aRect( rRect ); 909baef7ff7SOliver-Rainer Wittmann if ( mpView ) 910cdf0e10cSrcweir { 911baef7ff7SOliver-Rainer Wittmann Size aSz( mpView->GetDocSz() ); 912cdf0e10cSrcweir aSz.Width() += DOCUMENTBORDER; aSz.Height() += DOCUMENTBORDER; 913cdf0e10cSrcweir long nMoveX = 0, nMoveY = 0; 914cdf0e10cSrcweir if ( aRect.Right() > aSz.Width() ) 915cdf0e10cSrcweir nMoveX = aSz.Width() - aRect.Right(); 916cdf0e10cSrcweir if ( aRect.Bottom() > aSz.Height() ) 917cdf0e10cSrcweir nMoveY = aSz.Height() - aRect.Bottom(); 918cdf0e10cSrcweir aRect.Move( nMoveX, nMoveY ); 919cdf0e10cSrcweir nMoveX = aRect.Left() < 0 ? -aRect.Left() : 0; 920cdf0e10cSrcweir nMoveY = aRect.Top() < 0 ? -aRect.Top() : 0; 921cdf0e10cSrcweir aRect.Move( nMoveX, nMoveY ); 922cdf0e10cSrcweir 923cdf0e10cSrcweir //Ruft das SfxInPlaceObject::SetVisArea()! 924baef7ff7SOliver-Rainer Wittmann mpView->SetVisArea( aRect, sal_True ); 925cdf0e10cSrcweir } 926cdf0e10cSrcweir else 927cdf0e10cSrcweir SfxObjectShell::SetVisArea( aRect ); 928cdf0e10cSrcweir } 929cdf0e10cSrcweir 930cdf0e10cSrcweir 931cdf0e10cSrcweir Rectangle SwDocShell::GetVisArea( sal_uInt16 nAspect ) const 932cdf0e10cSrcweir { 933baef7ff7SOliver-Rainer Wittmann if ( nAspect == ASPECT_THUMBNAIL ) 934baef7ff7SOliver-Rainer Wittmann { 935baef7ff7SOliver-Rainer Wittmann //PreView: VisArea auf die erste Seite einstellen. 936baef7ff7SOliver-Rainer Wittmann SwNodeIndex aIdx( mpDoc->GetNodes().GetEndOfExtras(), 1 ); 937baef7ff7SOliver-Rainer Wittmann SwCntntNode* pNd = mpDoc->GetNodes().GoNext( &aIdx ); 938cdf0e10cSrcweir 939cdf0e10cSrcweir const SwRect aPageRect = pNd->FindPageFrmRect( sal_False, 0, sal_False ); 940cdf0e10cSrcweir return aPageRect.SVRect(); 941baef7ff7SOliver-Rainer Wittmann } 942cdf0e10cSrcweir return SfxObjectShell::GetVisArea( nAspect ); 943cdf0e10cSrcweir } 944cdf0e10cSrcweir 945cdf0e10cSrcweir Printer *SwDocShell::GetDocumentPrinter() 946cdf0e10cSrcweir { 947baef7ff7SOliver-Rainer Wittmann return mpDoc->getPrinter( false ); 948cdf0e10cSrcweir } 949cdf0e10cSrcweir 950cdf0e10cSrcweir OutputDevice* SwDocShell::GetDocumentRefDev() 951cdf0e10cSrcweir { 952baef7ff7SOliver-Rainer Wittmann return mpDoc->getReferenceDevice( false ); 953cdf0e10cSrcweir } 954cdf0e10cSrcweir 955cdf0e10cSrcweir void SwDocShell::OnDocumentPrinterChanged( Printer * pNewPrinter ) 956cdf0e10cSrcweir { 957cdf0e10cSrcweir if ( pNewPrinter ) 958cdf0e10cSrcweir GetDoc()->setJobsetup( pNewPrinter->GetJobSetup() ); 959cdf0e10cSrcweir else 960cdf0e10cSrcweir GetDoc()->setPrinter( 0, true, true ); 961cdf0e10cSrcweir } 962cdf0e10cSrcweir 963cdf0e10cSrcweir sal_uLong SwDocShell::GetMiscStatus() const 964cdf0e10cSrcweir { 965cdf0e10cSrcweir return SVOBJ_MISCSTATUS_RESIZEONPRINTERCHANGE; 966cdf0e10cSrcweir } 967cdf0e10cSrcweir 968cdf0e10cSrcweir // --> FME 2004-08-05 #i20883# Digital Signatures and Encryption 969cdf0e10cSrcweir sal_uInt16 SwDocShell::GetHiddenInformationState( sal_uInt16 nStates ) 970cdf0e10cSrcweir { 971cdf0e10cSrcweir // get global state like HIDDENINFORMATION_DOCUMENTVERSIONS 972cdf0e10cSrcweir sal_uInt16 nState = SfxObjectShell::GetHiddenInformationState( nStates ); 973cdf0e10cSrcweir 974cdf0e10cSrcweir if ( nStates & HIDDENINFORMATION_RECORDEDCHANGES ) 975cdf0e10cSrcweir { 976cdf0e10cSrcweir if ( GetDoc()->GetRedlineTbl().Count() ) 977cdf0e10cSrcweir nState |= HIDDENINFORMATION_RECORDEDCHANGES; 978cdf0e10cSrcweir } 979cdf0e10cSrcweir if ( nStates & HIDDENINFORMATION_NOTES ) 980cdf0e10cSrcweir { 981cdf0e10cSrcweir ASSERT( GetWrtShell(), "No SwWrtShell, no information" ) 982cdf0e10cSrcweir if ( GetWrtShell() ) 983cdf0e10cSrcweir { 984cdf0e10cSrcweir SwFieldType* pType = GetWrtShell()->GetFldType( RES_POSTITFLD, aEmptyStr ); 985cdf0e10cSrcweir SwIterator<SwFmtFld,SwFieldType> aIter( *pType ); 986cdf0e10cSrcweir SwFmtFld* pFirst = aIter.First(); 987cdf0e10cSrcweir while( pFirst ) 988cdf0e10cSrcweir { 989cdf0e10cSrcweir if( pFirst->GetTxtFld() && pFirst->IsFldInDoc() ) 990cdf0e10cSrcweir { 991cdf0e10cSrcweir nState |= HIDDENINFORMATION_NOTES; 992cdf0e10cSrcweir break; 993cdf0e10cSrcweir } 994cdf0e10cSrcweir pFirst = aIter.Next(); 995cdf0e10cSrcweir } 996cdf0e10cSrcweir } 997cdf0e10cSrcweir } 998cdf0e10cSrcweir 999cdf0e10cSrcweir return nState; 1000cdf0e10cSrcweir } 1001cdf0e10cSrcweir // <-- 1002cdf0e10cSrcweir 1003cdf0e10cSrcweir 1004cdf0e10cSrcweir /*-------------------------------------------------------------------- 1005cdf0e10cSrcweir Beschreibung: 1006cdf0e10cSrcweir --------------------------------------------------------------------*/ 1007cdf0e10cSrcweir 1008cdf0e10cSrcweir 1009cdf0e10cSrcweir void SwDocShell::GetState(SfxItemSet& rSet) 1010cdf0e10cSrcweir { 1011baef7ff7SOliver-Rainer Wittmann SfxWhichIter aIter( rSet ); 1012baef7ff7SOliver-Rainer Wittmann sal_uInt16 nWhich = aIter.FirstWhich(); 1013cdf0e10cSrcweir 1014baef7ff7SOliver-Rainer Wittmann while (nWhich) 1015baef7ff7SOliver-Rainer Wittmann { 1016baef7ff7SOliver-Rainer Wittmann switch ( nWhich ) 1017baef7ff7SOliver-Rainer Wittmann { 1018baef7ff7SOliver-Rainer Wittmann case SID_PRINTPREVIEW: 1019baef7ff7SOliver-Rainer Wittmann { 1020baef7ff7SOliver-Rainer Wittmann sal_Bool bDisable = IsInPlaceActive(); 1021cdf0e10cSrcweir // Disable "multiple layout" 1022baef7ff7SOliver-Rainer Wittmann if ( !bDisable ) 1023baef7ff7SOliver-Rainer Wittmann { 1024baef7ff7SOliver-Rainer Wittmann SfxViewFrame *pTmpFrm = SfxViewFrame::GetFirst( this ); 1025baef7ff7SOliver-Rainer Wittmann while (pTmpFrm) // Preview suchen 1026baef7ff7SOliver-Rainer Wittmann { 1027baef7ff7SOliver-Rainer Wittmann if ( PTR_CAST(SwView, pTmpFrm->GetViewShell()) && 1028baef7ff7SOliver-Rainer Wittmann ( (SwView*) pTmpFrm->GetViewShell() )->GetWrtShell().GetViewOptions()->getBrowseMode() ) 1029baef7ff7SOliver-Rainer Wittmann { 1030baef7ff7SOliver-Rainer Wittmann bDisable = sal_True; 1031baef7ff7SOliver-Rainer Wittmann break; 1032baef7ff7SOliver-Rainer Wittmann } 1033baef7ff7SOliver-Rainer Wittmann pTmpFrm = pTmpFrm->GetNext( *pTmpFrm, this ); 1034baef7ff7SOliver-Rainer Wittmann } 1035baef7ff7SOliver-Rainer Wittmann } 1036cdf0e10cSrcweir // End of disabled "multiple layout" 1037baef7ff7SOliver-Rainer Wittmann if ( bDisable ) 1038baef7ff7SOliver-Rainer Wittmann rSet.DisableItem( SID_PRINTPREVIEW ); 1039baef7ff7SOliver-Rainer Wittmann else 1040baef7ff7SOliver-Rainer Wittmann { 1041baef7ff7SOliver-Rainer Wittmann SfxBoolItem aBool( SID_PRINTPREVIEW, sal_False ); 1042baef7ff7SOliver-Rainer Wittmann if ( PTR_CAST( SwPagePreView, SfxViewShell::Current() ) ) 1043baef7ff7SOliver-Rainer Wittmann aBool.SetValue( sal_True ); 1044baef7ff7SOliver-Rainer Wittmann rSet.Put( aBool ); 1045baef7ff7SOliver-Rainer Wittmann } 1046baef7ff7SOliver-Rainer Wittmann } 1047baef7ff7SOliver-Rainer Wittmann break; 1048baef7ff7SOliver-Rainer Wittmann 1049baef7ff7SOliver-Rainer Wittmann case SID_SOURCEVIEW: 1050baef7ff7SOliver-Rainer Wittmann { 1051baef7ff7SOliver-Rainer Wittmann SfxViewShell* pCurrView = GetView() ? (SfxViewShell*) GetView() 1052baef7ff7SOliver-Rainer Wittmann : 1053baef7ff7SOliver-Rainer Wittmann SfxViewShell::Current(); 1054baef7ff7SOliver-Rainer Wittmann sal_Bool bSourceView = 0 != PTR_CAST( SwSrcView, pCurrView ); 1055baef7ff7SOliver-Rainer Wittmann rSet.Put( SfxBoolItem( SID_SOURCEVIEW, bSourceView ) ); 1056baef7ff7SOliver-Rainer Wittmann } 1057baef7ff7SOliver-Rainer Wittmann break; 1058baef7ff7SOliver-Rainer Wittmann 1059baef7ff7SOliver-Rainer Wittmann case SID_HTML_MODE: 1060baef7ff7SOliver-Rainer Wittmann rSet.Put( SfxUInt16Item( SID_HTML_MODE, ::GetHtmlMode( this ) ) ); 1061baef7ff7SOliver-Rainer Wittmann break; 1062baef7ff7SOliver-Rainer Wittmann 1063baef7ff7SOliver-Rainer Wittmann case FN_ABSTRACT_STARIMPRESS: 1064baef7ff7SOliver-Rainer Wittmann case FN_OUTLINE_TO_IMPRESS: 1065baef7ff7SOliver-Rainer Wittmann { 1066baef7ff7SOliver-Rainer Wittmann SvtModuleOptions aMOpt; 1067baef7ff7SOliver-Rainer Wittmann if ( !aMOpt.IsImpress() ) 1068baef7ff7SOliver-Rainer Wittmann rSet.DisableItem( nWhich ); 1069baef7ff7SOliver-Rainer Wittmann } 1070baef7ff7SOliver-Rainer Wittmann /* no break here */ 1071baef7ff7SOliver-Rainer Wittmann case FN_ABSTRACT_NEWDOC: 1072baef7ff7SOliver-Rainer Wittmann case FN_OUTLINE_TO_CLIPBOARD: 1073baef7ff7SOliver-Rainer Wittmann { 1074baef7ff7SOliver-Rainer Wittmann if ( !GetDoc()->GetNodes().GetOutLineNds().Count() ) 1075baef7ff7SOliver-Rainer Wittmann rSet.DisableItem( nWhich ); 1076baef7ff7SOliver-Rainer Wittmann } 1077baef7ff7SOliver-Rainer Wittmann break; 1078cdf0e10cSrcweir 1079cdf0e10cSrcweir case SID_BROWSER_MODE: 1080cdf0e10cSrcweir case FN_PRINT_LAYOUT: 1081baef7ff7SOliver-Rainer Wittmann { 1082baef7ff7SOliver-Rainer Wittmann sal_Bool bState = GetDoc()->get( IDocumentSettingAccess::BROWSE_MODE ); 1083baef7ff7SOliver-Rainer Wittmann if ( FN_PRINT_LAYOUT == nWhich ) 1084baef7ff7SOliver-Rainer Wittmann bState = !bState; 1085baef7ff7SOliver-Rainer Wittmann rSet.Put( SfxBoolItem( nWhich, bState ) ); 1086baef7ff7SOliver-Rainer Wittmann } 1087baef7ff7SOliver-Rainer Wittmann break; 1088cdf0e10cSrcweir 1089baef7ff7SOliver-Rainer Wittmann case FN_NEW_GLOBAL_DOC: 1090baef7ff7SOliver-Rainer Wittmann if ( ISA( SwGlobalDocShell ) ) 1091baef7ff7SOliver-Rainer Wittmann rSet.DisableItem( nWhich ); 1092baef7ff7SOliver-Rainer Wittmann break; 1093cdf0e10cSrcweir 1094baef7ff7SOliver-Rainer Wittmann case FN_NEW_HTML_DOC: 1095baef7ff7SOliver-Rainer Wittmann if ( ISA( SwWebDocShell ) ) 1096baef7ff7SOliver-Rainer Wittmann rSet.DisableItem( nWhich ); 1097baef7ff7SOliver-Rainer Wittmann break; 1098baef7ff7SOliver-Rainer Wittmann 1099baef7ff7SOliver-Rainer Wittmann case SID_ATTR_YEAR2000: 1100baef7ff7SOliver-Rainer Wittmann { 1101baef7ff7SOliver-Rainer Wittmann const SvNumberFormatter* pFmtr = mpDoc->GetNumberFormatter( sal_False ); 1102baef7ff7SOliver-Rainer Wittmann rSet.Put( SfxUInt16Item( nWhich, 1103baef7ff7SOliver-Rainer Wittmann static_cast< sal_uInt16 >( 1104baef7ff7SOliver-Rainer Wittmann pFmtr ? pFmtr->GetYear2000() 1105baef7ff7SOliver-Rainer Wittmann : 1106baef7ff7SOliver-Rainer Wittmann ::utl::MiscCfg().GetYear2000() ) ) ); 1107baef7ff7SOliver-Rainer Wittmann } 1108baef7ff7SOliver-Rainer Wittmann break; 1109cdf0e10cSrcweir 1110cdf0e10cSrcweir case SID_ATTR_CHAR_FONTLIST: 1111cdf0e10cSrcweir { 1112baef7ff7SOliver-Rainer Wittmann rSet.Put( SvxFontListItem( mpFontList, SID_ATTR_CHAR_FONTLIST ) ); 1113cdf0e10cSrcweir } 1114cdf0e10cSrcweir break; 1115baef7ff7SOliver-Rainer Wittmann 1116cdf0e10cSrcweir case SID_MAIL_PREPAREEXPORT: 1117cdf0e10cSrcweir { 1118cdf0e10cSrcweir //check if linked content or possibly hidden content is available 1119cdf0e10cSrcweir //pDoc->UpdateFlds( NULL, false ); 1120baef7ff7SOliver-Rainer Wittmann sfx2::LinkManager& rLnkMgr = mpDoc->GetLinkManager(); 1121cdf0e10cSrcweir const ::sfx2::SvBaseLinks& rLnks = rLnkMgr.GetLinks(); 1122cdf0e10cSrcweir sal_Bool bRet = sal_False; 1123cdf0e10cSrcweir if( rLnks.Count() ) 1124cdf0e10cSrcweir bRet = sal_True; 1125cdf0e10cSrcweir else 1126cdf0e10cSrcweir { 1127cdf0e10cSrcweir //sections with hidden flag, hidden character attribute, hidden paragraph/text or conditional text fields 1128baef7ff7SOliver-Rainer Wittmann bRet = mpDoc->HasInvisibleContent(); 1129cdf0e10cSrcweir } 1130cdf0e10cSrcweir rSet.Put( SfxBoolItem( nWhich, bRet ) ); 1131cdf0e10cSrcweir } 1132cdf0e10cSrcweir break; 1133cdf0e10cSrcweir 1134baef7ff7SOliver-Rainer Wittmann default: 1135*870262e3SDon Lewis DBG_ASSERT( sal_False, "You can not go in here!" ); 1136cdf0e10cSrcweir 1137baef7ff7SOliver-Rainer Wittmann } 1138baef7ff7SOliver-Rainer Wittmann nWhich = aIter.NextWhich(); 1139baef7ff7SOliver-Rainer Wittmann } 1140cdf0e10cSrcweir } 1141cdf0e10cSrcweir 1142cdf0e10cSrcweir /*-------------------------------------------------------------------- 1143cdf0e10cSrcweir Beschreibung: OLE-Hdls 1144cdf0e10cSrcweir --------------------------------------------------------------------*/ 1145cdf0e10cSrcweir 1146cdf0e10cSrcweir 1147cdf0e10cSrcweir IMPL_LINK( SwDocShell, Ole2ModifiedHdl, void *, p ) 1148cdf0e10cSrcweir { 1149cdf0e10cSrcweir // vom Doc wird der Status mitgegeben (siehe doc.cxx) 1150cdf0e10cSrcweir // Bit 0: -> alter Zustand 1151cdf0e10cSrcweir // Bit 1: -> neuer Zustand 1152cdf0e10cSrcweir long nStatus = (long)p; 1153cdf0e10cSrcweir if( IsEnableSetModified() ) 1154cdf0e10cSrcweir SetModified( (nStatus & 2) ? sal_True : sal_False ); 1155cdf0e10cSrcweir return 0; 1156cdf0e10cSrcweir } 1157cdf0e10cSrcweir 1158cdf0e10cSrcweir /*-------------------------------------------------------------------- 1159cdf0e10cSrcweir Beschreibung: Pool returnen Hier weil virtuelll 1160cdf0e10cSrcweir --------------------------------------------------------------------*/ 1161cdf0e10cSrcweir 1162cdf0e10cSrcweir 1163cdf0e10cSrcweir SfxStyleSheetBasePool* SwDocShell::GetStyleSheetPool() 1164cdf0e10cSrcweir { 1165cdf0e10cSrcweir return mxBasePool.get(); 1166cdf0e10cSrcweir } 1167cdf0e10cSrcweir 1168cdf0e10cSrcweir 1169cdf0e10cSrcweir void SwDocShell::SetView(SwView* pVw) 1170cdf0e10cSrcweir { 1171baef7ff7SOliver-Rainer Wittmann if(0 != (mpView = pVw)) 1172ad54a8fdSArmin Le Grand { 1173baef7ff7SOliver-Rainer Wittmann mpWrtShell = &mpView->GetWrtShell(); 1174ad54a8fdSArmin Le Grand } 1175ad54a8fdSArmin Le Grand else 1176ad54a8fdSArmin Le Grand { 1177baef7ff7SOliver-Rainer Wittmann mpWrtShell = 0; 1178ad54a8fdSArmin Le Grand } 1179cdf0e10cSrcweir } 1180cdf0e10cSrcweir 1181cdf0e10cSrcweir 1182cdf0e10cSrcweir void SwDocShell::PrepareReload() 1183cdf0e10cSrcweir { 1184baef7ff7SOliver-Rainer Wittmann ::DelAllGrfCacheEntries( mpDoc ); 1185cdf0e10cSrcweir } 1186cdf0e10cSrcweir 1187cdf0e10cSrcweir // linked graphics are now loaded on demand. 1188cdf0e10cSrcweir // Thus, loading of linked graphics no longer needed and necessary for 1189cdf0e10cSrcweir // the load of document being finished. 1190cdf0e10cSrcweir void SwDocShell::LoadingFinished() 1191cdf0e10cSrcweir { 1192cdf0e10cSrcweir // interface <SfxObjectShell::EnableSetModified(..)> no longer works, because 1193cdf0e10cSrcweir // <SfxObjectShell::FinishedLoading(..)> doesn't care about its status and 1194cdf0e10cSrcweir // enables the document modification again. 1195cdf0e10cSrcweir // Thus, manuell modify the document, if its modified and its links are updated 1196cdf0e10cSrcweir // before <FinishedLoading(..)> is called. 1197baef7ff7SOliver-Rainer Wittmann const bool bHasDocToStayModified( mpDoc->IsModified() && mpDoc->LinksUpdated() ); 1198cdf0e10cSrcweir FinishedLoading( SFX_LOADED_ALL ); 119925cebbc8SOliver-Rainer Wittmann SfxViewFrame* pVFrame = SfxViewFrame::GetFirst(this); 120025cebbc8SOliver-Rainer Wittmann if(pVFrame) 120125cebbc8SOliver-Rainer Wittmann { 120225cebbc8SOliver-Rainer Wittmann SfxViewShell* pShell = pVFrame->GetViewShell(); 120325cebbc8SOliver-Rainer Wittmann if(PTR_CAST(SwSrcView, pShell)) 120425cebbc8SOliver-Rainer Wittmann ((SwSrcView*)pShell)->Load(this); 120525cebbc8SOliver-Rainer Wittmann } 1206cdf0e10cSrcweir 1207baef7ff7SOliver-Rainer Wittmann if ( bHasDocToStayModified && !mpDoc->IsModified() ) 1208cdf0e10cSrcweir { 1209baef7ff7SOliver-Rainer Wittmann mpDoc->SetModified(); 1210cdf0e10cSrcweir } 1211cdf0e10cSrcweir } 1212cdf0e10cSrcweir 1213cdf0e10cSrcweir // eine Uebertragung wird abgebrochen (wird aus dem SFX gerufen) 1214cdf0e10cSrcweir void SwDocShell::CancelTransfers() 1215cdf0e10cSrcweir { 1216cdf0e10cSrcweir // alle Links vom LinkManager Canceln 1217cdf0e10cSrcweir aFinishedTimer.Stop(); 1218baef7ff7SOliver-Rainer Wittmann mpDoc->GetLinkManager().CancelTransfers(); 1219cdf0e10cSrcweir SfxObjectShell::CancelTransfers(); 1220cdf0e10cSrcweir } 1221cdf0e10cSrcweir 1222cdf0e10cSrcweir SwFEShell* SwDocShell::GetFEShell() 1223cdf0e10cSrcweir { 1224baef7ff7SOliver-Rainer Wittmann return mpWrtShell; 1225cdf0e10cSrcweir } 1226cdf0e10cSrcweir 1227cdf0e10cSrcweir void SwDocShell::RemoveOLEObjects() 1228cdf0e10cSrcweir { 1229baef7ff7SOliver-Rainer Wittmann SwIterator<SwCntntNode,SwFmtColl> aIter( *mpDoc->GetDfltGrfFmtColl() ); 1230cdf0e10cSrcweir for( SwCntntNode* pNd = aIter.First(); pNd; pNd = aIter.Next() ) 1231cdf0e10cSrcweir { 1232cdf0e10cSrcweir SwOLENode* pOLENd = pNd->GetOLENode(); 1233cdf0e10cSrcweir if( pOLENd && ( pOLENd->IsOLEObjectDeleted() || 1234cdf0e10cSrcweir pOLENd->IsInGlobalDocSection() ) ) 1235cdf0e10cSrcweir { 1236baef7ff7SOliver-Rainer Wittmann if( !mpOLEChildList ) 1237baef7ff7SOliver-Rainer Wittmann mpOLEChildList = new comphelper::EmbeddedObjectContainer; 1238cdf0e10cSrcweir 1239cdf0e10cSrcweir ::rtl::OUString aObjName = pOLENd->GetOLEObj().GetCurrentPersistName(); 1240baef7ff7SOliver-Rainer Wittmann GetEmbeddedObjectContainer().MoveEmbeddedObject( aObjName, *mpOLEChildList ); 1241cdf0e10cSrcweir } 1242cdf0e10cSrcweir } 1243cdf0e10cSrcweir } 1244cdf0e10cSrcweir 1245cdf0e10cSrcweir // When a document is loaded, SwDoc::PrtOLENotify is called to update 1246cdf0e10cSrcweir // the sizes of math objects. However, for objects that do not have a 1247cdf0e10cSrcweir // SwFrm at this time, only a flag is set (bIsOLESizeInvalid) and the 1248cdf0e10cSrcweir // size change takes place later, while calculating the layout in the 1249cdf0e10cSrcweir // idle handler. If this document is saved now, it is saved with invalid 1250cdf0e10cSrcweir // sizes. For this reason, the layout has to be calculated before a document is 1251cdf0e10cSrcweir // saved, but of course only id there are OLE objects with bOLESizeInvalid set. 1252cdf0e10cSrcweir void SwDocShell::CalcLayoutForOLEObjects() 1253cdf0e10cSrcweir { 1254baef7ff7SOliver-Rainer Wittmann if( !mpWrtShell ) 1255cdf0e10cSrcweir return; 1256cdf0e10cSrcweir 1257baef7ff7SOliver-Rainer Wittmann SwIterator<SwCntntNode,SwFmtColl> aIter( *mpDoc->GetDfltGrfFmtColl() ); 1258cdf0e10cSrcweir for( SwCntntNode* pNd = aIter.First(); pNd; pNd = aIter.Next() ) 1259cdf0e10cSrcweir { 1260cdf0e10cSrcweir SwOLENode* pOLENd = pNd->GetOLENode(); 1261cdf0e10cSrcweir if( pOLENd && pOLENd->IsOLESizeInvalid() ) 1262cdf0e10cSrcweir { 1263baef7ff7SOliver-Rainer Wittmann mpWrtShell->CalcLayout(); 1264cdf0e10cSrcweir break; 1265cdf0e10cSrcweir } 1266cdf0e10cSrcweir } 1267cdf0e10cSrcweir } 1268cdf0e10cSrcweir 1269cdf0e10cSrcweir 1270cdf0e10cSrcweir // --> FME 2005-02-25 #i42634# Overwrites SfxObjectShell::UpdateLinks 1271cdf0e10cSrcweir // This new function is necessary to trigger update of links in docs 1272cdf0e10cSrcweir // read by the binary filter: 1273cdf0e10cSrcweir void SwDocShell::UpdateLinks() 1274cdf0e10cSrcweir { 1275cdf0e10cSrcweir GetDoc()->UpdateLinks(sal_True); 1276cdf0e10cSrcweir // --> FME 2005-07-27 #i50703# Update footnote numbers 1277cdf0e10cSrcweir SwTxtFtn::SetUniqueSeqRefNo( *GetDoc() ); 1278cdf0e10cSrcweir SwNodeIndex aTmp( GetDoc()->GetNodes() ); 1279cdf0e10cSrcweir GetDoc()->GetFtnIdxs().UpdateFtn( aTmp ); 1280cdf0e10cSrcweir // <-- 1281cdf0e10cSrcweir } 1282cdf0e10cSrcweir 1283cdf0e10cSrcweir uno::Reference< frame::XController > 1284cdf0e10cSrcweir SwDocShell::GetController() 1285cdf0e10cSrcweir { 1286cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController > aRet; 1287cdf0e10cSrcweir // --> FME 2007-10-15 #i82346# No view in page preview 1288cdf0e10cSrcweir if ( GetView() ) 1289cdf0e10cSrcweir // <-- 1290cdf0e10cSrcweir aRet = GetView()->GetController(); 1291cdf0e10cSrcweir return aRet; 1292cdf0e10cSrcweir } 1293cdf0e10cSrcweir 1294cdf0e10cSrcweir /* -----------------------------12.02.01 12:08-------------------------------- 1295cdf0e10cSrcweir 1296cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 1297ca62e2c2SSteve Yin void SwDocShell::setDocAccTitle( const String& rTitle ) 1298ca62e2c2SSteve Yin { 1299baef7ff7SOliver-Rainer Wittmann if ( mpDoc ) 1300baef7ff7SOliver-Rainer Wittmann { 1301baef7ff7SOliver-Rainer Wittmann mpDoc->setDocAccTitle( rTitle ); 1302baef7ff7SOliver-Rainer Wittmann } 1303ca62e2c2SSteve Yin } 1304ca62e2c2SSteve Yin const String SwDocShell::getDocAccTitle() const 1305ca62e2c2SSteve Yin { 1306baef7ff7SOliver-Rainer Wittmann String sRet; 1307baef7ff7SOliver-Rainer Wittmann if ( mpDoc ) 1308baef7ff7SOliver-Rainer Wittmann { 1309baef7ff7SOliver-Rainer Wittmann sRet = mpDoc->getDocAccTitle(); 1310baef7ff7SOliver-Rainer Wittmann } 1311ca62e2c2SSteve Yin 1312baef7ff7SOliver-Rainer Wittmann return sRet; 1313ca62e2c2SSteve Yin } 1314ca62e2c2SSteve Yin 1315baef7ff7SOliver-Rainer Wittmann void SwDocShell::setDocReadOnly( 1316baef7ff7SOliver-Rainer Wittmann sal_Bool bReadOnly ) 1317baef7ff7SOliver-Rainer Wittmann { 1318baef7ff7SOliver-Rainer Wittmann if ( mpDoc ) 1319baef7ff7SOliver-Rainer Wittmann { 1320baef7ff7SOliver-Rainer Wittmann mpDoc->setDocReadOnly( bReadOnly ); 1321baef7ff7SOliver-Rainer Wittmann } 1322ca62e2c2SSteve Yin } 1323baef7ff7SOliver-Rainer Wittmann 1324ca62e2c2SSteve Yin sal_Bool SwDocShell::getDocReadOnly() const 1325ca62e2c2SSteve Yin { 1326baef7ff7SOliver-Rainer Wittmann if ( mpDoc ) 1327baef7ff7SOliver-Rainer Wittmann { 1328baef7ff7SOliver-Rainer Wittmann return mpDoc->getDocReadOnly(); 1329baef7ff7SOliver-Rainer Wittmann } 1330baef7ff7SOliver-Rainer Wittmann 1331baef7ff7SOliver-Rainer Wittmann return sal_False; 1332ca62e2c2SSteve Yin } 1333ca62e2c2SSteve Yin 1334205b6fc7SArmin Le Grand static const char* s_EventNames[] = 1335cdf0e10cSrcweir { 1336cdf0e10cSrcweir "OnPageCountChange", 1337cdf0e10cSrcweir "OnMailMerge", 1338cdf0e10cSrcweir "OnMailMergeFinished", 1339cdf0e10cSrcweir "OnFieldMerge", 1340cdf0e10cSrcweir "OnFieldMergeFinished", 1341cdf0e10cSrcweir "OnLayoutFinished" 1342cdf0e10cSrcweir }; 1343205b6fc7SArmin Le Grand static sal_Int32 const s_nEvents(sizeof(s_EventNames)/sizeof(s_EventNames[0])); 1344cdf0e10cSrcweir 1345cdf0e10cSrcweir Sequence< OUString > SwDocShell::GetEventNames() 1346cdf0e10cSrcweir { 1347cdf0e10cSrcweir Sequence< OUString > aRet = SfxObjectShell::GetEventNames(); 1348cdf0e10cSrcweir sal_Int32 nLen = aRet.getLength(); 1349cdf0e10cSrcweir aRet.realloc(nLen + 6); 1350cdf0e10cSrcweir OUString* pNames = aRet.getArray(); 1351cdf0e10cSrcweir pNames[nLen++] = GetEventName(0); 1352cdf0e10cSrcweir pNames[nLen++] = GetEventName(1); 1353cdf0e10cSrcweir pNames[nLen++] = GetEventName(2); 1354cdf0e10cSrcweir pNames[nLen++] = GetEventName(3); 1355cdf0e10cSrcweir pNames[nLen++] = GetEventName(4); 1356cdf0e10cSrcweir pNames[nLen] = GetEventName(5); 1357cdf0e10cSrcweir 1358cdf0e10cSrcweir return aRet; 1359cdf0e10cSrcweir } 1360cdf0e10cSrcweir 1361cdf0e10cSrcweir rtl::OUString SwDocShell::GetEventName( sal_Int32 nIndex ) 1362cdf0e10cSrcweir { 1363205b6fc7SArmin Le Grand if (nIndex < s_nEvents) 1364205b6fc7SArmin Le Grand { 1365205b6fc7SArmin Le Grand return ::rtl::OUString::createFromAscii(s_EventNames[nIndex]); 1366205b6fc7SArmin Le Grand } 1367cdf0e10cSrcweir return rtl::OUString(); 1368cdf0e10cSrcweir } 1369cdf0e10cSrcweir 1370cdf0e10cSrcweir const ::sfx2::IXmlIdRegistry* SwDocShell::GetXmlIdRegistry() const 1371cdf0e10cSrcweir { 1372baef7ff7SOliver-Rainer Wittmann return mpDoc ? &mpDoc->GetXmlIdRegistry() : 0; 1373cdf0e10cSrcweir } 1374cdf0e10cSrcweir 1375cdf0e10cSrcweir 1376cdf0e10cSrcweir bool SwDocShell::IsChangeRecording() const 1377cdf0e10cSrcweir { 1378baef7ff7SOliver-Rainer Wittmann return (mpWrtShell->GetRedlineMode() & nsRedlineMode_t::REDLINE_ON) != 0; 1379cdf0e10cSrcweir } 1380cdf0e10cSrcweir 1381cdf0e10cSrcweir 1382cdf0e10cSrcweir bool SwDocShell::HasChangeRecordProtection() const 1383cdf0e10cSrcweir { 1384baef7ff7SOliver-Rainer Wittmann return mpWrtShell->getIDocumentRedlineAccess()->GetRedlinePassword().getLength() > 0; 1385cdf0e10cSrcweir } 1386cdf0e10cSrcweir 1387cdf0e10cSrcweir 1388cdf0e10cSrcweir void SwDocShell::SetChangeRecording( bool bActivate ) 1389cdf0e10cSrcweir { 1390cdf0e10cSrcweir sal_uInt16 nOn = bActivate ? nsRedlineMode_t::REDLINE_ON : 0; 1391baef7ff7SOliver-Rainer Wittmann sal_uInt16 nMode = mpWrtShell->GetRedlineMode(); 1392baef7ff7SOliver-Rainer Wittmann mpWrtShell->SetRedlineModeAndCheckInsMode( (nMode & ~nsRedlineMode_t::REDLINE_ON) | nOn); 1393cdf0e10cSrcweir } 1394cdf0e10cSrcweir 1395cdf0e10cSrcweir 1396cdf0e10cSrcweir bool SwDocShell::SetProtectionPassword( const String &rNewPassword ) 1397cdf0e10cSrcweir { 1398cdf0e10cSrcweir const SfxAllItemSet aSet( GetPool() ); 1399cdf0e10cSrcweir const SfxItemSet* pArgs = &aSet; 1400cdf0e10cSrcweir const SfxPoolItem* pItem = NULL; 1401cdf0e10cSrcweir 1402baef7ff7SOliver-Rainer Wittmann IDocumentRedlineAccess* pIDRA = mpWrtShell->getIDocumentRedlineAccess(); 1403cdf0e10cSrcweir Sequence< sal_Int8 > aPasswd = pIDRA->GetRedlinePassword(); 1404cdf0e10cSrcweir if (pArgs && SFX_ITEM_SET == pArgs->GetItemState( FN_REDLINE_PROTECT, sal_False, &pItem ) 1405cdf0e10cSrcweir && ((SfxBoolItem*)pItem)->GetValue() == (aPasswd.getLength() > 0)) 1406cdf0e10cSrcweir return false; 1407cdf0e10cSrcweir 1408cdf0e10cSrcweir bool bRes = false; 1409cdf0e10cSrcweir 1410cdf0e10cSrcweir if (rNewPassword.Len()) 1411cdf0e10cSrcweir { 1412cdf0e10cSrcweir // when password protection is applied change tracking must always be active 1413cdf0e10cSrcweir SetChangeRecording( true ); 1414cdf0e10cSrcweir 1415cdf0e10cSrcweir Sequence< sal_Int8 > aNewPasswd; 1416cdf0e10cSrcweir SvPasswordHelper::GetHashPassword( aNewPasswd, rNewPassword ); 1417cdf0e10cSrcweir pIDRA->SetRedlinePassword( aNewPasswd ); 1418cdf0e10cSrcweir bRes = true; 1419cdf0e10cSrcweir } 1420cdf0e10cSrcweir else 1421cdf0e10cSrcweir { 1422cdf0e10cSrcweir pIDRA->SetRedlinePassword( Sequence< sal_Int8 >() ); 1423cdf0e10cSrcweir bRes = true; 1424cdf0e10cSrcweir } 1425cdf0e10cSrcweir 1426cdf0e10cSrcweir return bRes; 1427cdf0e10cSrcweir } 1428cdf0e10cSrcweir 1429cdf0e10cSrcweir 1430cdf0e10cSrcweir bool SwDocShell::GetProtectionHash( /*out*/ ::com::sun::star::uno::Sequence< sal_Int8 > &rPasswordHash ) 1431cdf0e10cSrcweir { 1432cdf0e10cSrcweir bool bRes = false; 1433cdf0e10cSrcweir 1434cdf0e10cSrcweir const SfxAllItemSet aSet( GetPool() ); 1435cdf0e10cSrcweir const SfxItemSet* pArgs = &aSet; 1436cdf0e10cSrcweir const SfxPoolItem* pItem = NULL; 1437cdf0e10cSrcweir 1438baef7ff7SOliver-Rainer Wittmann IDocumentRedlineAccess* pIDRA = mpWrtShell->getIDocumentRedlineAccess(); 1439cdf0e10cSrcweir Sequence< sal_Int8 > aPasswdHash( pIDRA->GetRedlinePassword() ); 1440cdf0e10cSrcweir if (pArgs && SFX_ITEM_SET == pArgs->GetItemState( FN_REDLINE_PROTECT, sal_False, &pItem ) 1441cdf0e10cSrcweir && ((SfxBoolItem*)pItem)->GetValue() == (aPasswdHash.getLength() != 0)) 1442cdf0e10cSrcweir return false; 1443cdf0e10cSrcweir rPasswordHash = aPasswdHash; 1444cdf0e10cSrcweir bRes = true; 1445cdf0e10cSrcweir 1446cdf0e10cSrcweir return bRes; 1447cdf0e10cSrcweir } 1448cdf0e10cSrcweir 1449cdf0e10cSrcweir 1450