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