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