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