1f6e50924SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3f6e50924SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4f6e50924SAndrew Rist * or more contributor license agreements. See the NOTICE file
5f6e50924SAndrew Rist * distributed with this work for additional information
6f6e50924SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7f6e50924SAndrew Rist * to you under the Apache License, Version 2.0 (the
8f6e50924SAndrew Rist * "License"); you may not use this file except in compliance
9f6e50924SAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
11f6e50924SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
13f6e50924SAndrew Rist * Unless required by applicable law or agreed to in writing,
14f6e50924SAndrew Rist * software distributed under the License is distributed on an
15f6e50924SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16f6e50924SAndrew Rist * KIND, either express or implied. See the License for the
17f6e50924SAndrew Rist * specific language governing permissions and limitations
18f6e50924SAndrew Rist * under the License.
19cdf0e10cSrcweir *
20f6e50924SAndrew Rist *************************************************************/
21f6e50924SAndrew Rist
22cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
23cdf0e10cSrcweir #include "precompiled_svx.hxx"
24cdf0e10cSrcweir
25cdf0e10cSrcweir #include <svx/svdmodel.hxx>
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include <rtl/uuid.h>
28cdf0e10cSrcweir #include <com/sun/star/lang/XComponent.hpp>
29cdf0e10cSrcweir #include <osl/endian.h>
30cdf0e10cSrcweir #include <rtl/logfile.hxx>
31cdf0e10cSrcweir #include <math.h>
32cdf0e10cSrcweir #include <tools/urlobj.hxx>
33cdf0e10cSrcweir #include <unotools/ucbstreamhelper.hxx>
34cdf0e10cSrcweir
35cdf0e10cSrcweir #include <tools/string.hxx>
36cdf0e10cSrcweir #include <svl/whiter.hxx>
37cdf0e10cSrcweir #include <svx/xit.hxx>
38cdf0e10cSrcweir #include <svx/xbtmpit.hxx>
39cdf0e10cSrcweir #include <svx/xlndsit.hxx>
40cdf0e10cSrcweir #include <svx/xlnedit.hxx>
41cdf0e10cSrcweir #include <svx/xflgrit.hxx>
42cdf0e10cSrcweir #include <svx/xflftrit.hxx>
43cdf0e10cSrcweir #include <svx/xflhtit.hxx>
44cdf0e10cSrcweir #include <svx/xlnstit.hxx>
45cdf0e10cSrcweir
46cdf0e10cSrcweir #include "svx/svditext.hxx"
478d647522Smseidel #include <editeng/editeng.hxx> // For EditEngine::CreatePool()
48cdf0e10cSrcweir
49cdf0e10cSrcweir #include <svx/xtable.hxx>
50cdf0e10cSrcweir
51cdf0e10cSrcweir #include "svx/svditer.hxx"
52cdf0e10cSrcweir #include <svx/svdtrans.hxx>
53cdf0e10cSrcweir #include <svx/svdpage.hxx>
54cdf0e10cSrcweir #include <svx/svdlayer.hxx>
55cdf0e10cSrcweir #include <svx/svdundo.hxx>
56cdf0e10cSrcweir #include <svx/svdpool.hxx>
57cdf0e10cSrcweir #include <svx/svdobj.hxx>
588d647522Smseidel #include <svx/svdotext.hxx> // for ReformatAllTextObjects and CalcFieldValue
59cdf0e10cSrcweir #include <svx/svdetc.hxx>
60cdf0e10cSrcweir #include <svx/svdoutl.hxx>
61cdf0e10cSrcweir #include <svx/svdoole2.hxx>
62cdf0e10cSrcweir #include "svx/svdglob.hxx" // Stringcache
63cdf0e10cSrcweir #include "svx/svdstr.hrc" // Objektname
64cdf0e10cSrcweir #include "svdoutlinercache.hxx"
65cdf0e10cSrcweir
66cdf0e10cSrcweir #include "svx/xflclit.hxx"
67cdf0e10cSrcweir #include "svx/xflhtit.hxx"
68cdf0e10cSrcweir #include "svx/xlnclit.hxx"
69cdf0e10cSrcweir
70cdf0e10cSrcweir #include <svl/asiancfg.hxx>
71cdf0e10cSrcweir #include "editeng/fontitem.hxx"
72cdf0e10cSrcweir #include <editeng/colritem.hxx>
73cdf0e10cSrcweir #include <editeng/fhgtitem.hxx>
74cdf0e10cSrcweir #include <svl/style.hxx>
75cdf0e10cSrcweir #include <tools/bigint.hxx>
76cdf0e10cSrcweir #include <editeng/numitem.hxx>
77cdf0e10cSrcweir #include <editeng/bulitem.hxx>
78cdf0e10cSrcweir #include <editeng/outlobj.hxx>
79cdf0e10cSrcweir #include "editeng/forbiddencharacterstable.hxx"
80cdf0e10cSrcweir #include <svl/zforlist.hxx>
81cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
82cdf0e10cSrcweir
83cdf0e10cSrcweir // #90477#
84cdf0e10cSrcweir #include <tools/tenccvt.hxx>
85cdf0e10cSrcweir #include <unotools/syslocale.hxx>
86cdf0e10cSrcweir
87cdf0e10cSrcweir // #95114#
88cdf0e10cSrcweir #include <vcl/svapp.hxx>
89cdf0e10cSrcweir #include <svx/sdr/properties/properties.hxx>
90cdf0e10cSrcweir #include <editeng/eeitem.hxx>
91cdf0e10cSrcweir #include <svl/itemset.hxx>
92cdf0e10cSrcweir
93cdf0e10cSrcweir using namespace ::com::sun::star;
94cdf0e10cSrcweir using namespace ::com::sun::star::uno;
95cdf0e10cSrcweir using namespace ::com::sun::star::lang;
96cdf0e10cSrcweir
97cdf0e10cSrcweir struct SdrModelImpl
98cdf0e10cSrcweir {
99cdf0e10cSrcweir SfxUndoManager* mpUndoManager;
100cdf0e10cSrcweir SdrUndoFactory* mpUndoFactory;
101cdf0e10cSrcweir bool mbAllowShapePropertyChangeListener;
102cdf0e10cSrcweir };
103cdf0e10cSrcweir
104cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
105cdf0e10cSrcweir
106cdf0e10cSrcweir DBG_NAME(SdrModel)
107cdf0e10cSrcweir TYPEINIT1(SdrModel,SfxBroadcaster);
ImpCtor(SfxItemPool * pPool,::comphelper::IEmbeddedHelper * _pEmbeddedHelper,bool bLoadRefCounts)108c7be74b1SArmin Le Grand void SdrModel::ImpCtor(SfxItemPool* pPool, ::comphelper::IEmbeddedHelper* _pEmbeddedHelper,bool bLoadRefCounts)
109cdf0e10cSrcweir {
110cdf0e10cSrcweir mpImpl = new SdrModelImpl;
111cdf0e10cSrcweir mpImpl->mpUndoManager=0;
112cdf0e10cSrcweir mpImpl->mpUndoFactory=0;
113cdf0e10cSrcweir mpImpl->mbAllowShapePropertyChangeListener=false;
114cdf0e10cSrcweir mbInDestruction=false;
115cdf0e10cSrcweir aObjUnit=SdrEngineDefaults::GetMapFraction();
116cdf0e10cSrcweir eObjUnit=SdrEngineDefaults::GetMapUnit();
117cdf0e10cSrcweir eUIUnit=FUNIT_MM;
118cdf0e10cSrcweir aUIScale=Fraction(1,1);
1198d647522Smseidel nUIUnitComma=0;
1208d647522Smseidel bUIOnlyComma=sal_False;
121cdf0e10cSrcweir pLayerAdmin=NULL;
122cdf0e10cSrcweir pItemPool=pPool;
123cdf0e10cSrcweir bMyPool=sal_False;
124cdf0e10cSrcweir m_pEmbeddedHelper=_pEmbeddedHelper;
125cdf0e10cSrcweir pDrawOutliner=NULL;
126cdf0e10cSrcweir pHitTestOutliner=NULL;
127cdf0e10cSrcweir pRefOutDev=NULL;
128cdf0e10cSrcweir nProgressAkt=0;
129cdf0e10cSrcweir nProgressMax=0;
130cdf0e10cSrcweir nProgressOfs=0;
131cdf0e10cSrcweir pDefaultStyleSheet=NULL;
1329e9dd2d5SArmin Le Grand mpDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj = 0;
133cdf0e10cSrcweir pLinkManager=NULL;
134cdf0e10cSrcweir pUndoStack=NULL;
135cdf0e10cSrcweir pRedoStack=NULL;
136cdf0e10cSrcweir nMaxUndoCount=16;
137cdf0e10cSrcweir pAktUndoGroup=NULL;
138cdf0e10cSrcweir nUndoLevel=0;
139cdf0e10cSrcweir mbUndoEnabled=true;
140cdf0e10cSrcweir nProgressPercent=0;
141cdf0e10cSrcweir nLoadVersion=0;
142cdf0e10cSrcweir mbChanged = sal_False;
143cdf0e10cSrcweir bInfoChanged=sal_False;
144cdf0e10cSrcweir bPagNumsDirty=sal_False;
145cdf0e10cSrcweir bMPgNumsDirty=sal_False;
146cdf0e10cSrcweir bPageNotValid=sal_False;
147cdf0e10cSrcweir bSavePortable=sal_False;
148cdf0e10cSrcweir bSaveCompressed=sal_False;
14935726d9dSArmin Le Grand bSaveNative=sal_False;
150cdf0e10cSrcweir bSwapGraphics=sal_False;
151cdf0e10cSrcweir nSwapGraphicsMode=SDR_SWAPGRAPHICSMODE_DEFAULT;
152cdf0e10cSrcweir bSaveOLEPreview=sal_False;
153cdf0e10cSrcweir bPasteResize=sal_False;
154cdf0e10cSrcweir bNoBitmapCaching=sal_False;
155cdf0e10cSrcweir bReadOnly=sal_False;
156cdf0e10cSrcweir nStreamCompressMode=COMPRESSMODE_NONE;
157cdf0e10cSrcweir nStreamNumberFormat=NUMBERFORMAT_INT_BIGENDIAN;
158cdf0e10cSrcweir nDefaultTabulator=0;
159cdf0e10cSrcweir mpNumberFormatter = NULL;
160cdf0e10cSrcweir bTransparentTextFrames=sal_False;
161cdf0e10cSrcweir bStarDrawPreviewMode = sal_False;
162cdf0e10cSrcweir nStarDrawPreviewMasterPageNum = SDRPAGE_NOTFOUND;
163cdf0e10cSrcweir pModelStorage = NULL;
164cdf0e10cSrcweir mpForbiddenCharactersTable = NULL;
165cdf0e10cSrcweir mbModelLocked = sal_False;
166cdf0e10cSrcweir mpOutlinerCache = NULL;
167cdf0e10cSrcweir mbKernAsianPunctuation = sal_False;
168cdf0e10cSrcweir mbAddExtLeading = sal_False;
169cdf0e10cSrcweir mnHandoutPageCount = 0;
170a840a559SArmin Le Grand mbDisableTextEditUsesCommonUndoManager = false;
171cdf0e10cSrcweir SvxAsianConfig aAsian;
172cdf0e10cSrcweir mnCharCompressType = aAsian.GetCharDistanceCompression();
173cdf0e10cSrcweir
174cdf0e10cSrcweir #ifdef OSL_LITENDIAN
175cdf0e10cSrcweir nStreamNumberFormat=NUMBERFORMAT_INT_LITTLEENDIAN;
176cdf0e10cSrcweir #endif
177cdf0e10cSrcweir if ( pPool == NULL )
178cdf0e10cSrcweir {
179cdf0e10cSrcweir pItemPool=new SdrItemPool(0L, bLoadRefCounts);
180cdf0e10cSrcweir // Der Outliner hat keinen eigenen Pool, deshalb den der EditEngine
181cdf0e10cSrcweir SfxItemPool* pOutlPool=EditEngine::CreatePool( bLoadRefCounts );
182cdf0e10cSrcweir // OutlinerPool als SecondaryPool des SdrPool
183cdf0e10cSrcweir pItemPool->SetSecondaryPool(pOutlPool);
184cdf0e10cSrcweir // Merken, dass ich mir die beiden Pools selbst gemacht habe
185cdf0e10cSrcweir bMyPool=sal_True;
186cdf0e10cSrcweir }
187cdf0e10cSrcweir pItemPool->SetDefaultMetric((SfxMapUnit)eObjUnit);
188cdf0e10cSrcweir
189cdf0e10cSrcweir // SJ: #95129# using static SdrEngineDefaults only if default SvxFontHeight item is not available
190cdf0e10cSrcweir const SfxPoolItem* pPoolItem = pItemPool->GetPoolDefaultItem( EE_CHAR_FONTHEIGHT );
191cdf0e10cSrcweir if ( pPoolItem )
192cdf0e10cSrcweir nDefTextHgt = ((SvxFontHeightItem*)pPoolItem)->GetHeight();
193cdf0e10cSrcweir else
194cdf0e10cSrcweir nDefTextHgt = SdrEngineDefaults::GetFontHeight();
195cdf0e10cSrcweir
196cdf0e10cSrcweir pItemPool->SetPoolDefaultItem( SdrTextWordWrapItem( sal_False ) );
197cdf0e10cSrcweir
198cdf0e10cSrcweir SetTextDefaults();
199cdf0e10cSrcweir
200cdf0e10cSrcweir pLayerAdmin=new SdrLayerAdmin;
201cdf0e10cSrcweir pLayerAdmin->SetModel(this);
202cdf0e10cSrcweir ImpSetUIUnit();
203cdf0e10cSrcweir
204cdf0e10cSrcweir // den DrawOutliner OnDemand erzeugen geht noch nicht, weil ich den Pool
205cdf0e10cSrcweir // sonst nicht kriege (erst ab 302!)
206cdf0e10cSrcweir pDrawOutliner = SdrMakeOutliner( OUTLINERMODE_TEXTOBJECT, this );
207cdf0e10cSrcweir ImpSetOutlinerDefaults(pDrawOutliner, sal_True);
208cdf0e10cSrcweir
209cdf0e10cSrcweir pHitTestOutliner = SdrMakeOutliner( OUTLINERMODE_TEXTOBJECT, this );
210cdf0e10cSrcweir ImpSetOutlinerDefaults(pHitTestOutliner, sal_True);
211cdf0e10cSrcweir }
212cdf0e10cSrcweir
SdrModel(SfxItemPool * pPool,::comphelper::IEmbeddedHelper * pPers,sal_Bool bLoadRefCounts)213cdf0e10cSrcweir SdrModel::SdrModel(SfxItemPool* pPool, ::comphelper::IEmbeddedHelper* pPers, sal_Bool bLoadRefCounts):
214cdf0e10cSrcweir maMaPag(1024,32,32),
215cdf0e10cSrcweir maPages(1024,32,32)
216cdf0e10cSrcweir {
217cdf0e10cSrcweir #ifdef TIMELOG
218cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "svx", "aw93748", "SdrModel::SdrModel(...)" );
219cdf0e10cSrcweir #endif
220cdf0e10cSrcweir
221cdf0e10cSrcweir DBG_CTOR(SdrModel,NULL);
222c7be74b1SArmin Le Grand ImpCtor(pPool,pPers,(FASTBOOL)bLoadRefCounts);
223cdf0e10cSrcweir }
224cdf0e10cSrcweir
SdrModel(const String & rPath,SfxItemPool * pPool,::comphelper::IEmbeddedHelper * pPers,sal_Bool bLoadRefCounts)225cdf0e10cSrcweir SdrModel::SdrModel(const String& rPath, SfxItemPool* pPool, ::comphelper::IEmbeddedHelper* pPers, sal_Bool bLoadRefCounts):
226cdf0e10cSrcweir maMaPag(1024,32,32),
227cdf0e10cSrcweir maPages(1024,32,32),
228cdf0e10cSrcweir aTablePath(rPath)
229cdf0e10cSrcweir {
230cdf0e10cSrcweir #ifdef TIMELOG
231cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "svx", "aw93748", "SdrModel::SdrModel(...)" );
232cdf0e10cSrcweir #endif
233cdf0e10cSrcweir
234cdf0e10cSrcweir DBG_CTOR(SdrModel,NULL);
235c7be74b1SArmin Le Grand ImpCtor(pPool,pPers,(FASTBOOL)bLoadRefCounts);
236cdf0e10cSrcweir }
237cdf0e10cSrcweir
SdrModel(const SdrModel &)238cdf0e10cSrcweir SdrModel::SdrModel(const SdrModel& /*rSrcModel*/):
239cdf0e10cSrcweir SfxBroadcaster(),
240cdf0e10cSrcweir tools::WeakBase< SdrModel >(),
241cdf0e10cSrcweir maMaPag(1024,32,32),
242cdf0e10cSrcweir maPages(1024,32,32)
243cdf0e10cSrcweir {
244cdf0e10cSrcweir #ifdef TIMELOG
245cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "svx", "aw93748", "SdrModel::SdrModel(...)" );
246cdf0e10cSrcweir #endif
247cdf0e10cSrcweir
248cdf0e10cSrcweir // noch nicht implementiert
249cdf0e10cSrcweir DBG_ERROR("SdrModel::CopyCtor() ist noch nicht implementiert");
250cdf0e10cSrcweir }
251cdf0e10cSrcweir
~SdrModel()252cdf0e10cSrcweir SdrModel::~SdrModel()
253cdf0e10cSrcweir {
254cdf0e10cSrcweir #ifdef TIMELOG
255cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "svx", "aw93748", "SdrModel::~SdrModel(...)" );
256cdf0e10cSrcweir #endif
257cdf0e10cSrcweir
258cdf0e10cSrcweir DBG_DTOR(SdrModel,NULL);
259cdf0e10cSrcweir
260cdf0e10cSrcweir mbInDestruction = true;
261cdf0e10cSrcweir
262cdf0e10cSrcweir Broadcast(SdrHint(HINT_MODELCLEARED));
263cdf0e10cSrcweir
264cdf0e10cSrcweir delete mpOutlinerCache;
265cdf0e10cSrcweir
266cdf0e10cSrcweir ClearUndoBuffer();
267cdf0e10cSrcweir #ifdef DBG_UTIL
268cdf0e10cSrcweir if(pAktUndoGroup)
269cdf0e10cSrcweir {
270cdf0e10cSrcweir ByteString aStr("Im Dtor des SdrModel steht noch ein offenes Undo rum: \"");
271cdf0e10cSrcweir
272cdf0e10cSrcweir aStr += ByteString(pAktUndoGroup->GetComment(), gsl_getSystemTextEncoding());
273cdf0e10cSrcweir aStr += '\"';
274cdf0e10cSrcweir
275cdf0e10cSrcweir DBG_ERROR(aStr.GetBuffer());
276cdf0e10cSrcweir }
277cdf0e10cSrcweir #endif
278cdf0e10cSrcweir if (pAktUndoGroup!=NULL)
279cdf0e10cSrcweir delete pAktUndoGroup;
280cdf0e10cSrcweir
281cdf0e10cSrcweir // #116168#
282cdf0e10cSrcweir ClearModel(sal_True);
283cdf0e10cSrcweir
284cdf0e10cSrcweir delete pLayerAdmin;
285cdf0e10cSrcweir
2868d647522Smseidel // Den DrawOutliner erst nach dem ItemPool löschen, da
287cdf0e10cSrcweir // der ItemPool Items des DrawOutliners referenziert !!! (<- das war mal)
288cdf0e10cSrcweir // Wg. Problem bei Malte Reihenfolge wieder umgestellt.
2898d647522Smseidel // Löschen des Outliners vor dem löschen des ItemPools
290cdf0e10cSrcweir delete pHitTestOutliner;
291cdf0e10cSrcweir delete pDrawOutliner;
292cdf0e10cSrcweir
293cdf0e10cSrcweir // delete StyleSheetPool, derived classes should not do this since
294cdf0e10cSrcweir // the DrawingEngine may need it in its destrctor (SB)
295cdf0e10cSrcweir if( mxStyleSheetPool.is() )
296cdf0e10cSrcweir {
297cdf0e10cSrcweir Reference< XComponent > xComponent( dynamic_cast< cppu::OWeakObject* >( mxStyleSheetPool.get() ), UNO_QUERY );
298cdf0e10cSrcweir if( xComponent.is() ) try
299cdf0e10cSrcweir {
300cdf0e10cSrcweir xComponent->dispose();
301cdf0e10cSrcweir }
302cdf0e10cSrcweir catch( RuntimeException& )
303cdf0e10cSrcweir {
304cdf0e10cSrcweir }
305cdf0e10cSrcweir mxStyleSheetPool.clear();
306cdf0e10cSrcweir }
307cdf0e10cSrcweir
308cdf0e10cSrcweir if (bMyPool)
309cdf0e10cSrcweir {
3108d647522Smseidel // Pools löschen, falls es meine sind
311cdf0e10cSrcweir SfxItemPool* pOutlPool=pItemPool->GetSecondaryPool();
312cdf0e10cSrcweir SfxItemPool::Free(pItemPool);
313cdf0e10cSrcweir // Der OutlinerPool muss nach dem ItemPool plattgemacht werden, da der
3148d647522Smseidel // ItemPool SetItems enthält die ihrerseits Items des OutlinerPools
315cdf0e10cSrcweir // referenzieren (Joe)
316cdf0e10cSrcweir SfxItemPool::Free(pOutlPool);
317cdf0e10cSrcweir }
318cdf0e10cSrcweir
319cdf0e10cSrcweir if( mpForbiddenCharactersTable )
320cdf0e10cSrcweir mpForbiddenCharactersTable->release();
321cdf0e10cSrcweir
322cdf0e10cSrcweir if(mpNumberFormatter)
323cdf0e10cSrcweir delete mpNumberFormatter;
324cdf0e10cSrcweir
325cdf0e10cSrcweir delete mpImpl->mpUndoFactory;
326cdf0e10cSrcweir delete mpImpl;
327cdf0e10cSrcweir }
328cdf0e10cSrcweir
IsInDestruction() const329cdf0e10cSrcweir bool SdrModel::IsInDestruction() const
330cdf0e10cSrcweir {
331cdf0e10cSrcweir return mbInDestruction;
332cdf0e10cSrcweir }
333cdf0e10cSrcweir
GetNumberFormatter() const334cdf0e10cSrcweir const SvNumberFormatter& SdrModel::GetNumberFormatter() const
335cdf0e10cSrcweir {
336cdf0e10cSrcweir if(!mpNumberFormatter)
337cdf0e10cSrcweir {
338cdf0e10cSrcweir // use cast here since from outside view this IS a const method
339cdf0e10cSrcweir ((SdrModel*)this)->mpNumberFormatter = new SvNumberFormatter(
340cdf0e10cSrcweir ::comphelper::getProcessServiceFactory(), LANGUAGE_SYSTEM);
341cdf0e10cSrcweir }
342cdf0e10cSrcweir
343cdf0e10cSrcweir return *mpNumberFormatter;
344cdf0e10cSrcweir }
345cdf0e10cSrcweir
346cdf0e10cSrcweir // noch nicht implementiert:
operator =(const SdrModel &)347cdf0e10cSrcweir void SdrModel::operator=(const SdrModel& /*rSrcModel*/)
348cdf0e10cSrcweir {
349cdf0e10cSrcweir DBG_ERROR("SdrModel::operator=() ist noch nicht implementiert");
350cdf0e10cSrcweir }
351cdf0e10cSrcweir
operator ==(const SdrModel &) const352cdf0e10cSrcweir FASTBOOL SdrModel::operator==(const SdrModel& /*rCmpModel*/) const
353cdf0e10cSrcweir {
354cdf0e10cSrcweir DBG_ERROR("SdrModel::operator==() ist noch nicht implementiert");
355cdf0e10cSrcweir return sal_False;
356cdf0e10cSrcweir }
357cdf0e10cSrcweir
SetSwapGraphics(FASTBOOL bSwap)358cdf0e10cSrcweir void SdrModel::SetSwapGraphics( FASTBOOL bSwap )
359cdf0e10cSrcweir {
360cdf0e10cSrcweir bSwapGraphics = bSwap;
361cdf0e10cSrcweir }
362cdf0e10cSrcweir
IsReadOnly() const363cdf0e10cSrcweir FASTBOOL SdrModel::IsReadOnly() const
364cdf0e10cSrcweir {
365cdf0e10cSrcweir return bReadOnly;
366cdf0e10cSrcweir }
367cdf0e10cSrcweir
SetReadOnly(FASTBOOL bYes)368cdf0e10cSrcweir void SdrModel::SetReadOnly(FASTBOOL bYes)
369cdf0e10cSrcweir {
370cdf0e10cSrcweir bReadOnly=bYes;
371cdf0e10cSrcweir }
372cdf0e10cSrcweir
373cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
374cdf0e10cSrcweir
SetMaxUndoActionCount(sal_uIntPtr nAnz)375cdf0e10cSrcweir void SdrModel::SetMaxUndoActionCount(sal_uIntPtr nAnz)
376cdf0e10cSrcweir {
377cdf0e10cSrcweir if (nAnz<1) nAnz=1;
378cdf0e10cSrcweir nMaxUndoCount=nAnz;
379cdf0e10cSrcweir if (pUndoStack!=NULL) {
380cdf0e10cSrcweir while (pUndoStack->Count()>nMaxUndoCount) {
381cdf0e10cSrcweir delete (SfxUndoAction*) pUndoStack->Remove(pUndoStack->Count());
382cdf0e10cSrcweir }
383cdf0e10cSrcweir }
384cdf0e10cSrcweir }
385cdf0e10cSrcweir
ClearUndoBuffer()386cdf0e10cSrcweir void SdrModel::ClearUndoBuffer()
387cdf0e10cSrcweir {
388cdf0e10cSrcweir if (pUndoStack!=NULL) {
389cdf0e10cSrcweir while (pUndoStack->Count()!=0) {
390cdf0e10cSrcweir delete (SfxUndoAction*) pUndoStack->Remove(pUndoStack->Count()-1);
391cdf0e10cSrcweir }
392cdf0e10cSrcweir delete pUndoStack;
393cdf0e10cSrcweir pUndoStack=NULL;
394cdf0e10cSrcweir }
395cdf0e10cSrcweir if (pRedoStack!=NULL) {
396cdf0e10cSrcweir while (pRedoStack->Count()!=0) {
397cdf0e10cSrcweir delete (SfxUndoAction*) pRedoStack->Remove(pRedoStack->Count()-1);
398cdf0e10cSrcweir }
399cdf0e10cSrcweir delete pRedoStack;
400cdf0e10cSrcweir pRedoStack=NULL;
401cdf0e10cSrcweir }
402cdf0e10cSrcweir }
403cdf0e10cSrcweir
Undo()404cdf0e10cSrcweir FASTBOOL SdrModel::Undo()
405cdf0e10cSrcweir {
406cdf0e10cSrcweir FASTBOOL bRet=sal_False;
407cdf0e10cSrcweir if( mpImpl->mpUndoManager )
408cdf0e10cSrcweir {
409cdf0e10cSrcweir DBG_ERROR("svx::SdrModel::Undo(), method not supported with application undo manager!");
410cdf0e10cSrcweir }
411cdf0e10cSrcweir else
412cdf0e10cSrcweir {
413cdf0e10cSrcweir SfxUndoAction* pDo=(SfxUndoAction*)GetUndoAction(0);
414cdf0e10cSrcweir if(pDo!=NULL)
415cdf0e10cSrcweir {
416cdf0e10cSrcweir const bool bWasUndoEnabled = mbUndoEnabled;
417cdf0e10cSrcweir mbUndoEnabled = false;
418cdf0e10cSrcweir pDo->Undo();
419cdf0e10cSrcweir if(pRedoStack==NULL)
420cdf0e10cSrcweir pRedoStack=new Container(1024,16,16);
421cdf0e10cSrcweir pRedoStack->Insert(pUndoStack->Remove((sal_uIntPtr)0),(sal_uIntPtr)0);
422cdf0e10cSrcweir mbUndoEnabled = bWasUndoEnabled;
423cdf0e10cSrcweir }
424cdf0e10cSrcweir }
425cdf0e10cSrcweir return bRet;
426cdf0e10cSrcweir }
427cdf0e10cSrcweir
Redo()428cdf0e10cSrcweir FASTBOOL SdrModel::Redo()
429cdf0e10cSrcweir {
430cdf0e10cSrcweir FASTBOOL bRet=sal_False;
431cdf0e10cSrcweir if( mpImpl->mpUndoManager )
432cdf0e10cSrcweir {
433cdf0e10cSrcweir DBG_ERROR("svx::SdrModel::Redo(), method not supported with application undo manager!");
434cdf0e10cSrcweir }
435cdf0e10cSrcweir else
436cdf0e10cSrcweir {
437cdf0e10cSrcweir SfxUndoAction* pDo=(SfxUndoAction*)GetRedoAction(0);
438cdf0e10cSrcweir if(pDo!=NULL)
439cdf0e10cSrcweir {
440cdf0e10cSrcweir const bool bWasUndoEnabled = mbUndoEnabled;
441cdf0e10cSrcweir mbUndoEnabled = false;
442cdf0e10cSrcweir pDo->Redo();
443cdf0e10cSrcweir if(pUndoStack==NULL)
444cdf0e10cSrcweir pUndoStack=new Container(1024,16,16);
445cdf0e10cSrcweir pUndoStack->Insert(pRedoStack->Remove((sal_uIntPtr)0),(sal_uIntPtr)0);
446cdf0e10cSrcweir mbUndoEnabled = bWasUndoEnabled;
447cdf0e10cSrcweir }
448cdf0e10cSrcweir }
449cdf0e10cSrcweir return bRet;
450cdf0e10cSrcweir }
451cdf0e10cSrcweir
Repeat(SfxRepeatTarget & rView)452cdf0e10cSrcweir FASTBOOL SdrModel::Repeat(SfxRepeatTarget& rView)
453cdf0e10cSrcweir {
454cdf0e10cSrcweir FASTBOOL bRet=sal_False;
455cdf0e10cSrcweir if( mpImpl->mpUndoManager )
456cdf0e10cSrcweir {
457cdf0e10cSrcweir DBG_ERROR("svx::SdrModel::Redo(), method not supported with application undo manager!");
458cdf0e10cSrcweir }
459cdf0e10cSrcweir else
460cdf0e10cSrcweir {
461cdf0e10cSrcweir SfxUndoAction* pDo=(SfxUndoAction*)GetUndoAction(0);
462cdf0e10cSrcweir if(pDo!=NULL)
463cdf0e10cSrcweir {
464cdf0e10cSrcweir if(pDo->CanRepeat(rView))
465cdf0e10cSrcweir {
466cdf0e10cSrcweir pDo->Repeat(rView);
467cdf0e10cSrcweir bRet=sal_True;
468cdf0e10cSrcweir }
469cdf0e10cSrcweir }
470cdf0e10cSrcweir }
471cdf0e10cSrcweir return bRet;
472cdf0e10cSrcweir }
473cdf0e10cSrcweir
ImpPostUndoAction(SdrUndoAction * pUndo)474cdf0e10cSrcweir void SdrModel::ImpPostUndoAction(SdrUndoAction* pUndo)
475cdf0e10cSrcweir {
476cdf0e10cSrcweir DBG_ASSERT( mpImpl->mpUndoManager == 0, "svx::SdrModel::ImpPostUndoAction(), method not supported with application undo manager!" );
477cdf0e10cSrcweir if( IsUndoEnabled() )
478cdf0e10cSrcweir {
479cdf0e10cSrcweir if (aUndoLink.IsSet())
480cdf0e10cSrcweir {
481cdf0e10cSrcweir aUndoLink.Call(pUndo);
482cdf0e10cSrcweir }
483cdf0e10cSrcweir else
484cdf0e10cSrcweir {
485cdf0e10cSrcweir if (pUndoStack==NULL)
486cdf0e10cSrcweir pUndoStack=new Container(1024,16,16);
487cdf0e10cSrcweir pUndoStack->Insert(pUndo,(sal_uIntPtr)0);
488cdf0e10cSrcweir while (pUndoStack->Count()>nMaxUndoCount)
489cdf0e10cSrcweir {
490cdf0e10cSrcweir delete (SfxUndoAction*)pUndoStack->Remove(pUndoStack->Count()-1);
491cdf0e10cSrcweir }
492cdf0e10cSrcweir if (pRedoStack!=NULL)
493cdf0e10cSrcweir pRedoStack->Clear();
494cdf0e10cSrcweir }
495cdf0e10cSrcweir }
496cdf0e10cSrcweir else
497cdf0e10cSrcweir {
498cdf0e10cSrcweir delete pUndo;
499cdf0e10cSrcweir }
500cdf0e10cSrcweir }
501cdf0e10cSrcweir
BegUndo()502cdf0e10cSrcweir void SdrModel::BegUndo()
503cdf0e10cSrcweir {
504cdf0e10cSrcweir if( mpImpl->mpUndoManager )
505cdf0e10cSrcweir {
506cdf0e10cSrcweir const String aEmpty;
507cdf0e10cSrcweir mpImpl->mpUndoManager->EnterListAction(aEmpty,aEmpty);
508cdf0e10cSrcweir nUndoLevel++;
509cdf0e10cSrcweir }
510cdf0e10cSrcweir else if( IsUndoEnabled() )
511cdf0e10cSrcweir {
512cdf0e10cSrcweir if(pAktUndoGroup==NULL)
513cdf0e10cSrcweir {
514cdf0e10cSrcweir pAktUndoGroup = new SdrUndoGroup(*this);
515cdf0e10cSrcweir nUndoLevel=1;
516cdf0e10cSrcweir }
517cdf0e10cSrcweir else
518cdf0e10cSrcweir {
519cdf0e10cSrcweir nUndoLevel++;
520cdf0e10cSrcweir }
521cdf0e10cSrcweir }
522cdf0e10cSrcweir }
523cdf0e10cSrcweir
BegUndo(const XubString & rComment)524cdf0e10cSrcweir void SdrModel::BegUndo(const XubString& rComment)
525cdf0e10cSrcweir {
526cdf0e10cSrcweir if( mpImpl->mpUndoManager )
527cdf0e10cSrcweir {
528cdf0e10cSrcweir const String aEmpty;
529cdf0e10cSrcweir mpImpl->mpUndoManager->EnterListAction( rComment, aEmpty );
530cdf0e10cSrcweir nUndoLevel++;
531cdf0e10cSrcweir }
532cdf0e10cSrcweir else if( IsUndoEnabled() )
533cdf0e10cSrcweir {
534cdf0e10cSrcweir BegUndo();
535cdf0e10cSrcweir if (nUndoLevel==1)
536cdf0e10cSrcweir {
537cdf0e10cSrcweir pAktUndoGroup->SetComment(rComment);
538cdf0e10cSrcweir }
539cdf0e10cSrcweir }
540cdf0e10cSrcweir }
541cdf0e10cSrcweir
BegUndo(const XubString & rComment,const XubString & rObjDescr,SdrRepeatFunc eFunc)542cdf0e10cSrcweir void SdrModel::BegUndo(const XubString& rComment, const XubString& rObjDescr, SdrRepeatFunc eFunc)
543cdf0e10cSrcweir {
544cdf0e10cSrcweir if( mpImpl->mpUndoManager )
545cdf0e10cSrcweir {
546cdf0e10cSrcweir String aComment(rComment);
547cdf0e10cSrcweir if( aComment.Len() && rObjDescr.Len() )
548cdf0e10cSrcweir {
549cdf0e10cSrcweir String aSearchString(RTL_CONSTASCII_USTRINGPARAM("%1"));
550cdf0e10cSrcweir aComment.SearchAndReplace(aSearchString, rObjDescr);
551cdf0e10cSrcweir }
552cdf0e10cSrcweir const String aEmpty;
553cdf0e10cSrcweir mpImpl->mpUndoManager->EnterListAction( aComment,aEmpty );
554cdf0e10cSrcweir nUndoLevel++;
555cdf0e10cSrcweir }
556cdf0e10cSrcweir else if( IsUndoEnabled() )
557cdf0e10cSrcweir {
558cdf0e10cSrcweir BegUndo();
559cdf0e10cSrcweir if (nUndoLevel==1)
560cdf0e10cSrcweir {
561cdf0e10cSrcweir pAktUndoGroup->SetComment(rComment);
562cdf0e10cSrcweir pAktUndoGroup->SetObjDescription(rObjDescr);
563cdf0e10cSrcweir pAktUndoGroup->SetRepeatFunction(eFunc);
564cdf0e10cSrcweir }
565cdf0e10cSrcweir }
566cdf0e10cSrcweir }
567cdf0e10cSrcweir
BegUndo(SdrUndoGroup * pUndoGrp)568cdf0e10cSrcweir void SdrModel::BegUndo(SdrUndoGroup* pUndoGrp)
569cdf0e10cSrcweir {
570cdf0e10cSrcweir if( mpImpl->mpUndoManager )
571cdf0e10cSrcweir {
572cdf0e10cSrcweir DBG_ERROR("svx::SdrModel::BegUndo(), method not supported with application undo manager!" );
573cdf0e10cSrcweir nUndoLevel++;
574cdf0e10cSrcweir }
575cdf0e10cSrcweir else if( IsUndoEnabled() )
576cdf0e10cSrcweir {
577cdf0e10cSrcweir if (pAktUndoGroup==NULL)
578cdf0e10cSrcweir {
579cdf0e10cSrcweir pAktUndoGroup=pUndoGrp;
580cdf0e10cSrcweir nUndoLevel=1;
581cdf0e10cSrcweir }
582cdf0e10cSrcweir else
583cdf0e10cSrcweir {
584cdf0e10cSrcweir delete pUndoGrp;
585cdf0e10cSrcweir nUndoLevel++;
586cdf0e10cSrcweir }
587cdf0e10cSrcweir }
588cdf0e10cSrcweir else
589cdf0e10cSrcweir {
590cdf0e10cSrcweir delete pUndoGrp;
591cdf0e10cSrcweir }
592cdf0e10cSrcweir }
593cdf0e10cSrcweir
EndUndo()594cdf0e10cSrcweir void SdrModel::EndUndo()
595cdf0e10cSrcweir {
596cdf0e10cSrcweir DBG_ASSERT(nUndoLevel!=0,"SdrModel::EndUndo(): UndoLevel is already 0!");
597cdf0e10cSrcweir if( mpImpl->mpUndoManager )
598cdf0e10cSrcweir {
599cdf0e10cSrcweir if( nUndoLevel )
600cdf0e10cSrcweir {
601cdf0e10cSrcweir nUndoLevel--;
602cdf0e10cSrcweir mpImpl->mpUndoManager->LeaveListAction();
603cdf0e10cSrcweir }
604cdf0e10cSrcweir }
605cdf0e10cSrcweir else
606cdf0e10cSrcweir {
607cdf0e10cSrcweir if(pAktUndoGroup!=NULL && IsUndoEnabled())
608cdf0e10cSrcweir {
609cdf0e10cSrcweir nUndoLevel--;
610cdf0e10cSrcweir if(nUndoLevel==0)
611cdf0e10cSrcweir {
612cdf0e10cSrcweir if(pAktUndoGroup->GetActionCount()!=0)
613cdf0e10cSrcweir {
614cdf0e10cSrcweir SdrUndoAction* pUndo=pAktUndoGroup;
615cdf0e10cSrcweir pAktUndoGroup=NULL;
616cdf0e10cSrcweir ImpPostUndoAction(pUndo);
617cdf0e10cSrcweir }
618cdf0e10cSrcweir else
619cdf0e10cSrcweir {
620cdf0e10cSrcweir // was empty
621cdf0e10cSrcweir delete pAktUndoGroup;
622cdf0e10cSrcweir pAktUndoGroup=NULL;
623cdf0e10cSrcweir }
624cdf0e10cSrcweir }
625cdf0e10cSrcweir }
626cdf0e10cSrcweir }
627cdf0e10cSrcweir }
628cdf0e10cSrcweir
SetUndoComment(const XubString & rComment)629cdf0e10cSrcweir void SdrModel::SetUndoComment(const XubString& rComment)
630cdf0e10cSrcweir {
631cdf0e10cSrcweir DBG_ASSERT(nUndoLevel!=0,"SdrModel::SetUndoComment(): UndoLevel is on level 0!");
632cdf0e10cSrcweir
633cdf0e10cSrcweir if( mpImpl->mpUndoManager )
634cdf0e10cSrcweir {
635cdf0e10cSrcweir DBG_ERROR("svx::SdrModel::SetUndoComment(), method not supported with application undo manager!" );
636cdf0e10cSrcweir }
637cdf0e10cSrcweir else if( IsUndoEnabled() )
638cdf0e10cSrcweir {
639cdf0e10cSrcweir if(nUndoLevel==1)
640cdf0e10cSrcweir {
641cdf0e10cSrcweir pAktUndoGroup->SetComment(rComment);
642cdf0e10cSrcweir }
643cdf0e10cSrcweir }
644cdf0e10cSrcweir }
645cdf0e10cSrcweir
SetUndoComment(const XubString & rComment,const XubString & rObjDescr)646cdf0e10cSrcweir void SdrModel::SetUndoComment(const XubString& rComment, const XubString& rObjDescr)
647cdf0e10cSrcweir {
648cdf0e10cSrcweir DBG_ASSERT(nUndoLevel!=0,"SdrModel::SetUndoComment(): UndoLevel is 0!");
649cdf0e10cSrcweir if( mpImpl->mpUndoManager )
650cdf0e10cSrcweir {
651cdf0e10cSrcweir DBG_ERROR("svx::SdrModel::SetUndoComment(), method not supported with application undo manager!" );
652cdf0e10cSrcweir }
653cdf0e10cSrcweir else
654cdf0e10cSrcweir {
655cdf0e10cSrcweir if (nUndoLevel==1)
656cdf0e10cSrcweir {
657cdf0e10cSrcweir pAktUndoGroup->SetComment(rComment);
658cdf0e10cSrcweir pAktUndoGroup->SetObjDescription(rObjDescr);
659cdf0e10cSrcweir }
660cdf0e10cSrcweir }
661cdf0e10cSrcweir }
662cdf0e10cSrcweir
AddUndo(SdrUndoAction * pUndo)663cdf0e10cSrcweir void SdrModel::AddUndo(SdrUndoAction* pUndo)
664cdf0e10cSrcweir {
665cdf0e10cSrcweir if( mpImpl->mpUndoManager )
666cdf0e10cSrcweir {
667cdf0e10cSrcweir mpImpl->mpUndoManager->AddUndoAction( pUndo );
668cdf0e10cSrcweir }
669cdf0e10cSrcweir else if( !IsUndoEnabled() )
670cdf0e10cSrcweir {
671cdf0e10cSrcweir delete pUndo;
672cdf0e10cSrcweir }
673cdf0e10cSrcweir else
674cdf0e10cSrcweir {
675cdf0e10cSrcweir if (pAktUndoGroup!=NULL)
676cdf0e10cSrcweir {
677cdf0e10cSrcweir pAktUndoGroup->AddAction(pUndo);
678cdf0e10cSrcweir }
679cdf0e10cSrcweir else
680cdf0e10cSrcweir {
681cdf0e10cSrcweir ImpPostUndoAction(pUndo);
682cdf0e10cSrcweir }
683cdf0e10cSrcweir }
684cdf0e10cSrcweir }
685cdf0e10cSrcweir
EnableUndo(bool bEnable)686cdf0e10cSrcweir void SdrModel::EnableUndo( bool bEnable )
687cdf0e10cSrcweir {
688cdf0e10cSrcweir if( mpImpl->mpUndoManager )
689cdf0e10cSrcweir {
690cdf0e10cSrcweir mpImpl->mpUndoManager->EnableUndo( bEnable );
691cdf0e10cSrcweir }
692cdf0e10cSrcweir else
693cdf0e10cSrcweir {
694cdf0e10cSrcweir mbUndoEnabled = bEnable;
695cdf0e10cSrcweir }
696cdf0e10cSrcweir }
697cdf0e10cSrcweir
IsUndoEnabled() const698cdf0e10cSrcweir bool SdrModel::IsUndoEnabled() const
699cdf0e10cSrcweir {
700cdf0e10cSrcweir if( mpImpl->mpUndoManager )
701cdf0e10cSrcweir {
702cdf0e10cSrcweir return mpImpl->mpUndoManager->IsUndoEnabled();
703cdf0e10cSrcweir }
704cdf0e10cSrcweir else
705cdf0e10cSrcweir {
706cdf0e10cSrcweir return mbUndoEnabled;
707cdf0e10cSrcweir }
708cdf0e10cSrcweir }
709cdf0e10cSrcweir
710cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
711cdf0e10cSrcweir
712cdf0e10cSrcweir // #116168#
ClearModel(sal_Bool bCalledFromDestructor)713cdf0e10cSrcweir void SdrModel::ClearModel(sal_Bool bCalledFromDestructor)
714cdf0e10cSrcweir {
715cdf0e10cSrcweir if(bCalledFromDestructor)
716cdf0e10cSrcweir {
717cdf0e10cSrcweir mbInDestruction = true;
718cdf0e10cSrcweir }
719cdf0e10cSrcweir
720cdf0e10cSrcweir sal_Int32 i;
721cdf0e10cSrcweir // delete all drawing pages
722cdf0e10cSrcweir sal_Int32 nAnz=GetPageCount();
723cdf0e10cSrcweir for (i=nAnz-1; i>=0; i--)
724cdf0e10cSrcweir {
725cdf0e10cSrcweir DeletePage( (sal_uInt16)i );
726cdf0e10cSrcweir }
727cdf0e10cSrcweir maPages.Clear();
728cdf0e10cSrcweir // #109538#
729cdf0e10cSrcweir PageListChanged();
730cdf0e10cSrcweir
731cdf0e10cSrcweir // delete all Masterpages
732cdf0e10cSrcweir nAnz=GetMasterPageCount();
733cdf0e10cSrcweir for(i=nAnz-1; i>=0; i--)
734cdf0e10cSrcweir {
735cdf0e10cSrcweir DeleteMasterPage( (sal_uInt16)i );
736cdf0e10cSrcweir }
737cdf0e10cSrcweir maMaPag.Clear();
738cdf0e10cSrcweir // #109538#
739cdf0e10cSrcweir MasterPageListChanged();
740cdf0e10cSrcweir
741cdf0e10cSrcweir pLayerAdmin->ClearLayer();
742cdf0e10cSrcweir }
743cdf0e10cSrcweir
AllocModel() const744cdf0e10cSrcweir SdrModel* SdrModel::AllocModel() const
745cdf0e10cSrcweir {
746cdf0e10cSrcweir SdrModel* pModel=new SdrModel;
747cdf0e10cSrcweir pModel->SetScaleUnit(eObjUnit,aObjUnit);
748cdf0e10cSrcweir return pModel;
749cdf0e10cSrcweir }
750cdf0e10cSrcweir
AllocPage(FASTBOOL bMasterPage)751cdf0e10cSrcweir SdrPage* SdrModel::AllocPage(FASTBOOL bMasterPage)
752cdf0e10cSrcweir {
753cdf0e10cSrcweir return new SdrPage(*this,bMasterPage);
754cdf0e10cSrcweir }
755cdf0e10cSrcweir
SetTextDefaults() const756cdf0e10cSrcweir void SdrModel::SetTextDefaults() const
757cdf0e10cSrcweir {
758cdf0e10cSrcweir SetTextDefaults( pItemPool, nDefTextHgt );
759cdf0e10cSrcweir }
760cdf0e10cSrcweir
ImpGetDefaultFontsLanguage(SvxFontItem & rLatin,SvxFontItem & rAsian,SvxFontItem & rComplex)761cdf0e10cSrcweir void ImpGetDefaultFontsLanguage( SvxFontItem& rLatin, SvxFontItem& rAsian, SvxFontItem& rComplex)
762cdf0e10cSrcweir {
763cdf0e10cSrcweir const sal_uInt16 nItemCnt = 3;
764cdf0e10cSrcweir static struct {
765cdf0e10cSrcweir sal_uInt16 nFntType, nLanguage;
766cdf0e10cSrcweir } aOutTypeArr[ nItemCnt ] = {
767cdf0e10cSrcweir { DEFAULTFONT_LATIN_TEXT, LANGUAGE_ENGLISH_US },
768cdf0e10cSrcweir { DEFAULTFONT_CJK_TEXT, LANGUAGE_ENGLISH_US },
769cdf0e10cSrcweir { DEFAULTFONT_CTL_TEXT, LANGUAGE_ARABIC_SAUDI_ARABIA }
770cdf0e10cSrcweir };
771cdf0e10cSrcweir SvxFontItem* aItemArr[ nItemCnt ] = { &rLatin, &rAsian, &rComplex };
772cdf0e10cSrcweir
773cdf0e10cSrcweir for( sal_uInt16 n = 0; n < nItemCnt; ++n )
774cdf0e10cSrcweir {
775cdf0e10cSrcweir Font aFnt( OutputDevice::GetDefaultFont(
776cdf0e10cSrcweir aOutTypeArr[ n ].nFntType, aOutTypeArr[ n ].nLanguage,
777cdf0e10cSrcweir DEFAULTFONT_FLAGS_ONLYONE, 0 ));
778cdf0e10cSrcweir SvxFontItem* pI = aItemArr[ n ];
779cdf0e10cSrcweir pI->SetFamily( aFnt.GetFamily());
780cdf0e10cSrcweir pI->SetFamilyName( aFnt.GetName());
781cdf0e10cSrcweir pI->SetStyleName( String() );
782cdf0e10cSrcweir pI->SetPitch( aFnt.GetPitch());
783cdf0e10cSrcweir pI->SetCharSet( aFnt.GetCharSet() );
784cdf0e10cSrcweir }
785cdf0e10cSrcweir }
786cdf0e10cSrcweir
SetTextDefaults(SfxItemPool * pItemPool,sal_uIntPtr nDefTextHgt)787cdf0e10cSrcweir void SdrModel::SetTextDefaults( SfxItemPool* pItemPool, sal_uIntPtr nDefTextHgt )
788cdf0e10cSrcweir {
789cdf0e10cSrcweir // #95114# set application-language specific dynamic pool language defaults
790cdf0e10cSrcweir SvxFontItem aSvxFontItem( EE_CHAR_FONTINFO) ;
791cdf0e10cSrcweir SvxFontItem aSvxFontItemCJK(EE_CHAR_FONTINFO_CJK);
792cdf0e10cSrcweir SvxFontItem aSvxFontItemCTL(EE_CHAR_FONTINFO_CTL);
793cdf0e10cSrcweir sal_uInt16 nLanguage(Application::GetSettings().GetLanguage());
794cdf0e10cSrcweir
795cdf0e10cSrcweir // get DEFAULTFONT_LATIN_TEXT and set at pool as dynamic default
796cdf0e10cSrcweir Font aFont(OutputDevice::GetDefaultFont(DEFAULTFONT_LATIN_TEXT, nLanguage, DEFAULTFONT_FLAGS_ONLYONE, 0));
797cdf0e10cSrcweir aSvxFontItem.SetFamily(aFont.GetFamily());
798cdf0e10cSrcweir aSvxFontItem.SetFamilyName(aFont.GetName());
799cdf0e10cSrcweir aSvxFontItem.SetStyleName(String());
800cdf0e10cSrcweir aSvxFontItem.SetPitch( aFont.GetPitch());
801cdf0e10cSrcweir aSvxFontItem.SetCharSet( aFont.GetCharSet() );
802cdf0e10cSrcweir pItemPool->SetPoolDefaultItem(aSvxFontItem);
803cdf0e10cSrcweir
804cdf0e10cSrcweir // get DEFAULTFONT_CJK_TEXT and set at pool as dynamic default
805cdf0e10cSrcweir Font aFontCJK(OutputDevice::GetDefaultFont(DEFAULTFONT_CJK_TEXT, nLanguage, DEFAULTFONT_FLAGS_ONLYONE, 0));
806cdf0e10cSrcweir aSvxFontItemCJK.SetFamily( aFontCJK.GetFamily());
807cdf0e10cSrcweir aSvxFontItemCJK.SetFamilyName(aFontCJK.GetName());
808cdf0e10cSrcweir aSvxFontItemCJK.SetStyleName(String());
809cdf0e10cSrcweir aSvxFontItemCJK.SetPitch( aFontCJK.GetPitch());
810cdf0e10cSrcweir aSvxFontItemCJK.SetCharSet( aFontCJK.GetCharSet());
811cdf0e10cSrcweir pItemPool->SetPoolDefaultItem(aSvxFontItemCJK);
812cdf0e10cSrcweir
813cdf0e10cSrcweir // get DEFAULTFONT_CTL_TEXT and set at pool as dynamic default
814cdf0e10cSrcweir Font aFontCTL(OutputDevice::GetDefaultFont(DEFAULTFONT_CTL_TEXT, nLanguage, DEFAULTFONT_FLAGS_ONLYONE, 0));
815cdf0e10cSrcweir aSvxFontItemCTL.SetFamily(aFontCTL.GetFamily());
816cdf0e10cSrcweir aSvxFontItemCTL.SetFamilyName(aFontCTL.GetName());
817cdf0e10cSrcweir aSvxFontItemCTL.SetStyleName(String());
818cdf0e10cSrcweir aSvxFontItemCTL.SetPitch( aFontCTL.GetPitch() );
819cdf0e10cSrcweir aSvxFontItemCTL.SetCharSet( aFontCTL.GetCharSet());
820cdf0e10cSrcweir pItemPool->SetPoolDefaultItem(aSvxFontItemCTL);
821cdf0e10cSrcweir
822cdf0e10cSrcweir // set dynamic FontHeight defaults
823cdf0e10cSrcweir pItemPool->SetPoolDefaultItem( SvxFontHeightItem(nDefTextHgt, 100, EE_CHAR_FONTHEIGHT ) );
824cdf0e10cSrcweir pItemPool->SetPoolDefaultItem( SvxFontHeightItem(nDefTextHgt, 100, EE_CHAR_FONTHEIGHT_CJK ) );
825cdf0e10cSrcweir pItemPool->SetPoolDefaultItem( SvxFontHeightItem(nDefTextHgt, 100, EE_CHAR_FONTHEIGHT_CTL ) );
826cdf0e10cSrcweir
827cdf0e10cSrcweir // set FontColor defaults
828cdf0e10cSrcweir pItemPool->SetPoolDefaultItem( SvxColorItem(SdrEngineDefaults::GetFontColor(), EE_CHAR_COLOR) );
829cdf0e10cSrcweir }
830cdf0e10cSrcweir
GetDrawOutliner(const SdrTextObj * pObj) const831cdf0e10cSrcweir SdrOutliner& SdrModel::GetDrawOutliner(const SdrTextObj* pObj) const
832cdf0e10cSrcweir {
833cdf0e10cSrcweir pDrawOutliner->SetTextObj(pObj);
834cdf0e10cSrcweir return *pDrawOutliner;
835cdf0e10cSrcweir }
836cdf0e10cSrcweir
CreateDrawOutliner(const SdrTextObj * pObj)837cdf0e10cSrcweir boost::shared_ptr< SdrOutliner > SdrModel::CreateDrawOutliner(const SdrTextObj* pObj)
838cdf0e10cSrcweir {
839cdf0e10cSrcweir boost::shared_ptr< SdrOutliner > xDrawOutliner( SdrMakeOutliner( OUTLINERMODE_TEXTOBJECT, this ) );
840cdf0e10cSrcweir ImpSetOutlinerDefaults(xDrawOutliner.get(), sal_True);
841cdf0e10cSrcweir xDrawOutliner->SetTextObj(pObj);
842cdf0e10cSrcweir return xDrawOutliner;
843cdf0e10cSrcweir }
844cdf0e10cSrcweir
GetFormattingTextObj() const845cdf0e10cSrcweir const SdrTextObj* SdrModel::GetFormattingTextObj() const
846cdf0e10cSrcweir {
847cdf0e10cSrcweir if (pDrawOutliner!=NULL) {
848cdf0e10cSrcweir return pDrawOutliner->GetTextObj();
849cdf0e10cSrcweir }
850cdf0e10cSrcweir return NULL;
851cdf0e10cSrcweir }
852cdf0e10cSrcweir
ImpSetOutlinerDefaults(SdrOutliner * pOutliner,sal_Bool bInit)853cdf0e10cSrcweir void SdrModel::ImpSetOutlinerDefaults( SdrOutliner* pOutliner, sal_Bool bInit )
854cdf0e10cSrcweir {
855cdf0e10cSrcweir /**************************************************************************
8568d647522Smseidel * Initialisierung der Outliner für Textausgabe und HitTest
857cdf0e10cSrcweir **************************************************************************/
858cdf0e10cSrcweir if( bInit )
859cdf0e10cSrcweir {
860cdf0e10cSrcweir pOutliner->EraseVirtualDevice();
861cdf0e10cSrcweir pOutliner->SetUpdateMode(sal_False);
862cdf0e10cSrcweir pOutliner->SetEditTextObjectPool(pItemPool);
863cdf0e10cSrcweir pOutliner->SetDefTab(nDefaultTabulator);
864cdf0e10cSrcweir }
865cdf0e10cSrcweir
866cdf0e10cSrcweir pOutliner->SetRefDevice(GetRefDevice());
867cdf0e10cSrcweir pOutliner->SetForbiddenCharsTable(GetForbiddenCharsTable());
868cdf0e10cSrcweir pOutliner->SetAsianCompressionMode( mnCharCompressType );
869cdf0e10cSrcweir pOutliner->SetKernAsianPunctuation( IsKernAsianPunctuation() );
870cdf0e10cSrcweir pOutliner->SetAddExtLeading( IsAddExtLeading() );
871cdf0e10cSrcweir
872cdf0e10cSrcweir if ( !GetRefDevice() )
873cdf0e10cSrcweir {
874cdf0e10cSrcweir MapMode aMapMode(eObjUnit, Point(0,0), aObjUnit, aObjUnit);
875cdf0e10cSrcweir pOutliner->SetRefMapMode(aMapMode);
876cdf0e10cSrcweir }
877cdf0e10cSrcweir }
878cdf0e10cSrcweir
SetRefDevice(OutputDevice * pDev)879cdf0e10cSrcweir void SdrModel::SetRefDevice(OutputDevice* pDev)
880cdf0e10cSrcweir {
881cdf0e10cSrcweir pRefOutDev=pDev;
882cdf0e10cSrcweir ImpSetOutlinerDefaults( pDrawOutliner );
883cdf0e10cSrcweir ImpSetOutlinerDefaults( pHitTestOutliner );
884cdf0e10cSrcweir RefDeviceChanged();
885cdf0e10cSrcweir }
886cdf0e10cSrcweir
ImpReformatAllTextObjects()887cdf0e10cSrcweir void SdrModel::ImpReformatAllTextObjects()
888cdf0e10cSrcweir {
889cdf0e10cSrcweir if( isLocked() )
890cdf0e10cSrcweir return;
891cdf0e10cSrcweir
892cdf0e10cSrcweir sal_uInt16 nAnz=GetMasterPageCount();
893cdf0e10cSrcweir sal_uInt16 nNum;
894cdf0e10cSrcweir for (nNum=0; nNum<nAnz; nNum++) {
895cdf0e10cSrcweir GetMasterPage(nNum)->ReformatAllTextObjects();
896cdf0e10cSrcweir }
897cdf0e10cSrcweir nAnz=GetPageCount();
898cdf0e10cSrcweir for (nNum=0; nNum<nAnz; nNum++) {
899cdf0e10cSrcweir GetPage(nNum)->ReformatAllTextObjects();
900cdf0e10cSrcweir }
901cdf0e10cSrcweir }
902cdf0e10cSrcweir
903cdf0e10cSrcweir /** #103122#
904cdf0e10cSrcweir steps over all available pages and sends notify messages to
905cdf0e10cSrcweir all edge objects that are connected to other objects so that
906cdf0e10cSrcweir they may reposition itselfs
907cdf0e10cSrcweir */
ImpReformatAllEdgeObjects()908cdf0e10cSrcweir void SdrModel::ImpReformatAllEdgeObjects()
909cdf0e10cSrcweir {
910cdf0e10cSrcweir if( isLocked() )
911cdf0e10cSrcweir return;
912cdf0e10cSrcweir
913cdf0e10cSrcweir sal_uInt16 nAnz=GetMasterPageCount();
914cdf0e10cSrcweir sal_uInt16 nNum;
915cdf0e10cSrcweir for (nNum=0; nNum<nAnz; nNum++)
916cdf0e10cSrcweir {
917cdf0e10cSrcweir GetMasterPage(nNum)->ReformatAllEdgeObjects();
918cdf0e10cSrcweir }
919cdf0e10cSrcweir nAnz=GetPageCount();
920cdf0e10cSrcweir for (nNum=0; nNum<nAnz; nNum++)
921cdf0e10cSrcweir {
922cdf0e10cSrcweir GetPage(nNum)->ReformatAllEdgeObjects();
923cdf0e10cSrcweir }
924cdf0e10cSrcweir }
925cdf0e10cSrcweir
GetDocumentStream(SdrDocumentStreamInfo &) const926cdf0e10cSrcweir SvStream* SdrModel::GetDocumentStream(SdrDocumentStreamInfo& /*rStreamInfo*/) const
927cdf0e10cSrcweir {
928cdf0e10cSrcweir return NULL;
929cdf0e10cSrcweir }
930cdf0e10cSrcweir
931cdf0e10cSrcweir // Die Vorlagenattribute der Zeichenobjekte in harte Attribute verwandeln.
BurnInStyleSheetAttributes()932cdf0e10cSrcweir void SdrModel::BurnInStyleSheetAttributes()
933cdf0e10cSrcweir {
934cdf0e10cSrcweir sal_uInt16 nAnz=GetMasterPageCount();
935cdf0e10cSrcweir sal_uInt16 nNum;
936cdf0e10cSrcweir for (nNum=0; nNum<nAnz; nNum++) {
937cdf0e10cSrcweir GetMasterPage(nNum)->BurnInStyleSheetAttributes();
938cdf0e10cSrcweir }
939cdf0e10cSrcweir nAnz=GetPageCount();
940cdf0e10cSrcweir for (nNum=0; nNum<nAnz; nNum++) {
941cdf0e10cSrcweir GetPage(nNum)->BurnInStyleSheetAttributes();
942cdf0e10cSrcweir }
943cdf0e10cSrcweir }
944cdf0e10cSrcweir
RefDeviceChanged()945cdf0e10cSrcweir void SdrModel::RefDeviceChanged()
946cdf0e10cSrcweir {
947cdf0e10cSrcweir Broadcast(SdrHint(HINT_REFDEVICECHG));
948cdf0e10cSrcweir ImpReformatAllTextObjects();
949cdf0e10cSrcweir }
950cdf0e10cSrcweir
SetDefaultFontHeight(sal_uIntPtr nVal)951cdf0e10cSrcweir void SdrModel::SetDefaultFontHeight(sal_uIntPtr nVal)
952cdf0e10cSrcweir {
953cdf0e10cSrcweir if (nVal!=nDefTextHgt) {
954cdf0e10cSrcweir nDefTextHgt=nVal;
955cdf0e10cSrcweir Broadcast(SdrHint(HINT_DEFFONTHGTCHG));
956cdf0e10cSrcweir ImpReformatAllTextObjects();
957cdf0e10cSrcweir }
958cdf0e10cSrcweir }
959cdf0e10cSrcweir
SetDefaultTabulator(sal_uInt16 nVal)960cdf0e10cSrcweir void SdrModel::SetDefaultTabulator(sal_uInt16 nVal)
961cdf0e10cSrcweir {
962cdf0e10cSrcweir if (nDefaultTabulator!=nVal) {
963cdf0e10cSrcweir nDefaultTabulator=nVal;
964cdf0e10cSrcweir Outliner& rOutliner=GetDrawOutliner();
965cdf0e10cSrcweir rOutliner.SetDefTab(nVal);
966cdf0e10cSrcweir Broadcast(SdrHint(HINT_DEFAULTTABCHG));
967cdf0e10cSrcweir ImpReformatAllTextObjects();
968cdf0e10cSrcweir }
969cdf0e10cSrcweir }
970cdf0e10cSrcweir
ImpSetUIUnit()971cdf0e10cSrcweir void SdrModel::ImpSetUIUnit()
972cdf0e10cSrcweir {
973cdf0e10cSrcweir if(0 == aUIScale.GetNumerator() || 0 == aUIScale.GetDenominator())
974cdf0e10cSrcweir {
975cdf0e10cSrcweir aUIScale = Fraction(1,1);
976cdf0e10cSrcweir }
977cdf0e10cSrcweir
978cdf0e10cSrcweir // set start values
9798d647522Smseidel nUIUnitComma = 0;
980cdf0e10cSrcweir sal_Int64 nMul(1);
981cdf0e10cSrcweir sal_Int64 nDiv(1);
982cdf0e10cSrcweir
983cdf0e10cSrcweir // normalize on meters resp. inch
984cdf0e10cSrcweir switch (eObjUnit)
985cdf0e10cSrcweir {
9868d647522Smseidel case MAP_100TH_MM : nUIUnitComma+=5; break;
9878d647522Smseidel case MAP_10TH_MM : nUIUnitComma+=4; break;
9888d647522Smseidel case MAP_MM : nUIUnitComma+=3; break;
9898d647522Smseidel case MAP_CM : nUIUnitComma+=2; break;
9908d647522Smseidel case MAP_1000TH_INCH: nUIUnitComma+=3; break;
9918d647522Smseidel case MAP_100TH_INCH : nUIUnitComma+=2; break;
9928d647522Smseidel case MAP_10TH_INCH : nUIUnitComma+=1; break;
9938d647522Smseidel case MAP_INCH : nUIUnitComma+=0; break;
994cdf0e10cSrcweir case MAP_POINT : nDiv=72; break; // 1Pt = 1/72"
9958d647522Smseidel case MAP_TWIP : nDiv=144; nUIUnitComma++; break; // 1Twip = 1/1440"
996cdf0e10cSrcweir case MAP_PIXEL : break;
997cdf0e10cSrcweir case MAP_SYSFONT : break;
998cdf0e10cSrcweir case MAP_APPFONT : break;
999cdf0e10cSrcweir case MAP_RELATIVE : break;
1000cdf0e10cSrcweir default: break;
1001cdf0e10cSrcweir } // switch
1002cdf0e10cSrcweir
1003cdf0e10cSrcweir // 1 mile = 8 furlong = 63.360" = 1.609.344,0mm
1004cdf0e10cSrcweir // 1 furlong = 10 chains = 7.920" = 201.168,0mm
1005cdf0e10cSrcweir // 1 chain = 4 poles = 792" = 20.116,8mm
1006cdf0e10cSrcweir // 1 pole = 5 1/2 yd = 198" = 5.029,2mm
1007cdf0e10cSrcweir // 1 yd = 3 ft = 36" = 914,4mm
1008cdf0e10cSrcweir // 1 ft = 12 " = 1" = 304,8mm
1009cdf0e10cSrcweir switch (eUIUnit)
1010cdf0e10cSrcweir {
1011cdf0e10cSrcweir case FUNIT_NONE : break;
1012cdf0e10cSrcweir // Metrisch
10138d647522Smseidel case FUNIT_100TH_MM: nUIUnitComma-=5; break;
10148d647522Smseidel case FUNIT_MM : nUIUnitComma-=3; break;
10158d647522Smseidel case FUNIT_CM : nUIUnitComma-=2; break;
10168d647522Smseidel case FUNIT_M : nUIUnitComma+=0; break;
10178d647522Smseidel case FUNIT_KM : nUIUnitComma+=3; break;
1018cdf0e10cSrcweir // Inch
10198d647522Smseidel case FUNIT_TWIP : nMul=144; nUIUnitComma--; break; // 1Twip = 1/1440"
1020cdf0e10cSrcweir case FUNIT_POINT : nMul=72; break; // 1Pt = 1/72"
1021cdf0e10cSrcweir case FUNIT_PICA : nMul=6; break; // 1Pica = 1/6" ?
1022cdf0e10cSrcweir case FUNIT_INCH : break; // 1" = 1"
1023cdf0e10cSrcweir case FUNIT_FOOT : nDiv*=12; break; // 1Ft = 12"
10248d647522Smseidel case FUNIT_MILE : nDiv*=6336; nUIUnitComma++; break; // 1mile = 63360"
1025cdf0e10cSrcweir // sonstiges
1026cdf0e10cSrcweir case FUNIT_CUSTOM : break;
10278d647522Smseidel case FUNIT_PERCENT: nUIUnitComma+=2; break;
1028cdf0e10cSrcweir } // switch
1029cdf0e10cSrcweir
1030cdf0e10cSrcweir // check if mapping is from metric to inch and adapt
1031cdf0e10cSrcweir const bool bMapInch(IsInch(eObjUnit));
1032cdf0e10cSrcweir const bool bUIMetr(IsMetric(eUIUnit));
1033cdf0e10cSrcweir
1034cdf0e10cSrcweir if (bMapInch && bUIMetr)
1035cdf0e10cSrcweir {
10368d647522Smseidel nUIUnitComma += 4;
1037cdf0e10cSrcweir nMul *= 254;
1038cdf0e10cSrcweir }
1039cdf0e10cSrcweir
1040cdf0e10cSrcweir // check if mapping is from inch to metric and adapt
1041cdf0e10cSrcweir const bool bMapMetr(IsMetric(eObjUnit));
1042cdf0e10cSrcweir const bool bUIInch(IsInch(eUIUnit));
1043cdf0e10cSrcweir
1044cdf0e10cSrcweir if (bMapMetr && bUIInch)
1045cdf0e10cSrcweir {
10468d647522Smseidel nUIUnitComma -= 4;
1047cdf0e10cSrcweir nDiv *= 254;
1048cdf0e10cSrcweir }
1049cdf0e10cSrcweir
1050cdf0e10cSrcweir // use temporary fraction for reduction (fallback to 32bit here),
1051cdf0e10cSrcweir // may need to be changed in the future, too
1052cdf0e10cSrcweir if(1 != nMul || 1 != nDiv)
1053cdf0e10cSrcweir {
1054cdf0e10cSrcweir const Fraction aTemp(static_cast< long >(nMul), static_cast< long >(nDiv));
1055cdf0e10cSrcweir nMul = aTemp.GetNumerator();
1056cdf0e10cSrcweir nDiv = aTemp.GetDenominator();
1057cdf0e10cSrcweir }
1058cdf0e10cSrcweir
1059cdf0e10cSrcweir // #i89872# take Unit of Measurement into account
1060cdf0e10cSrcweir if(1 != aUIScale.GetDenominator() || 1 != aUIScale.GetNumerator())
1061cdf0e10cSrcweir {
1062cdf0e10cSrcweir // divide by UIScale
1063cdf0e10cSrcweir nMul *= aUIScale.GetDenominator();
1064cdf0e10cSrcweir nDiv *= aUIScale.GetNumerator();
1065cdf0e10cSrcweir }
1066cdf0e10cSrcweir
1067cdf0e10cSrcweir // shorten trailing zeroes for dividend
1068cdf0e10cSrcweir while(0 == (nMul % 10))
1069cdf0e10cSrcweir {
10708d647522Smseidel nUIUnitComma--;
1071cdf0e10cSrcweir nMul /= 10;
1072cdf0e10cSrcweir }
1073cdf0e10cSrcweir
1074cdf0e10cSrcweir // shorten trailing zeroes for divisor
1075cdf0e10cSrcweir while(0 == (nDiv % 10))
1076cdf0e10cSrcweir {
10778d647522Smseidel nUIUnitComma++;
1078cdf0e10cSrcweir nDiv /= 10;
1079cdf0e10cSrcweir }
1080cdf0e10cSrcweir
1081cdf0e10cSrcweir // end preparations, set member values
1082cdf0e10cSrcweir aUIUnitFact = Fraction(sal_Int32(nMul), sal_Int32(nDiv));
10838d647522Smseidel bUIOnlyComma = (nMul == nDiv);
1084cdf0e10cSrcweir TakeUnitStr(eUIUnit, aUIUnitStr);
1085cdf0e10cSrcweir }
1086cdf0e10cSrcweir
SetScaleUnit(MapUnit eMap,const Fraction & rFrac)1087cdf0e10cSrcweir void SdrModel::SetScaleUnit(MapUnit eMap, const Fraction& rFrac)
1088cdf0e10cSrcweir {
1089cdf0e10cSrcweir if (eObjUnit!=eMap || aObjUnit!=rFrac) {
1090cdf0e10cSrcweir eObjUnit=eMap;
1091cdf0e10cSrcweir aObjUnit=rFrac;
1092cdf0e10cSrcweir pItemPool->SetDefaultMetric((SfxMapUnit)eObjUnit);
1093cdf0e10cSrcweir ImpSetUIUnit();
1094cdf0e10cSrcweir ImpSetOutlinerDefaults( pDrawOutliner );
1095cdf0e10cSrcweir ImpSetOutlinerDefaults( pHitTestOutliner );
1096cdf0e10cSrcweir ImpReformatAllTextObjects(); // #40424#
1097cdf0e10cSrcweir }
1098cdf0e10cSrcweir }
1099cdf0e10cSrcweir
SetScaleUnit(MapUnit eMap)1100cdf0e10cSrcweir void SdrModel::SetScaleUnit(MapUnit eMap)
1101cdf0e10cSrcweir {
1102cdf0e10cSrcweir if (eObjUnit!=eMap) {
1103cdf0e10cSrcweir eObjUnit=eMap;
1104cdf0e10cSrcweir pItemPool->SetDefaultMetric((SfxMapUnit)eObjUnit);
1105cdf0e10cSrcweir ImpSetUIUnit();
1106cdf0e10cSrcweir ImpSetOutlinerDefaults( pDrawOutliner );
1107cdf0e10cSrcweir ImpSetOutlinerDefaults( pHitTestOutliner );
1108cdf0e10cSrcweir ImpReformatAllTextObjects(); // #40424#
1109cdf0e10cSrcweir }
1110cdf0e10cSrcweir }
1111cdf0e10cSrcweir
SetScaleFraction(const Fraction & rFrac)1112cdf0e10cSrcweir void SdrModel::SetScaleFraction(const Fraction& rFrac)
1113cdf0e10cSrcweir {
1114cdf0e10cSrcweir if (aObjUnit!=rFrac) {
1115cdf0e10cSrcweir aObjUnit=rFrac;
1116cdf0e10cSrcweir ImpSetUIUnit();
1117cdf0e10cSrcweir ImpSetOutlinerDefaults( pDrawOutliner );
1118cdf0e10cSrcweir ImpSetOutlinerDefaults( pHitTestOutliner );
1119cdf0e10cSrcweir ImpReformatAllTextObjects(); // #40424#
1120cdf0e10cSrcweir }
1121cdf0e10cSrcweir }
1122cdf0e10cSrcweir
SetUIUnit(FieldUnit eUnit)1123cdf0e10cSrcweir void SdrModel::SetUIUnit(FieldUnit eUnit)
1124cdf0e10cSrcweir {
1125cdf0e10cSrcweir if (eUIUnit!=eUnit) {
1126cdf0e10cSrcweir eUIUnit=eUnit;
1127cdf0e10cSrcweir ImpSetUIUnit();
1128cdf0e10cSrcweir ImpReformatAllTextObjects(); // #40424#
1129cdf0e10cSrcweir }
1130cdf0e10cSrcweir }
1131cdf0e10cSrcweir
SetUIScale(const Fraction & rScale)1132cdf0e10cSrcweir void SdrModel::SetUIScale(const Fraction& rScale)
1133cdf0e10cSrcweir {
1134cdf0e10cSrcweir if (aUIScale!=rScale) {
1135cdf0e10cSrcweir aUIScale=rScale;
1136cdf0e10cSrcweir ImpSetUIUnit();
1137cdf0e10cSrcweir ImpReformatAllTextObjects(); // #40424#
1138cdf0e10cSrcweir }
1139cdf0e10cSrcweir }
1140cdf0e10cSrcweir
SetUIUnit(FieldUnit eUnit,const Fraction & rScale)1141cdf0e10cSrcweir void SdrModel::SetUIUnit(FieldUnit eUnit, const Fraction& rScale)
1142cdf0e10cSrcweir {
1143cdf0e10cSrcweir if (eUIUnit!=eUnit || aUIScale!=rScale) {
1144cdf0e10cSrcweir eUIUnit=eUnit;
1145cdf0e10cSrcweir aUIScale=rScale;
1146cdf0e10cSrcweir ImpSetUIUnit();
1147cdf0e10cSrcweir ImpReformatAllTextObjects(); // #40424#
1148cdf0e10cSrcweir }
1149cdf0e10cSrcweir }
1150cdf0e10cSrcweir
TakeUnitStr(FieldUnit eUnit,XubString & rStr)1151cdf0e10cSrcweir void SdrModel::TakeUnitStr(FieldUnit eUnit, XubString& rStr)
1152cdf0e10cSrcweir {
1153cdf0e10cSrcweir switch(eUnit)
1154cdf0e10cSrcweir {
1155cdf0e10cSrcweir default:
1156cdf0e10cSrcweir case FUNIT_NONE :
1157cdf0e10cSrcweir case FUNIT_CUSTOM :
1158cdf0e10cSrcweir {
1159cdf0e10cSrcweir rStr = String();
1160cdf0e10cSrcweir break;
1161cdf0e10cSrcweir }
1162cdf0e10cSrcweir case FUNIT_100TH_MM:
1163cdf0e10cSrcweir {
1164027cdf4aSHerbert Dürr const sal_Char aText[] = "/100mm";
1165027cdf4aSHerbert Dürr rStr = UniString(aText, sizeof(aText)-1);
1166cdf0e10cSrcweir break;
1167cdf0e10cSrcweir }
1168cdf0e10cSrcweir case FUNIT_MM :
1169cdf0e10cSrcweir {
1170027cdf4aSHerbert Dürr const sal_Char aText[] = "mm";
1171027cdf4aSHerbert Dürr rStr = UniString(aText, sizeof(aText)-1);
1172cdf0e10cSrcweir break;
1173cdf0e10cSrcweir }
1174cdf0e10cSrcweir case FUNIT_CM :
1175cdf0e10cSrcweir {
1176027cdf4aSHerbert Dürr const sal_Char aText[] = "cm";
1177027cdf4aSHerbert Dürr rStr = UniString(aText, sizeof(aText)-1);
1178cdf0e10cSrcweir break;
1179cdf0e10cSrcweir }
1180cdf0e10cSrcweir case FUNIT_M :
1181cdf0e10cSrcweir {
1182cdf0e10cSrcweir rStr = String();
1183cdf0e10cSrcweir rStr += sal_Unicode('m');
1184cdf0e10cSrcweir break;
1185cdf0e10cSrcweir }
1186cdf0e10cSrcweir case FUNIT_KM :
1187cdf0e10cSrcweir {
1188027cdf4aSHerbert Dürr const sal_Char aText[] = "km";
1189027cdf4aSHerbert Dürr rStr = UniString(aText, sizeof(aText)-1);
1190cdf0e10cSrcweir break;
1191cdf0e10cSrcweir }
1192cdf0e10cSrcweir case FUNIT_TWIP :
1193cdf0e10cSrcweir {
1194027cdf4aSHerbert Dürr const sal_Char aText[] = "twip";
1195027cdf4aSHerbert Dürr rStr = UniString(aText, sizeof(aText)-1);
1196cdf0e10cSrcweir break;
1197cdf0e10cSrcweir }
1198cdf0e10cSrcweir case FUNIT_POINT :
1199cdf0e10cSrcweir {
1200027cdf4aSHerbert Dürr const sal_Char aText[] = "pt";
1201027cdf4aSHerbert Dürr rStr = UniString(aText, sizeof(aText)-1);
1202cdf0e10cSrcweir break;
1203cdf0e10cSrcweir }
1204cdf0e10cSrcweir case FUNIT_PICA :
1205cdf0e10cSrcweir {
1206cdf0e10cSrcweir sal_Char aText[] = "pica";
1207027cdf4aSHerbert Dürr rStr = UniString(aText, sizeof(aText)-1);
1208cdf0e10cSrcweir break;
1209cdf0e10cSrcweir }
1210cdf0e10cSrcweir case FUNIT_INCH :
1211cdf0e10cSrcweir {
1212cdf0e10cSrcweir rStr = String();
1213cdf0e10cSrcweir rStr += sal_Unicode('"');
1214cdf0e10cSrcweir break;
1215cdf0e10cSrcweir }
1216cdf0e10cSrcweir case FUNIT_FOOT :
1217cdf0e10cSrcweir {
1218027cdf4aSHerbert Dürr const sal_Char aText[] = "ft";
1219027cdf4aSHerbert Dürr rStr = UniString(aText, sizeof(aText)-1);
1220cdf0e10cSrcweir break;
1221cdf0e10cSrcweir }
1222cdf0e10cSrcweir case FUNIT_MILE :
1223cdf0e10cSrcweir {
1224027cdf4aSHerbert Dürr const sal_Char aText[] = "mile(s)";
1225027cdf4aSHerbert Dürr rStr = UniString(aText, sizeof(aText)-1);
1226cdf0e10cSrcweir break;
1227cdf0e10cSrcweir }
1228cdf0e10cSrcweir case FUNIT_PERCENT:
1229cdf0e10cSrcweir {
1230cdf0e10cSrcweir rStr = String();
1231cdf0e10cSrcweir rStr += sal_Unicode('%');
1232cdf0e10cSrcweir break;
1233cdf0e10cSrcweir }
1234cdf0e10cSrcweir }
1235cdf0e10cSrcweir }
1236cdf0e10cSrcweir
TakeMetricStr(long nVal,XubString & rStr,FASTBOOL bNoUnitChars,sal_Int32 nNumDigits) const1237cdf0e10cSrcweir void SdrModel::TakeMetricStr(long nVal, XubString& rStr, FASTBOOL bNoUnitChars, sal_Int32 nNumDigits) const
1238cdf0e10cSrcweir {
1239cdf0e10cSrcweir // #i22167#
1240cdf0e10cSrcweir // change to double precision usage to not loose decimal places after comma
1241cdf0e10cSrcweir const bool bNegative(nVal < 0L);
1242cdf0e10cSrcweir SvtSysLocale aSysLoc;
1243cdf0e10cSrcweir const LocaleDataWrapper& rLoc(aSysLoc.GetLocaleData());
1244cdf0e10cSrcweir double fLocalValue(double(nVal) * double(aUIUnitFact));
1245cdf0e10cSrcweir
1246cdf0e10cSrcweir if(bNegative)
1247cdf0e10cSrcweir {
1248cdf0e10cSrcweir fLocalValue = -fLocalValue;
1249cdf0e10cSrcweir }
1250cdf0e10cSrcweir
1251cdf0e10cSrcweir if( -1 == nNumDigits )
1252cdf0e10cSrcweir {
1253cdf0e10cSrcweir nNumDigits = rLoc.getNumDigits();
1254cdf0e10cSrcweir }
1255cdf0e10cSrcweir
12568d647522Smseidel sal_Int32 nComma(nUIUnitComma);
1257cdf0e10cSrcweir
12588d647522Smseidel if(nComma > nNumDigits)
1259cdf0e10cSrcweir {
12608d647522Smseidel const sal_Int32 nDiff(nComma - nNumDigits);
1261cdf0e10cSrcweir const double fFactor(pow(10.0, static_cast<const int>(nDiff)));
1262cdf0e10cSrcweir
1263cdf0e10cSrcweir fLocalValue /= fFactor;
12648d647522Smseidel nComma = nNumDigits;
1265cdf0e10cSrcweir }
12668d647522Smseidel else if(nComma < nNumDigits)
1267cdf0e10cSrcweir {
12688d647522Smseidel const sal_Int32 nDiff(nNumDigits - nComma);
1269cdf0e10cSrcweir const double fFactor(pow(10.0, static_cast<const int>(nDiff)));
1270cdf0e10cSrcweir
1271cdf0e10cSrcweir fLocalValue *= fFactor;
12728d647522Smseidel nComma = nNumDigits;
1273cdf0e10cSrcweir }
1274cdf0e10cSrcweir
1275cdf0e10cSrcweir rStr = UniString::CreateFromInt32(static_cast<sal_Int32>(fLocalValue + 0.5));
1276cdf0e10cSrcweir
12778d647522Smseidel if(nComma < 0)
1278cdf0e10cSrcweir {
1279cdf0e10cSrcweir // Negatives Komma bedeutet: Nullen dran
12808d647522Smseidel sal_Int32 nAnz(-nComma);
1281cdf0e10cSrcweir
1282cdf0e10cSrcweir for(sal_Int32 i=0; i<nAnz; i++)
1283cdf0e10cSrcweir rStr += sal_Unicode('0');
1284cdf0e10cSrcweir
12858d647522Smseidel nComma = 0;
1286cdf0e10cSrcweir }
1287cdf0e10cSrcweir
1288cdf0e10cSrcweir // #83257# the second condition needs to be <= since inside this loop
1289cdf0e10cSrcweir // also the leading zero is inserted.
12908d647522Smseidel if(nComma > 0 && rStr.Len() <= nComma)
1291cdf0e10cSrcweir {
12928d647522Smseidel // Für Komma evtl. vorne Nullen dran
12938d647522Smseidel sal_Int32 nAnz(nComma - rStr.Len());
1294cdf0e10cSrcweir
1295cdf0e10cSrcweir if(nAnz >= 0 && rLoc.isNumLeadingZero())
1296cdf0e10cSrcweir nAnz++;
1297cdf0e10cSrcweir
1298cdf0e10cSrcweir for(sal_Int32 i=0; i<nAnz; i++)
1299cdf0e10cSrcweir rStr.Insert(sal_Unicode('0'), 0);
1300cdf0e10cSrcweir }
1301cdf0e10cSrcweir
1302cdf0e10cSrcweir sal_Unicode cDec( rLoc.getNumDecimalSep().GetChar(0) );
1303cdf0e10cSrcweir
13048d647522Smseidel // KommaChar einfügen
13058d647522Smseidel sal_Int32 nPreComma(rStr.Len() - nComma);
1306cdf0e10cSrcweir
13078d647522Smseidel if(nComma > 0)
13088d647522Smseidel rStr.Insert(cDec, (xub_StrLen) nPreComma);
1309cdf0e10cSrcweir
1310cdf0e10cSrcweir if(!rLoc.isNumTrailingZeros())
1311cdf0e10cSrcweir {
1312cdf0e10cSrcweir while(rStr.Len() && rStr.GetChar(rStr.Len() - 1) == sal_Unicode('0'))
1313cdf0e10cSrcweir rStr.Erase(rStr.Len() - 1);
1314cdf0e10cSrcweir
1315cdf0e10cSrcweir if(rStr.Len() && rStr.GetChar(rStr.Len() - 1) == cDec)
1316cdf0e10cSrcweir rStr.Erase(rStr.Len() - 1);
1317cdf0e10cSrcweir }
1318cdf0e10cSrcweir
13198d647522Smseidel // ggf. Trennpunkte bei jedem Tausender einfügen
13208d647522Smseidel if( nPreComma > 3 )
1321cdf0e10cSrcweir {
1322cdf0e10cSrcweir String aThoSep( rLoc.getNumThousandSep() );
1323cdf0e10cSrcweir if ( aThoSep.Len() > 0 )
1324cdf0e10cSrcweir {
1325cdf0e10cSrcweir sal_Unicode cTho( aThoSep.GetChar(0) );
13268d647522Smseidel sal_Int32 i(nPreComma - 3);
1327cdf0e10cSrcweir
1328cdf0e10cSrcweir while(i > 0) // #78311#
1329cdf0e10cSrcweir {
1330cdf0e10cSrcweir rStr.Insert(cTho, (xub_StrLen)i);
1331cdf0e10cSrcweir i -= 3;
1332cdf0e10cSrcweir }
1333cdf0e10cSrcweir }
1334cdf0e10cSrcweir }
1335cdf0e10cSrcweir
1336cdf0e10cSrcweir if(!rStr.Len())
1337cdf0e10cSrcweir {
1338cdf0e10cSrcweir rStr = String();
1339cdf0e10cSrcweir rStr += sal_Unicode('0');
1340cdf0e10cSrcweir }
1341cdf0e10cSrcweir
1342cdf0e10cSrcweir if(bNegative)
1343cdf0e10cSrcweir {
1344cdf0e10cSrcweir rStr.Insert(sal_Unicode('-'), 0);
1345cdf0e10cSrcweir }
1346cdf0e10cSrcweir
1347cdf0e10cSrcweir if(!bNoUnitChars)
1348cdf0e10cSrcweir rStr += aUIUnitStr;
1349cdf0e10cSrcweir }
1350cdf0e10cSrcweir
TakeWinkStr(long nWink,XubString & rStr,FASTBOOL bNoDegChar) const1351cdf0e10cSrcweir void SdrModel::TakeWinkStr(long nWink, XubString& rStr, FASTBOOL bNoDegChar) const
1352cdf0e10cSrcweir {
1353cdf0e10cSrcweir sal_Bool bNeg(nWink < 0);
1354cdf0e10cSrcweir
1355cdf0e10cSrcweir if(bNeg)
1356cdf0e10cSrcweir nWink = -nWink;
1357cdf0e10cSrcweir
1358cdf0e10cSrcweir rStr = UniString::CreateFromInt32(nWink);
1359cdf0e10cSrcweir
1360cdf0e10cSrcweir SvtSysLocale aSysLoc;
1361cdf0e10cSrcweir const LocaleDataWrapper& rLoc = aSysLoc.GetLocaleData();
1362cdf0e10cSrcweir xub_StrLen nAnz(2);
1363cdf0e10cSrcweir
1364cdf0e10cSrcweir if(rLoc.isNumLeadingZero())
1365cdf0e10cSrcweir nAnz++;
1366cdf0e10cSrcweir
1367cdf0e10cSrcweir while(rStr.Len() < nAnz)
1368cdf0e10cSrcweir rStr.Insert(sal_Unicode('0'), 0);
1369cdf0e10cSrcweir
1370cdf0e10cSrcweir rStr.Insert(rLoc.getNumDecimalSep().GetChar(0), rStr.Len() - 2);
1371cdf0e10cSrcweir
1372cdf0e10cSrcweir if(bNeg)
1373cdf0e10cSrcweir rStr.Insert(sal_Unicode('-'), 0);
1374cdf0e10cSrcweir
1375cdf0e10cSrcweir if(!bNoDegChar)
1376cdf0e10cSrcweir rStr += DEGREE_CHAR;
1377cdf0e10cSrcweir }
1378cdf0e10cSrcweir
TakePercentStr(const Fraction & rVal,XubString & rStr,FASTBOOL bNoPercentChar) const1379cdf0e10cSrcweir void SdrModel::TakePercentStr(const Fraction& rVal, XubString& rStr, FASTBOOL bNoPercentChar) const
1380cdf0e10cSrcweir {
1381cdf0e10cSrcweir sal_Int32 nMul(rVal.GetNumerator());
1382cdf0e10cSrcweir sal_Int32 nDiv(rVal.GetDenominator());
1383cdf0e10cSrcweir sal_Bool bNeg(nMul < 0);
1384cdf0e10cSrcweir
1385cdf0e10cSrcweir if(nDiv < 0)
1386cdf0e10cSrcweir bNeg = !bNeg;
1387cdf0e10cSrcweir
1388cdf0e10cSrcweir if(nMul < 0)
1389cdf0e10cSrcweir nMul = -nMul;
1390cdf0e10cSrcweir
1391cdf0e10cSrcweir if(nDiv < 0)
1392cdf0e10cSrcweir nDiv = -nDiv;
1393cdf0e10cSrcweir
1394cdf0e10cSrcweir nMul *= 100;
1395cdf0e10cSrcweir nMul += nDiv/2;
1396cdf0e10cSrcweir nMul /= nDiv;
1397cdf0e10cSrcweir
1398cdf0e10cSrcweir rStr = UniString::CreateFromInt32(nMul);
1399cdf0e10cSrcweir
1400cdf0e10cSrcweir if(bNeg)
1401cdf0e10cSrcweir rStr.Insert(sal_Unicode('-'), 0);
1402cdf0e10cSrcweir
1403cdf0e10cSrcweir if(!bNoPercentChar)
1404cdf0e10cSrcweir rStr += sal_Unicode('%');
1405cdf0e10cSrcweir }
1406cdf0e10cSrcweir
SetChanged(sal_Bool bFlg)1407cdf0e10cSrcweir void SdrModel::SetChanged(sal_Bool bFlg)
1408cdf0e10cSrcweir {
1409cdf0e10cSrcweir mbChanged = bFlg;
1410cdf0e10cSrcweir }
1411cdf0e10cSrcweir
RecalcPageNums(FASTBOOL bMaster)1412cdf0e10cSrcweir void SdrModel::RecalcPageNums(FASTBOOL bMaster)
1413cdf0e10cSrcweir {
1414cdf0e10cSrcweir Container& rPL=*(bMaster ? &maMaPag : &maPages);
1415cdf0e10cSrcweir sal_uInt16 nAnz=sal_uInt16(rPL.Count());
1416cdf0e10cSrcweir sal_uInt16 i;
1417cdf0e10cSrcweir for (i=0; i<nAnz; i++) {
1418cdf0e10cSrcweir SdrPage* pPg=(SdrPage*)(rPL.GetObject(i));
1419cdf0e10cSrcweir pPg->SetPageNum(i);
1420cdf0e10cSrcweir }
1421cdf0e10cSrcweir if (bMaster) bMPgNumsDirty=sal_False;
1422cdf0e10cSrcweir else bPagNumsDirty=sal_False;
1423cdf0e10cSrcweir }
1424cdf0e10cSrcweir
InsertPage(SdrPage * pPage,sal_uInt16 nPos)1425cdf0e10cSrcweir void SdrModel::InsertPage(SdrPage* pPage, sal_uInt16 nPos)
1426cdf0e10cSrcweir {
1427cdf0e10cSrcweir sal_uInt16 nAnz=GetPageCount();
1428cdf0e10cSrcweir if (nPos>nAnz) nPos=nAnz;
1429cdf0e10cSrcweir maPages.Insert(pPage,nPos);
1430cdf0e10cSrcweir // #109538#
1431cdf0e10cSrcweir PageListChanged();
1432cdf0e10cSrcweir pPage->SetInserted(sal_True);
1433cdf0e10cSrcweir pPage->SetPageNum(nPos);
1434cdf0e10cSrcweir pPage->SetModel(this);
1435cdf0e10cSrcweir if (nPos<nAnz) bPagNumsDirty=sal_True;
1436cdf0e10cSrcweir SetChanged();
1437cdf0e10cSrcweir SdrHint aHint(HINT_PAGEORDERCHG);
1438cdf0e10cSrcweir aHint.SetPage(pPage);
1439cdf0e10cSrcweir Broadcast(aHint);
1440cdf0e10cSrcweir }
1441cdf0e10cSrcweir
DeletePage(sal_uInt16 nPgNum)1442cdf0e10cSrcweir void SdrModel::DeletePage(sal_uInt16 nPgNum)
1443cdf0e10cSrcweir {
1444cdf0e10cSrcweir SdrPage* pPg=RemovePage(nPgNum);
1445cdf0e10cSrcweir delete pPg;
1446cdf0e10cSrcweir }
1447cdf0e10cSrcweir
RemovePage(sal_uInt16 nPgNum)1448cdf0e10cSrcweir SdrPage* SdrModel::RemovePage(sal_uInt16 nPgNum)
1449cdf0e10cSrcweir {
1450cdf0e10cSrcweir SdrPage* pPg=(SdrPage*)maPages.Remove(nPgNum);
1451cdf0e10cSrcweir // #109538#
1452cdf0e10cSrcweir PageListChanged();
1453cdf0e10cSrcweir if (pPg!=NULL) {
1454cdf0e10cSrcweir pPg->SetInserted(sal_False);
1455cdf0e10cSrcweir }
1456cdf0e10cSrcweir bPagNumsDirty=sal_True;
1457cdf0e10cSrcweir SetChanged();
1458cdf0e10cSrcweir SdrHint aHint(HINT_PAGEORDERCHG);
1459cdf0e10cSrcweir aHint.SetPage(pPg);
1460cdf0e10cSrcweir Broadcast(aHint);
1461cdf0e10cSrcweir return pPg;
1462cdf0e10cSrcweir }
1463cdf0e10cSrcweir
MovePage(sal_uInt16 nPgNum,sal_uInt16 nNewPos)1464cdf0e10cSrcweir void SdrModel::MovePage(sal_uInt16 nPgNum, sal_uInt16 nNewPos)
1465cdf0e10cSrcweir {
1466cdf0e10cSrcweir SdrPage* pPg=(SdrPage*)maPages.Remove(nPgNum);
1467cdf0e10cSrcweir // #109538#
1468cdf0e10cSrcweir PageListChanged();
1469cdf0e10cSrcweir if (pPg!=NULL) {
1470cdf0e10cSrcweir pPg->SetInserted(sal_False);
1471cdf0e10cSrcweir InsertPage(pPg,nNewPos);
1472cdf0e10cSrcweir }
1473cdf0e10cSrcweir }
1474cdf0e10cSrcweir
InsertMasterPage(SdrPage * pPage,sal_uInt16 nPos)1475cdf0e10cSrcweir void SdrModel::InsertMasterPage(SdrPage* pPage, sal_uInt16 nPos)
1476cdf0e10cSrcweir {
1477cdf0e10cSrcweir sal_uInt16 nAnz=GetMasterPageCount();
1478cdf0e10cSrcweir if (nPos>nAnz) nPos=nAnz;
1479cdf0e10cSrcweir maMaPag.Insert(pPage,nPos);
1480cdf0e10cSrcweir // #109538#
1481cdf0e10cSrcweir MasterPageListChanged();
1482cdf0e10cSrcweir pPage->SetInserted(sal_True);
1483cdf0e10cSrcweir pPage->SetPageNum(nPos);
1484cdf0e10cSrcweir pPage->SetModel(this);
1485cdf0e10cSrcweir if (nPos<nAnz) {
1486cdf0e10cSrcweir bMPgNumsDirty=sal_True;
1487cdf0e10cSrcweir }
1488cdf0e10cSrcweir SetChanged();
1489cdf0e10cSrcweir SdrHint aHint(HINT_PAGEORDERCHG);
1490cdf0e10cSrcweir aHint.SetPage(pPage);
1491cdf0e10cSrcweir Broadcast(aHint);
1492cdf0e10cSrcweir }
1493cdf0e10cSrcweir
DeleteMasterPage(sal_uInt16 nPgNum)1494cdf0e10cSrcweir void SdrModel::DeleteMasterPage(sal_uInt16 nPgNum)
1495cdf0e10cSrcweir {
1496cdf0e10cSrcweir SdrPage* pPg=RemoveMasterPage(nPgNum);
1497cdf0e10cSrcweir if (pPg!=NULL) delete pPg;
1498cdf0e10cSrcweir }
1499cdf0e10cSrcweir
RemoveMasterPage(sal_uInt16 nPgNum)1500cdf0e10cSrcweir SdrPage* SdrModel::RemoveMasterPage(sal_uInt16 nPgNum)
1501cdf0e10cSrcweir {
1502cdf0e10cSrcweir SdrPage* pRetPg=(SdrPage*)maMaPag.Remove(nPgNum);
1503cdf0e10cSrcweir // #109538#
1504cdf0e10cSrcweir MasterPageListChanged();
1505cdf0e10cSrcweir
1506cdf0e10cSrcweir if(pRetPg)
1507cdf0e10cSrcweir {
15088d647522Smseidel // Nun die Verweise der normalen Zeichenseiten auf die entfernte MasterPage löschen
1509cdf0e10cSrcweir sal_uInt16 nPageAnz(GetPageCount());
1510cdf0e10cSrcweir
1511cdf0e10cSrcweir for(sal_uInt16 np(0); np < nPageAnz; np++)
1512cdf0e10cSrcweir {
1513cdf0e10cSrcweir GetPage(np)->TRG_ImpMasterPageRemoved(*pRetPg);
1514cdf0e10cSrcweir }
1515cdf0e10cSrcweir
1516cdf0e10cSrcweir pRetPg->SetInserted(sal_False);
1517cdf0e10cSrcweir }
1518cdf0e10cSrcweir
1519cdf0e10cSrcweir bMPgNumsDirty=sal_True;
1520cdf0e10cSrcweir SetChanged();
1521cdf0e10cSrcweir SdrHint aHint(HINT_PAGEORDERCHG);
1522cdf0e10cSrcweir aHint.SetPage(pRetPg);
1523cdf0e10cSrcweir Broadcast(aHint);
1524cdf0e10cSrcweir return pRetPg;
1525cdf0e10cSrcweir }
1526cdf0e10cSrcweir
MoveMasterPage(sal_uInt16 nPgNum,sal_uInt16 nNewPos)1527cdf0e10cSrcweir void SdrModel::MoveMasterPage(sal_uInt16 nPgNum, sal_uInt16 nNewPos)
1528cdf0e10cSrcweir {
1529cdf0e10cSrcweir SdrPage* pPg=(SdrPage*)maMaPag.Remove(nPgNum);
1530cdf0e10cSrcweir // #109538#
1531cdf0e10cSrcweir MasterPageListChanged();
1532cdf0e10cSrcweir if (pPg!=NULL) {
1533cdf0e10cSrcweir pPg->SetInserted(sal_False);
1534cdf0e10cSrcweir maMaPag.Insert(pPg,nNewPos);
1535cdf0e10cSrcweir // #109538#
1536cdf0e10cSrcweir MasterPageListChanged();
1537cdf0e10cSrcweir }
1538cdf0e10cSrcweir bMPgNumsDirty=sal_True;
1539cdf0e10cSrcweir SetChanged();
1540cdf0e10cSrcweir SdrHint aHint(HINT_PAGEORDERCHG);
1541cdf0e10cSrcweir aHint.SetPage(pPg);
1542cdf0e10cSrcweir Broadcast(aHint);
1543cdf0e10cSrcweir }
1544cdf0e10cSrcweir
1545cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1546cdf0e10cSrcweir
CheckConsistence() const1547cdf0e10cSrcweir FASTBOOL SdrModel::CheckConsistence() const
1548cdf0e10cSrcweir {
1549cdf0e10cSrcweir FASTBOOL bRet=sal_True;
1550cdf0e10cSrcweir #ifdef DBG_UTIL
1551cdf0e10cSrcweir DBG_CHKTHIS(SdrModel,NULL);
1552cdf0e10cSrcweir #endif
1553cdf0e10cSrcweir return bRet;
1554cdf0e10cSrcweir }
1555cdf0e10cSrcweir
1556cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1557cdf0e10cSrcweir
1558cdf0e10cSrcweir // #48289#
CopyPages(sal_uInt16 nFirstPageNum,sal_uInt16 nLastPageNum,sal_uInt16 nDestPos,FASTBOOL bUndo,FASTBOOL bMoveNoCopy)1559cdf0e10cSrcweir void SdrModel::CopyPages(sal_uInt16 nFirstPageNum, sal_uInt16 nLastPageNum,
1560cdf0e10cSrcweir sal_uInt16 nDestPos,
1561cdf0e10cSrcweir FASTBOOL bUndo, FASTBOOL bMoveNoCopy)
1562cdf0e10cSrcweir {
1563cdf0e10cSrcweir if( bUndo && !IsUndoEnabled() )
1564cdf0e10cSrcweir bUndo = false;
1565cdf0e10cSrcweir
1566cdf0e10cSrcweir if( bUndo )
1567cdf0e10cSrcweir BegUndo(ImpGetResStr(STR_UndoMergeModel));
1568cdf0e10cSrcweir
1569cdf0e10cSrcweir sal_uInt16 nPageAnz=GetPageCount();
1570cdf0e10cSrcweir sal_uInt16 nMaxPage=nPageAnz;
1571cdf0e10cSrcweir
1572cdf0e10cSrcweir if (nMaxPage!=0)
1573cdf0e10cSrcweir nMaxPage--;
1574cdf0e10cSrcweir if (nFirstPageNum>nMaxPage)
1575cdf0e10cSrcweir nFirstPageNum=nMaxPage;
1576cdf0e10cSrcweir if (nLastPageNum>nMaxPage)
1577cdf0e10cSrcweir nLastPageNum =nMaxPage;
1578cdf0e10cSrcweir FASTBOOL bReverse=nLastPageNum<nFirstPageNum;
1579cdf0e10cSrcweir if (nDestPos>nPageAnz)
1580cdf0e10cSrcweir nDestPos=nPageAnz;
1581cdf0e10cSrcweir
15828d647522Smseidel // Zunächst die Zeiger der betroffenen Seiten in einem Array sichern
1583cdf0e10cSrcweir sal_uInt16 nPageNum=nFirstPageNum;
1584cdf0e10cSrcweir sal_uInt16 nCopyAnz=((!bReverse)?(nLastPageNum-nFirstPageNum):(nFirstPageNum-nLastPageNum))+1;
1585cdf0e10cSrcweir SdrPage** pPagePtrs=new SdrPage*[nCopyAnz];
1586cdf0e10cSrcweir sal_uInt16 nCopyNum;
1587cdf0e10cSrcweir for(nCopyNum=0; nCopyNum<nCopyAnz; nCopyNum++)
1588cdf0e10cSrcweir {
1589cdf0e10cSrcweir pPagePtrs[nCopyNum]=GetPage(nPageNum);
1590cdf0e10cSrcweir if (bReverse)
1591cdf0e10cSrcweir nPageNum--;
1592cdf0e10cSrcweir else
1593cdf0e10cSrcweir nPageNum++;
1594cdf0e10cSrcweir }
1595cdf0e10cSrcweir
1596cdf0e10cSrcweir // Jetzt die Seiten kopieren
1597cdf0e10cSrcweir sal_uInt16 nDestNum=nDestPos;
1598cdf0e10cSrcweir for (nCopyNum=0; nCopyNum<nCopyAnz; nCopyNum++)
1599cdf0e10cSrcweir {
1600cdf0e10cSrcweir SdrPage* pPg=pPagePtrs[nCopyNum];
1601cdf0e10cSrcweir sal_uInt16 nPageNum2=pPg->GetPageNum();
1602cdf0e10cSrcweir if (!bMoveNoCopy)
1603cdf0e10cSrcweir {
1604cdf0e10cSrcweir const SdrPage* pPg1=GetPage(nPageNum2);
1605cdf0e10cSrcweir pPg=pPg1->Clone();
1606cdf0e10cSrcweir InsertPage(pPg,nDestNum);
1607cdf0e10cSrcweir if (bUndo)
1608cdf0e10cSrcweir AddUndo(GetSdrUndoFactory().CreateUndoCopyPage(*pPg));
1609cdf0e10cSrcweir nDestNum++;
1610cdf0e10cSrcweir }
1611cdf0e10cSrcweir else
1612cdf0e10cSrcweir {
1613cdf0e10cSrcweir // Move ist nicht getestet!
1614cdf0e10cSrcweir if (nDestNum>nPageNum2)
1615cdf0e10cSrcweir nDestNum--;
1616cdf0e10cSrcweir
1617cdf0e10cSrcweir if(bUndo)
1618cdf0e10cSrcweir AddUndo(GetSdrUndoFactory().CreateUndoSetPageNum(*GetPage(nPageNum2),nPageNum2,nDestNum));
1619cdf0e10cSrcweir
1620cdf0e10cSrcweir pPg=RemovePage(nPageNum2);
1621cdf0e10cSrcweir InsertPage(pPg,nDestNum);
1622cdf0e10cSrcweir nDestNum++;
1623cdf0e10cSrcweir }
1624cdf0e10cSrcweir
1625cdf0e10cSrcweir if(bReverse)
1626cdf0e10cSrcweir nPageNum2--;
1627cdf0e10cSrcweir else
1628cdf0e10cSrcweir nPageNum2++;
1629cdf0e10cSrcweir }
1630cdf0e10cSrcweir
1631cdf0e10cSrcweir delete[] pPagePtrs;
1632cdf0e10cSrcweir if(bUndo)
1633cdf0e10cSrcweir EndUndo();
1634cdf0e10cSrcweir }
1635cdf0e10cSrcweir
Merge(SdrModel & rSourceModel,sal_uInt16 nFirstPageNum,sal_uInt16 nLastPageNum,sal_uInt16 nDestPos,FASTBOOL bMergeMasterPages,FASTBOOL bAllMasterPages,FASTBOOL bUndo,FASTBOOL bTreadSourceAsConst)1636cdf0e10cSrcweir void SdrModel::Merge(SdrModel& rSourceModel,
1637cdf0e10cSrcweir sal_uInt16 nFirstPageNum, sal_uInt16 nLastPageNum,
1638cdf0e10cSrcweir sal_uInt16 nDestPos,
1639cdf0e10cSrcweir FASTBOOL bMergeMasterPages, FASTBOOL bAllMasterPages,
1640cdf0e10cSrcweir FASTBOOL bUndo, FASTBOOL bTreadSourceAsConst)
1641cdf0e10cSrcweir {
1642cdf0e10cSrcweir if (&rSourceModel==this)
1643cdf0e10cSrcweir { // #48289#
1644cdf0e10cSrcweir CopyPages(nFirstPageNum,nLastPageNum,nDestPos,bUndo,!bTreadSourceAsConst);
1645cdf0e10cSrcweir return;
1646cdf0e10cSrcweir }
1647cdf0e10cSrcweir
1648cdf0e10cSrcweir if( bUndo && !IsUndoEnabled() )
1649cdf0e10cSrcweir bUndo = false;
1650cdf0e10cSrcweir
1651cdf0e10cSrcweir if (bUndo)
1652cdf0e10cSrcweir BegUndo(ImpGetResStr(STR_UndoMergeModel));
1653cdf0e10cSrcweir
1654cdf0e10cSrcweir sal_uInt16 nSrcPageAnz=rSourceModel.GetPageCount();
1655cdf0e10cSrcweir sal_uInt16 nSrcMasterPageAnz=rSourceModel.GetMasterPageCount();
1656cdf0e10cSrcweir sal_uInt16 nDstMasterPageAnz=GetMasterPageCount();
1657cdf0e10cSrcweir FASTBOOL bInsPages=(nFirstPageNum<nSrcPageAnz || nLastPageNum<nSrcPageAnz);
1658cdf0e10cSrcweir sal_uInt16 nMaxSrcPage=nSrcPageAnz; if (nMaxSrcPage!=0) nMaxSrcPage--;
1659cdf0e10cSrcweir if (nFirstPageNum>nMaxSrcPage) nFirstPageNum=nMaxSrcPage;
1660cdf0e10cSrcweir if (nLastPageNum>nMaxSrcPage) nLastPageNum =nMaxSrcPage;
1661cdf0e10cSrcweir FASTBOOL bReverse=nLastPageNum<nFirstPageNum;
1662cdf0e10cSrcweir
1663cdf0e10cSrcweir sal_uInt16* pMasterMap=NULL;
1664cdf0e10cSrcweir int* pMasterNeed=NULL;
1665cdf0e10cSrcweir sal_uInt16 nMasterNeed=0;
1666cdf0e10cSrcweir if (bMergeMasterPages && nSrcMasterPageAnz!=0) {
16678d647522Smseidel // Feststellen, welche MasterPages aus rSrcModel benötigt werden
1668cdf0e10cSrcweir pMasterMap=new sal_uInt16[nSrcMasterPageAnz];
1669cdf0e10cSrcweir pMasterNeed=new int[nSrcMasterPageAnz];
1670cdf0e10cSrcweir memset(pMasterMap,0xFF,nSrcMasterPageAnz*sizeof(sal_uInt16));
1671cdf0e10cSrcweir if (bAllMasterPages) {
1672cdf0e10cSrcweir memset(pMasterNeed,sal_True,nSrcMasterPageAnz*sizeof(FASTBOOL));
1673cdf0e10cSrcweir } else {
1674cdf0e10cSrcweir memset(pMasterNeed,sal_False,nSrcMasterPageAnz*sizeof(FASTBOOL));
1675cdf0e10cSrcweir sal_uInt16 nAnf= bReverse ? nLastPageNum : nFirstPageNum;
1676cdf0e10cSrcweir sal_uInt16 nEnd= bReverse ? nFirstPageNum : nLastPageNum;
1677cdf0e10cSrcweir for (sal_uInt16 i=nAnf; i<=nEnd; i++) {
1678cdf0e10cSrcweir const SdrPage* pPg=rSourceModel.GetPage(i);
1679cdf0e10cSrcweir if(pPg->TRG_HasMasterPage())
1680cdf0e10cSrcweir {
1681cdf0e10cSrcweir SdrPage& rMasterPage = pPg->TRG_GetMasterPage();
1682cdf0e10cSrcweir sal_uInt16 nMPgNum(rMasterPage.GetPageNum());
1683cdf0e10cSrcweir
1684cdf0e10cSrcweir if(nMPgNum < nSrcMasterPageAnz)
1685cdf0e10cSrcweir {
1686cdf0e10cSrcweir pMasterNeed[nMPgNum] = sal_True;
1687cdf0e10cSrcweir }
1688cdf0e10cSrcweir }
1689cdf0e10cSrcweir }
1690cdf0e10cSrcweir }
1691cdf0e10cSrcweir // Nun das Mapping der MasterPages bestimmen
1692cdf0e10cSrcweir sal_uInt16 nAktMaPagNum=nDstMasterPageAnz;
1693cdf0e10cSrcweir for (sal_uInt16 i=0; i<nSrcMasterPageAnz; i++) {
1694cdf0e10cSrcweir if (pMasterNeed[i]) {
1695cdf0e10cSrcweir pMasterMap[i]=nAktMaPagNum;
1696cdf0e10cSrcweir nAktMaPagNum++;
1697cdf0e10cSrcweir nMasterNeed++;
1698cdf0e10cSrcweir }
1699cdf0e10cSrcweir }
1700cdf0e10cSrcweir }
1701cdf0e10cSrcweir
17028d647522Smseidel // rüberholen der Masterpages
1703cdf0e10cSrcweir if (pMasterMap!=NULL && pMasterNeed!=NULL && nMasterNeed!=0) {
1704cdf0e10cSrcweir for (sal_uInt16 i=nSrcMasterPageAnz; i>0;) {
1705cdf0e10cSrcweir i--;
1706cdf0e10cSrcweir if (pMasterNeed[i]) {
1707cdf0e10cSrcweir SdrPage* pPg=NULL;
1708cdf0e10cSrcweir if (bTreadSourceAsConst) {
1709cdf0e10cSrcweir const SdrPage* pPg1=rSourceModel.GetMasterPage(i);
1710cdf0e10cSrcweir pPg=pPg1->Clone();
1711cdf0e10cSrcweir } else {
1712cdf0e10cSrcweir pPg=rSourceModel.RemoveMasterPage(i);
1713cdf0e10cSrcweir }
1714cdf0e10cSrcweir if (pPg!=NULL) {
1715cdf0e10cSrcweir // und alle ans einstige Ende des DstModel reinschieben.
1716cdf0e10cSrcweir // nicht InsertMasterPage() verwenden da die Sache
1717cdf0e10cSrcweir // inkonsistent ist bis alle drin sind
1718cdf0e10cSrcweir maMaPag.Insert(pPg,nDstMasterPageAnz);
1719cdf0e10cSrcweir // #109538#
1720cdf0e10cSrcweir MasterPageListChanged();
1721cdf0e10cSrcweir pPg->SetInserted(sal_True);
1722cdf0e10cSrcweir pPg->SetModel(this);
1723cdf0e10cSrcweir bMPgNumsDirty=sal_True;
1724cdf0e10cSrcweir if (bUndo) AddUndo(GetSdrUndoFactory().CreateUndoNewPage(*pPg));
1725cdf0e10cSrcweir } else {
1726cdf0e10cSrcweir DBG_ERROR("SdrModel::Merge(): MasterPage im SourceModel nicht gefunden");
1727cdf0e10cSrcweir }
1728cdf0e10cSrcweir }
1729cdf0e10cSrcweir }
1730cdf0e10cSrcweir }
1731cdf0e10cSrcweir
17328d647522Smseidel // rüberholen der Zeichenseiten
1733cdf0e10cSrcweir if (bInsPages) {
1734cdf0e10cSrcweir sal_uInt16 nSourcePos=nFirstPageNum;
1735cdf0e10cSrcweir sal_uInt16 nMergeCount=sal_uInt16(Abs((long)((long)nFirstPageNum-nLastPageNum))+1);
1736cdf0e10cSrcweir if (nDestPos>GetPageCount()) nDestPos=GetPageCount();
1737cdf0e10cSrcweir while (nMergeCount>0) {
1738cdf0e10cSrcweir SdrPage* pPg=NULL;
1739cdf0e10cSrcweir if (bTreadSourceAsConst) {
1740cdf0e10cSrcweir const SdrPage* pPg1=rSourceModel.GetPage(nSourcePos);
1741cdf0e10cSrcweir pPg=pPg1->Clone();
1742cdf0e10cSrcweir } else {
1743cdf0e10cSrcweir pPg=rSourceModel.RemovePage(nSourcePos);
1744cdf0e10cSrcweir }
1745cdf0e10cSrcweir if (pPg!=NULL) {
1746cdf0e10cSrcweir InsertPage(pPg,nDestPos);
1747cdf0e10cSrcweir if (bUndo) AddUndo(GetSdrUndoFactory().CreateUndoNewPage(*pPg));
1748cdf0e10cSrcweir // und nun zu den MasterPageDescriptoren
1749cdf0e10cSrcweir
1750cdf0e10cSrcweir if(pPg->TRG_HasMasterPage())
1751cdf0e10cSrcweir {
1752cdf0e10cSrcweir SdrPage& rMasterPage = pPg->TRG_GetMasterPage();
1753cdf0e10cSrcweir sal_uInt16 nMaPgNum(rMasterPage.GetPageNum());
1754cdf0e10cSrcweir
1755cdf0e10cSrcweir if (bMergeMasterPages)
1756cdf0e10cSrcweir {
1757*e536e658Smseidel sal_uInt16 nNewNum(0xFFFF);
1758cdf0e10cSrcweir
1759cdf0e10cSrcweir if(pMasterMap)
1760cdf0e10cSrcweir {
1761*e536e658Smseidel nNewNum = pMasterMap[nMaPgNum];
1762cdf0e10cSrcweir }
1763cdf0e10cSrcweir
1764*e536e658Smseidel if(nNewNum != 0xFFFF)
1765cdf0e10cSrcweir {
1766cdf0e10cSrcweir if(bUndo)
1767cdf0e10cSrcweir {
1768cdf0e10cSrcweir AddUndo(GetSdrUndoFactory().CreateUndoPageChangeMasterPage(*pPg));
1769cdf0e10cSrcweir }
1770cdf0e10cSrcweir
1771*e536e658Smseidel pPg->TRG_SetMasterPage(*GetMasterPage(nNewNum));
1772cdf0e10cSrcweir }
1773*e536e658Smseidel DBG_ASSERT(nNewNum!=0xFFFF,"SdrModel::Merge(): Irgendwas ist krumm beim Mappen der MasterPages");
1774cdf0e10cSrcweir } else {
1775cdf0e10cSrcweir if (nMaPgNum>=nDstMasterPageAnz) {
17768d647522Smseidel // Aha, die ist ausserbalb des ursprünglichen Bereichs der Masterpages des DstModel
1777cdf0e10cSrcweir pPg->TRG_ClearMasterPage();
1778cdf0e10cSrcweir }
1779cdf0e10cSrcweir }
1780cdf0e10cSrcweir }
1781cdf0e10cSrcweir
1782cdf0e10cSrcweir } else {
1783cdf0e10cSrcweir DBG_ERROR("SdrModel::Merge(): Zeichenseite im SourceModel nicht gefunden");
1784cdf0e10cSrcweir }
1785cdf0e10cSrcweir nDestPos++;
1786cdf0e10cSrcweir if (bReverse) nSourcePos--;
1787cdf0e10cSrcweir else if (bTreadSourceAsConst) nSourcePos++;
1788cdf0e10cSrcweir nMergeCount--;
1789cdf0e10cSrcweir }
1790cdf0e10cSrcweir }
1791cdf0e10cSrcweir
1792cdf0e10cSrcweir delete [] pMasterMap;
1793cdf0e10cSrcweir delete [] pMasterNeed;
1794cdf0e10cSrcweir
1795cdf0e10cSrcweir bMPgNumsDirty=sal_True;
1796cdf0e10cSrcweir bPagNumsDirty=sal_True;
1797cdf0e10cSrcweir
1798cdf0e10cSrcweir SetChanged();
1799cdf0e10cSrcweir // Fehlt: Mergen und Mapping der Layer
1800cdf0e10cSrcweir // an den Objekten sowie an den MasterPageDescriptoren
1801cdf0e10cSrcweir if (bUndo) EndUndo();
1802cdf0e10cSrcweir }
1803cdf0e10cSrcweir
SetStarDrawPreviewMode(sal_Bool bPreview)1804cdf0e10cSrcweir void SdrModel::SetStarDrawPreviewMode(sal_Bool bPreview)
1805cdf0e10cSrcweir {
1806cdf0e10cSrcweir if (!bPreview && bStarDrawPreviewMode && GetPageCount())
1807cdf0e10cSrcweir {
18088d647522Smseidel // Das Zurücksetzen ist nicht erlaubt, da das Model ev. nicht vollständig geladen wurde
18098d647522Smseidel DBG_ASSERT(sal_False,"SdrModel::SetStarDrawPreviewMode(): Zurücksetzen nicht erlaubt, da Model ev. nicht vollständig");
1810cdf0e10cSrcweir }
1811cdf0e10cSrcweir else
1812cdf0e10cSrcweir {
1813cdf0e10cSrcweir bStarDrawPreviewMode = bPreview;
1814cdf0e10cSrcweir }
1815cdf0e10cSrcweir }
1816cdf0e10cSrcweir
getUnoModel()1817cdf0e10cSrcweir uno::Reference< uno::XInterface > SdrModel::getUnoModel()
1818cdf0e10cSrcweir {
1819cdf0e10cSrcweir if( !mxUnoModel.is() )
1820cdf0e10cSrcweir mxUnoModel = createUnoModel();
1821cdf0e10cSrcweir
1822cdf0e10cSrcweir return mxUnoModel;
1823cdf0e10cSrcweir }
1824cdf0e10cSrcweir
setUnoModel(::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface> xModel)1825cdf0e10cSrcweir void SdrModel::setUnoModel( ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xModel )
1826cdf0e10cSrcweir {
1827cdf0e10cSrcweir mxUnoModel = xModel;
1828cdf0e10cSrcweir }
1829cdf0e10cSrcweir
createUnoModel()1830cdf0e10cSrcweir uno::Reference< uno::XInterface > SdrModel::createUnoModel()
1831cdf0e10cSrcweir {
1832cdf0e10cSrcweir DBG_ERROR( "SdrModel::createUnoModel() - base implementation should not be called!" );
1833cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xInt;
1834cdf0e10cSrcweir return xInt;
1835cdf0e10cSrcweir }
1836cdf0e10cSrcweir
setLock(sal_Bool bLock)1837cdf0e10cSrcweir void SdrModel::setLock( sal_Bool bLock )
1838cdf0e10cSrcweir {
1839cdf0e10cSrcweir if( mbModelLocked != bLock )
1840cdf0e10cSrcweir {
18410ce6329eSArmin Le Grand // #120437# need to set first, else ImpReformatAllEdgeObjects will do nothing
18420ce6329eSArmin Le Grand mbModelLocked = bLock;
18430ce6329eSArmin Le Grand
1844cdf0e10cSrcweir if( sal_False == bLock )
1845cdf0e10cSrcweir {
1846cdf0e10cSrcweir // ReformatAllTextObjects(); #103122# due to a typo in the above if, this code was never
1847cdf0e10cSrcweir // executed, so I remove it until we discover that we need it here
1848cdf0e10cSrcweir ImpReformatAllEdgeObjects(); // #103122#
1849cdf0e10cSrcweir }
1850cdf0e10cSrcweir }
1851cdf0e10cSrcweir }
1852cdf0e10cSrcweir
1853cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1854cdf0e10cSrcweir
MigrateItemSet(const SfxItemSet * pSourceSet,SfxItemSet * pDestSet,SdrModel * pNewModel)1855cdf0e10cSrcweir void SdrModel::MigrateItemSet( const SfxItemSet* pSourceSet, SfxItemSet* pDestSet, SdrModel* pNewModel )
1856cdf0e10cSrcweir {
1857cdf0e10cSrcweir if( pSourceSet && pDestSet && (pSourceSet != pDestSet ) )
1858cdf0e10cSrcweir {
1859cdf0e10cSrcweir if( pNewModel == NULL )
1860cdf0e10cSrcweir pNewModel = this;
1861cdf0e10cSrcweir
1862cdf0e10cSrcweir SfxWhichIter aWhichIter(*pSourceSet);
1863cdf0e10cSrcweir sal_uInt16 nWhich(aWhichIter.FirstWhich());
1864cdf0e10cSrcweir const SfxPoolItem *pPoolItem;
1865cdf0e10cSrcweir
1866cdf0e10cSrcweir while(nWhich)
1867cdf0e10cSrcweir {
1868cdf0e10cSrcweir if(SFX_ITEM_SET == pSourceSet->GetItemState(nWhich, sal_False, &pPoolItem))
1869cdf0e10cSrcweir {
1870cdf0e10cSrcweir const SfxPoolItem* pItem = pPoolItem;
1871cdf0e10cSrcweir
1872cdf0e10cSrcweir switch( nWhich )
1873cdf0e10cSrcweir {
1874cdf0e10cSrcweir case XATTR_FILLBITMAP:
1875cdf0e10cSrcweir pItem = ((XFillBitmapItem*)pItem)->checkForUniqueItem( pNewModel );
1876cdf0e10cSrcweir break;
1877cdf0e10cSrcweir case XATTR_LINEDASH:
1878cdf0e10cSrcweir pItem = ((XLineDashItem*)pItem)->checkForUniqueItem( pNewModel );
1879cdf0e10cSrcweir break;
1880cdf0e10cSrcweir case XATTR_LINESTART:
1881cdf0e10cSrcweir pItem = ((XLineStartItem*)pItem)->checkForUniqueItem( pNewModel );
1882cdf0e10cSrcweir break;
1883cdf0e10cSrcweir case XATTR_LINEEND:
1884cdf0e10cSrcweir pItem = ((XLineEndItem*)pItem)->checkForUniqueItem( pNewModel );
1885cdf0e10cSrcweir break;
1886cdf0e10cSrcweir case XATTR_FILLGRADIENT:
1887cdf0e10cSrcweir pItem = ((XFillGradientItem*)pItem)->checkForUniqueItem( pNewModel );
1888cdf0e10cSrcweir break;
1889cdf0e10cSrcweir case XATTR_FILLFLOATTRANSPARENCE:
1890cdf0e10cSrcweir // #85953# allow all kinds of XFillFloatTransparenceItem to be set
1891cdf0e10cSrcweir pItem = ((XFillFloatTransparenceItem*)pItem)->checkForUniqueItem( pNewModel );
1892cdf0e10cSrcweir break;
1893cdf0e10cSrcweir case XATTR_FILLHATCH:
1894cdf0e10cSrcweir pItem = ((XFillHatchItem*)pItem)->checkForUniqueItem( pNewModel );
1895cdf0e10cSrcweir break;
1896cdf0e10cSrcweir }
1897cdf0e10cSrcweir
1898cdf0e10cSrcweir // set item
1899cdf0e10cSrcweir if( pItem )
1900cdf0e10cSrcweir {
1901cdf0e10cSrcweir pDestSet->Put(*pItem);
1902cdf0e10cSrcweir
1903cdf0e10cSrcweir // delete item if it was a generated one
1904cdf0e10cSrcweir if( pItem != pPoolItem)
1905cdf0e10cSrcweir delete (SfxPoolItem*)pItem;
1906cdf0e10cSrcweir }
1907cdf0e10cSrcweir }
1908cdf0e10cSrcweir nWhich = aWhichIter.NextWhich();
1909cdf0e10cSrcweir }
1910cdf0e10cSrcweir }
1911cdf0e10cSrcweir }
1912cdf0e10cSrcweir
1913cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1914cdf0e10cSrcweir
SetForbiddenCharsTable(vos::ORef<SvxForbiddenCharactersTable> xForbiddenChars)1915cdf0e10cSrcweir void SdrModel::SetForbiddenCharsTable( vos::ORef<SvxForbiddenCharactersTable> xForbiddenChars )
1916cdf0e10cSrcweir {
1917cdf0e10cSrcweir if( mpForbiddenCharactersTable )
1918cdf0e10cSrcweir mpForbiddenCharactersTable->release();
1919cdf0e10cSrcweir
1920cdf0e10cSrcweir mpForbiddenCharactersTable = xForbiddenChars.getBodyPtr();
1921cdf0e10cSrcweir
1922cdf0e10cSrcweir if( mpForbiddenCharactersTable )
1923cdf0e10cSrcweir mpForbiddenCharactersTable->acquire();
1924cdf0e10cSrcweir
1925cdf0e10cSrcweir ImpSetOutlinerDefaults( pDrawOutliner );
1926cdf0e10cSrcweir ImpSetOutlinerDefaults( pHitTestOutliner );
1927cdf0e10cSrcweir }
1928cdf0e10cSrcweir
GetForbiddenCharsTable() const1929cdf0e10cSrcweir vos::ORef<SvxForbiddenCharactersTable> SdrModel::GetForbiddenCharsTable() const
1930cdf0e10cSrcweir {
1931cdf0e10cSrcweir return mpForbiddenCharactersTable;
1932cdf0e10cSrcweir }
1933cdf0e10cSrcweir
SetCharCompressType(sal_uInt16 nType)1934cdf0e10cSrcweir void SdrModel::SetCharCompressType( sal_uInt16 nType )
1935cdf0e10cSrcweir {
1936cdf0e10cSrcweir if( nType != mnCharCompressType )
1937cdf0e10cSrcweir {
1938cdf0e10cSrcweir mnCharCompressType = nType;
1939cdf0e10cSrcweir ImpSetOutlinerDefaults( pDrawOutliner );
1940cdf0e10cSrcweir ImpSetOutlinerDefaults( pHitTestOutliner );
1941cdf0e10cSrcweir }
1942cdf0e10cSrcweir }
1943cdf0e10cSrcweir
SetKernAsianPunctuation(sal_Bool bEnabled)1944cdf0e10cSrcweir void SdrModel::SetKernAsianPunctuation( sal_Bool bEnabled )
1945cdf0e10cSrcweir {
1946cdf0e10cSrcweir if( mbKernAsianPunctuation != bEnabled )
1947cdf0e10cSrcweir {
1948cdf0e10cSrcweir mbKernAsianPunctuation = bEnabled;
1949cdf0e10cSrcweir ImpSetOutlinerDefaults( pDrawOutliner );
1950cdf0e10cSrcweir ImpSetOutlinerDefaults( pHitTestOutliner );
1951cdf0e10cSrcweir }
1952cdf0e10cSrcweir }
1953cdf0e10cSrcweir
SetAddExtLeading(sal_Bool bEnabled)1954cdf0e10cSrcweir void SdrModel::SetAddExtLeading( sal_Bool bEnabled )
1955cdf0e10cSrcweir {
1956cdf0e10cSrcweir if( mbAddExtLeading != bEnabled )
1957cdf0e10cSrcweir {
1958cdf0e10cSrcweir mbAddExtLeading = bEnabled;
1959cdf0e10cSrcweir ImpSetOutlinerDefaults( pDrawOutliner );
1960cdf0e10cSrcweir ImpSetOutlinerDefaults( pHitTestOutliner );
1961cdf0e10cSrcweir }
1962cdf0e10cSrcweir }
1963cdf0e10cSrcweir
ReformatAllTextObjects()1964cdf0e10cSrcweir void SdrModel::ReformatAllTextObjects()
1965cdf0e10cSrcweir {
1966cdf0e10cSrcweir ImpReformatAllTextObjects();
1967cdf0e10cSrcweir }
1968cdf0e10cSrcweir
HasTransparentObjects(sal_Bool bCheckForAlphaChannel) const1969cdf0e10cSrcweir FASTBOOL SdrModel::HasTransparentObjects( sal_Bool bCheckForAlphaChannel ) const
1970cdf0e10cSrcweir {
1971cdf0e10cSrcweir FASTBOOL bRet = sal_False;
1972cdf0e10cSrcweir sal_uInt16 n, nCount;
1973cdf0e10cSrcweir
1974cdf0e10cSrcweir for( n = 0, nCount = GetMasterPageCount(); ( n < nCount ) && !bRet; n++ )
1975cdf0e10cSrcweir if( GetMasterPage( n )->HasTransparentObjects( bCheckForAlphaChannel ) )
1976cdf0e10cSrcweir bRet = sal_True;
1977cdf0e10cSrcweir
1978cdf0e10cSrcweir if( !bRet )
1979cdf0e10cSrcweir {
1980cdf0e10cSrcweir for( n = 0, nCount = GetPageCount(); ( n < nCount ) && !bRet; n++ )
1981cdf0e10cSrcweir if( GetPage( n )->HasTransparentObjects( bCheckForAlphaChannel ) )
1982cdf0e10cSrcweir bRet = sal_True;
1983cdf0e10cSrcweir }
1984cdf0e10cSrcweir
1985cdf0e10cSrcweir return bRet;
1986cdf0e10cSrcweir }
1987cdf0e10cSrcweir
createOutliner(sal_uInt16 nOutlinerMode)1988cdf0e10cSrcweir SdrOutliner* SdrModel::createOutliner( sal_uInt16 nOutlinerMode )
1989cdf0e10cSrcweir {
1990cdf0e10cSrcweir if( NULL == mpOutlinerCache )
1991cdf0e10cSrcweir mpOutlinerCache = new SdrOutlinerCache(this);
1992cdf0e10cSrcweir
1993cdf0e10cSrcweir return mpOutlinerCache->createOutliner( nOutlinerMode );
1994cdf0e10cSrcweir }
1995cdf0e10cSrcweir
disposeOutliner(SdrOutliner * pOutliner)1996cdf0e10cSrcweir void SdrModel::disposeOutliner( SdrOutliner* pOutliner )
1997cdf0e10cSrcweir {
1998cdf0e10cSrcweir if( mpOutlinerCache )
1999cdf0e10cSrcweir {
2000cdf0e10cSrcweir mpOutlinerCache->disposeOutliner( pOutliner );
2001cdf0e10cSrcweir }
2002cdf0e10cSrcweir else
2003cdf0e10cSrcweir {
2004cdf0e10cSrcweir delete pOutliner;
2005cdf0e10cSrcweir }
2006cdf0e10cSrcweir }
2007cdf0e10cSrcweir
GetPageNumType() const2008cdf0e10cSrcweir SvxNumType SdrModel::GetPageNumType() const
2009cdf0e10cSrcweir {
2010cdf0e10cSrcweir return SVX_ARABIC;
2011cdf0e10cSrcweir }
2012cdf0e10cSrcweir
GetPage(sal_uInt16 nPgNum) const2013cdf0e10cSrcweir const SdrPage* SdrModel::GetPage(sal_uInt16 nPgNum) const
2014cdf0e10cSrcweir {
2015cdf0e10cSrcweir DBG_ASSERT(nPgNum < maPages.Count(), "SdrModel::GetPage: Access out of range (!)");
2016cdf0e10cSrcweir return (SdrPage*)(maPages.GetObject(nPgNum));
2017cdf0e10cSrcweir }
2018cdf0e10cSrcweir
GetPage(sal_uInt16 nPgNum)2019cdf0e10cSrcweir SdrPage* SdrModel::GetPage(sal_uInt16 nPgNum)
2020cdf0e10cSrcweir {
2021cdf0e10cSrcweir DBG_ASSERT(nPgNum < maPages.Count(), "SdrModel::GetPage: Access out of range (!)");
2022cdf0e10cSrcweir return (SdrPage*)(maPages.GetObject(nPgNum));
2023cdf0e10cSrcweir }
2024cdf0e10cSrcweir
GetPageCount() const2025cdf0e10cSrcweir sal_uInt16 SdrModel::GetPageCount() const
2026cdf0e10cSrcweir {
2027cdf0e10cSrcweir return sal_uInt16(maPages.Count());
2028cdf0e10cSrcweir }
2029cdf0e10cSrcweir
PageListChanged()2030cdf0e10cSrcweir void SdrModel::PageListChanged()
2031cdf0e10cSrcweir {
2032cdf0e10cSrcweir }
2033cdf0e10cSrcweir
GetMasterPage(sal_uInt16 nPgNum) const2034cdf0e10cSrcweir const SdrPage* SdrModel::GetMasterPage(sal_uInt16 nPgNum) const
2035cdf0e10cSrcweir {
2036cdf0e10cSrcweir DBG_ASSERT(nPgNum < maMaPag.Count(), "SdrModel::GetMasterPage: Access out of range (!)");
2037cdf0e10cSrcweir return (SdrPage*)(maMaPag.GetObject(nPgNum));
2038cdf0e10cSrcweir }
2039cdf0e10cSrcweir
GetMasterPage(sal_uInt16 nPgNum)2040cdf0e10cSrcweir SdrPage* SdrModel::GetMasterPage(sal_uInt16 nPgNum)
2041cdf0e10cSrcweir {
2042cdf0e10cSrcweir DBG_ASSERT(nPgNum < maMaPag.Count(), "SdrModel::GetMasterPage: Access out of range (!)");
2043cdf0e10cSrcweir return (SdrPage*)(maMaPag.GetObject(nPgNum));
2044cdf0e10cSrcweir }
2045cdf0e10cSrcweir
GetMasterPageCount() const2046cdf0e10cSrcweir sal_uInt16 SdrModel::GetMasterPageCount() const
2047cdf0e10cSrcweir {
2048cdf0e10cSrcweir return sal_uInt16(maMaPag.Count());
2049cdf0e10cSrcweir }
2050cdf0e10cSrcweir
MasterPageListChanged()2051cdf0e10cSrcweir void SdrModel::MasterPageListChanged()
2052cdf0e10cSrcweir {
2053cdf0e10cSrcweir }
2054cdf0e10cSrcweir
SetSdrUndoManager(SfxUndoManager * pUndoManager)2055cdf0e10cSrcweir void SdrModel::SetSdrUndoManager( SfxUndoManager* pUndoManager )
2056cdf0e10cSrcweir {
2057cdf0e10cSrcweir mpImpl->mpUndoManager = pUndoManager;
2058cdf0e10cSrcweir }
2059cdf0e10cSrcweir
GetSdrUndoManager() const2060cdf0e10cSrcweir SfxUndoManager* SdrModel::GetSdrUndoManager() const
2061cdf0e10cSrcweir {
2062cdf0e10cSrcweir return mpImpl->mpUndoManager;
2063cdf0e10cSrcweir }
2064cdf0e10cSrcweir
GetSdrUndoFactory() const2065cdf0e10cSrcweir SdrUndoFactory& SdrModel::GetSdrUndoFactory() const
2066cdf0e10cSrcweir {
2067cdf0e10cSrcweir if( !mpImpl->mpUndoFactory )
2068cdf0e10cSrcweir mpImpl->mpUndoFactory = new SdrUndoFactory;
2069cdf0e10cSrcweir return *mpImpl->mpUndoFactory;
2070cdf0e10cSrcweir }
2071cdf0e10cSrcweir
SetSdrUndoFactory(SdrUndoFactory * pUndoFactory)2072cdf0e10cSrcweir void SdrModel::SetSdrUndoFactory( SdrUndoFactory* pUndoFactory )
2073cdf0e10cSrcweir {
2074cdf0e10cSrcweir if( pUndoFactory && (pUndoFactory != mpImpl->mpUndoFactory) )
2075cdf0e10cSrcweir {
2076cdf0e10cSrcweir delete mpImpl->mpUndoFactory;
2077cdf0e10cSrcweir mpImpl->mpUndoFactory = pUndoFactory;
2078cdf0e10cSrcweir }
2079cdf0e10cSrcweir }
2080cdf0e10cSrcweir
2081cdf0e10cSrcweir /** cl: added this for OJ to complete his reporting engine, does not work
2082cdf0e10cSrcweir correctly so only enable it for his model */
IsAllowShapePropertyChangeListener() const2083cdf0e10cSrcweir bool SdrModel::IsAllowShapePropertyChangeListener() const
2084cdf0e10cSrcweir {
2085cdf0e10cSrcweir return mpImpl && mpImpl->mbAllowShapePropertyChangeListener;
2086cdf0e10cSrcweir }
2087cdf0e10cSrcweir
SetAllowShapePropertyChangeListener(bool bAllow)2088cdf0e10cSrcweir void SdrModel::SetAllowShapePropertyChangeListener( bool bAllow )
2089cdf0e10cSrcweir {
2090cdf0e10cSrcweir if( mpImpl )
2091cdf0e10cSrcweir {
2092cdf0e10cSrcweir mpImpl->mbAllowShapePropertyChangeListener = bAllow;
2093cdf0e10cSrcweir }
2094cdf0e10cSrcweir }
2095cdf0e10cSrcweir
getUnoTunnelImplementationId()2096cdf0e10cSrcweir const ::com::sun::star::uno::Sequence< sal_Int8 >& SdrModel::getUnoTunnelImplementationId()
2097cdf0e10cSrcweir {
2098cdf0e10cSrcweir static ::com::sun::star::uno::Sequence< sal_Int8 > * pSeq = 0;
2099cdf0e10cSrcweir if( !pSeq )
2100cdf0e10cSrcweir {
2101cdf0e10cSrcweir ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
2102cdf0e10cSrcweir if( !pSeq )
2103cdf0e10cSrcweir {
2104cdf0e10cSrcweir static Sequence< sal_Int8 > aSeq( 16 );
2105cdf0e10cSrcweir rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True );
2106cdf0e10cSrcweir pSeq = &aSeq;
2107cdf0e10cSrcweir }
2108cdf0e10cSrcweir }
2109cdf0e10cSrcweir return *pSeq;
2110cdf0e10cSrcweir }
2111cdf0e10cSrcweir
2112c7be74b1SArmin Le Grand ////////////////////////////////////////////////////////////////////////////////////////////////////
2113c7be74b1SArmin Le Grand
SetColorTableAtSdrModel(XColorListSharedPtr aTable)2114c7be74b1SArmin Le Grand void SdrModel::SetColorTableAtSdrModel(XColorListSharedPtr aTable)
2115c7be74b1SArmin Le Grand {
2116c7be74b1SArmin Le Grand maColorTable = aTable;
2117c7be74b1SArmin Le Grand }
2118c7be74b1SArmin Le Grand
GetColorTableFromSdrModel() const2119c7be74b1SArmin Le Grand XColorListSharedPtr SdrModel::GetColorTableFromSdrModel() const
2120c7be74b1SArmin Le Grand {
212135726d9dSArmin Le Grand if(!maColorTable.get())
2122085702f6SArmin Le Grand {
2123085702f6SArmin Le Grand const_cast< SdrModel* >(this)->maColorTable = XPropertyListFactory::CreateSharedXColorList(aTablePath);
2124085702f6SArmin Le Grand }
2125085702f6SArmin Le Grand
2126c7be74b1SArmin Le Grand return maColorTable;
2127c7be74b1SArmin Le Grand }
2128c7be74b1SArmin Le Grand
SetDashListAtSdrModel(XDashListSharedPtr aList)2129c7be74b1SArmin Le Grand void SdrModel::SetDashListAtSdrModel(XDashListSharedPtr aList)
2130c7be74b1SArmin Le Grand {
2131c7be74b1SArmin Le Grand maDashList = aList;
2132c7be74b1SArmin Le Grand }
2133c7be74b1SArmin Le Grand
GetDashListFromSdrModel() const2134c7be74b1SArmin Le Grand XDashListSharedPtr SdrModel::GetDashListFromSdrModel() const
2135c7be74b1SArmin Le Grand {
213635726d9dSArmin Le Grand if(!maDashList.get())
2137085702f6SArmin Le Grand {
2138085702f6SArmin Le Grand const_cast< SdrModel* >(this)->maDashList = XPropertyListFactory::CreateSharedXDashList(aTablePath);
2139085702f6SArmin Le Grand }
2140085702f6SArmin Le Grand
2141c7be74b1SArmin Le Grand return maDashList;
2142c7be74b1SArmin Le Grand }
2143c7be74b1SArmin Le Grand
SetLineEndListAtSdrModel(XLineEndListSharedPtr aList)2144c7be74b1SArmin Le Grand void SdrModel::SetLineEndListAtSdrModel(XLineEndListSharedPtr aList)
2145c7be74b1SArmin Le Grand {
2146c7be74b1SArmin Le Grand maLineEndList = aList;
2147c7be74b1SArmin Le Grand }
2148c7be74b1SArmin Le Grand
GetLineEndListFromSdrModel() const2149c7be74b1SArmin Le Grand XLineEndListSharedPtr SdrModel::GetLineEndListFromSdrModel() const
2150c7be74b1SArmin Le Grand {
215135726d9dSArmin Le Grand if(!maLineEndList.get())
2152085702f6SArmin Le Grand {
2153085702f6SArmin Le Grand const_cast< SdrModel* >(this)->maLineEndList = XPropertyListFactory::CreateSharedXLineEndList(aTablePath);
2154085702f6SArmin Le Grand }
2155085702f6SArmin Le Grand
2156c7be74b1SArmin Le Grand return maLineEndList;
2157c7be74b1SArmin Le Grand }
2158c7be74b1SArmin Le Grand
SetHatchListAtSdrModel(XHatchListSharedPtr aList)2159c7be74b1SArmin Le Grand void SdrModel::SetHatchListAtSdrModel(XHatchListSharedPtr aList)
2160c7be74b1SArmin Le Grand {
2161c7be74b1SArmin Le Grand maHatchList = aList;
2162c7be74b1SArmin Le Grand }
2163c7be74b1SArmin Le Grand
GetHatchListFromSdrModel() const2164c7be74b1SArmin Le Grand XHatchListSharedPtr SdrModel::GetHatchListFromSdrModel() const
2165c7be74b1SArmin Le Grand {
216635726d9dSArmin Le Grand if(!maHatchList.get())
2167085702f6SArmin Le Grand {
2168085702f6SArmin Le Grand const_cast< SdrModel* >(this)->maHatchList = XPropertyListFactory::CreateSharedXHatchList(aTablePath);
2169085702f6SArmin Le Grand }
2170085702f6SArmin Le Grand
2171c7be74b1SArmin Le Grand return maHatchList;
2172c7be74b1SArmin Le Grand }
2173c7be74b1SArmin Le Grand
SetGradientListAtSdrModel(XGradientListSharedPtr aList)2174c7be74b1SArmin Le Grand void SdrModel::SetGradientListAtSdrModel(XGradientListSharedPtr aList)
2175c7be74b1SArmin Le Grand {
2176c7be74b1SArmin Le Grand maGradientList = aList;
2177c7be74b1SArmin Le Grand }
2178c7be74b1SArmin Le Grand
GetGradientListFromSdrModel() const2179c7be74b1SArmin Le Grand XGradientListSharedPtr SdrModel::GetGradientListFromSdrModel() const
2180c7be74b1SArmin Le Grand {
218135726d9dSArmin Le Grand if(!maGradientList.get())
2182085702f6SArmin Le Grand {
2183085702f6SArmin Le Grand const_cast< SdrModel* >(this)->maGradientList = XPropertyListFactory::CreateSharedXGradientList(aTablePath);
2184085702f6SArmin Le Grand }
2185085702f6SArmin Le Grand
2186c7be74b1SArmin Le Grand return maGradientList;
2187c7be74b1SArmin Le Grand }
2188c7be74b1SArmin Le Grand
SetBitmapListAtSdrModel(XBitmapListSharedPtr aList)2189c7be74b1SArmin Le Grand void SdrModel::SetBitmapListAtSdrModel(XBitmapListSharedPtr aList)
2190c7be74b1SArmin Le Grand {
2191c7be74b1SArmin Le Grand maBitmapList = aList;
2192c7be74b1SArmin Le Grand }
2193c7be74b1SArmin Le Grand
GetBitmapListFromSdrModel() const2194c7be74b1SArmin Le Grand XBitmapListSharedPtr SdrModel::GetBitmapListFromSdrModel() const
2195c7be74b1SArmin Le Grand {
219635726d9dSArmin Le Grand if(!maBitmapList.get())
2197085702f6SArmin Le Grand {
2198085702f6SArmin Le Grand const_cast< SdrModel* >(this)->maBitmapList = XPropertyListFactory::CreateSharedXBitmapList(aTablePath);
2199085702f6SArmin Le Grand }
2200085702f6SArmin Le Grand
2201c7be74b1SArmin Le Grand return maBitmapList;
2202c7be74b1SArmin Le Grand }
2203fc76769fSJian Fang Zhang
2204cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
2205cdf0e10cSrcweir
2206cdf0e10cSrcweir TYPEINIT1(SdrHint,SfxHint);
2207cdf0e10cSrcweir
SdrHint()2208cdf0e10cSrcweir SdrHint::SdrHint()
2209cdf0e10cSrcweir : mpPage(0L),
2210cdf0e10cSrcweir mpObj(0L),
2211cdf0e10cSrcweir mpObjList(0L),
2212cdf0e10cSrcweir meHint(HINT_UNKNOWN)
2213cdf0e10cSrcweir {
2214cdf0e10cSrcweir }
2215cdf0e10cSrcweir
SdrHint(SdrHintKind eNewHint)2216cdf0e10cSrcweir SdrHint::SdrHint(SdrHintKind eNewHint)
2217cdf0e10cSrcweir : mpPage(0L),
2218cdf0e10cSrcweir mpObj(0L),
2219cdf0e10cSrcweir mpObjList(0L),
2220cdf0e10cSrcweir meHint(eNewHint)
2221cdf0e10cSrcweir {
2222cdf0e10cSrcweir }
2223cdf0e10cSrcweir
SdrHint(const SdrObject & rNewObj)2224cdf0e10cSrcweir SdrHint::SdrHint(const SdrObject& rNewObj)
2225cdf0e10cSrcweir : mpPage(rNewObj.GetPage()),
2226cdf0e10cSrcweir mpObj(&rNewObj),
2227cdf0e10cSrcweir mpObjList(rNewObj.GetObjList()),
2228cdf0e10cSrcweir meHint(HINT_OBJCHG)
2229cdf0e10cSrcweir {
2230cdf0e10cSrcweir maRectangle = rNewObj.GetLastBoundRect();
2231cdf0e10cSrcweir }
2232cdf0e10cSrcweir
SdrHint(const SdrObject & rNewObj,const Rectangle & rRect)2233cdf0e10cSrcweir SdrHint::SdrHint(const SdrObject& rNewObj, const Rectangle& rRect)
2234cdf0e10cSrcweir : mpPage(rNewObj.GetPage()),
2235cdf0e10cSrcweir mpObj(&rNewObj),
2236cdf0e10cSrcweir mpObjList(rNewObj.GetObjList()),
2237cdf0e10cSrcweir meHint(HINT_OBJCHG)
2238cdf0e10cSrcweir {
2239cdf0e10cSrcweir maRectangle = rRect;
2240cdf0e10cSrcweir }
2241cdf0e10cSrcweir
SetPage(const SdrPage * pNewPage)2242cdf0e10cSrcweir void SdrHint::SetPage(const SdrPage* pNewPage)
2243cdf0e10cSrcweir {
2244cdf0e10cSrcweir mpPage = pNewPage;
2245cdf0e10cSrcweir }
2246cdf0e10cSrcweir
SetObjList(const SdrObjList * pNewOL)2247cdf0e10cSrcweir void SdrHint::SetObjList(const SdrObjList* pNewOL)
2248cdf0e10cSrcweir {
2249cdf0e10cSrcweir mpObjList = pNewOL;
2250cdf0e10cSrcweir }
2251cdf0e10cSrcweir
SetObject(const SdrObject * pNewObj)2252cdf0e10cSrcweir void SdrHint::SetObject(const SdrObject* pNewObj)
2253cdf0e10cSrcweir {
2254cdf0e10cSrcweir mpObj = pNewObj;
2255cdf0e10cSrcweir }
2256cdf0e10cSrcweir
SetKind(SdrHintKind eNewKind)2257cdf0e10cSrcweir void SdrHint::SetKind(SdrHintKind eNewKind)
2258cdf0e10cSrcweir {
2259cdf0e10cSrcweir meHint = eNewKind;
2260cdf0e10cSrcweir }
2261cdf0e10cSrcweir
SetRect(const Rectangle & rNewRect)2262cdf0e10cSrcweir void SdrHint::SetRect(const Rectangle& rNewRect)
2263cdf0e10cSrcweir {
2264cdf0e10cSrcweir maRectangle = rNewRect;
2265cdf0e10cSrcweir }
2266cdf0e10cSrcweir
GetPage() const2267cdf0e10cSrcweir const SdrPage* SdrHint::GetPage() const
2268cdf0e10cSrcweir {
2269cdf0e10cSrcweir return mpPage;
2270cdf0e10cSrcweir }
2271cdf0e10cSrcweir
GetObjList() const2272cdf0e10cSrcweir const SdrObjList* SdrHint::GetObjList() const
2273cdf0e10cSrcweir {
2274cdf0e10cSrcweir return mpObjList;
2275cdf0e10cSrcweir }
2276cdf0e10cSrcweir
GetObject() const2277cdf0e10cSrcweir const SdrObject* SdrHint::GetObject() const
2278cdf0e10cSrcweir {
2279cdf0e10cSrcweir return mpObj;
2280cdf0e10cSrcweir }
2281cdf0e10cSrcweir
GetKind() const2282cdf0e10cSrcweir SdrHintKind SdrHint::GetKind() const
2283cdf0e10cSrcweir {
2284cdf0e10cSrcweir return meHint;
2285cdf0e10cSrcweir }
2286cdf0e10cSrcweir
GetRect() const2287cdf0e10cSrcweir const Rectangle& SdrHint::GetRect() const
2288cdf0e10cSrcweir {
2289cdf0e10cSrcweir return maRectangle;
2290cdf0e10cSrcweir }
2291cdf0e10cSrcweir
22928d647522Smseidel /* vim: set noet sw=4 ts=4: */
2293