15b190011SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 35b190011SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 45b190011SAndrew Rist * or more contributor license agreements. See the NOTICE file 55b190011SAndrew Rist * distributed with this work for additional information 65b190011SAndrew Rist * regarding copyright ownership. The ASF licenses this file 75b190011SAndrew Rist * to you under the Apache License, Version 2.0 (the 85b190011SAndrew Rist * "License"); you may not use this file except in compliance 95b190011SAndrew Rist * with the License. You may obtain a copy of the License at 105b190011SAndrew Rist * 115b190011SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 125b190011SAndrew Rist * 135b190011SAndrew Rist * Unless required by applicable law or agreed to in writing, 145b190011SAndrew Rist * software distributed under the License is distributed on an 155b190011SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 165b190011SAndrew Rist * KIND, either express or implied. See the License for the 175b190011SAndrew Rist * specific language governing permissions and limitations 185b190011SAndrew Rist * under the License. 195b190011SAndrew Rist * 205b190011SAndrew Rist *************************************************************/ 215b190011SAndrew Rist 225b190011SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_sd.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include "PageListWatcher.hxx" 28cdf0e10cSrcweir #include <com/sun/star/text/WritingMode.hpp> 29cdf0e10cSrcweir #include <com/sun/star/document/PrinterIndependentLayout.hpp> 30cdf0e10cSrcweir #include <com/sun/star/i18n/ScriptType.hpp> 31cdf0e10cSrcweir #include <editeng/forbiddencharacterstable.hxx> 32cdf0e10cSrcweir 33cdf0e10cSrcweir #include <svx/svxids.hrc> 34cdf0e10cSrcweir #include <svl/srchitem.hxx> 35cdf0e10cSrcweir #include <editeng/eeitem.hxx> 36cdf0e10cSrcweir #include <editeng/scriptspaceitem.hxx> 37cdf0e10cSrcweir 38cdf0e10cSrcweir #include <unotools/useroptions.hxx> 39cdf0e10cSrcweir 40cdf0e10cSrcweir #include <sfx2/printer.hxx> 41cdf0e10cSrcweir #include <sfx2/app.hxx> 42cdf0e10cSrcweir #include <sfx2/linkmgr.hxx> 43cdf0e10cSrcweir #include <svx/dialogs.hrc> 44cdf0e10cSrcweir #include "Outliner.hxx" 45cdf0e10cSrcweir #include "app.hxx" 46cdf0e10cSrcweir #include <editeng/eeitem.hxx> 47cdf0e10cSrcweir #include <editeng/editstat.hxx> 48cdf0e10cSrcweir #include <editeng/fontitem.hxx> 49cdf0e10cSrcweir #include <svl/flagitem.hxx> 50cdf0e10cSrcweir #include <svx/svdoattr.hxx> 51cdf0e10cSrcweir #include <svx/svdotext.hxx> 52cdf0e10cSrcweir #include <editeng/bulitem.hxx> 53cdf0e10cSrcweir #include <editeng/numitem.hxx> 54cdf0e10cSrcweir #include <svx/svditer.hxx> 55cdf0e10cSrcweir #include <editeng/unolingu.hxx> 56cdf0e10cSrcweir #include <svl/itempool.hxx> 57cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp> 58cdf0e10cSrcweir #include <svx/xtable.hxx> 59cdf0e10cSrcweir #include <com/sun/star/linguistic2/XHyphenator.hpp> 60cdf0e10cSrcweir #include <com/sun/star/linguistic2/XSpellChecker1.hpp> 61cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp> 62cdf0e10cSrcweir #include <editeng/outlobj.hxx> 63cdf0e10cSrcweir #include <unotools/saveopt.hxx> 64cdf0e10cSrcweir #include <comphelper/extract.hxx> 65cdf0e10cSrcweir #include <i18npool/mslangid.hxx> 66cdf0e10cSrcweir #include <unotools/charclass.hxx> 67cdf0e10cSrcweir #include <comphelper/processfactory.hxx> 68cdf0e10cSrcweir #ifndef _SVTOOLS_PATHOPTIONS_HXX_ 69cdf0e10cSrcweir #include <unotools/pathoptions.hxx> 70cdf0e10cSrcweir #endif 71cdf0e10cSrcweir #include <unotools/lingucfg.hxx> 72cdf0e10cSrcweir #include <unotools/linguprops.hxx> 73cdf0e10cSrcweir 74cdf0e10cSrcweir #include "eetext.hxx" 75cdf0e10cSrcweir #include "drawdoc.hxx" 76cdf0e10cSrcweir #include "sdpage.hxx" 77cdf0e10cSrcweir #include "pglink.hxx" 78cdf0e10cSrcweir #include "sdattr.hxx" 79cdf0e10cSrcweir #include "glob.hrc" 80cdf0e10cSrcweir #include "glob.hxx" 81cdf0e10cSrcweir #include "stlpool.hxx" 82cdf0e10cSrcweir #include "sdiocmpt.hxx" 83cdf0e10cSrcweir #include "sdresid.hxx" 84cdf0e10cSrcweir #include "cusshow.hxx" 85cdf0e10cSrcweir #include "../ui/inc/DrawDocShell.hxx" 86cdf0e10cSrcweir #include "../ui/inc/GraphicDocShell.hxx" 87cdf0e10cSrcweir #include "../ui/inc/sdxfer.hxx" 88cdf0e10cSrcweir #include "../ui/inc/ViewShell.hxx" 89cdf0e10cSrcweir #include "../ui/inc/optsitem.hxx" 90cdf0e10cSrcweir #include "../ui/inc/FrameView.hxx" 91cdf0e10cSrcweir 92cdf0e10cSrcweir // #90477# 93cdf0e10cSrcweir #include <tools/tenccvt.hxx> 94cdf0e10cSrcweir 95cdf0e10cSrcweir using ::rtl::OUString; 96cdf0e10cSrcweir using namespace ::sd; 97cdf0e10cSrcweir using namespace ::com::sun::star; 98cdf0e10cSrcweir using namespace ::com::sun::star::uno; 99cdf0e10cSrcweir using namespace ::com::sun::star::lang; 100cdf0e10cSrcweir using namespace ::com::sun::star::linguistic2; 101cdf0e10cSrcweir 102cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 103cdf0e10cSrcweir 104cdf0e10cSrcweir TYPEINIT1( SdDrawDocument, FmFormModel ); 105cdf0e10cSrcweir 106cdf0e10cSrcweir SdDrawDocument* SdDrawDocument::pDocLockedInsertingLinks = NULL; 107cdf0e10cSrcweir 108cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 109cdf0e10cSrcweir 110cdf0e10cSrcweir PresentationSettings::PresentationSettings() 111cdf0e10cSrcweir : mbAll( true ), 112cdf0e10cSrcweir mbEndless( false ), 113cdf0e10cSrcweir mbCustomShow(false), 114cdf0e10cSrcweir mbManual( false ), 115cdf0e10cSrcweir mbMouseVisible( false ), 116cdf0e10cSrcweir mbMouseAsPen( false ), 117cdf0e10cSrcweir mbLockedPages( false ), 118cdf0e10cSrcweir mbAlwaysOnTop( false ), 119cdf0e10cSrcweir mbFullScreen( true ), 120cdf0e10cSrcweir mbAnimationAllowed( true ), 121cdf0e10cSrcweir mnPauseTimeout( 10 ), 122cdf0e10cSrcweir mbShowPauseLogo( false ), 123cdf0e10cSrcweir mbStartWithNavigator(false) 124cdf0e10cSrcweir { 125cdf0e10cSrcweir } 126cdf0e10cSrcweir 127cdf0e10cSrcweir // --------------------------------------------------------------------------- 128cdf0e10cSrcweir 129cdf0e10cSrcweir PresentationSettings::PresentationSettings( const PresentationSettings& r ) 130cdf0e10cSrcweir : maPresPage( r.maPresPage ), 131cdf0e10cSrcweir mbAll( r.mbAll ), 132cdf0e10cSrcweir mbEndless( r.mbEndless ), 133cdf0e10cSrcweir mbCustomShow( r.mbCustomShow ), 134cdf0e10cSrcweir mbManual( r.mbManual ), 135cdf0e10cSrcweir mbMouseVisible( r.mbMouseVisible ), 136cdf0e10cSrcweir mbMouseAsPen( r.mbMouseAsPen ), 137cdf0e10cSrcweir mbLockedPages( r.mbLockedPages ), 138cdf0e10cSrcweir mbAlwaysOnTop( r.mbAlwaysOnTop ), 139cdf0e10cSrcweir mbFullScreen( r.mbFullScreen ), 140cdf0e10cSrcweir mbAnimationAllowed( r.mbAnimationAllowed ), 141cdf0e10cSrcweir mnPauseTimeout( r.mnPauseTimeout ), 142cdf0e10cSrcweir mbShowPauseLogo( r.mbShowPauseLogo ), 143cdf0e10cSrcweir mbStartWithNavigator( r.mbStartWithNavigator ) 144cdf0e10cSrcweir { 145cdf0e10cSrcweir } 146cdf0e10cSrcweir 147cdf0e10cSrcweir // --------------------------------------------------------------------------- 148cdf0e10cSrcweir 149cdf0e10cSrcweir SdDrawDocument::SdDrawDocument(DocumentType eType, SfxObjectShell* pDrDocSh) 150cdf0e10cSrcweir : FmFormModel( SvtPathOptions().GetPalettePath(), NULL, pDrDocSh ) 151*0deba7fbSSteve Yin , bReadOnly(sal_False) 152cdf0e10cSrcweir , mpOutliner(NULL) 153cdf0e10cSrcweir , mpInternalOutliner(NULL) 154cdf0e10cSrcweir , mpWorkStartupTimer(NULL) 155cdf0e10cSrcweir , mpOnlineSpellingTimer(NULL) 156cdf0e10cSrcweir , mpOnlineSpellingList(NULL) 157cdf0e10cSrcweir , mpOnlineSearchItem(NULL) 158cdf0e10cSrcweir , mpFrameViewList( new List() ) 159cdf0e10cSrcweir , mpCustomShowList(NULL) 160cdf0e10cSrcweir , mpDocSh(static_cast< ::sd::DrawDocShell*>(pDrDocSh)) 161cdf0e10cSrcweir , mpCreatingTransferable( NULL ) 162cdf0e10cSrcweir , mbHasOnlineSpellErrors(sal_False) 163cdf0e10cSrcweir , mbInitialOnlineSpellingEnabled(sal_True) 164cdf0e10cSrcweir , mbNewOrLoadCompleted(sal_False) 165cdf0e10cSrcweir , mbStartWithPresentation( false ) 166cdf0e10cSrcweir , meLanguage( LANGUAGE_SYSTEM ) 167cdf0e10cSrcweir , meLanguageCJK( LANGUAGE_SYSTEM ) 168cdf0e10cSrcweir , meLanguageCTL( LANGUAGE_SYSTEM ) 169cdf0e10cSrcweir , mePageNumType(SVX_ARABIC) 170cdf0e10cSrcweir , mbAllocDocSh(sal_False) 171cdf0e10cSrcweir , meDocType(eType) 172cdf0e10cSrcweir , mpCharClass(NULL) 173cdf0e10cSrcweir , mpLocale(NULL) 174cdf0e10cSrcweir , mpDrawPageListWatcher(0) 175cdf0e10cSrcweir , mpMasterPageListWatcher(0) 176cdf0e10cSrcweir { 177cdf0e10cSrcweir // #109538# 178cdf0e10cSrcweir mpDrawPageListWatcher = ::std::auto_ptr<ImpDrawPageListWatcher>( 179cdf0e10cSrcweir new ImpDrawPageListWatcher(*this)); 180cdf0e10cSrcweir mpMasterPageListWatcher = ::std::auto_ptr<ImpMasterPageListWatcher>( 181cdf0e10cSrcweir new ImpMasterPageListWatcher(*this)); 182cdf0e10cSrcweir 183cdf0e10cSrcweir SetObjectShell(pDrDocSh); // fuer das VCDrawModel 184cdf0e10cSrcweir 185cdf0e10cSrcweir if (mpDocSh) 186cdf0e10cSrcweir { 187cdf0e10cSrcweir SetSwapGraphics(sal_True); 188cdf0e10cSrcweir } 189cdf0e10cSrcweir 190cdf0e10cSrcweir // Masseinheit (von App) und Massstab (von SdMod) setzen 191cdf0e10cSrcweir sal_Int32 nX, nY; 192cdf0e10cSrcweir SdOptions* pOptions = SD_MOD()->GetSdOptions(meDocType); 193cdf0e10cSrcweir pOptions->GetScale( nX, nY ); 194cdf0e10cSrcweir 195cdf0e10cSrcweir // #92067# Allow UI scale only for draw documents. 196cdf0e10cSrcweir if( eType == DOCUMENT_TYPE_DRAW ) 197cdf0e10cSrcweir SetUIUnit( (FieldUnit)pOptions->GetMetric(), Fraction( nX, nY ) ); // user-defined 198cdf0e10cSrcweir else 199cdf0e10cSrcweir SetUIUnit( (FieldUnit)pOptions->GetMetric(), Fraction( 1, 1 ) ); // default 200cdf0e10cSrcweir 201cdf0e10cSrcweir SetScaleUnit(MAP_100TH_MM); 202cdf0e10cSrcweir SetScaleFraction(Fraction(1, 1)); 203cdf0e10cSrcweir SetDefaultFontHeight(847); // 24p 204cdf0e10cSrcweir 205cdf0e10cSrcweir pItemPool->SetDefaultMetric(SFX_MAPUNIT_100TH_MM); 206cdf0e10cSrcweir pItemPool->FreezeIdRanges(); 207cdf0e10cSrcweir SetTextDefaults(); 208cdf0e10cSrcweir 209cdf0e10cSrcweir // die DrawingEngine muss auch wissen, wo er ist 210cdf0e10cSrcweir FmFormModel::SetStyleSheetPool( new SdStyleSheetPool( GetPool(), this ) ); 211cdf0e10cSrcweir 212cdf0e10cSrcweir // Dem DrawOutliner den StyleSheetPool setzen, damit Textobjekte richtig 213cdf0e10cSrcweir // eingelesen werden koennen. Der Link zum StyleRequest-Handler des 214cdf0e10cSrcweir // Dokuments wird erst in NewOrLoadCompleted gesetzt, da erst dann alle 215cdf0e10cSrcweir // Vorlagen existieren. 216cdf0e10cSrcweir SdrOutliner& rOutliner = GetDrawOutliner(); 217cdf0e10cSrcweir rOutliner.SetStyleSheetPool((SfxStyleSheetPool*)GetStyleSheetPool()); 218cdf0e10cSrcweir SetCalcFieldValueHdl( &rOutliner ); 219cdf0e10cSrcweir 220cdf0e10cSrcweir // set linguistic options 221cdf0e10cSrcweir { 222cdf0e10cSrcweir const SvtLinguConfig aLinguConfig; 223cdf0e10cSrcweir SvtLinguOptions aOptions; 224cdf0e10cSrcweir aLinguConfig.GetOptions( aOptions ); 225cdf0e10cSrcweir 226cdf0e10cSrcweir SetLanguage( MsLangId::resolveSystemLanguageByScriptType(aOptions.nDefaultLanguage, 227cdf0e10cSrcweir ::com::sun::star::i18n::ScriptType::LATIN), EE_CHAR_LANGUAGE ); 228cdf0e10cSrcweir SetLanguage( MsLangId::resolveSystemLanguageByScriptType(aOptions.nDefaultLanguage_CJK, 229cdf0e10cSrcweir ::com::sun::star::i18n::ScriptType::ASIAN), EE_CHAR_LANGUAGE_CJK ); 230cdf0e10cSrcweir SetLanguage( MsLangId::resolveSystemLanguageByScriptType(aOptions.nDefaultLanguage_CTL, 231cdf0e10cSrcweir ::com::sun::star::i18n::ScriptType::COMPLEX), EE_CHAR_LANGUAGE_CTL ); 232cdf0e10cSrcweir 233cdf0e10cSrcweir mbOnlineSpell = aOptions.bIsSpellAuto; 234cdf0e10cSrcweir } 235cdf0e10cSrcweir 236cdf0e10cSrcweir LanguageType eRealLanguage = MsLangId::getRealLanguage( meLanguage ); 237cdf0e10cSrcweir mpLocale = new ::com::sun::star::lang::Locale( MsLangId::convertLanguageToLocale( eRealLanguage )); 238cdf0e10cSrcweir mpCharClass = new CharClass( *mpLocale ); 239cdf0e10cSrcweir 240cdf0e10cSrcweir // If the current application language is a language that uses right-to-left text... 241cdf0e10cSrcweir LanguageType eRealCTLLanguage = Application::GetSettings().GetLanguage(); 242cdf0e10cSrcweir if( MsLangId::isRightToLeft( eRealCTLLanguage ) ) 243cdf0e10cSrcweir { 244cdf0e10cSrcweir // ... then we have to set this as a default 245cdf0e10cSrcweir SetDefaultWritingMode( ::com::sun::star::text::WritingMode_RL_TB ); 246cdf0e10cSrcweir } 247cdf0e10cSrcweir 248cdf0e10cSrcweir // for korean and japanese languages we have a different default for apply spacing between asian, latin and ctl text 249cdf0e10cSrcweir if( ( LANGUAGE_KOREAN == eRealCTLLanguage ) || ( LANGUAGE_KOREAN_JOHAB == eRealCTLLanguage ) || ( LANGUAGE_JAPANESE == eRealCTLLanguage ) ) 250cdf0e10cSrcweir { 251cdf0e10cSrcweir GetPool().GetSecondaryPool()->SetPoolDefaultItem( SvxScriptSpaceItem( sal_False, EE_PARA_ASIANCJKSPACING ) ); 252cdf0e10cSrcweir } 253cdf0e10cSrcweir 254cdf0e10cSrcweir // DefTab und SpellOptions setzen 255cdf0e10cSrcweir // Jetzt am Modul (SD) 256cdf0e10cSrcweir sal_uInt16 nDefTab = pOptions->GetDefTab(); 257cdf0e10cSrcweir SetDefaultTabulator( nDefTab ); 258cdf0e10cSrcweir 259cdf0e10cSrcweir try 260cdf0e10cSrcweir { 261cdf0e10cSrcweir Reference< XSpellChecker1 > xSpellChecker( LinguMgr::GetSpellChecker() ); 262cdf0e10cSrcweir if ( xSpellChecker.is() ) 263cdf0e10cSrcweir rOutliner.SetSpeller( xSpellChecker ); 264cdf0e10cSrcweir 265cdf0e10cSrcweir Reference< XHyphenator > xHyphenator( LinguMgr::GetHyphenator() ); 266cdf0e10cSrcweir if( xHyphenator.is() ) 267cdf0e10cSrcweir rOutliner.SetHyphenator( xHyphenator ); 268cdf0e10cSrcweir 269cdf0e10cSrcweir SetForbiddenCharsTable( new SvxForbiddenCharactersTable( ::comphelper::getProcessServiceFactory() ) ); 270cdf0e10cSrcweir } 271cdf0e10cSrcweir catch(...) 272cdf0e10cSrcweir { 273cdf0e10cSrcweir DBG_ERROR("Can't get SpellChecker"); 274cdf0e10cSrcweir } 275cdf0e10cSrcweir 276cdf0e10cSrcweir rOutliner.SetDefaultLanguage( Application::GetSettings().GetLanguage() ); 277cdf0e10cSrcweir 278cdf0e10cSrcweir if (mpDocSh) 279cdf0e10cSrcweir { 280cdf0e10cSrcweir SetLinkManager( new sfx2::LinkManager(mpDocSh) ); 281cdf0e10cSrcweir } 282cdf0e10cSrcweir 283cdf0e10cSrcweir sal_uLong nCntrl = rOutliner.GetControlWord(); 284cdf0e10cSrcweir nCntrl |= EE_CNTRL_ALLOWBIGOBJS; 285cdf0e10cSrcweir nCntrl |= EE_CNTRL_URLSFXEXECUTE; 286cdf0e10cSrcweir 287cdf0e10cSrcweir if (mbOnlineSpell) 288cdf0e10cSrcweir nCntrl |= EE_CNTRL_ONLINESPELLING; 289cdf0e10cSrcweir else 290cdf0e10cSrcweir nCntrl &= ~EE_CNTRL_ONLINESPELLING; 291cdf0e10cSrcweir 292cdf0e10cSrcweir nCntrl &= ~ EE_CNTRL_ULSPACESUMMATION; 293cdf0e10cSrcweir if ( meDocType != DOCUMENT_TYPE_IMPRESS ) 294cdf0e10cSrcweir SetSummationOfParagraphs( sal_False ); 295cdf0e10cSrcweir else 296cdf0e10cSrcweir { 297cdf0e10cSrcweir SetSummationOfParagraphs( pOptions->IsSummationOfParagraphs() ); 298cdf0e10cSrcweir if ( pOptions->IsSummationOfParagraphs() ) 299cdf0e10cSrcweir nCntrl |= EE_CNTRL_ULSPACESUMMATION; 300cdf0e10cSrcweir } 301cdf0e10cSrcweir rOutliner.SetControlWord(nCntrl); 302cdf0e10cSrcweir 303cdf0e10cSrcweir // Initialize the printer independent layout mode. 304cdf0e10cSrcweir SetPrinterIndependentLayout (pOptions->GetPrinterIndependentLayout()); 305cdf0e10cSrcweir 306cdf0e10cSrcweir // Dem HitTestOutliner den StyleSheetPool setzen. 307cdf0e10cSrcweir // Der Link zum StyleRequest-Handler des 308cdf0e10cSrcweir // Dokuments wird erst in NewOrLoadCompleted gesetzt, da erst dann alle 309cdf0e10cSrcweir // Vorlagen existieren. 310cdf0e10cSrcweir SfxItemSet aSet2( pHitTestOutliner->GetEmptyItemSet() ); 311cdf0e10cSrcweir pHitTestOutliner->SetStyleSheetPool( (SfxStyleSheetPool*)GetStyleSheetPool() ); 312cdf0e10cSrcweir 313cdf0e10cSrcweir SetCalcFieldValueHdl( pHitTestOutliner ); 314cdf0e10cSrcweir 315cdf0e10cSrcweir try 316cdf0e10cSrcweir { 317cdf0e10cSrcweir Reference< XSpellChecker1 > xSpellChecker( LinguMgr::GetSpellChecker() ); 318cdf0e10cSrcweir if ( xSpellChecker.is() ) 319cdf0e10cSrcweir pHitTestOutliner->SetSpeller( xSpellChecker ); 320cdf0e10cSrcweir 321cdf0e10cSrcweir Reference< XHyphenator > xHyphenator( LinguMgr::GetHyphenator() ); 322cdf0e10cSrcweir if( xHyphenator.is() ) 323cdf0e10cSrcweir pHitTestOutliner->SetHyphenator( xHyphenator ); 324cdf0e10cSrcweir } 325cdf0e10cSrcweir catch(...) 326cdf0e10cSrcweir { 327cdf0e10cSrcweir DBG_ERROR("Can't get SpellChecker"); 328cdf0e10cSrcweir } 329cdf0e10cSrcweir 330cdf0e10cSrcweir pHitTestOutliner->SetDefaultLanguage( Application::GetSettings().GetLanguage() ); 331cdf0e10cSrcweir 332cdf0e10cSrcweir sal_uLong nCntrl2 = pHitTestOutliner->GetControlWord(); 333cdf0e10cSrcweir nCntrl2 |= EE_CNTRL_ALLOWBIGOBJS; 334cdf0e10cSrcweir nCntrl2 |= EE_CNTRL_URLSFXEXECUTE; 335cdf0e10cSrcweir nCntrl2 &= ~EE_CNTRL_ONLINESPELLING; 336cdf0e10cSrcweir 337cdf0e10cSrcweir nCntrl2 &= ~ EE_CNTRL_ULSPACESUMMATION; 338cdf0e10cSrcweir if ( pOptions->IsSummationOfParagraphs() ) 339cdf0e10cSrcweir nCntrl2 |= EE_CNTRL_ULSPACESUMMATION; 340cdf0e10cSrcweir 341cdf0e10cSrcweir pHitTestOutliner->SetControlWord( nCntrl2 ); 342cdf0e10cSrcweir 343cdf0e10cSrcweir /************************************************************************** 344cdf0e10cSrcweir * Layer anlegen 345cdf0e10cSrcweir * 346cdf0e10cSrcweir * Es werden auf Pages und MasterPages folgende Default-Layer angelegt: 347cdf0e10cSrcweir * 348cdf0e10cSrcweir * Layer STR_LAYOUT : Standardlayer f�r alle Zeichenobjekte 349cdf0e10cSrcweir * 350cdf0e10cSrcweir * Layer STR_BCKGRND : Hintergrund der MasterPage 351cdf0e10cSrcweir * (auf normalen Pages z.Z. keine Verwendung) 352cdf0e10cSrcweir * 353cdf0e10cSrcweir * Layer STR_BCKGRNDOBJ: Objekte auf dem Hintergrund der MasterPage 354cdf0e10cSrcweir * (auf normalen Pages z.Z. keine Verwendung) 355cdf0e10cSrcweir * 356cdf0e10cSrcweir * Layer STR_CONTROLS : Standardlayer f�r Controls 357cdf0e10cSrcweir * 358cdf0e10cSrcweir **************************************************************************/ 359cdf0e10cSrcweir { 360cdf0e10cSrcweir String aControlLayerName( SdResId(STR_LAYER_CONTROLS) ); 361cdf0e10cSrcweir 362cdf0e10cSrcweir SdrLayerAdmin& rLayerAdmin = GetLayerAdmin(); 363cdf0e10cSrcweir rLayerAdmin.NewLayer( String(SdResId(STR_LAYER_LAYOUT)) ); 364cdf0e10cSrcweir rLayerAdmin.NewLayer( String(SdResId(STR_LAYER_BCKGRND)) ); 365cdf0e10cSrcweir rLayerAdmin.NewLayer( String(SdResId(STR_LAYER_BCKGRNDOBJ)) ); 366cdf0e10cSrcweir rLayerAdmin.NewLayer( aControlLayerName ); 367cdf0e10cSrcweir rLayerAdmin.NewLayer( String(SdResId(STR_LAYER_MEASURELINES)) ); 368cdf0e10cSrcweir 369cdf0e10cSrcweir rLayerAdmin.SetControlLayerName(aControlLayerName); 370cdf0e10cSrcweir } 371cdf0e10cSrcweir 372cdf0e10cSrcweir 373cdf0e10cSrcweir } 374cdf0e10cSrcweir 375cdf0e10cSrcweir /************************************************************************* 376cdf0e10cSrcweir |* 377cdf0e10cSrcweir |* Destruktor 378cdf0e10cSrcweir |* 379cdf0e10cSrcweir \************************************************************************/ 380cdf0e10cSrcweir 381cdf0e10cSrcweir SdDrawDocument::~SdDrawDocument() 382cdf0e10cSrcweir { 383cdf0e10cSrcweir Broadcast(SdrHint(HINT_MODELCLEARED)); 384cdf0e10cSrcweir 385cdf0e10cSrcweir if (mpWorkStartupTimer) 386cdf0e10cSrcweir { 387cdf0e10cSrcweir if ( mpWorkStartupTimer->IsActive() ) 388cdf0e10cSrcweir mpWorkStartupTimer->Stop(); 389cdf0e10cSrcweir 390cdf0e10cSrcweir delete mpWorkStartupTimer; 391cdf0e10cSrcweir mpWorkStartupTimer = NULL; 392cdf0e10cSrcweir } 393cdf0e10cSrcweir 394cdf0e10cSrcweir StopOnlineSpelling(); 395cdf0e10cSrcweir delete mpOnlineSearchItem; 396cdf0e10cSrcweir mpOnlineSearchItem = NULL; 397cdf0e10cSrcweir 398cdf0e10cSrcweir CloseBookmarkDoc(); 399cdf0e10cSrcweir SetAllocDocSh(sal_False); 400cdf0e10cSrcweir 401cdf0e10cSrcweir // #116168# 402cdf0e10cSrcweir ClearModel(sal_True); 403cdf0e10cSrcweir 404cdf0e10cSrcweir if (pLinkManager) 405cdf0e10cSrcweir { 406cdf0e10cSrcweir // BaseLinks freigeben 407cdf0e10cSrcweir if ( pLinkManager->GetLinks().Count() ) 408cdf0e10cSrcweir { 409cdf0e10cSrcweir pLinkManager->Remove( 0, pLinkManager->GetLinks().Count() ); 410cdf0e10cSrcweir } 411cdf0e10cSrcweir 412cdf0e10cSrcweir delete pLinkManager; 413cdf0e10cSrcweir pLinkManager = NULL; 414cdf0e10cSrcweir } 415cdf0e10cSrcweir 416cdf0e10cSrcweir ::sd::FrameView* pFrameView = NULL; 417cdf0e10cSrcweir 418cdf0e10cSrcweir for (sal_uLong i = 0; i < mpFrameViewList->Count(); i++) 419cdf0e10cSrcweir { 420cdf0e10cSrcweir // Ggf. FrameViews loeschen 421cdf0e10cSrcweir pFrameView = 422cdf0e10cSrcweir static_cast< ::sd::FrameView*>(mpFrameViewList->GetObject(i)); 423cdf0e10cSrcweir 424cdf0e10cSrcweir if (pFrameView) 425cdf0e10cSrcweir delete pFrameView; 426cdf0e10cSrcweir } 427cdf0e10cSrcweir 428cdf0e10cSrcweir delete mpFrameViewList; 429cdf0e10cSrcweir mpFrameViewList = NULL; 430cdf0e10cSrcweir 431cdf0e10cSrcweir if (mpCustomShowList) 432cdf0e10cSrcweir { 433cdf0e10cSrcweir for (sal_uLong j = 0; j < mpCustomShowList->Count(); j++) 434cdf0e10cSrcweir { 435cdf0e10cSrcweir // Ggf. CustomShows loeschen 436cdf0e10cSrcweir SdCustomShow* pCustomShow = (SdCustomShow*) mpCustomShowList->GetObject(j); 437cdf0e10cSrcweir delete pCustomShow; 438cdf0e10cSrcweir } 439cdf0e10cSrcweir 440cdf0e10cSrcweir delete mpCustomShowList; 441cdf0e10cSrcweir mpCustomShowList = NULL; 442cdf0e10cSrcweir } 443cdf0e10cSrcweir 444cdf0e10cSrcweir delete mpOutliner; 445cdf0e10cSrcweir mpOutliner = NULL; 446cdf0e10cSrcweir 447cdf0e10cSrcweir delete mpInternalOutliner; 448cdf0e10cSrcweir mpInternalOutliner = NULL; 449cdf0e10cSrcweir 450cdf0e10cSrcweir delete mpLocale; 451cdf0e10cSrcweir mpLocale = NULL; 452cdf0e10cSrcweir 453cdf0e10cSrcweir delete mpCharClass; 454cdf0e10cSrcweir mpCharClass = NULL; 455cdf0e10cSrcweir } 456cdf0e10cSrcweir 457cdf0e10cSrcweir /************************************************************************* 458cdf0e10cSrcweir |* 459cdf0e10cSrcweir |* Diese Methode erzeugt ein neues Dokument (SdDrawDocument) und gibt einen 460cdf0e10cSrcweir |* Zeiger darauf zurueck. Die Drawing Engine benutzt diese Methode um das 461cdf0e10cSrcweir |* Dokument oder Teile davon ins Clipboard/DragServer stellen zu koennen. 462cdf0e10cSrcweir |* 463cdf0e10cSrcweir \************************************************************************/ 464cdf0e10cSrcweir 465cdf0e10cSrcweir SdrModel* SdDrawDocument::AllocModel() const 466cdf0e10cSrcweir { 467cdf0e10cSrcweir SdDrawDocument* pNewModel = NULL; 468cdf0e10cSrcweir 469cdf0e10cSrcweir if( mpCreatingTransferable ) 470cdf0e10cSrcweir { 471cdf0e10cSrcweir // Dokument wird fuer Drag&Drop/Clipboard erzeugt, dafuer muss dem Dokument eine DocShell (SvPersist) bekannt sein 472cdf0e10cSrcweir SfxObjectShell* pObj = NULL; 473cdf0e10cSrcweir ::sd::DrawDocShell* pNewDocSh = NULL; 474cdf0e10cSrcweir 475cdf0e10cSrcweir if( meDocType == DOCUMENT_TYPE_IMPRESS ) 476cdf0e10cSrcweir mpCreatingTransferable->SetDocShell( new ::sd::DrawDocShell( 477cdf0e10cSrcweir SFX_CREATE_MODE_EMBEDDED, sal_True, meDocType ) ); 478cdf0e10cSrcweir else 479cdf0e10cSrcweir mpCreatingTransferable->SetDocShell( new ::sd::GraphicDocShell( 480cdf0e10cSrcweir SFX_CREATE_MODE_EMBEDDED, sal_True, meDocType ) ); 481cdf0e10cSrcweir 482cdf0e10cSrcweir pNewDocSh = static_cast< ::sd::DrawDocShell*>( pObj = mpCreatingTransferable->GetDocShell() ); 483cdf0e10cSrcweir pNewDocSh->DoInitNew( NULL ); 484cdf0e10cSrcweir pNewModel = pNewDocSh->GetDoc(); 485cdf0e10cSrcweir 486cdf0e10cSrcweir // Nur fuer Clipboard notwendig, 487cdf0e10cSrcweir // fuer Drag&Drop erfolgt dieses im DragServer 488cdf0e10cSrcweir SdStyleSheetPool* pOldStylePool = (SdStyleSheetPool*) GetStyleSheetPool(); 489cdf0e10cSrcweir SdStyleSheetPool* pNewStylePool = (SdStyleSheetPool*) pNewModel->GetStyleSheetPool(); 490cdf0e10cSrcweir 491cdf0e10cSrcweir pNewStylePool->CopyGraphicSheets(*pOldStylePool); 492cdf0e10cSrcweir pNewStylePool->CopyCellSheets(*pOldStylePool); 493cdf0e10cSrcweir pNewStylePool->CopyTableStyles(*pOldStylePool); 494cdf0e10cSrcweir 495cdf0e10cSrcweir 496cdf0e10cSrcweir for (sal_uInt16 i = 0; i < GetMasterSdPageCount(PK_STANDARD); i++) 497cdf0e10cSrcweir { 498cdf0e10cSrcweir // Alle Layouts der MasterPage mitnehmen 499cdf0e10cSrcweir String aOldLayoutName(((SdDrawDocument*) this)->GetMasterSdPage(i, PK_STANDARD)->GetLayoutName()); 500cdf0e10cSrcweir aOldLayoutName.Erase( aOldLayoutName.SearchAscii( SD_LT_SEPARATOR ) ); 501cdf0e10cSrcweir SdStyleSheetVector aCreatedSheets; 502cdf0e10cSrcweir pNewStylePool->CopyLayoutSheets(aOldLayoutName, *pOldStylePool, aCreatedSheets ); 503cdf0e10cSrcweir } 504cdf0e10cSrcweir 505cdf0e10cSrcweir pNewModel->NewOrLoadCompleted( DOC_LOADED ); // loaded from source document 506cdf0e10cSrcweir } 507cdf0e10cSrcweir else if( mbAllocDocSh ) 508cdf0e10cSrcweir { 509cdf0e10cSrcweir // Es wird eine DocShell erzeugt, welche mit GetAllocedDocSh() zurueckgegeben wird 510cdf0e10cSrcweir SdDrawDocument* pDoc = (SdDrawDocument*) this; 511cdf0e10cSrcweir pDoc->SetAllocDocSh(sal_False); 512cdf0e10cSrcweir pDoc->mxAllocedDocShRef = new ::sd::DrawDocShell( 513cdf0e10cSrcweir SFX_CREATE_MODE_EMBEDDED, sal_True, meDocType); 514cdf0e10cSrcweir pDoc->mxAllocedDocShRef->DoInitNew(NULL); 515cdf0e10cSrcweir pNewModel = pDoc->mxAllocedDocShRef->GetDoc(); 516cdf0e10cSrcweir } 517cdf0e10cSrcweir else 518cdf0e10cSrcweir { 519cdf0e10cSrcweir pNewModel = new SdDrawDocument(meDocType, NULL); 520cdf0e10cSrcweir } 521cdf0e10cSrcweir 522cdf0e10cSrcweir return pNewModel; 523cdf0e10cSrcweir } 524cdf0e10cSrcweir 525cdf0e10cSrcweir /************************************************************************* 526cdf0e10cSrcweir |* 527cdf0e10cSrcweir |* Diese Methode erzeugt eine neue Seite (SdPage) und gibt einen Zeiger 528cdf0e10cSrcweir |* darauf zurueck. Die Drawing Engine benutzt diese Methode beim Laden 529cdf0e10cSrcweir |* zur Erzeugung von Seiten (deren Typ sie ja nicht kennt, da es ABLEITUNGEN 530cdf0e10cSrcweir |* der SdrPage sind). 531cdf0e10cSrcweir |* 532cdf0e10cSrcweir \************************************************************************/ 533cdf0e10cSrcweir 534cdf0e10cSrcweir SdrPage* SdDrawDocument::AllocPage(FASTBOOL bMasterPage) 535cdf0e10cSrcweir { 536cdf0e10cSrcweir return new SdPage(*this, NULL, (sal_Bool)bMasterPage); 537cdf0e10cSrcweir } 538cdf0e10cSrcweir 539cdf0e10cSrcweir /************************************************************************* 540cdf0e10cSrcweir |* 541cdf0e10cSrcweir |* SetChanged(), das Model wurde geaendert 542cdf0e10cSrcweir |* 543cdf0e10cSrcweir \************************************************************************/ 544cdf0e10cSrcweir 545cdf0e10cSrcweir void SdDrawDocument::SetChanged(sal_Bool bFlag) 546cdf0e10cSrcweir { 547cdf0e10cSrcweir if (mpDocSh) 548cdf0e10cSrcweir { 549cdf0e10cSrcweir if (mbNewOrLoadCompleted && mpDocSh->IsEnableSetModified()) 550cdf0e10cSrcweir { 551cdf0e10cSrcweir // weitergeben an Basisklasse 552cdf0e10cSrcweir FmFormModel::SetChanged(bFlag); 553cdf0e10cSrcweir 554cdf0e10cSrcweir // an ObjectShell weiterleiten 555cdf0e10cSrcweir mpDocSh->SetModified(bFlag); 556cdf0e10cSrcweir } 557cdf0e10cSrcweir } 558cdf0e10cSrcweir else 559cdf0e10cSrcweir { 560cdf0e10cSrcweir // weitergeben an Basisklasse 561cdf0e10cSrcweir FmFormModel::SetChanged(bFlag); 562cdf0e10cSrcweir } 563cdf0e10cSrcweir } 564cdf0e10cSrcweir 565cdf0e10cSrcweir /************************************************************************* 566cdf0e10cSrcweir |* 567cdf0e10cSrcweir |* NbcSetChanged(), the model changed, don't call anybody else 568cdf0e10cSrcweir |* 569cdf0e10cSrcweir \************************************************************************/ 570cdf0e10cSrcweir 571cdf0e10cSrcweir void SdDrawDocument::NbcSetChanged(sal_Bool bFlag) 572cdf0e10cSrcweir { 573cdf0e10cSrcweir // #100237# forward to baseclass 574cdf0e10cSrcweir FmFormModel::SetChanged(bFlag); 575cdf0e10cSrcweir } 576cdf0e10cSrcweir 577cdf0e10cSrcweir /************************************************************************* 578cdf0e10cSrcweir |* 579cdf0e10cSrcweir |* NewOrLoadCompleted 580cdf0e10cSrcweir |* 581cdf0e10cSrcweir |* Wird gerufen, wenn das Dokument geladen wurde bzw. feststeht, dass es 582cdf0e10cSrcweir |* nicht mehr geladen wird. 583cdf0e10cSrcweir |* 584cdf0e10cSrcweir \************************************************************************/ 585cdf0e10cSrcweir 586cdf0e10cSrcweir void SdDrawDocument::NewOrLoadCompleted(DocCreationMode eMode) 587cdf0e10cSrcweir { 588cdf0e10cSrcweir if (eMode == NEW_DOC) 589cdf0e10cSrcweir { 590cdf0e10cSrcweir // Neues Dokument: 591cdf0e10cSrcweir // Praesentations- und Standardvorlagen erzeugen, 592cdf0e10cSrcweir // Pool fuer virtuelle Controls erzeugen 593cdf0e10cSrcweir CreateLayoutTemplates(); 594cdf0e10cSrcweir CreateDefaultCellStyles(); 595cdf0e10cSrcweir 596cdf0e10cSrcweir static_cast< SdStyleSheetPool* >( mxStyleSheetPool.get() )->CreatePseudosIfNecessary(); 597cdf0e10cSrcweir } 598cdf0e10cSrcweir else if (eMode == DOC_LOADED) 599cdf0e10cSrcweir { 600cdf0e10cSrcweir // Dokument wurde geladen: 601cdf0e10cSrcweir 602cdf0e10cSrcweir CheckMasterPages(); 603cdf0e10cSrcweir 604cdf0e10cSrcweir if ( GetMasterSdPageCount(PK_STANDARD) > 1 ) 605cdf0e10cSrcweir RemoveUnnecessaryMasterPages( NULL, sal_True, sal_False ); 606cdf0e10cSrcweir 607cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < GetPageCount(); i++ ) 608cdf0e10cSrcweir { 609cdf0e10cSrcweir // Check for correct layout names 610cdf0e10cSrcweir SdPage* pPage = (SdPage*) GetPage( i ); 611cdf0e10cSrcweir 612cdf0e10cSrcweir if(pPage->TRG_HasMasterPage()) 613cdf0e10cSrcweir { 614cdf0e10cSrcweir SdPage& rMaster = (SdPage&)pPage->TRG_GetMasterPage(); 615cdf0e10cSrcweir 616cdf0e10cSrcweir if(rMaster.GetLayoutName() != pPage->GetLayoutName()) 617cdf0e10cSrcweir { 618cdf0e10cSrcweir pPage->SetLayoutName(rMaster.GetLayoutName()); 619cdf0e10cSrcweir } 620cdf0e10cSrcweir } 621cdf0e10cSrcweir } 622cdf0e10cSrcweir 623cdf0e10cSrcweir for ( sal_uInt16 nPage = 0; nPage < GetMasterPageCount(); nPage++) 624cdf0e10cSrcweir { 625cdf0e10cSrcweir // LayoutName and PageName must be the same 626cdf0e10cSrcweir SdPage* pPage = (SdPage*) GetMasterPage( nPage ); 627cdf0e10cSrcweir 628cdf0e10cSrcweir String aName( pPage->GetLayoutName() ); 629cdf0e10cSrcweir aName.Erase( aName.SearchAscii( SD_LT_SEPARATOR ) ); 630cdf0e10cSrcweir 631cdf0e10cSrcweir if( aName != pPage->GetName() ) 632cdf0e10cSrcweir pPage->SetName( aName ); 633cdf0e10cSrcweir } 634cdf0e10cSrcweir 635cdf0e10cSrcweir // Sprachabhaengige Namen der StandardLayer erzeugen 636cdf0e10cSrcweir RestoreLayerNames(); 637cdf0e10cSrcweir 638cdf0e10cSrcweir // Sprachabhaengige Namen der Vorlagen setzen 639cdf0e10cSrcweir static_cast<SdStyleSheetPool*>(mxStyleSheetPool.get())->UpdateStdNames(); 640cdf0e10cSrcweir 641cdf0e10cSrcweir // Ggf. fehlende Vorlagen erzeugen (es gab z.B. frueher keinen Subtitle) 642cdf0e10cSrcweir static_cast<SdStyleSheetPool*>(mxStyleSheetPool.get())->CreatePseudosIfNecessary(); 643cdf0e10cSrcweir } 644cdf0e10cSrcweir 645cdf0e10cSrcweir // Standardvorlage an der Drawing Engine setzen 646cdf0e10cSrcweir String aName( SdResId(STR_STANDARD_STYLESHEET_NAME)); 647cdf0e10cSrcweir SetDefaultStyleSheet(static_cast<SfxStyleSheet*>(mxStyleSheetPool->Find(aName, SD_STYLE_FAMILY_GRAPHICS))); 648cdf0e10cSrcweir 6499e9dd2d5SArmin Le Grand // #119287# Set default StyleSheet for SdrGrafObj and SdrOle2Obj 6509e9dd2d5SArmin Le Grand SetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj(static_cast<SfxStyleSheet*>(mxStyleSheetPool->Find(String( SdResId(STR_POOLSHEET_OBJNOLINENOFILL)), SD_STYLE_FAMILY_GRAPHICS))); 6519e9dd2d5SArmin Le Grand 652cdf0e10cSrcweir // Draw-Outliner und Dokument Outliner initialisieren, 653cdf0e10cSrcweir // aber nicht den globalen Outliner, den der ist ja nicht 654cdf0e10cSrcweir // dokumentspezifisch wie StyleSheetPool und StyleRequestHandler 655cdf0e10cSrcweir ::Outliner& rDrawOutliner = GetDrawOutliner(); 656cdf0e10cSrcweir rDrawOutliner.SetStyleSheetPool((SfxStyleSheetPool*)GetStyleSheetPool()); 657cdf0e10cSrcweir sal_uLong nCntrl = rDrawOutliner.GetControlWord(); 658cdf0e10cSrcweir if (mbOnlineSpell) 659cdf0e10cSrcweir nCntrl |= EE_CNTRL_ONLINESPELLING; 660cdf0e10cSrcweir else 661cdf0e10cSrcweir nCntrl &= ~EE_CNTRL_ONLINESPELLING; 662cdf0e10cSrcweir rDrawOutliner.SetControlWord(nCntrl); 663cdf0e10cSrcweir 664cdf0e10cSrcweir // HitTest-Outliner und Dokument Outliner initialisieren, 665cdf0e10cSrcweir // aber nicht den globalen Outliner, den der ist ja nicht 666cdf0e10cSrcweir // dokumentspezifisch wie StyleSheetPool und StyleRequestHandler 667cdf0e10cSrcweir pHitTestOutliner->SetStyleSheetPool((SfxStyleSheetPool*)GetStyleSheetPool()); 668cdf0e10cSrcweir 669cdf0e10cSrcweir if(mpOutliner) 670cdf0e10cSrcweir { 671cdf0e10cSrcweir mpOutliner->SetStyleSheetPool((SfxStyleSheetPool*)GetStyleSheetPool()); 672cdf0e10cSrcweir } 673cdf0e10cSrcweir if(mpInternalOutliner) 674cdf0e10cSrcweir { 675cdf0e10cSrcweir mpInternalOutliner->SetStyleSheetPool((SfxStyleSheetPool*)GetStyleSheetPool()); 676cdf0e10cSrcweir } 677cdf0e10cSrcweir 678cdf0e10cSrcweir if ( eMode == DOC_LOADED ) 679cdf0e10cSrcweir { 680cdf0e10cSrcweir // Praesentationsobjekte muessen wieder Listener der entsprechenden 681cdf0e10cSrcweir // Vorlagen werden 682cdf0e10cSrcweir SdStyleSheetPool* pSPool = (SdStyleSheetPool*) GetStyleSheetPool(); 683cdf0e10cSrcweir sal_uInt16 nPage, nPageCount; 684cdf0e10cSrcweir 685cdf0e10cSrcweir // #96323# create missing layout style sheets for broken documents 686cdf0e10cSrcweir // that where created with the 5.2 687cdf0e10cSrcweir nPageCount = GetMasterSdPageCount( PK_STANDARD ); 688cdf0e10cSrcweir for (nPage = 0; nPage < nPageCount; nPage++) 689cdf0e10cSrcweir { 690cdf0e10cSrcweir SdPage* pPage = GetMasterSdPage(nPage, PK_STANDARD); 691cdf0e10cSrcweir pSPool->CreateLayoutStyleSheets( pPage->GetName(), sal_True ); 692cdf0e10cSrcweir } 693cdf0e10cSrcweir 694cdf0e10cSrcweir // Standard- und Notizseiten: 695cdf0e10cSrcweir for (nPage = 0; nPage < GetPageCount(); nPage++) 696cdf0e10cSrcweir { 697cdf0e10cSrcweir SdPage* pPage = (SdPage*)GetPage(nPage); 698cdf0e10cSrcweir NewOrLoadCompleted( pPage, pSPool ); 699cdf0e10cSrcweir } 700cdf0e10cSrcweir 701cdf0e10cSrcweir // Masterpages: 702cdf0e10cSrcweir for (nPage = 0; nPage < GetMasterPageCount(); nPage++) 703cdf0e10cSrcweir { 704cdf0e10cSrcweir SdPage* pPage = (SdPage*)GetMasterPage(nPage); 705cdf0e10cSrcweir 706cdf0e10cSrcweir NewOrLoadCompleted( pPage, pSPool ); 707cdf0e10cSrcweir } 708cdf0e10cSrcweir } 709cdf0e10cSrcweir 710cdf0e10cSrcweir mbNewOrLoadCompleted = sal_True; 711cdf0e10cSrcweir 712cdf0e10cSrcweir /************************************************************************** 713cdf0e10cSrcweir * Alle gelinkten Pages aktualisieren 714cdf0e10cSrcweir **************************************************************************/ 715cdf0e10cSrcweir SdPage* pPage = NULL; 716cdf0e10cSrcweir sal_uInt16 nMaxSdPages = GetSdPageCount(PK_STANDARD); 717cdf0e10cSrcweir 718cdf0e10cSrcweir for (sal_uInt16 nSdPage=0; nSdPage < nMaxSdPages; nSdPage++) 719cdf0e10cSrcweir { 720cdf0e10cSrcweir pPage = (SdPage*) GetSdPage(nSdPage, PK_STANDARD); 721cdf0e10cSrcweir 722cdf0e10cSrcweir if (pPage && pPage->GetFileName().Len() && pPage->GetBookmarkName().Len()) 723cdf0e10cSrcweir { 724cdf0e10cSrcweir pPage->SetModel(this); 725cdf0e10cSrcweir } 726cdf0e10cSrcweir } 727cdf0e10cSrcweir 728cdf0e10cSrcweir UpdateAllLinks(); 729cdf0e10cSrcweir 730cdf0e10cSrcweir SetChanged( sal_False ); 731cdf0e10cSrcweir } 732cdf0e10cSrcweir 733cdf0e10cSrcweir /** updates all links, only links in this document should by resolved */ 734cdf0e10cSrcweir void SdDrawDocument::UpdateAllLinks() 735cdf0e10cSrcweir { 736cdf0e10cSrcweir if ( !pDocLockedInsertingLinks && pLinkManager && pLinkManager->GetLinks().Count() ) 737cdf0e10cSrcweir { 738cdf0e10cSrcweir pDocLockedInsertingLinks = this; // lock inserting links. only links in this document should by resolved 739cdf0e10cSrcweir 740cdf0e10cSrcweir pLinkManager->UpdateAllLinks(); // query box: update all links? 741cdf0e10cSrcweir 742cdf0e10cSrcweir if( pDocLockedInsertingLinks == this ) 743cdf0e10cSrcweir pDocLockedInsertingLinks = NULL; // unlock inserting links 744cdf0e10cSrcweir } 745cdf0e10cSrcweir } 746cdf0e10cSrcweir 747cdf0e10cSrcweir /** this loops over the presentation objectes of a page and repairs some new settings 748cdf0e10cSrcweir from old binary files and resets all default strings for empty presentation objects. 749cdf0e10cSrcweir */ 750cdf0e10cSrcweir void SdDrawDocument::NewOrLoadCompleted( SdPage* pPage, SdStyleSheetPool* pSPool ) 751cdf0e10cSrcweir { 752cdf0e10cSrcweir /* cl removed because not needed anymore since binfilter 753cdf0e10cSrcweir SdrObjListIter aShapeIter( *pPage ); 754cdf0e10cSrcweir while( aShapeIter.IsMore() ) 755cdf0e10cSrcweir { 756cdf0e10cSrcweir OutlinerParaObject* pOPO = aShapeIter.Next()->GetOutlinerParaObject(); 757cdf0e10cSrcweir if( pOPO ) 758cdf0e10cSrcweir { 759cdf0e10cSrcweir if( pOPO->GetOutlinerMode() == OUTLINERMODE_DONTKNOW ) 760cdf0e10cSrcweir pOPO->SetOutlinerMode( OUTLINERMODE_TEXTOBJECT ); 761cdf0e10cSrcweir 762cdf0e10cSrcweir pOPO->FinishLoad( pSPool ); 763cdf0e10cSrcweir } 764cdf0e10cSrcweir } 765cdf0e10cSrcweir */ 766cdf0e10cSrcweir 767cdf0e10cSrcweir const sd::ShapeList& rPresentationShapes( pPage->GetPresentationShapeList() ); 768cdf0e10cSrcweir if(!rPresentationShapes.isEmpty()) 769cdf0e10cSrcweir { 770cdf0e10cSrcweir // Listen mit Titel- und Gliederungsvorlagen erstellen 771cdf0e10cSrcweir String aName = pPage->GetLayoutName(); 772cdf0e10cSrcweir aName.Erase( aName.SearchAscii( SD_LT_SEPARATOR )); 773cdf0e10cSrcweir 774cdf0e10cSrcweir List* pOutlineList = pSPool->CreateOutlineSheetList(aName); 775cdf0e10cSrcweir SfxStyleSheet* pTitleSheet = (SfxStyleSheet*) 776cdf0e10cSrcweir pSPool->GetTitleSheet(aName); 777cdf0e10cSrcweir 778cdf0e10cSrcweir SdrObject* pObj = rPresentationShapes.getNextShape(0); 779cdf0e10cSrcweir 780cdf0e10cSrcweir // jetzt nach Titel- und Gliederungstextobjekten suchen und 781cdf0e10cSrcweir // Objekte zu Listenern machen 782cdf0e10cSrcweir while(pObj) 783cdf0e10cSrcweir { 784cdf0e10cSrcweir if (pObj->GetObjInventor() == SdrInventor) 785cdf0e10cSrcweir { 786cdf0e10cSrcweir OutlinerParaObject* pOPO = pObj->GetOutlinerParaObject(); 787cdf0e10cSrcweir sal_uInt16 nId = pObj->GetObjIdentifier(); 788cdf0e10cSrcweir 789cdf0e10cSrcweir if (nId == OBJ_TITLETEXT) 790cdf0e10cSrcweir { 791cdf0e10cSrcweir if( pOPO && pOPO->GetOutlinerMode() == OUTLINERMODE_DONTKNOW ) 792cdf0e10cSrcweir pOPO->SetOutlinerMode( OUTLINERMODE_TITLEOBJECT ); 793cdf0e10cSrcweir 794cdf0e10cSrcweir // sal_True: harte Attribute dabei nicht loeschen 795cdf0e10cSrcweir if (pTitleSheet) 796cdf0e10cSrcweir pObj->SetStyleSheet(pTitleSheet, sal_True); 797cdf0e10cSrcweir } 798cdf0e10cSrcweir else if (nId == OBJ_OUTLINETEXT) 799cdf0e10cSrcweir { 800cdf0e10cSrcweir if( pOPO && pOPO->GetOutlinerMode() == OUTLINERMODE_DONTKNOW ) 801cdf0e10cSrcweir pOPO->SetOutlinerMode( OUTLINERMODE_OUTLINEOBJECT ); 802cdf0e10cSrcweir 803cdf0e10cSrcweir for (sal_uInt16 nSheet = 0; nSheet < 10; nSheet++) 804cdf0e10cSrcweir { 805cdf0e10cSrcweir SfxStyleSheet* pSheet = (SfxStyleSheet*)pOutlineList->GetObject(nSheet); 806cdf0e10cSrcweir if (pSheet) 807cdf0e10cSrcweir { 808cdf0e10cSrcweir pObj->StartListening(*pSheet); 809cdf0e10cSrcweir 810cdf0e10cSrcweir if( nSheet == 0) 811cdf0e10cSrcweir // Textrahmen hoert auf StyleSheet der Ebene1 812cdf0e10cSrcweir pObj->NbcSetStyleSheet(pSheet, sal_True); 813cdf0e10cSrcweir } 814cdf0e10cSrcweir } 815cdf0e10cSrcweir } 816cdf0e10cSrcweir 817cdf0e10cSrcweir if (pObj->ISA(SdrTextObj) && pObj->IsEmptyPresObj() && pPage) 818cdf0e10cSrcweir { 819cdf0e10cSrcweir PresObjKind ePresObjKind = pPage->GetPresObjKind(pObj); 820cdf0e10cSrcweir String aString( pPage->GetPresObjText(ePresObjKind) ); 821cdf0e10cSrcweir 822cdf0e10cSrcweir if (aString.Len()) 823cdf0e10cSrcweir { 824cdf0e10cSrcweir sd::Outliner* pInternalOutl = GetInternalOutliner(sal_True); 825cdf0e10cSrcweir pPage->SetObjText( (SdrTextObj*) pObj, pInternalOutl, ePresObjKind, aString ); 826cdf0e10cSrcweir pObj->NbcSetStyleSheet( pPage->GetStyleSheetForPresObj( ePresObjKind ), sal_True ); 827cdf0e10cSrcweir pInternalOutl->Clear(); 828cdf0e10cSrcweir } 829cdf0e10cSrcweir } 830cdf0e10cSrcweir } 831cdf0e10cSrcweir 832cdf0e10cSrcweir pObj = rPresentationShapes.getNextShape(pObj); 833cdf0e10cSrcweir } 834cdf0e10cSrcweir 835cdf0e10cSrcweir delete pOutlineList; 836cdf0e10cSrcweir } 837cdf0e10cSrcweir } 838cdf0e10cSrcweir 839cdf0e10cSrcweir /************************************************************************* 840cdf0e10cSrcweir |* 841cdf0e10cSrcweir |* Lokaler Outliner, welcher fuer den Gliederungsmodus verwendet wird 842cdf0e10cSrcweir |* In diesen Outliner werden ggf. OutlinerViews inserted! 843cdf0e10cSrcweir |* 844cdf0e10cSrcweir \************************************************************************/ 845cdf0e10cSrcweir 846cdf0e10cSrcweir ::sd::Outliner* SdDrawDocument::GetOutliner(sal_Bool bCreateOutliner) 847cdf0e10cSrcweir { 848cdf0e10cSrcweir if (!mpOutliner && bCreateOutliner) 849cdf0e10cSrcweir { 850cdf0e10cSrcweir mpOutliner = new ::sd::Outliner( this, OUTLINERMODE_TEXTOBJECT ); 851cdf0e10cSrcweir 852cdf0e10cSrcweir if (mpDocSh) 853cdf0e10cSrcweir mpOutliner->SetRefDevice( SD_MOD()->GetRefDevice( *mpDocSh ) ); 854cdf0e10cSrcweir 855cdf0e10cSrcweir mpOutliner->SetDefTab( nDefaultTabulator ); 856cdf0e10cSrcweir mpOutliner->SetStyleSheetPool((SfxStyleSheetPool*)GetStyleSheetPool()); 857cdf0e10cSrcweir } 858cdf0e10cSrcweir 859cdf0e10cSrcweir return(mpOutliner); 860cdf0e10cSrcweir } 861cdf0e10cSrcweir 862cdf0e10cSrcweir 863cdf0e10cSrcweir /************************************************************************* 864cdf0e10cSrcweir |* 865cdf0e10cSrcweir |* Interner Outliner, welcher fuer die Erzeugung von Textobjekten 866cdf0e10cSrcweir |* verwendet wird. 867cdf0e10cSrcweir |* In diesen Outliner werden keine OutlinerViews inserted! 868cdf0e10cSrcweir |* 869cdf0e10cSrcweir \************************************************************************/ 870cdf0e10cSrcweir 871cdf0e10cSrcweir ::sd::Outliner* SdDrawDocument::GetInternalOutliner(sal_Bool bCreateOutliner) 872cdf0e10cSrcweir { 873cdf0e10cSrcweir if ( !mpInternalOutliner && bCreateOutliner ) 874cdf0e10cSrcweir { 875cdf0e10cSrcweir mpInternalOutliner = new ::sd::Outliner( this, OUTLINERMODE_TEXTOBJECT ); 876cdf0e10cSrcweir // MT: 877cdf0e10cSrcweir // Dieser Outliner wird nur fuer das Erzeugen spezieller Textobjekte 878cdf0e10cSrcweir // verwendet. Da in diesen Textobjekten keine Portion-Informationen 879cdf0e10cSrcweir // gespeichert werden muessen, kann/soll der Update-Mode immer sal_False bleiben. 880cdf0e10cSrcweir mpInternalOutliner->SetUpdateMode( sal_False ); 881cdf0e10cSrcweir mpInternalOutliner->EnableUndo( sal_False ); 882cdf0e10cSrcweir 883cdf0e10cSrcweir if (mpDocSh) 884cdf0e10cSrcweir mpInternalOutliner->SetRefDevice( SD_MOD()->GetRefDevice( *mpDocSh ) ); 885cdf0e10cSrcweir 886cdf0e10cSrcweir mpInternalOutliner->SetDefTab( nDefaultTabulator ); 887cdf0e10cSrcweir mpInternalOutliner->SetStyleSheetPool((SfxStyleSheetPool*)GetStyleSheetPool()); 888cdf0e10cSrcweir } 889cdf0e10cSrcweir 890cdf0e10cSrcweir DBG_ASSERT( !mpInternalOutliner || ( mpInternalOutliner->GetUpdateMode() == sal_False ) , "InternalOutliner: UpdateMode = sal_True !" ); 891cdf0e10cSrcweir DBG_ASSERT( !mpInternalOutliner || ( mpInternalOutliner->IsUndoEnabled() == sal_False ), "InternalOutliner: Undo = sal_True !" ); 892cdf0e10cSrcweir 893cdf0e10cSrcweir // MT: Wer ihn vollmuellt, macht ihn auch gleich wieder leer: 894cdf0e10cSrcweir // Vorteile: 895cdf0e10cSrcweir // a) Keine unnoetigen Clear-Aufrufe 896cdf0e10cSrcweir // b) Kein Muell im Speicher. 897cdf0e10cSrcweir DBG_ASSERT( !mpInternalOutliner || ( ( mpInternalOutliner->GetParagraphCount() == 1 ) && ( mpInternalOutliner->GetText( mpInternalOutliner->GetParagraph( 0 ) ).Len() == 0 ) ), "InternalOutliner: Nicht leer!" ); 898cdf0e10cSrcweir 899cdf0e10cSrcweir return mpInternalOutliner; 900cdf0e10cSrcweir } 901cdf0e10cSrcweir 902cdf0e10cSrcweir /************************************************************************* 903cdf0e10cSrcweir |* 904cdf0e10cSrcweir |* OnlineSpelling ein/aus 905cdf0e10cSrcweir |* 906cdf0e10cSrcweir \************************************************************************/ 907cdf0e10cSrcweir 908cdf0e10cSrcweir void SdDrawDocument::SetOnlineSpell(sal_Bool bIn) 909cdf0e10cSrcweir { 910cdf0e10cSrcweir mbOnlineSpell = bIn; 911cdf0e10cSrcweir sal_uLong nCntrl = 0; 912cdf0e10cSrcweir 913cdf0e10cSrcweir if(mpOutliner) 914cdf0e10cSrcweir { 915cdf0e10cSrcweir nCntrl = mpOutliner->GetControlWord(); 916cdf0e10cSrcweir 917cdf0e10cSrcweir if(mbOnlineSpell) 918cdf0e10cSrcweir nCntrl |= EE_CNTRL_ONLINESPELLING; 919cdf0e10cSrcweir else 920cdf0e10cSrcweir nCntrl &= ~EE_CNTRL_ONLINESPELLING; 921cdf0e10cSrcweir 922cdf0e10cSrcweir mpOutliner->SetControlWord(nCntrl); 923cdf0e10cSrcweir } 924cdf0e10cSrcweir 925cdf0e10cSrcweir if (mpInternalOutliner) 926cdf0e10cSrcweir { 927cdf0e10cSrcweir nCntrl = mpInternalOutliner->GetControlWord(); 928cdf0e10cSrcweir 929cdf0e10cSrcweir if (mbOnlineSpell) 930cdf0e10cSrcweir nCntrl |= EE_CNTRL_ONLINESPELLING; 931cdf0e10cSrcweir else 932cdf0e10cSrcweir nCntrl &= ~EE_CNTRL_ONLINESPELLING; 933cdf0e10cSrcweir 934cdf0e10cSrcweir mpInternalOutliner->SetControlWord(nCntrl); 935cdf0e10cSrcweir } 936cdf0e10cSrcweir 937cdf0e10cSrcweir ::Outliner& rOutliner = GetDrawOutliner(); 938cdf0e10cSrcweir 939cdf0e10cSrcweir nCntrl = rOutliner.GetControlWord(); 940cdf0e10cSrcweir 941cdf0e10cSrcweir if (mbOnlineSpell) 942cdf0e10cSrcweir nCntrl |= EE_CNTRL_ONLINESPELLING; 943cdf0e10cSrcweir else 944cdf0e10cSrcweir nCntrl &= ~EE_CNTRL_ONLINESPELLING; 945cdf0e10cSrcweir 946cdf0e10cSrcweir rOutliner.SetControlWord(nCntrl); 947cdf0e10cSrcweir 948cdf0e10cSrcweir if (mbOnlineSpell) 949cdf0e10cSrcweir { 950cdf0e10cSrcweir StartOnlineSpelling(); 951cdf0e10cSrcweir } 952cdf0e10cSrcweir else 953cdf0e10cSrcweir { 954cdf0e10cSrcweir StopOnlineSpelling(); 955cdf0e10cSrcweir } 956cdf0e10cSrcweir } 957cdf0e10cSrcweir 958cdf0e10cSrcweir 959cdf0e10cSrcweir /************************************************************************* 960cdf0e10cSrcweir |* 961cdf0e10cSrcweir |* OnlineSpelling: Markierung ein/aus 962cdf0e10cSrcweir |* 963cdf0e10cSrcweir \************************************************************************/ 964cdf0e10cSrcweir 965cdf0e10cSrcweir uno::Reference< uno::XInterface > SdDrawDocument::createUnoModel() 966cdf0e10cSrcweir { 967cdf0e10cSrcweir uno::Reference< uno::XInterface > xModel; 968cdf0e10cSrcweir 969cdf0e10cSrcweir try 970cdf0e10cSrcweir { 971cdf0e10cSrcweir if ( mpDocSh ) 972cdf0e10cSrcweir xModel = mpDocSh->GetModel(); 973cdf0e10cSrcweir } 974cdf0e10cSrcweir catch( uno::RuntimeException& ) 975cdf0e10cSrcweir { 976cdf0e10cSrcweir } 977cdf0e10cSrcweir 978cdf0e10cSrcweir return xModel; 979cdf0e10cSrcweir } 980cdf0e10cSrcweir 981cdf0e10cSrcweir SvxNumType SdDrawDocument::GetPageNumType() const 982cdf0e10cSrcweir { 983cdf0e10cSrcweir return mePageNumType; 984cdf0e10cSrcweir } 985cdf0e10cSrcweir 986cdf0e10cSrcweir 987cdf0e10cSrcweir 988cdf0e10cSrcweir 989cdf0e10cSrcweir void SdDrawDocument::SetPrinterIndependentLayout (sal_Int32 nMode) 990cdf0e10cSrcweir { 991cdf0e10cSrcweir // #108104# 992cdf0e10cSrcweir // DBG_ASSERT (mpDocSh!=NULL, "No available document shell to set ref device at."); 993cdf0e10cSrcweir 994cdf0e10cSrcweir switch (nMode) 995cdf0e10cSrcweir { 996cdf0e10cSrcweir case ::com::sun::star::document::PrinterIndependentLayout::DISABLED: 997cdf0e10cSrcweir case ::com::sun::star::document::PrinterIndependentLayout::ENABLED: 998cdf0e10cSrcweir // Just store supported modes and inform the doc shell. 999cdf0e10cSrcweir mnPrinterIndependentLayout = nMode; 1000cdf0e10cSrcweir 1001cdf0e10cSrcweir // #108104# 1002cdf0e10cSrcweir // Since it is possible that a SdDrawDocument is constructed without a 1003cdf0e10cSrcweir // SdDrawDocShell the pointer member mpDocSh needs to be tested 1004cdf0e10cSrcweir // before the call is executed. This is e.-g. used for copy/paste. 1005cdf0e10cSrcweir if(mpDocSh) 1006cdf0e10cSrcweir { 1007cdf0e10cSrcweir mpDocSh->UpdateRefDevice (); 1008cdf0e10cSrcweir } 1009cdf0e10cSrcweir 1010cdf0e10cSrcweir break; 1011cdf0e10cSrcweir 1012cdf0e10cSrcweir default: 1013cdf0e10cSrcweir // Ignore unknown values. 1014cdf0e10cSrcweir break; 1015cdf0e10cSrcweir } 1016cdf0e10cSrcweir } 1017cdf0e10cSrcweir 1018cdf0e10cSrcweir sal_Int32 SdDrawDocument::GetPrinterIndependentLayout (void) 1019cdf0e10cSrcweir { 1020cdf0e10cSrcweir return mnPrinterIndependentLayout; 1021cdf0e10cSrcweir } 1022cdf0e10cSrcweir 1023cdf0e10cSrcweir bool SdDrawDocument::IsStartWithPresentation() const 1024cdf0e10cSrcweir { 1025cdf0e10cSrcweir return mbStartWithPresentation; 1026cdf0e10cSrcweir } 1027cdf0e10cSrcweir 1028cdf0e10cSrcweir void SdDrawDocument::SetStartWithPresentation( bool bStartWithPresentation ) 1029cdf0e10cSrcweir { 1030cdf0e10cSrcweir mbStartWithPresentation = bStartWithPresentation; 1031cdf0e10cSrcweir } 1032cdf0e10cSrcweir 1033cdf0e10cSrcweir // #109538# 1034cdf0e10cSrcweir void SdDrawDocument::PageListChanged() 1035cdf0e10cSrcweir { 1036cdf0e10cSrcweir mpDrawPageListWatcher->Invalidate(); 1037cdf0e10cSrcweir } 1038cdf0e10cSrcweir 1039cdf0e10cSrcweir // #109538# 1040cdf0e10cSrcweir void SdDrawDocument::MasterPageListChanged() 1041cdf0e10cSrcweir { 1042cdf0e10cSrcweir mpMasterPageListWatcher->Invalidate(); 1043cdf0e10cSrcweir } 1044cdf0e10cSrcweir 1045cdf0e10cSrcweir void SdDrawDocument::SetCalcFieldValueHdl(::Outliner* pOutliner) 1046cdf0e10cSrcweir { 1047cdf0e10cSrcweir pOutliner->SetCalcFieldValueHdl(LINK(SD_MOD(), SdModule, CalcFieldValueHdl)); 1048cdf0e10cSrcweir } 1049cdf0e10cSrcweir 1050cdf0e10cSrcweir sal_uInt16 SdDrawDocument::GetAnnotationAuthorIndex( const rtl::OUString& rAuthor ) 1051cdf0e10cSrcweir { 1052cdf0e10cSrcweir // force current user to have first color 1053cdf0e10cSrcweir if( maAnnotationAuthors.empty() ) 1054cdf0e10cSrcweir { 1055cdf0e10cSrcweir SvtUserOptions aUserOptions; 1056cdf0e10cSrcweir maAnnotationAuthors.push_back( aUserOptions.GetFullName() ); 1057cdf0e10cSrcweir } 1058cdf0e10cSrcweir 1059cdf0e10cSrcweir sal_uInt16 idx = 0; 1060cdf0e10cSrcweir for( std::vector< OUString >::iterator iter( maAnnotationAuthors.begin() ); iter != maAnnotationAuthors.end(); iter++ ) 1061cdf0e10cSrcweir { 1062cdf0e10cSrcweir if( (*iter) == rAuthor ) 1063cdf0e10cSrcweir { 1064cdf0e10cSrcweir break; 1065cdf0e10cSrcweir } 1066cdf0e10cSrcweir idx++; 1067cdf0e10cSrcweir } 1068cdf0e10cSrcweir 1069cdf0e10cSrcweir if( idx == maAnnotationAuthors.size() ) 1070cdf0e10cSrcweir { 1071cdf0e10cSrcweir maAnnotationAuthors.push_back( rAuthor ); 1072cdf0e10cSrcweir } 1073cdf0e10cSrcweir 1074cdf0e10cSrcweir return idx; 1075cdf0e10cSrcweir } 1076cdf0e10cSrcweir 1077cdf0e10cSrcweir // eof 1078