xref: /AOO41X/main/sd/source/core/drawdoc.cxx (revision f8c074b1219af2a7160e5b8f8157fac1a2076a93)
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
10cdf0e10cSrcweir  *
115b190011SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
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.
19cdf0e10cSrcweir  *
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