xref: /aoo41x/main/sd/source/core/drawdoc.cxx (revision f8c074b1)
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 
PresentationSettings()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 
PresentationSettings(const PresentationSettings & r)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 
SdDrawDocument(DocumentType eType,SfxObjectShell * pDrDocSh)149cdf0e10cSrcweir SdDrawDocument::SdDrawDocument(DocumentType eType, SfxObjectShell* pDrDocSh)
150cdf0e10cSrcweir : FmFormModel( SvtPathOptions().GetPalettePath(), NULL, pDrDocSh )
1510deba7fbSSteve 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 	{
280*f8c074b1SArrigo Marchiori         sfx2::LinkManager *linkMgr = new sfx2::LinkManager(mpDocSh);
281*f8c074b1SArrigo Marchiori         linkMgr->SetAutoAskUpdateAllLinks();
282*f8c074b1SArrigo Marchiori 		SetLinkManager( linkMgr );
283cdf0e10cSrcweir 	}
284cdf0e10cSrcweir 
285cdf0e10cSrcweir 	sal_uLong nCntrl = rOutliner.GetControlWord();
286cdf0e10cSrcweir 	nCntrl |= EE_CNTRL_ALLOWBIGOBJS;
287cdf0e10cSrcweir 	nCntrl |= EE_CNTRL_URLSFXEXECUTE;
288cdf0e10cSrcweir 
289cdf0e10cSrcweir 	if (mbOnlineSpell)
290cdf0e10cSrcweir 		nCntrl |= EE_CNTRL_ONLINESPELLING;
291cdf0e10cSrcweir 	else
292cdf0e10cSrcweir 		nCntrl &= ~EE_CNTRL_ONLINESPELLING;
293cdf0e10cSrcweir 
294cdf0e10cSrcweir 	nCntrl &= ~ EE_CNTRL_ULSPACESUMMATION;
295cdf0e10cSrcweir     if ( meDocType != DOCUMENT_TYPE_IMPRESS )
296cdf0e10cSrcweir         SetSummationOfParagraphs( sal_False );
297cdf0e10cSrcweir     else
298cdf0e10cSrcweir     {
299cdf0e10cSrcweir         SetSummationOfParagraphs( pOptions->IsSummationOfParagraphs() );
300cdf0e10cSrcweir     	if ( pOptions->IsSummationOfParagraphs() )
301cdf0e10cSrcweir 	    	nCntrl |= EE_CNTRL_ULSPACESUMMATION;
302cdf0e10cSrcweir     }
303cdf0e10cSrcweir 	rOutliner.SetControlWord(nCntrl);
304cdf0e10cSrcweir 
305cdf0e10cSrcweir     // Initialize the printer independent layout mode.
306cdf0e10cSrcweir     SetPrinterIndependentLayout (pOptions->GetPrinterIndependentLayout());
307cdf0e10cSrcweir 
308cdf0e10cSrcweir 	// Dem HitTestOutliner den StyleSheetPool setzen.
309cdf0e10cSrcweir 	// Der Link zum StyleRequest-Handler des
310cdf0e10cSrcweir 	// Dokuments wird erst in NewOrLoadCompleted gesetzt, da erst dann alle
311cdf0e10cSrcweir 	// Vorlagen existieren.
312cdf0e10cSrcweir 	SfxItemSet aSet2( pHitTestOutliner->GetEmptyItemSet() );
313cdf0e10cSrcweir 	pHitTestOutliner->SetStyleSheetPool( (SfxStyleSheetPool*)GetStyleSheetPool() );
314cdf0e10cSrcweir 
315cdf0e10cSrcweir 	SetCalcFieldValueHdl( pHitTestOutliner );
316cdf0e10cSrcweir 
317cdf0e10cSrcweir 	try
318cdf0e10cSrcweir 	{
319cdf0e10cSrcweir 	    Reference< XSpellChecker1 > xSpellChecker( LinguMgr::GetSpellChecker() );
320cdf0e10cSrcweir 	    if ( xSpellChecker.is() )
321cdf0e10cSrcweir 		    pHitTestOutliner->SetSpeller( xSpellChecker );
322cdf0e10cSrcweir 
323cdf0e10cSrcweir 	    Reference< XHyphenator > xHyphenator( LinguMgr::GetHyphenator() );
324cdf0e10cSrcweir 	    if( xHyphenator.is() )
325cdf0e10cSrcweir 		    pHitTestOutliner->SetHyphenator( xHyphenator );
326cdf0e10cSrcweir 	}
327cdf0e10cSrcweir 	catch(...)
328cdf0e10cSrcweir 	{
329cdf0e10cSrcweir 		DBG_ERROR("Can't get SpellChecker");
330cdf0e10cSrcweir 	}
331cdf0e10cSrcweir 
332cdf0e10cSrcweir 	pHitTestOutliner->SetDefaultLanguage( Application::GetSettings().GetLanguage() );
333cdf0e10cSrcweir 
334cdf0e10cSrcweir 	sal_uLong nCntrl2 = pHitTestOutliner->GetControlWord();
335cdf0e10cSrcweir 	nCntrl2 |= EE_CNTRL_ALLOWBIGOBJS;
336cdf0e10cSrcweir 	nCntrl2 |= EE_CNTRL_URLSFXEXECUTE;
337cdf0e10cSrcweir 	nCntrl2 &= ~EE_CNTRL_ONLINESPELLING;
338cdf0e10cSrcweir 
339cdf0e10cSrcweir 	nCntrl2 &= ~ EE_CNTRL_ULSPACESUMMATION;
340cdf0e10cSrcweir 	if ( pOptions->IsSummationOfParagraphs() )
341cdf0e10cSrcweir 		nCntrl2 |= EE_CNTRL_ULSPACESUMMATION;
342cdf0e10cSrcweir 
343cdf0e10cSrcweir 	pHitTestOutliner->SetControlWord( nCntrl2 );
344cdf0e10cSrcweir 
345cdf0e10cSrcweir 	/**************************************************************************
346cdf0e10cSrcweir 	* Layer anlegen
347cdf0e10cSrcweir 	*
348cdf0e10cSrcweir 	* Es werden auf Pages und MasterPages folgende Default-Layer angelegt:
349cdf0e10cSrcweir 	*
350cdf0e10cSrcweir 	* Layer STR_LAYOUT	  : Standardlayer f�r alle Zeichenobjekte
351cdf0e10cSrcweir 	*
352cdf0e10cSrcweir 	* Layer STR_BCKGRND   : Hintergrund der MasterPage
353cdf0e10cSrcweir 	*						(auf normalen Pages z.Z. keine Verwendung)
354cdf0e10cSrcweir 	*
355cdf0e10cSrcweir 	* Layer STR_BCKGRNDOBJ: Objekte auf dem Hintergrund der MasterPage
356cdf0e10cSrcweir 	*						(auf normalen Pages z.Z. keine Verwendung)
357cdf0e10cSrcweir 	*
358cdf0e10cSrcweir 	* Layer STR_CONTROLS  : Standardlayer f�r Controls
359cdf0e10cSrcweir 	*
360cdf0e10cSrcweir 	**************************************************************************/
361cdf0e10cSrcweir 	{
362cdf0e10cSrcweir 		String aControlLayerName( SdResId(STR_LAYER_CONTROLS) );
363cdf0e10cSrcweir 
364cdf0e10cSrcweir 		SdrLayerAdmin& rLayerAdmin = GetLayerAdmin();
365cdf0e10cSrcweir 		rLayerAdmin.NewLayer( String(SdResId(STR_LAYER_LAYOUT)) );
366cdf0e10cSrcweir 		rLayerAdmin.NewLayer( String(SdResId(STR_LAYER_BCKGRND)) );
367cdf0e10cSrcweir 		rLayerAdmin.NewLayer( String(SdResId(STR_LAYER_BCKGRNDOBJ)) );
368cdf0e10cSrcweir 		rLayerAdmin.NewLayer( aControlLayerName );
369cdf0e10cSrcweir 		rLayerAdmin.NewLayer( String(SdResId(STR_LAYER_MEASURELINES)) );
370cdf0e10cSrcweir 
371cdf0e10cSrcweir 		rLayerAdmin.SetControlLayerName(aControlLayerName);
372cdf0e10cSrcweir 	}
373cdf0e10cSrcweir 
374cdf0e10cSrcweir 
375cdf0e10cSrcweir }
376cdf0e10cSrcweir 
377cdf0e10cSrcweir /*************************************************************************
378cdf0e10cSrcweir |*
379cdf0e10cSrcweir |* Destruktor
380cdf0e10cSrcweir |*
381cdf0e10cSrcweir \************************************************************************/
382cdf0e10cSrcweir 
~SdDrawDocument()383cdf0e10cSrcweir SdDrawDocument::~SdDrawDocument()
384cdf0e10cSrcweir {
385cdf0e10cSrcweir 	Broadcast(SdrHint(HINT_MODELCLEARED));
386cdf0e10cSrcweir 
387cdf0e10cSrcweir 	if (mpWorkStartupTimer)
388cdf0e10cSrcweir 	{
389cdf0e10cSrcweir 		if ( mpWorkStartupTimer->IsActive() )
390cdf0e10cSrcweir 			mpWorkStartupTimer->Stop();
391cdf0e10cSrcweir 
392cdf0e10cSrcweir 		delete mpWorkStartupTimer;
393cdf0e10cSrcweir 		mpWorkStartupTimer = NULL;
394cdf0e10cSrcweir 	}
395cdf0e10cSrcweir 
396cdf0e10cSrcweir 	StopOnlineSpelling();
397cdf0e10cSrcweir 	delete mpOnlineSearchItem;
398cdf0e10cSrcweir 	mpOnlineSearchItem = NULL;
399cdf0e10cSrcweir 
400cdf0e10cSrcweir 	CloseBookmarkDoc();
401cdf0e10cSrcweir 	SetAllocDocSh(sal_False);
402cdf0e10cSrcweir 
403cdf0e10cSrcweir 	// #116168#
404cdf0e10cSrcweir 	ClearModel(sal_True);
405cdf0e10cSrcweir 
406cdf0e10cSrcweir 	if (pLinkManager)
407cdf0e10cSrcweir 	{
408cdf0e10cSrcweir 		// BaseLinks freigeben
409cdf0e10cSrcweir 		if ( pLinkManager->GetLinks().Count() )
410cdf0e10cSrcweir 		{
411cdf0e10cSrcweir 			pLinkManager->Remove( 0, pLinkManager->GetLinks().Count() );
412cdf0e10cSrcweir 		}
413cdf0e10cSrcweir 
414cdf0e10cSrcweir 		delete pLinkManager;
415cdf0e10cSrcweir 		pLinkManager = NULL;
416cdf0e10cSrcweir 	}
417cdf0e10cSrcweir 
418cdf0e10cSrcweir 	::sd::FrameView* pFrameView = NULL;
419cdf0e10cSrcweir 
420cdf0e10cSrcweir 	for (sal_uLong i = 0; i < mpFrameViewList->Count(); i++)
421cdf0e10cSrcweir 	{
422cdf0e10cSrcweir 		// Ggf. FrameViews loeschen
423cdf0e10cSrcweir 		pFrameView =
424cdf0e10cSrcweir             static_cast< ::sd::FrameView*>(mpFrameViewList->GetObject(i));
425cdf0e10cSrcweir 
426cdf0e10cSrcweir 		if (pFrameView)
427cdf0e10cSrcweir 			delete pFrameView;
428cdf0e10cSrcweir 	}
429cdf0e10cSrcweir 
430cdf0e10cSrcweir 	delete mpFrameViewList;
431cdf0e10cSrcweir 	mpFrameViewList = NULL;
432cdf0e10cSrcweir 
433cdf0e10cSrcweir 	if (mpCustomShowList)
434cdf0e10cSrcweir 	{
435cdf0e10cSrcweir 		for (sal_uLong j = 0; j < mpCustomShowList->Count(); j++)
436cdf0e10cSrcweir 		{
437cdf0e10cSrcweir 			// Ggf. CustomShows loeschen
438cdf0e10cSrcweir 			SdCustomShow* pCustomShow = (SdCustomShow*) mpCustomShowList->GetObject(j);
439cdf0e10cSrcweir 			delete pCustomShow;
440cdf0e10cSrcweir 		}
441cdf0e10cSrcweir 
442cdf0e10cSrcweir 		delete mpCustomShowList;
443cdf0e10cSrcweir 		mpCustomShowList = NULL;
444cdf0e10cSrcweir 	}
445cdf0e10cSrcweir 
446cdf0e10cSrcweir 	delete mpOutliner;
447cdf0e10cSrcweir 	mpOutliner = NULL;
448cdf0e10cSrcweir 
449cdf0e10cSrcweir 	delete mpInternalOutliner;
450cdf0e10cSrcweir 	mpInternalOutliner = NULL;
451cdf0e10cSrcweir 
452cdf0e10cSrcweir 	delete mpLocale;
453cdf0e10cSrcweir 	mpLocale = NULL;
454cdf0e10cSrcweir 
455cdf0e10cSrcweir 	delete mpCharClass;
456cdf0e10cSrcweir 	mpCharClass = NULL;
457cdf0e10cSrcweir }
458cdf0e10cSrcweir 
459cdf0e10cSrcweir /*************************************************************************
460cdf0e10cSrcweir |*
461cdf0e10cSrcweir |* Diese Methode erzeugt ein neues Dokument (SdDrawDocument) und gibt einen
462cdf0e10cSrcweir |* Zeiger darauf zurueck. Die Drawing Engine benutzt diese Methode um das
463cdf0e10cSrcweir |* Dokument oder Teile davon ins Clipboard/DragServer stellen zu koennen.
464cdf0e10cSrcweir |*
465cdf0e10cSrcweir \************************************************************************/
466cdf0e10cSrcweir 
AllocModel() const467cdf0e10cSrcweir SdrModel* SdDrawDocument::AllocModel() const
468cdf0e10cSrcweir {
469cdf0e10cSrcweir 	SdDrawDocument* pNewModel = NULL;
470cdf0e10cSrcweir 
471cdf0e10cSrcweir 	if( mpCreatingTransferable )
472cdf0e10cSrcweir 	{
473cdf0e10cSrcweir 		// Dokument wird fuer Drag&Drop/Clipboard erzeugt, dafuer muss dem Dokument eine DocShell (SvPersist) bekannt sein
474cdf0e10cSrcweir         SfxObjectShell*   pObj = NULL;
475cdf0e10cSrcweir 		::sd::DrawDocShell*		pNewDocSh = NULL;
476cdf0e10cSrcweir 
477cdf0e10cSrcweir     	if( meDocType == DOCUMENT_TYPE_IMPRESS )
478cdf0e10cSrcweir     		mpCreatingTransferable->SetDocShell( new ::sd::DrawDocShell(
479cdf0e10cSrcweir                 SFX_CREATE_MODE_EMBEDDED, sal_True, meDocType ) );
480cdf0e10cSrcweir 		else
481cdf0e10cSrcweir 	        mpCreatingTransferable->SetDocShell( new ::sd::GraphicDocShell(
482cdf0e10cSrcweir                 SFX_CREATE_MODE_EMBEDDED, sal_True, meDocType ) );
483cdf0e10cSrcweir 
484cdf0e10cSrcweir         pNewDocSh = static_cast< ::sd::DrawDocShell*>( pObj = mpCreatingTransferable->GetDocShell() );
485cdf0e10cSrcweir 		pNewDocSh->DoInitNew( NULL );
486cdf0e10cSrcweir 		pNewModel = pNewDocSh->GetDoc();
487cdf0e10cSrcweir 
488cdf0e10cSrcweir 		// Nur fuer Clipboard notwendig,
489cdf0e10cSrcweir 		// fuer Drag&Drop erfolgt dieses im DragServer
490cdf0e10cSrcweir 		SdStyleSheetPool* pOldStylePool = (SdStyleSheetPool*) GetStyleSheetPool();
491cdf0e10cSrcweir 		SdStyleSheetPool* pNewStylePool = (SdStyleSheetPool*) pNewModel->GetStyleSheetPool();
492cdf0e10cSrcweir 
493cdf0e10cSrcweir 		pNewStylePool->CopyGraphicSheets(*pOldStylePool);
494cdf0e10cSrcweir 		pNewStylePool->CopyCellSheets(*pOldStylePool);
495cdf0e10cSrcweir 		pNewStylePool->CopyTableStyles(*pOldStylePool);
496cdf0e10cSrcweir 
497cdf0e10cSrcweir 
498cdf0e10cSrcweir 		for (sal_uInt16 i = 0; i < GetMasterSdPageCount(PK_STANDARD); i++)
499cdf0e10cSrcweir 		{
500cdf0e10cSrcweir 			// Alle Layouts der MasterPage mitnehmen
501cdf0e10cSrcweir 			String aOldLayoutName(((SdDrawDocument*) this)->GetMasterSdPage(i, PK_STANDARD)->GetLayoutName());
502cdf0e10cSrcweir 			aOldLayoutName.Erase( aOldLayoutName.SearchAscii( SD_LT_SEPARATOR ) );
503cdf0e10cSrcweir 			SdStyleSheetVector aCreatedSheets;
504cdf0e10cSrcweir 			pNewStylePool->CopyLayoutSheets(aOldLayoutName, *pOldStylePool, aCreatedSheets );
505cdf0e10cSrcweir 		}
506cdf0e10cSrcweir 
507cdf0e10cSrcweir 		pNewModel->NewOrLoadCompleted( DOC_LOADED );  // loaded from source document
508cdf0e10cSrcweir 	}
509cdf0e10cSrcweir 	else if( mbAllocDocSh )
510cdf0e10cSrcweir 	{
511cdf0e10cSrcweir 		// Es wird eine DocShell erzeugt, welche mit GetAllocedDocSh() zurueckgegeben wird
512cdf0e10cSrcweir 		SdDrawDocument* pDoc = (SdDrawDocument*) this;
513cdf0e10cSrcweir 		pDoc->SetAllocDocSh(sal_False);
514cdf0e10cSrcweir 		pDoc->mxAllocedDocShRef = new ::sd::DrawDocShell(
515cdf0e10cSrcweir             SFX_CREATE_MODE_EMBEDDED, sal_True, meDocType);
516cdf0e10cSrcweir 		pDoc->mxAllocedDocShRef->DoInitNew(NULL);
517cdf0e10cSrcweir 		pNewModel = pDoc->mxAllocedDocShRef->GetDoc();
518cdf0e10cSrcweir 	}
519cdf0e10cSrcweir 	else
520cdf0e10cSrcweir 	{
521cdf0e10cSrcweir 		pNewModel = new SdDrawDocument(meDocType, NULL);
522cdf0e10cSrcweir 	}
523cdf0e10cSrcweir 
524cdf0e10cSrcweir 	return pNewModel;
525cdf0e10cSrcweir }
526cdf0e10cSrcweir 
527cdf0e10cSrcweir /*************************************************************************
528cdf0e10cSrcweir |*
529cdf0e10cSrcweir |* Diese Methode erzeugt eine neue Seite (SdPage) und gibt einen Zeiger
530cdf0e10cSrcweir |* darauf zurueck. Die Drawing Engine benutzt diese Methode beim Laden
531cdf0e10cSrcweir |* zur Erzeugung von Seiten (deren Typ sie ja nicht kennt, da es ABLEITUNGEN
532cdf0e10cSrcweir |* der SdrPage sind).
533cdf0e10cSrcweir |*
534cdf0e10cSrcweir \************************************************************************/
535cdf0e10cSrcweir 
AllocPage(FASTBOOL bMasterPage)536cdf0e10cSrcweir SdrPage* SdDrawDocument::AllocPage(FASTBOOL bMasterPage)
537cdf0e10cSrcweir {
538cdf0e10cSrcweir 	return new SdPage(*this, NULL, (sal_Bool)bMasterPage);
539cdf0e10cSrcweir }
540cdf0e10cSrcweir 
541cdf0e10cSrcweir /*************************************************************************
542cdf0e10cSrcweir |*
543cdf0e10cSrcweir |* SetChanged(), das Model wurde geaendert
544cdf0e10cSrcweir |*
545cdf0e10cSrcweir \************************************************************************/
546cdf0e10cSrcweir 
SetChanged(sal_Bool bFlag)547cdf0e10cSrcweir void SdDrawDocument::SetChanged(sal_Bool bFlag)
548cdf0e10cSrcweir {
549cdf0e10cSrcweir 	if (mpDocSh)
550cdf0e10cSrcweir 	{
551cdf0e10cSrcweir 		if (mbNewOrLoadCompleted && mpDocSh->IsEnableSetModified())
552cdf0e10cSrcweir 		{
553cdf0e10cSrcweir 			// weitergeben an Basisklasse
554cdf0e10cSrcweir 			FmFormModel::SetChanged(bFlag);
555cdf0e10cSrcweir 
556cdf0e10cSrcweir 			// an ObjectShell weiterleiten
557cdf0e10cSrcweir 			mpDocSh->SetModified(bFlag);
558cdf0e10cSrcweir 		}
559cdf0e10cSrcweir 	}
560cdf0e10cSrcweir 	else
561cdf0e10cSrcweir 	{
562cdf0e10cSrcweir 		// weitergeben an Basisklasse
563cdf0e10cSrcweir 		FmFormModel::SetChanged(bFlag);
564cdf0e10cSrcweir 	}
565cdf0e10cSrcweir }
566cdf0e10cSrcweir 
567cdf0e10cSrcweir /*************************************************************************
568cdf0e10cSrcweir |*
569cdf0e10cSrcweir |* NbcSetChanged(), the model changed, don't call anybody else
570cdf0e10cSrcweir |*
571cdf0e10cSrcweir \************************************************************************/
572cdf0e10cSrcweir 
NbcSetChanged(sal_Bool bFlag)573cdf0e10cSrcweir void SdDrawDocument::NbcSetChanged(sal_Bool bFlag)
574cdf0e10cSrcweir {
575cdf0e10cSrcweir     // #100237# forward to baseclass
576cdf0e10cSrcweir     FmFormModel::SetChanged(bFlag);
577cdf0e10cSrcweir }
578cdf0e10cSrcweir 
579cdf0e10cSrcweir /*************************************************************************
580cdf0e10cSrcweir |*
581cdf0e10cSrcweir |* NewOrLoadCompleted
582cdf0e10cSrcweir |*
583cdf0e10cSrcweir |* Wird gerufen, wenn das Dokument geladen wurde bzw. feststeht, dass es
584cdf0e10cSrcweir |* nicht mehr geladen wird.
585cdf0e10cSrcweir |*
586cdf0e10cSrcweir \************************************************************************/
587cdf0e10cSrcweir 
NewOrLoadCompleted(DocCreationMode eMode)588cdf0e10cSrcweir void SdDrawDocument::NewOrLoadCompleted(DocCreationMode eMode)
589cdf0e10cSrcweir {
590cdf0e10cSrcweir 	if (eMode == NEW_DOC)
591cdf0e10cSrcweir 	{
592cdf0e10cSrcweir 		// Neues Dokument:
593cdf0e10cSrcweir 		// Praesentations- und Standardvorlagen erzeugen,
594cdf0e10cSrcweir 		// Pool fuer virtuelle Controls erzeugen
595cdf0e10cSrcweir 		CreateLayoutTemplates();
596cdf0e10cSrcweir 		CreateDefaultCellStyles();
597cdf0e10cSrcweir 
598cdf0e10cSrcweir 		static_cast< SdStyleSheetPool* >( mxStyleSheetPool.get() )->CreatePseudosIfNecessary();
599cdf0e10cSrcweir 	}
600cdf0e10cSrcweir 	else if (eMode == DOC_LOADED)
601cdf0e10cSrcweir 	{
602cdf0e10cSrcweir 			// Dokument wurde geladen:
603cdf0e10cSrcweir 
604cdf0e10cSrcweir 		CheckMasterPages();
605cdf0e10cSrcweir 
606cdf0e10cSrcweir 		if ( GetMasterSdPageCount(PK_STANDARD) > 1 )
607cdf0e10cSrcweir 			RemoveUnnecessaryMasterPages( NULL, sal_True, sal_False );
608cdf0e10cSrcweir 
609cdf0e10cSrcweir 		for ( sal_uInt16 i = 0; i < GetPageCount(); i++ )
610cdf0e10cSrcweir 		{
611cdf0e10cSrcweir 			// Check for correct layout names
612cdf0e10cSrcweir 			SdPage* pPage = (SdPage*) GetPage( i );
613cdf0e10cSrcweir 
614cdf0e10cSrcweir 			if(pPage->TRG_HasMasterPage())
615cdf0e10cSrcweir 			{
616cdf0e10cSrcweir 				SdPage& rMaster = (SdPage&)pPage->TRG_GetMasterPage();
617cdf0e10cSrcweir 
618cdf0e10cSrcweir 				if(rMaster.GetLayoutName() != pPage->GetLayoutName())
619cdf0e10cSrcweir 				{
620cdf0e10cSrcweir 					pPage->SetLayoutName(rMaster.GetLayoutName());
621cdf0e10cSrcweir 				}
622cdf0e10cSrcweir 			}
623cdf0e10cSrcweir 		}
624cdf0e10cSrcweir 
625cdf0e10cSrcweir 		for ( sal_uInt16 nPage = 0; nPage < GetMasterPageCount(); nPage++)
626cdf0e10cSrcweir 		{
627cdf0e10cSrcweir 			// LayoutName and PageName must be the same
628cdf0e10cSrcweir 			SdPage* pPage = (SdPage*) GetMasterPage( nPage );
629cdf0e10cSrcweir 
630cdf0e10cSrcweir 			String aName( pPage->GetLayoutName() );
631cdf0e10cSrcweir 			aName.Erase( aName.SearchAscii( SD_LT_SEPARATOR ) );
632cdf0e10cSrcweir 
633cdf0e10cSrcweir 			if( aName != pPage->GetName() )
634cdf0e10cSrcweir 				pPage->SetName( aName );
635cdf0e10cSrcweir 		}
636cdf0e10cSrcweir 
637cdf0e10cSrcweir 		// Sprachabhaengige Namen der StandardLayer erzeugen
638cdf0e10cSrcweir 		RestoreLayerNames();
639cdf0e10cSrcweir 
640cdf0e10cSrcweir 		// Sprachabhaengige Namen der Vorlagen setzen
641cdf0e10cSrcweir 		static_cast<SdStyleSheetPool*>(mxStyleSheetPool.get())->UpdateStdNames();
642cdf0e10cSrcweir 
643cdf0e10cSrcweir 		// Ggf. fehlende Vorlagen erzeugen (es gab z.B. frueher keinen Subtitle)
644cdf0e10cSrcweir 		static_cast<SdStyleSheetPool*>(mxStyleSheetPool.get())->CreatePseudosIfNecessary();
645cdf0e10cSrcweir 	}
646cdf0e10cSrcweir 
647cdf0e10cSrcweir 	// Standardvorlage an der Drawing Engine setzen
648cdf0e10cSrcweir 	String aName( SdResId(STR_STANDARD_STYLESHEET_NAME));
649cdf0e10cSrcweir 	SetDefaultStyleSheet(static_cast<SfxStyleSheet*>(mxStyleSheetPool->Find(aName, SD_STYLE_FAMILY_GRAPHICS)));
650cdf0e10cSrcweir 
6519e9dd2d5SArmin Le Grand     // #119287# Set default StyleSheet for SdrGrafObj and SdrOle2Obj
6529e9dd2d5SArmin Le Grand 	SetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj(static_cast<SfxStyleSheet*>(mxStyleSheetPool->Find(String( SdResId(STR_POOLSHEET_OBJNOLINENOFILL)), SD_STYLE_FAMILY_GRAPHICS)));
6539e9dd2d5SArmin Le Grand 
654cdf0e10cSrcweir 	// Draw-Outliner und  Dokument Outliner initialisieren,
655cdf0e10cSrcweir 	// aber nicht den globalen Outliner, den der ist ja nicht
656cdf0e10cSrcweir 	// dokumentspezifisch wie StyleSheetPool und StyleRequestHandler
657cdf0e10cSrcweir 	::Outliner& rDrawOutliner = GetDrawOutliner();
658cdf0e10cSrcweir 	rDrawOutliner.SetStyleSheetPool((SfxStyleSheetPool*)GetStyleSheetPool());
659cdf0e10cSrcweir 	sal_uLong nCntrl = rDrawOutliner.GetControlWord();
660cdf0e10cSrcweir 	if (mbOnlineSpell)
661cdf0e10cSrcweir 		nCntrl |= EE_CNTRL_ONLINESPELLING;
662cdf0e10cSrcweir 	else
663cdf0e10cSrcweir 		nCntrl &= ~EE_CNTRL_ONLINESPELLING;
664cdf0e10cSrcweir 	rDrawOutliner.SetControlWord(nCntrl);
665cdf0e10cSrcweir 
666cdf0e10cSrcweir 	// HitTest-Outliner und  Dokument Outliner initialisieren,
667cdf0e10cSrcweir 	// aber nicht den globalen Outliner, den der ist ja nicht
668cdf0e10cSrcweir 	// dokumentspezifisch wie StyleSheetPool und StyleRequestHandler
669cdf0e10cSrcweir 	pHitTestOutliner->SetStyleSheetPool((SfxStyleSheetPool*)GetStyleSheetPool());
670cdf0e10cSrcweir 
671cdf0e10cSrcweir 	if(mpOutliner)
672cdf0e10cSrcweir 	{
673cdf0e10cSrcweir 		mpOutliner->SetStyleSheetPool((SfxStyleSheetPool*)GetStyleSheetPool());
674cdf0e10cSrcweir 	}
675cdf0e10cSrcweir 	if(mpInternalOutliner)
676cdf0e10cSrcweir 	{
677cdf0e10cSrcweir 		mpInternalOutliner->SetStyleSheetPool((SfxStyleSheetPool*)GetStyleSheetPool());
678cdf0e10cSrcweir 	}
679cdf0e10cSrcweir 
680cdf0e10cSrcweir 	if ( eMode == DOC_LOADED )
681cdf0e10cSrcweir 	{
682cdf0e10cSrcweir 		// Praesentationsobjekte muessen wieder Listener der entsprechenden
683cdf0e10cSrcweir 		// Vorlagen werden
684cdf0e10cSrcweir 		SdStyleSheetPool* pSPool = (SdStyleSheetPool*) GetStyleSheetPool();
685cdf0e10cSrcweir 		sal_uInt16 nPage, nPageCount;
686cdf0e10cSrcweir 
687cdf0e10cSrcweir 		// #96323# create missing layout style sheets for broken documents
688cdf0e10cSrcweir 		//		   that where created with the 5.2
689cdf0e10cSrcweir 		nPageCount = GetMasterSdPageCount( PK_STANDARD );
690cdf0e10cSrcweir 		for (nPage = 0; nPage < nPageCount; nPage++)
691cdf0e10cSrcweir 		{
692cdf0e10cSrcweir 			SdPage* pPage = GetMasterSdPage(nPage, PK_STANDARD);
693cdf0e10cSrcweir 			pSPool->CreateLayoutStyleSheets( pPage->GetName(), sal_True );
694cdf0e10cSrcweir 		}
695cdf0e10cSrcweir 
696cdf0e10cSrcweir 		// Standard- und Notizseiten:
697cdf0e10cSrcweir 		for (nPage = 0; nPage < GetPageCount(); nPage++)
698cdf0e10cSrcweir 		{
699cdf0e10cSrcweir 			SdPage* pPage = (SdPage*)GetPage(nPage);
700cdf0e10cSrcweir 			NewOrLoadCompleted( pPage, pSPool );
701cdf0e10cSrcweir 		}
702cdf0e10cSrcweir 
703cdf0e10cSrcweir 		// Masterpages:
704cdf0e10cSrcweir 		for (nPage = 0; nPage < GetMasterPageCount(); nPage++)
705cdf0e10cSrcweir 		{
706cdf0e10cSrcweir 			SdPage* pPage = (SdPage*)GetMasterPage(nPage);
707cdf0e10cSrcweir 
708cdf0e10cSrcweir 			NewOrLoadCompleted( pPage, pSPool );
709cdf0e10cSrcweir 		}
710cdf0e10cSrcweir 	}
711cdf0e10cSrcweir 
712cdf0e10cSrcweir 	mbNewOrLoadCompleted = sal_True;
713cdf0e10cSrcweir 
714cdf0e10cSrcweir 	/**************************************************************************
715cdf0e10cSrcweir 	* Alle gelinkten Pages aktualisieren
716cdf0e10cSrcweir 	**************************************************************************/
717cdf0e10cSrcweir 	SdPage* pPage = NULL;
718cdf0e10cSrcweir 	sal_uInt16 nMaxSdPages = GetSdPageCount(PK_STANDARD);
719cdf0e10cSrcweir 
720cdf0e10cSrcweir 	for (sal_uInt16 nSdPage=0; nSdPage < nMaxSdPages; nSdPage++)
721cdf0e10cSrcweir 	{
722cdf0e10cSrcweir 		pPage = (SdPage*) GetSdPage(nSdPage, PK_STANDARD);
723cdf0e10cSrcweir 
724cdf0e10cSrcweir 		if (pPage && pPage->GetFileName().Len() && pPage->GetBookmarkName().Len())
725cdf0e10cSrcweir 		{
726cdf0e10cSrcweir 			pPage->SetModel(this);
727cdf0e10cSrcweir 		}
728cdf0e10cSrcweir 	}
729cdf0e10cSrcweir 
730cdf0e10cSrcweir 	UpdateAllLinks();
731cdf0e10cSrcweir 
732cdf0e10cSrcweir 	SetChanged( sal_False );
733cdf0e10cSrcweir }
734cdf0e10cSrcweir 
735cdf0e10cSrcweir /** updates all links, only links in this document should by resolved */
UpdateAllLinks()736cdf0e10cSrcweir void SdDrawDocument::UpdateAllLinks()
737cdf0e10cSrcweir {
738cdf0e10cSrcweir 	if ( !pDocLockedInsertingLinks && pLinkManager && pLinkManager->GetLinks().Count() )
739cdf0e10cSrcweir 	{
740cdf0e10cSrcweir 		pDocLockedInsertingLinks = this; // lock inserting links. only links in this document should by resolved
741cdf0e10cSrcweir 
742cdf0e10cSrcweir 		pLinkManager->UpdateAllLinks();  // query box: update all links?
743cdf0e10cSrcweir 
744cdf0e10cSrcweir 		if( pDocLockedInsertingLinks == this )
745cdf0e10cSrcweir 			pDocLockedInsertingLinks = NULL;  // unlock inserting links
746cdf0e10cSrcweir 	}
747cdf0e10cSrcweir }
748cdf0e10cSrcweir 
749cdf0e10cSrcweir /** this loops over the presentation objectes of a page and repairs some new settings
750cdf0e10cSrcweir 	from old binary files and resets all default strings for empty presentation objects.
751cdf0e10cSrcweir */
NewOrLoadCompleted(SdPage * pPage,SdStyleSheetPool * pSPool)752cdf0e10cSrcweir void SdDrawDocument::NewOrLoadCompleted( SdPage* pPage, SdStyleSheetPool* pSPool )
753cdf0e10cSrcweir {
754cdf0e10cSrcweir /* cl removed because not needed anymore since binfilter
755cdf0e10cSrcweir 	SdrObjListIter aShapeIter( *pPage );
756cdf0e10cSrcweir 	while( aShapeIter.IsMore() )
757cdf0e10cSrcweir 	{
758cdf0e10cSrcweir 		OutlinerParaObject* pOPO = aShapeIter.Next()->GetOutlinerParaObject();
759cdf0e10cSrcweir 		if( pOPO )
760cdf0e10cSrcweir 		{
761cdf0e10cSrcweir 			if( pOPO->GetOutlinerMode() == OUTLINERMODE_DONTKNOW )
762cdf0e10cSrcweir 				pOPO->SetOutlinerMode( OUTLINERMODE_TEXTOBJECT );
763cdf0e10cSrcweir 
764cdf0e10cSrcweir 			pOPO->FinishLoad( pSPool );
765cdf0e10cSrcweir 		}
766cdf0e10cSrcweir 	}
767cdf0e10cSrcweir */
768cdf0e10cSrcweir 
769cdf0e10cSrcweir 	const sd::ShapeList& rPresentationShapes( pPage->GetPresentationShapeList() );
770cdf0e10cSrcweir 	if(!rPresentationShapes.isEmpty())
771cdf0e10cSrcweir 	{
772cdf0e10cSrcweir 		// Listen mit Titel- und Gliederungsvorlagen erstellen
773cdf0e10cSrcweir 		String aName = pPage->GetLayoutName();
774cdf0e10cSrcweir 		aName.Erase( aName.SearchAscii( SD_LT_SEPARATOR ));
775cdf0e10cSrcweir 
776cdf0e10cSrcweir 		List* pOutlineList = pSPool->CreateOutlineSheetList(aName);
777cdf0e10cSrcweir 		SfxStyleSheet* pTitleSheet = (SfxStyleSheet*)
778cdf0e10cSrcweir 										pSPool->GetTitleSheet(aName);
779cdf0e10cSrcweir 
780cdf0e10cSrcweir 		SdrObject* pObj = rPresentationShapes.getNextShape(0);
781cdf0e10cSrcweir 
782cdf0e10cSrcweir 		// jetzt nach Titel- und Gliederungstextobjekten suchen und
783cdf0e10cSrcweir 		// Objekte zu Listenern machen
784cdf0e10cSrcweir 		while(pObj)
785cdf0e10cSrcweir 		{
786cdf0e10cSrcweir 			if (pObj->GetObjInventor() == SdrInventor)
787cdf0e10cSrcweir 			{
788cdf0e10cSrcweir 				OutlinerParaObject* pOPO = pObj->GetOutlinerParaObject();
789cdf0e10cSrcweir 				sal_uInt16 nId = pObj->GetObjIdentifier();
790cdf0e10cSrcweir 
791cdf0e10cSrcweir 				if (nId == OBJ_TITLETEXT)
792cdf0e10cSrcweir 				{
793cdf0e10cSrcweir 					if( pOPO && pOPO->GetOutlinerMode() == OUTLINERMODE_DONTKNOW )
794cdf0e10cSrcweir 						pOPO->SetOutlinerMode( OUTLINERMODE_TITLEOBJECT );
795cdf0e10cSrcweir 
796cdf0e10cSrcweir 					// sal_True: harte Attribute dabei nicht loeschen
797cdf0e10cSrcweir 					if (pTitleSheet)
798cdf0e10cSrcweir 						pObj->SetStyleSheet(pTitleSheet, sal_True);
799cdf0e10cSrcweir 				}
800cdf0e10cSrcweir 				else if (nId == OBJ_OUTLINETEXT)
801cdf0e10cSrcweir 				{
802cdf0e10cSrcweir 					if( pOPO && pOPO->GetOutlinerMode() == OUTLINERMODE_DONTKNOW )
803cdf0e10cSrcweir 						pOPO->SetOutlinerMode( OUTLINERMODE_OUTLINEOBJECT );
804cdf0e10cSrcweir 
805cdf0e10cSrcweir 					for (sal_uInt16 nSheet = 0; nSheet < 10; nSheet++)
806cdf0e10cSrcweir 					{
807cdf0e10cSrcweir 						SfxStyleSheet* pSheet = (SfxStyleSheet*)pOutlineList->GetObject(nSheet);
808cdf0e10cSrcweir 						if (pSheet)
809cdf0e10cSrcweir 						{
810cdf0e10cSrcweir 							pObj->StartListening(*pSheet);
811cdf0e10cSrcweir 
812cdf0e10cSrcweir 							if( nSheet == 0)
813cdf0e10cSrcweir 								// Textrahmen hoert auf StyleSheet der Ebene1
814cdf0e10cSrcweir 								pObj->NbcSetStyleSheet(pSheet, sal_True);
815cdf0e10cSrcweir 						}
816cdf0e10cSrcweir 					}
817cdf0e10cSrcweir 				}
818cdf0e10cSrcweir 
819cdf0e10cSrcweir 				if (pObj->ISA(SdrTextObj) && pObj->IsEmptyPresObj() && pPage)
820cdf0e10cSrcweir 				{
821cdf0e10cSrcweir 					PresObjKind ePresObjKind = pPage->GetPresObjKind(pObj);
822cdf0e10cSrcweir 					String aString( pPage->GetPresObjText(ePresObjKind) );
823cdf0e10cSrcweir 
824cdf0e10cSrcweir 					if (aString.Len())
825cdf0e10cSrcweir 					{
826cdf0e10cSrcweir 						sd::Outliner* pInternalOutl = GetInternalOutliner(sal_True);
827cdf0e10cSrcweir 						pPage->SetObjText( (SdrTextObj*) pObj, pInternalOutl, ePresObjKind, aString );
828cdf0e10cSrcweir 						pObj->NbcSetStyleSheet( pPage->GetStyleSheetForPresObj( ePresObjKind ), sal_True );
829cdf0e10cSrcweir 						pInternalOutl->Clear();
830cdf0e10cSrcweir 					}
831cdf0e10cSrcweir 				}
832cdf0e10cSrcweir 			}
833cdf0e10cSrcweir 
834cdf0e10cSrcweir 			pObj = rPresentationShapes.getNextShape(pObj);
835cdf0e10cSrcweir 		}
836cdf0e10cSrcweir 
837cdf0e10cSrcweir 		delete pOutlineList;
838cdf0e10cSrcweir 	}
839cdf0e10cSrcweir }
840cdf0e10cSrcweir 
841cdf0e10cSrcweir /*************************************************************************
842cdf0e10cSrcweir |*
843cdf0e10cSrcweir |* Lokaler Outliner, welcher fuer den Gliederungsmodus verwendet wird
844cdf0e10cSrcweir |* In diesen Outliner werden ggf. OutlinerViews inserted!
845cdf0e10cSrcweir |*
846cdf0e10cSrcweir \************************************************************************/
847cdf0e10cSrcweir 
GetOutliner(sal_Bool bCreateOutliner)848cdf0e10cSrcweir ::sd::Outliner* SdDrawDocument::GetOutliner(sal_Bool bCreateOutliner)
849cdf0e10cSrcweir {
850cdf0e10cSrcweir 	if (!mpOutliner && bCreateOutliner)
851cdf0e10cSrcweir 	{
852cdf0e10cSrcweir 		mpOutliner = new ::sd::Outliner( this, OUTLINERMODE_TEXTOBJECT );
853cdf0e10cSrcweir 
854cdf0e10cSrcweir 		if (mpDocSh)
855cdf0e10cSrcweir 			mpOutliner->SetRefDevice( SD_MOD()->GetRefDevice( *mpDocSh ) );
856cdf0e10cSrcweir 
857cdf0e10cSrcweir 		mpOutliner->SetDefTab( nDefaultTabulator );
858cdf0e10cSrcweir 		mpOutliner->SetStyleSheetPool((SfxStyleSheetPool*)GetStyleSheetPool());
859cdf0e10cSrcweir 	}
860cdf0e10cSrcweir 
861cdf0e10cSrcweir 	return(mpOutliner);
862cdf0e10cSrcweir }
863cdf0e10cSrcweir 
864cdf0e10cSrcweir 
865cdf0e10cSrcweir /*************************************************************************
866cdf0e10cSrcweir |*
867cdf0e10cSrcweir |* Interner Outliner, welcher fuer die Erzeugung von Textobjekten
868cdf0e10cSrcweir |* verwendet wird.
869cdf0e10cSrcweir |* In diesen Outliner werden keine OutlinerViews inserted!
870cdf0e10cSrcweir |*
871cdf0e10cSrcweir \************************************************************************/
872cdf0e10cSrcweir 
GetInternalOutliner(sal_Bool bCreateOutliner)873cdf0e10cSrcweir ::sd::Outliner* SdDrawDocument::GetInternalOutliner(sal_Bool bCreateOutliner)
874cdf0e10cSrcweir {
875cdf0e10cSrcweir 	if ( !mpInternalOutliner && bCreateOutliner )
876cdf0e10cSrcweir 	{
877cdf0e10cSrcweir 		mpInternalOutliner = new ::sd::Outliner( this, OUTLINERMODE_TEXTOBJECT );
878cdf0e10cSrcweir 		// MT:
879cdf0e10cSrcweir 		// Dieser Outliner wird nur fuer das Erzeugen spezieller Textobjekte
880cdf0e10cSrcweir 		// verwendet. Da in diesen Textobjekten keine Portion-Informationen
881cdf0e10cSrcweir 		// gespeichert werden muessen, kann/soll der Update-Mode immer sal_False bleiben.
882cdf0e10cSrcweir 		mpInternalOutliner->SetUpdateMode( sal_False );
883cdf0e10cSrcweir 		mpInternalOutliner->EnableUndo( sal_False );
884cdf0e10cSrcweir 
885cdf0e10cSrcweir 		if (mpDocSh)
886cdf0e10cSrcweir 			mpInternalOutliner->SetRefDevice( SD_MOD()->GetRefDevice( *mpDocSh ) );
887cdf0e10cSrcweir 
888cdf0e10cSrcweir 		mpInternalOutliner->SetDefTab( nDefaultTabulator );
889cdf0e10cSrcweir 		mpInternalOutliner->SetStyleSheetPool((SfxStyleSheetPool*)GetStyleSheetPool());
890cdf0e10cSrcweir 	}
891cdf0e10cSrcweir 
892cdf0e10cSrcweir 	DBG_ASSERT( !mpInternalOutliner || ( mpInternalOutliner->GetUpdateMode() == sal_False ) , "InternalOutliner: UpdateMode = sal_True !" );
893cdf0e10cSrcweir 	DBG_ASSERT( !mpInternalOutliner || ( mpInternalOutliner->IsUndoEnabled() == sal_False ), "InternalOutliner: Undo = sal_True !" );
894cdf0e10cSrcweir 
895cdf0e10cSrcweir 	// MT: Wer ihn vollmuellt, macht ihn auch gleich wieder leer:
896cdf0e10cSrcweir 	// Vorteile:
897cdf0e10cSrcweir 	// a) Keine unnoetigen Clear-Aufrufe
898cdf0e10cSrcweir 	// b) Kein Muell im Speicher.
899cdf0e10cSrcweir 	DBG_ASSERT( !mpInternalOutliner || ( ( mpInternalOutliner->GetParagraphCount() == 1 ) && ( mpInternalOutliner->GetText( mpInternalOutliner->GetParagraph( 0 ) ).Len() == 0 ) ), "InternalOutliner: Nicht leer!" );
900cdf0e10cSrcweir 
901cdf0e10cSrcweir 	return mpInternalOutliner;
902cdf0e10cSrcweir }
903cdf0e10cSrcweir 
904cdf0e10cSrcweir /*************************************************************************
905cdf0e10cSrcweir |*
906cdf0e10cSrcweir |* OnlineSpelling ein/aus
907cdf0e10cSrcweir |*
908cdf0e10cSrcweir \************************************************************************/
909cdf0e10cSrcweir 
SetOnlineSpell(sal_Bool bIn)910cdf0e10cSrcweir void SdDrawDocument::SetOnlineSpell(sal_Bool bIn)
911cdf0e10cSrcweir {
912cdf0e10cSrcweir 	mbOnlineSpell = bIn;
913cdf0e10cSrcweir 	sal_uLong nCntrl = 0;
914cdf0e10cSrcweir 
915cdf0e10cSrcweir 	if(mpOutliner)
916cdf0e10cSrcweir 	{
917cdf0e10cSrcweir 		nCntrl = mpOutliner->GetControlWord();
918cdf0e10cSrcweir 
919cdf0e10cSrcweir 		if(mbOnlineSpell)
920cdf0e10cSrcweir 			nCntrl |= EE_CNTRL_ONLINESPELLING;
921cdf0e10cSrcweir 		else
922cdf0e10cSrcweir 			nCntrl &= ~EE_CNTRL_ONLINESPELLING;
923cdf0e10cSrcweir 
924cdf0e10cSrcweir 		mpOutliner->SetControlWord(nCntrl);
925cdf0e10cSrcweir 	}
926cdf0e10cSrcweir 
927cdf0e10cSrcweir 	if (mpInternalOutliner)
928cdf0e10cSrcweir 	{
929cdf0e10cSrcweir 		nCntrl = mpInternalOutliner->GetControlWord();
930cdf0e10cSrcweir 
931cdf0e10cSrcweir 		if (mbOnlineSpell)
932cdf0e10cSrcweir 			nCntrl |= EE_CNTRL_ONLINESPELLING;
933cdf0e10cSrcweir 		else
934cdf0e10cSrcweir 			nCntrl &= ~EE_CNTRL_ONLINESPELLING;
935cdf0e10cSrcweir 
936cdf0e10cSrcweir 		mpInternalOutliner->SetControlWord(nCntrl);
937cdf0e10cSrcweir 	}
938cdf0e10cSrcweir 
939cdf0e10cSrcweir 	::Outliner& rOutliner = GetDrawOutliner();
940cdf0e10cSrcweir 
941cdf0e10cSrcweir 	nCntrl = rOutliner.GetControlWord();
942cdf0e10cSrcweir 
943cdf0e10cSrcweir 	if (mbOnlineSpell)
944cdf0e10cSrcweir 		nCntrl |= EE_CNTRL_ONLINESPELLING;
945cdf0e10cSrcweir 	else
946cdf0e10cSrcweir 		nCntrl &= ~EE_CNTRL_ONLINESPELLING;
947cdf0e10cSrcweir 
948cdf0e10cSrcweir 	rOutliner.SetControlWord(nCntrl);
949cdf0e10cSrcweir 
950cdf0e10cSrcweir 	if (mbOnlineSpell)
951cdf0e10cSrcweir 	{
952cdf0e10cSrcweir 		StartOnlineSpelling();
953cdf0e10cSrcweir 	}
954cdf0e10cSrcweir 	else
955cdf0e10cSrcweir 	{
956cdf0e10cSrcweir 		StopOnlineSpelling();
957cdf0e10cSrcweir 	}
958cdf0e10cSrcweir }
959cdf0e10cSrcweir 
960cdf0e10cSrcweir 
961cdf0e10cSrcweir /*************************************************************************
962cdf0e10cSrcweir |*
963cdf0e10cSrcweir |* OnlineSpelling: Markierung ein/aus
964cdf0e10cSrcweir |*
965cdf0e10cSrcweir \************************************************************************/
966cdf0e10cSrcweir 
createUnoModel()967cdf0e10cSrcweir uno::Reference< uno::XInterface > SdDrawDocument::createUnoModel()
968cdf0e10cSrcweir {
969cdf0e10cSrcweir 	uno::Reference< uno::XInterface > xModel;
970cdf0e10cSrcweir 
971cdf0e10cSrcweir 	try
972cdf0e10cSrcweir 	{
973cdf0e10cSrcweir 		if ( mpDocSh )
974cdf0e10cSrcweir 			xModel = mpDocSh->GetModel();
975cdf0e10cSrcweir 	}
976cdf0e10cSrcweir 	catch( uno::RuntimeException& )
977cdf0e10cSrcweir 	{
978cdf0e10cSrcweir 	}
979cdf0e10cSrcweir 
980cdf0e10cSrcweir 	return xModel;
981cdf0e10cSrcweir }
982cdf0e10cSrcweir 
GetPageNumType() const983cdf0e10cSrcweir SvxNumType SdDrawDocument::GetPageNumType() const
984cdf0e10cSrcweir {
985cdf0e10cSrcweir 	return mePageNumType;
986cdf0e10cSrcweir }
987cdf0e10cSrcweir 
988cdf0e10cSrcweir 
989cdf0e10cSrcweir 
990cdf0e10cSrcweir 
SetPrinterIndependentLayout(sal_Int32 nMode)991cdf0e10cSrcweir void SdDrawDocument::SetPrinterIndependentLayout (sal_Int32 nMode)
992cdf0e10cSrcweir {
993cdf0e10cSrcweir 	// #108104#
994cdf0e10cSrcweir     // DBG_ASSERT (mpDocSh!=NULL, "No available document shell to set ref device at.");
995cdf0e10cSrcweir 
996cdf0e10cSrcweir 	switch (nMode)
997cdf0e10cSrcweir     {
998cdf0e10cSrcweir         case ::com::sun::star::document::PrinterIndependentLayout::DISABLED:
999cdf0e10cSrcweir         case ::com::sun::star::document::PrinterIndependentLayout::ENABLED:
1000cdf0e10cSrcweir             // Just store supported modes and inform the doc shell.
1001cdf0e10cSrcweir             mnPrinterIndependentLayout = nMode;
1002cdf0e10cSrcweir 
1003cdf0e10cSrcweir 			// #108104#
1004cdf0e10cSrcweir 			// Since it is possible that a SdDrawDocument is constructed without a
1005cdf0e10cSrcweir 			// SdDrawDocShell the pointer member mpDocSh needs to be tested
1006cdf0e10cSrcweir 			// before the call is executed. This is e.-g. used for copy/paste.
1007cdf0e10cSrcweir 			if(mpDocSh)
1008cdf0e10cSrcweir 			{
1009cdf0e10cSrcweir 				mpDocSh->UpdateRefDevice ();
1010cdf0e10cSrcweir 			}
1011cdf0e10cSrcweir 
1012cdf0e10cSrcweir             break;
1013cdf0e10cSrcweir 
1014cdf0e10cSrcweir         default:
1015cdf0e10cSrcweir             // Ignore unknown values.
1016cdf0e10cSrcweir             break;
1017cdf0e10cSrcweir     }
1018cdf0e10cSrcweir }
1019cdf0e10cSrcweir 
GetPrinterIndependentLayout(void)1020cdf0e10cSrcweir sal_Int32 SdDrawDocument::GetPrinterIndependentLayout (void)
1021cdf0e10cSrcweir {
1022cdf0e10cSrcweir     return mnPrinterIndependentLayout;
1023cdf0e10cSrcweir }
1024cdf0e10cSrcweir 
IsStartWithPresentation() const1025cdf0e10cSrcweir bool SdDrawDocument::IsStartWithPresentation() const
1026cdf0e10cSrcweir {
1027cdf0e10cSrcweir 	return mbStartWithPresentation;
1028cdf0e10cSrcweir }
1029cdf0e10cSrcweir 
SetStartWithPresentation(bool bStartWithPresentation)1030cdf0e10cSrcweir void SdDrawDocument::SetStartWithPresentation( bool bStartWithPresentation )
1031cdf0e10cSrcweir {
1032cdf0e10cSrcweir 	mbStartWithPresentation = bStartWithPresentation;
1033cdf0e10cSrcweir }
1034cdf0e10cSrcweir 
1035cdf0e10cSrcweir // #109538#
PageListChanged()1036cdf0e10cSrcweir void SdDrawDocument::PageListChanged()
1037cdf0e10cSrcweir {
1038cdf0e10cSrcweir 	mpDrawPageListWatcher->Invalidate();
1039cdf0e10cSrcweir }
1040cdf0e10cSrcweir 
1041cdf0e10cSrcweir // #109538#
MasterPageListChanged()1042cdf0e10cSrcweir void SdDrawDocument::MasterPageListChanged()
1043cdf0e10cSrcweir {
1044cdf0e10cSrcweir 	mpMasterPageListWatcher->Invalidate();
1045cdf0e10cSrcweir }
1046cdf0e10cSrcweir 
SetCalcFieldValueHdl(::Outliner * pOutliner)1047cdf0e10cSrcweir void SdDrawDocument::SetCalcFieldValueHdl(::Outliner* pOutliner)
1048cdf0e10cSrcweir {
1049cdf0e10cSrcweir 	pOutliner->SetCalcFieldValueHdl(LINK(SD_MOD(), SdModule, CalcFieldValueHdl));
1050cdf0e10cSrcweir }
1051cdf0e10cSrcweir 
GetAnnotationAuthorIndex(const rtl::OUString & rAuthor)1052cdf0e10cSrcweir sal_uInt16 SdDrawDocument::GetAnnotationAuthorIndex( const rtl::OUString& rAuthor )
1053cdf0e10cSrcweir {
1054cdf0e10cSrcweir     // force current user to have first color
1055cdf0e10cSrcweir     if( maAnnotationAuthors.empty() )
1056cdf0e10cSrcweir     {
1057cdf0e10cSrcweir         SvtUserOptions aUserOptions;
1058cdf0e10cSrcweir         maAnnotationAuthors.push_back( aUserOptions.GetFullName() );
1059cdf0e10cSrcweir     }
1060cdf0e10cSrcweir 
1061cdf0e10cSrcweir     sal_uInt16 idx = 0;
1062cdf0e10cSrcweir     for( std::vector< OUString >::iterator iter( maAnnotationAuthors.begin() ); iter != maAnnotationAuthors.end(); iter++ )
1063cdf0e10cSrcweir     {
1064cdf0e10cSrcweir         if( (*iter) == rAuthor )
1065cdf0e10cSrcweir         {
1066cdf0e10cSrcweir             break;
1067cdf0e10cSrcweir         }
1068cdf0e10cSrcweir         idx++;
1069cdf0e10cSrcweir     }
1070cdf0e10cSrcweir 
1071cdf0e10cSrcweir     if( idx == maAnnotationAuthors.size() )
1072cdf0e10cSrcweir     {
1073cdf0e10cSrcweir         maAnnotationAuthors.push_back( rAuthor );
1074cdf0e10cSrcweir     }
1075cdf0e10cSrcweir 
1076cdf0e10cSrcweir     return idx;
1077cdf0e10cSrcweir }
1078cdf0e10cSrcweir 
1079cdf0e10cSrcweir // eof
1080