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