1*190118d0SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*190118d0SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*190118d0SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*190118d0SAndrew Rist * distributed with this work for additional information 6*190118d0SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*190118d0SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*190118d0SAndrew Rist * "License"); you may not use this file except in compliance 9*190118d0SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*190118d0SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*190118d0SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*190118d0SAndrew Rist * software distributed under the License is distributed on an 15*190118d0SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*190118d0SAndrew Rist * KIND, either express or implied. See the License for the 17*190118d0SAndrew Rist * specific language governing permissions and limitations 18*190118d0SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*190118d0SAndrew Rist *************************************************************/ 21*190118d0SAndrew Rist 22*190118d0SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_editeng.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include <editeng/numitem.hxx> 28cdf0e10cSrcweir 29cdf0e10cSrcweir #include <com/sun/star/text/HoriOrientation.hpp> 30cdf0e10cSrcweir #include <com/sun/star/text/VertOrientation.hpp> 31cdf0e10cSrcweir #include <com/sun/star/text/RelOrientation.hpp> 32cdf0e10cSrcweir #include <editeng/brshitem.hxx> 33cdf0e10cSrcweir #include <vcl/font.hxx> 34cdf0e10cSrcweir #include <editeng/editids.hrc> 35cdf0e10cSrcweir #include <editeng/editrids.hrc> 36cdf0e10cSrcweir #include <editeng/numdef.hxx> 37cdf0e10cSrcweir #include <vcl/graph.hxx> 38cdf0e10cSrcweir #include <vcl/window.hxx> 39cdf0e10cSrcweir #include <vcl/svapp.hxx> 40cdf0e10cSrcweir #include <editeng/unolingu.hxx> 41cdf0e10cSrcweir #include <com/sun/star/text/XNumberingFormatter.hpp> 42cdf0e10cSrcweir #include <com/sun/star/text/XDefaultNumberingProvider.hpp> 43cdf0e10cSrcweir #include <com/sun/star/style/NumberingType.hpp> 44cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp> 45cdf0e10cSrcweir #include <com/sun/star/beans/PropertyValue.hpp> 46cdf0e10cSrcweir #include <comphelper/processfactory.hxx> 47cdf0e10cSrcweir 48cdf0e10cSrcweir #include <editeng/unonrule.hxx> 49cdf0e10cSrcweir 50cdf0e10cSrcweir #define MM100_TO_TWIP(MM100) ((MM100*72L+63L)/127L) 51cdf0e10cSrcweir 52cdf0e10cSrcweir #define DEF_WRITER_LSPACE 500 //Standardeinrueckung 53cdf0e10cSrcweir #define DEF_DRAW_LSPACE 800 //Standardeinrueckung 54cdf0e10cSrcweir 55cdf0e10cSrcweir #define NUMITEM_VERSION_01 0x01 56cdf0e10cSrcweir #define NUMITEM_VERSION_02 0x02 57cdf0e10cSrcweir #define NUMITEM_VERSION_03 0x03 58cdf0e10cSrcweir #define NUMITEM_VERSION_04 0x04 59cdf0e10cSrcweir 60cdf0e10cSrcweir using namespace ::com::sun::star; 61cdf0e10cSrcweir using namespace ::com::sun::star::lang; 62cdf0e10cSrcweir using namespace ::com::sun::star::uno; 63cdf0e10cSrcweir using namespace ::com::sun::star::text; 64cdf0e10cSrcweir using namespace ::com::sun::star::beans; 65cdf0e10cSrcweir using namespace ::com::sun::star::style; 66cdf0e10cSrcweir 67cdf0e10cSrcweir sal_Int32 SvxNumberType::nRefCount = 0; 68cdf0e10cSrcweir com::sun::star::uno::Reference<com::sun::star::text::XNumberingFormatter> SvxNumberType::xFormatter = 0; 69cdf0e10cSrcweir void lcl_getFormatter(com::sun::star::uno::Reference<com::sun::star::text::XNumberingFormatter>& _xFormatter) 70cdf0e10cSrcweir { 71cdf0e10cSrcweir if(!_xFormatter.is()) 72cdf0e10cSrcweir { 73cdf0e10cSrcweir try 74cdf0e10cSrcweir { 75cdf0e10cSrcweir Reference< XMultiServiceFactory > xMSF = ::comphelper::getProcessServiceFactory(); 76cdf0e10cSrcweir Reference < XInterface > xI = xMSF->createInstance( 77cdf0e10cSrcweir ::rtl::OUString::createFromAscii( "com.sun.star.text.DefaultNumberingProvider" ) ); 78cdf0e10cSrcweir Reference<XDefaultNumberingProvider> xRet(xI, UNO_QUERY); 79cdf0e10cSrcweir DBG_ASSERT(xRet.is(), "service missing: \"com.sun.star.text.DefaultNumberingProvider\""); 80cdf0e10cSrcweir _xFormatter = Reference<XNumberingFormatter> (xRet, UNO_QUERY); 81cdf0e10cSrcweir } 82cdf0e10cSrcweir catch(Exception& ) 83cdf0e10cSrcweir { 84cdf0e10cSrcweir } 85cdf0e10cSrcweir } 86cdf0e10cSrcweir } 87cdf0e10cSrcweir /* -----------------------------22.02.01 14:24-------------------------------- 88cdf0e10cSrcweir 89cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 90cdf0e10cSrcweir SvxNumberType::SvxNumberType(sal_Int16 nType) : 91cdf0e10cSrcweir nNumType(nType), 92cdf0e10cSrcweir bShowSymbol(sal_True) 93cdf0e10cSrcweir { 94cdf0e10cSrcweir nRefCount++; 95cdf0e10cSrcweir } 96cdf0e10cSrcweir /* -----------------------------22.02.01 14:31-------------------------------- 97cdf0e10cSrcweir 98cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 99cdf0e10cSrcweir SvxNumberType::SvxNumberType(const SvxNumberType& rType) : 100cdf0e10cSrcweir nNumType(rType.nNumType), 101cdf0e10cSrcweir bShowSymbol(rType.bShowSymbol) 102cdf0e10cSrcweir { 103cdf0e10cSrcweir nRefCount++; 104cdf0e10cSrcweir } 105cdf0e10cSrcweir /* -----------------------------22.02.01 14:24-------------------------------- 106cdf0e10cSrcweir 107cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 108cdf0e10cSrcweir SvxNumberType::~SvxNumberType() 109cdf0e10cSrcweir { 110cdf0e10cSrcweir if(!--nRefCount) 111cdf0e10cSrcweir xFormatter = 0; 112cdf0e10cSrcweir } 113cdf0e10cSrcweir /* -----------------------------22.02.01 11:09-------------------------------- 114cdf0e10cSrcweir 115cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 116cdf0e10cSrcweir String SvxNumberType::GetNumStr( sal_uLong nNo ) const 117cdf0e10cSrcweir { 118cdf0e10cSrcweir LanguageType eLang = Application::GetSettings().GetLanguage(); 119cdf0e10cSrcweir Locale aLocale = SvxCreateLocale(eLang); 120cdf0e10cSrcweir return GetNumStr( nNo, aLocale ); 121cdf0e10cSrcweir } 122cdf0e10cSrcweir /* -----------------28.10.98 15:56------------------- 123cdf0e10cSrcweir * 124cdf0e10cSrcweir * --------------------------------------------------*/ 125cdf0e10cSrcweir String SvxNumberType::GetNumStr( sal_uLong nNo, const Locale& rLocale ) const 126cdf0e10cSrcweir { 127cdf0e10cSrcweir lcl_getFormatter(xFormatter); 128cdf0e10cSrcweir String aTmpStr; 129cdf0e10cSrcweir if(!xFormatter.is()) 130cdf0e10cSrcweir return aTmpStr; 131cdf0e10cSrcweir 132cdf0e10cSrcweir if(bShowSymbol) 133cdf0e10cSrcweir { 134cdf0e10cSrcweir switch(nNumType) 135cdf0e10cSrcweir { 136cdf0e10cSrcweir case NumberingType::CHAR_SPECIAL: 137cdf0e10cSrcweir case NumberingType::BITMAP: 138cdf0e10cSrcweir break; 139cdf0e10cSrcweir default: 140cdf0e10cSrcweir { 141cdf0e10cSrcweir //#95525# '0' allowed for ARABIC numberings 142cdf0e10cSrcweir if(NumberingType::ARABIC == nNumType && 0 == nNo ) 143cdf0e10cSrcweir aTmpStr = '0'; 144cdf0e10cSrcweir else 145cdf0e10cSrcweir { 146cdf0e10cSrcweir Sequence< PropertyValue > aProperties(2); 147cdf0e10cSrcweir PropertyValue* pValues = aProperties.getArray(); 148cdf0e10cSrcweir pValues[0].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NumberingType")); 149cdf0e10cSrcweir pValues[0].Value <<= nNumType; 150cdf0e10cSrcweir pValues[1].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Value")); 151cdf0e10cSrcweir pValues[1].Value <<= (sal_Int32)nNo; 152cdf0e10cSrcweir 153cdf0e10cSrcweir try 154cdf0e10cSrcweir { 155cdf0e10cSrcweir aTmpStr = xFormatter->makeNumberingString( aProperties, rLocale ); 156cdf0e10cSrcweir } 157cdf0e10cSrcweir catch(Exception&) 158cdf0e10cSrcweir { 159cdf0e10cSrcweir } 160cdf0e10cSrcweir } 161cdf0e10cSrcweir } 162cdf0e10cSrcweir } 163cdf0e10cSrcweir } 164cdf0e10cSrcweir return aTmpStr; 165cdf0e10cSrcweir } 166cdf0e10cSrcweir /* -----------------27.10.98 10:33------------------- 167cdf0e10cSrcweir * 168cdf0e10cSrcweir * --------------------------------------------------*/ 169cdf0e10cSrcweir // --> OD 2008-01-09 #newlistlevelattrs# 170cdf0e10cSrcweir SvxNumberFormat::SvxNumberFormat( sal_Int16 eType, 171cdf0e10cSrcweir SvxNumPositionAndSpaceMode ePositionAndSpaceMode ) 172cdf0e10cSrcweir // <-- 173cdf0e10cSrcweir : SvxNumberType(eType), 174cdf0e10cSrcweir eNumAdjust(SVX_ADJUST_LEFT), 175cdf0e10cSrcweir nInclUpperLevels(0), 176cdf0e10cSrcweir nStart(1), 177cdf0e10cSrcweir cBullet(SVX_DEF_BULLET), 178cdf0e10cSrcweir nBulletRelSize(100), 179cdf0e10cSrcweir nBulletColor(COL_BLACK), 180cdf0e10cSrcweir // --> OD 2008-01-09 #newlistlevelattrs# 181cdf0e10cSrcweir mePositionAndSpaceMode( ePositionAndSpaceMode ), 182cdf0e10cSrcweir // <-- 183cdf0e10cSrcweir nFirstLineOffset(0), 184cdf0e10cSrcweir nAbsLSpace(0), 185cdf0e10cSrcweir nLSpace(0), 186cdf0e10cSrcweir nCharTextDistance(0), 187cdf0e10cSrcweir // --> OD 2008-01-09 #newlistlevelattrs# 188cdf0e10cSrcweir meLabelFollowedBy( LISTTAB ), 189cdf0e10cSrcweir mnListtabPos( 0 ), 190cdf0e10cSrcweir mnFirstLineIndent( 0 ), 191cdf0e10cSrcweir mnIndentAt( 0 ), 192cdf0e10cSrcweir // <-- 193cdf0e10cSrcweir pGraphicBrush(0), 194cdf0e10cSrcweir eVertOrient(text::VertOrientation::NONE), 195cdf0e10cSrcweir pBulletFont(0) 196cdf0e10cSrcweir { 197cdf0e10cSrcweir } 198cdf0e10cSrcweir /* -----------------27.10.98 10:56------------------- 199cdf0e10cSrcweir * 200cdf0e10cSrcweir * --------------------------------------------------*/ 201cdf0e10cSrcweir SvxNumberFormat::SvxNumberFormat(const SvxNumberFormat& rFormat) : 202cdf0e10cSrcweir SvxNumberType(rFormat), 203cdf0e10cSrcweir // --> OD 2008-01-09 #newlistlevelattrs# 204cdf0e10cSrcweir mePositionAndSpaceMode( rFormat.mePositionAndSpaceMode ), 205cdf0e10cSrcweir // <-- 206cdf0e10cSrcweir pGraphicBrush(0), 207cdf0e10cSrcweir pBulletFont(0) 208cdf0e10cSrcweir { 209cdf0e10cSrcweir *this = rFormat; 210cdf0e10cSrcweir } 211cdf0e10cSrcweir /* -----------------27.10.98 10:56------------------- 212cdf0e10cSrcweir * 213cdf0e10cSrcweir * --------------------------------------------------*/ 214cdf0e10cSrcweir SvxNumberFormat::~SvxNumberFormat() 215cdf0e10cSrcweir { 216cdf0e10cSrcweir delete pGraphicBrush; 217cdf0e10cSrcweir delete pBulletFont; 218cdf0e10cSrcweir } 219cdf0e10cSrcweir /* -----------------08.12.98 11:14------------------- 220cdf0e10cSrcweir * 221cdf0e10cSrcweir * --------------------------------------------------*/ 222cdf0e10cSrcweir SvxNumberFormat::SvxNumberFormat(SvStream &rStream) 223cdf0e10cSrcweir : mePositionAndSpaceMode( LABEL_WIDTH_AND_POSITION ), 224cdf0e10cSrcweir meLabelFollowedBy( LISTTAB ), 225cdf0e10cSrcweir mnListtabPos( 0 ), 226cdf0e10cSrcweir mnFirstLineIndent( 0 ), 227cdf0e10cSrcweir mnIndentAt( 0 ) 228cdf0e10cSrcweir { 229cdf0e10cSrcweir 230cdf0e10cSrcweir sal_uInt16 nVersion; 231cdf0e10cSrcweir rStream >> nVersion; 232cdf0e10cSrcweir 233cdf0e10cSrcweir sal_uInt16 nUSHORT; 234cdf0e10cSrcweir rStream >> nUSHORT; 235cdf0e10cSrcweir SetNumberingType((sal_Int16)nUSHORT); 236cdf0e10cSrcweir rStream >> nUSHORT; 237cdf0e10cSrcweir eNumAdjust = (SvxAdjust)nUSHORT; 238cdf0e10cSrcweir rStream >> nUSHORT; 239cdf0e10cSrcweir nInclUpperLevels = (sal_uInt8)nUSHORT; 240cdf0e10cSrcweir rStream >> nUSHORT; 241cdf0e10cSrcweir nStart = nUSHORT; 242cdf0e10cSrcweir rStream >> nUSHORT; 243cdf0e10cSrcweir cBullet = nUSHORT; 244cdf0e10cSrcweir 245cdf0e10cSrcweir short nShort; 246cdf0e10cSrcweir rStream >> nShort; 247cdf0e10cSrcweir nFirstLineOffset = nShort; 248cdf0e10cSrcweir rStream >> nShort; 249cdf0e10cSrcweir nAbsLSpace = nShort; 250cdf0e10cSrcweir rStream >> nShort; 251cdf0e10cSrcweir nLSpace = nShort; 252cdf0e10cSrcweir 253cdf0e10cSrcweir rStream >> nShort; 254cdf0e10cSrcweir nCharTextDistance = nShort; 255cdf0e10cSrcweir rtl_TextEncoding eEnc = gsl_getSystemTextEncoding(); 256cdf0e10cSrcweir rStream.ReadByteString(sPrefix, eEnc); 257cdf0e10cSrcweir rStream.ReadByteString(sSuffix, eEnc); 258cdf0e10cSrcweir rStream.ReadByteString(sCharStyleName, eEnc); 259cdf0e10cSrcweir rStream >> nUSHORT; 260cdf0e10cSrcweir if(nUSHORT) 261cdf0e10cSrcweir { 262cdf0e10cSrcweir SvxBrushItem aHelper(0); 263cdf0e10cSrcweir pGraphicBrush = (SvxBrushItem*) aHelper.Create( rStream, BRUSH_GRAPHIC_VERSION ); 264cdf0e10cSrcweir } 265cdf0e10cSrcweir else 266cdf0e10cSrcweir pGraphicBrush = 0; 267cdf0e10cSrcweir 268cdf0e10cSrcweir rStream >> nUSHORT; 269cdf0e10cSrcweir eVertOrient = (sal_Int16)nUSHORT; 270cdf0e10cSrcweir 271cdf0e10cSrcweir rStream >> nUSHORT; 272cdf0e10cSrcweir if(nUSHORT) 273cdf0e10cSrcweir { 274cdf0e10cSrcweir pBulletFont = new Font; 275cdf0e10cSrcweir rStream >> *pBulletFont; 276cdf0e10cSrcweir if(!pBulletFont->GetCharSet()) 277cdf0e10cSrcweir pBulletFont->SetCharSet(rStream.GetStreamCharSet()); 278cdf0e10cSrcweir } 279cdf0e10cSrcweir else 280cdf0e10cSrcweir pBulletFont = 0; 281cdf0e10cSrcweir rStream >> aGraphicSize; 282cdf0e10cSrcweir 283cdf0e10cSrcweir rStream >> nBulletColor; 284cdf0e10cSrcweir rStream >> nUSHORT; 285cdf0e10cSrcweir nBulletRelSize = nUSHORT; 286cdf0e10cSrcweir rStream >> nUSHORT; 287cdf0e10cSrcweir SetShowSymbol((sal_Bool)nUSHORT); 288cdf0e10cSrcweir 289cdf0e10cSrcweir if( nVersion < NUMITEM_VERSION_03 ) 290cdf0e10cSrcweir cBullet = ByteString::ConvertToUnicode( (sal_Char)cBullet, 291cdf0e10cSrcweir (pBulletFont&&pBulletFont->GetCharSet()) ? pBulletFont->GetCharSet() 292cdf0e10cSrcweir : RTL_TEXTENCODING_SYMBOL ); 293cdf0e10cSrcweir if(pBulletFont) 294cdf0e10cSrcweir { 295cdf0e10cSrcweir sal_Bool bConvertBulletFont = rStream.GetVersion() <= SOFFICE_FILEFORMAT_50; 296cdf0e10cSrcweir if(bConvertBulletFont) 297cdf0e10cSrcweir { 298cdf0e10cSrcweir 299cdf0e10cSrcweir FontToSubsFontConverter pConverter = 300cdf0e10cSrcweir CreateFontToSubsFontConverter(pBulletFont->GetName(), 301cdf0e10cSrcweir FONTTOSUBSFONT_IMPORT|FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS); 302cdf0e10cSrcweir if(pConverter) 303cdf0e10cSrcweir { 304cdf0e10cSrcweir cBullet = ConvertFontToSubsFontChar(pConverter, cBullet); 305cdf0e10cSrcweir String sFontName = GetFontToSubsFontName(pConverter); 306cdf0e10cSrcweir pBulletFont->SetName(sFontName); 307cdf0e10cSrcweir DestroyFontToSubsFontConverter(pConverter); 308cdf0e10cSrcweir } 309cdf0e10cSrcweir } 310cdf0e10cSrcweir } 311cdf0e10cSrcweir 312cdf0e10cSrcweir if( NUMITEM_VERSION_04 <= nVersion ) 313cdf0e10cSrcweir { 314cdf0e10cSrcweir rStream >> nUSHORT; 315cdf0e10cSrcweir mePositionAndSpaceMode = (SvxNumPositionAndSpaceMode) nUSHORT; 316cdf0e10cSrcweir rStream >> nUSHORT; 317cdf0e10cSrcweir meLabelFollowedBy = ( SvxNumLabelFollowedBy ) nUSHORT; 318cdf0e10cSrcweir long nLong; 319cdf0e10cSrcweir rStream >> nLong; 320cdf0e10cSrcweir mnListtabPos = nLong; 321cdf0e10cSrcweir rStream >> nLong; 322cdf0e10cSrcweir mnFirstLineIndent = nLong; 323cdf0e10cSrcweir rStream >> nLong; 324cdf0e10cSrcweir mnIndentAt = nLong; 325cdf0e10cSrcweir } 326cdf0e10cSrcweir } 327cdf0e10cSrcweir /* -----------------08.12.98 11:14------------------- 328cdf0e10cSrcweir * 329cdf0e10cSrcweir * --------------------------------------------------*/ 330cdf0e10cSrcweir SvStream& SvxNumberFormat::Store(SvStream &rStream, FontToSubsFontConverter pConverter) 331cdf0e10cSrcweir { 332cdf0e10cSrcweir if(pConverter && pBulletFont) 333cdf0e10cSrcweir { 334cdf0e10cSrcweir cBullet = ConvertFontToSubsFontChar(pConverter, cBullet); 335cdf0e10cSrcweir String sFontName = GetFontToSubsFontName(pConverter); 336cdf0e10cSrcweir pBulletFont->SetName(sFontName); 337cdf0e10cSrcweir } 338cdf0e10cSrcweir 339cdf0e10cSrcweir rStream << (sal_uInt16)NUMITEM_VERSION_04; 340cdf0e10cSrcweir 341cdf0e10cSrcweir rStream << (sal_uInt16)GetNumberingType(); 342cdf0e10cSrcweir rStream << (sal_uInt16)eNumAdjust; 343cdf0e10cSrcweir rStream << (sal_uInt16)nInclUpperLevels; 344cdf0e10cSrcweir rStream << nStart; 345cdf0e10cSrcweir rStream << (sal_uInt16)cBullet; 346cdf0e10cSrcweir 347cdf0e10cSrcweir rStream << nFirstLineOffset; 348cdf0e10cSrcweir rStream << nAbsLSpace; 349cdf0e10cSrcweir rStream << nLSpace; 350cdf0e10cSrcweir 351cdf0e10cSrcweir rStream << nCharTextDistance; 352cdf0e10cSrcweir rtl_TextEncoding eEnc = gsl_getSystemTextEncoding(); 353cdf0e10cSrcweir rStream.WriteByteString(sPrefix, eEnc); 354cdf0e10cSrcweir rStream.WriteByteString(sSuffix, eEnc); 355cdf0e10cSrcweir rStream.WriteByteString(sCharStyleName, eEnc); 356cdf0e10cSrcweir if(pGraphicBrush) 357cdf0e10cSrcweir { 358cdf0e10cSrcweir rStream << (sal_uInt16)1; 359cdf0e10cSrcweir 360cdf0e10cSrcweir // #75113# in SD or SI force bullet itself to be stored, 361cdf0e10cSrcweir // for that purpose throw away link when link and graphic 362cdf0e10cSrcweir // are present, so Brush save is forced 363cdf0e10cSrcweir if(pGraphicBrush->GetGraphicLink() && pGraphicBrush->GetGraphic()) 364cdf0e10cSrcweir { 365cdf0e10cSrcweir String aEmpty; 366cdf0e10cSrcweir pGraphicBrush->SetGraphicLink(aEmpty); 367cdf0e10cSrcweir } 368cdf0e10cSrcweir 369cdf0e10cSrcweir pGraphicBrush->Store(rStream, BRUSH_GRAPHIC_VERSION); 370cdf0e10cSrcweir } 371cdf0e10cSrcweir else 372cdf0e10cSrcweir rStream << (sal_uInt16)0; 373cdf0e10cSrcweir 374cdf0e10cSrcweir rStream << (sal_uInt16)eVertOrient; 375cdf0e10cSrcweir if(pBulletFont) 376cdf0e10cSrcweir { 377cdf0e10cSrcweir rStream << (sal_uInt16)1; 378cdf0e10cSrcweir rStream << *pBulletFont; 379cdf0e10cSrcweir } 380cdf0e10cSrcweir else 381cdf0e10cSrcweir rStream << (sal_uInt16)0; 382cdf0e10cSrcweir rStream << aGraphicSize; 383cdf0e10cSrcweir 384cdf0e10cSrcweir Color nTempColor = nBulletColor; 385cdf0e10cSrcweir if(COL_AUTO == nBulletColor.GetColor()) 386cdf0e10cSrcweir nTempColor = COL_BLACK; 387cdf0e10cSrcweir rStream << nTempColor; 388cdf0e10cSrcweir rStream << nBulletRelSize; 389cdf0e10cSrcweir rStream << (sal_uInt16)IsShowSymbol(); 390cdf0e10cSrcweir 391cdf0e10cSrcweir rStream << ( sal_uInt16 ) mePositionAndSpaceMode; 392cdf0e10cSrcweir rStream << ( sal_uInt16 ) meLabelFollowedBy; 393cdf0e10cSrcweir rStream << ( long ) mnListtabPos; 394cdf0e10cSrcweir rStream << ( long ) mnFirstLineIndent; 395cdf0e10cSrcweir rStream << ( long ) mnIndentAt; 396cdf0e10cSrcweir 397cdf0e10cSrcweir return rStream; 398cdf0e10cSrcweir } 399cdf0e10cSrcweir 400cdf0e10cSrcweir /* -----------------------------23.02.01 11:10-------------------------------- 401cdf0e10cSrcweir 402cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 403cdf0e10cSrcweir SvxNumberFormat& SvxNumberFormat::operator=( const SvxNumberFormat& rFormat ) 404cdf0e10cSrcweir { 405cdf0e10cSrcweir if (& rFormat == this) { return *this; } 406cdf0e10cSrcweir 407cdf0e10cSrcweir SetNumberingType(rFormat.GetNumberingType()); 408cdf0e10cSrcweir eNumAdjust = rFormat.eNumAdjust ; 409cdf0e10cSrcweir nInclUpperLevels = rFormat.nInclUpperLevels ; 410cdf0e10cSrcweir nStart = rFormat.nStart ; 411cdf0e10cSrcweir cBullet = rFormat.cBullet ; 412cdf0e10cSrcweir // --> OD 2008-01-09 #newlistlevelattrs# 413cdf0e10cSrcweir mePositionAndSpaceMode = rFormat.mePositionAndSpaceMode; 414cdf0e10cSrcweir // <-- 415cdf0e10cSrcweir nFirstLineOffset = rFormat.nFirstLineOffset; 416cdf0e10cSrcweir nAbsLSpace = rFormat.nAbsLSpace ; 417cdf0e10cSrcweir nLSpace = rFormat.nLSpace ; 418cdf0e10cSrcweir nCharTextDistance = rFormat.nCharTextDistance ; 419cdf0e10cSrcweir // --> OD 2008-01-09 #newlistlevelattrs# 420cdf0e10cSrcweir meLabelFollowedBy = rFormat.meLabelFollowedBy; 421cdf0e10cSrcweir mnListtabPos = rFormat.mnListtabPos; 422cdf0e10cSrcweir mnFirstLineIndent = rFormat.mnFirstLineIndent; 423cdf0e10cSrcweir mnIndentAt = rFormat.mnIndentAt; 424cdf0e10cSrcweir // <-- 425cdf0e10cSrcweir eVertOrient = rFormat.eVertOrient ; 426cdf0e10cSrcweir sPrefix = rFormat.sPrefix ; 427cdf0e10cSrcweir sSuffix = rFormat.sSuffix ; 428cdf0e10cSrcweir aGraphicSize = rFormat.aGraphicSize ; 429cdf0e10cSrcweir nBulletColor = rFormat.nBulletColor ; 430cdf0e10cSrcweir nBulletRelSize = rFormat.nBulletRelSize; 431cdf0e10cSrcweir SetShowSymbol(rFormat.IsShowSymbol()); 432cdf0e10cSrcweir sCharStyleName = rFormat.sCharStyleName; 433cdf0e10cSrcweir DELETEZ(pGraphicBrush); 434cdf0e10cSrcweir if(rFormat.pGraphicBrush) 435cdf0e10cSrcweir { 436cdf0e10cSrcweir pGraphicBrush = new SvxBrushItem(*rFormat.pGraphicBrush); 437cdf0e10cSrcweir pGraphicBrush->SetDoneLink( STATIC_LINK( this, SvxNumberFormat, GraphicArrived) ); 438cdf0e10cSrcweir } 439cdf0e10cSrcweir DELETEZ(pBulletFont); 440cdf0e10cSrcweir if(rFormat.pBulletFont) 441cdf0e10cSrcweir pBulletFont = new Font(*rFormat.pBulletFont); 442cdf0e10cSrcweir return *this; 443cdf0e10cSrcweir } 444cdf0e10cSrcweir /* -----------------27.10.98 10:56------------------- 445cdf0e10cSrcweir * 446cdf0e10cSrcweir * --------------------------------------------------*/ 447cdf0e10cSrcweir sal_Bool SvxNumberFormat::operator==( const SvxNumberFormat& rFormat) const 448cdf0e10cSrcweir { 449cdf0e10cSrcweir if( GetNumberingType() != rFormat.GetNumberingType() || 450cdf0e10cSrcweir eNumAdjust != rFormat.eNumAdjust || 451cdf0e10cSrcweir nInclUpperLevels != rFormat.nInclUpperLevels || 452cdf0e10cSrcweir nStart != rFormat.nStart || 453cdf0e10cSrcweir cBullet != rFormat.cBullet || 454cdf0e10cSrcweir // --> OD 2008-01-09 #newlistlevelattrs# 455cdf0e10cSrcweir mePositionAndSpaceMode != rFormat.mePositionAndSpaceMode || 456cdf0e10cSrcweir // <-- 457cdf0e10cSrcweir nFirstLineOffset != rFormat.nFirstLineOffset || 458cdf0e10cSrcweir nAbsLSpace != rFormat.nAbsLSpace || 459cdf0e10cSrcweir nLSpace != rFormat.nLSpace || 460cdf0e10cSrcweir nCharTextDistance != rFormat.nCharTextDistance || 461cdf0e10cSrcweir // --> OD 2008-01-09 #newlistlevelattrs# 462cdf0e10cSrcweir meLabelFollowedBy != rFormat.meLabelFollowedBy || 463cdf0e10cSrcweir mnListtabPos != rFormat.mnListtabPos || 464cdf0e10cSrcweir mnFirstLineIndent != rFormat.mnFirstLineIndent || 465cdf0e10cSrcweir mnIndentAt != rFormat.mnIndentAt || 466cdf0e10cSrcweir // <-- 467cdf0e10cSrcweir eVertOrient != rFormat.eVertOrient || 468cdf0e10cSrcweir sPrefix != rFormat.sPrefix || 469cdf0e10cSrcweir sSuffix != rFormat.sSuffix || 470cdf0e10cSrcweir aGraphicSize != rFormat.aGraphicSize || 471cdf0e10cSrcweir nBulletColor != rFormat.nBulletColor || 472cdf0e10cSrcweir nBulletRelSize != rFormat.nBulletRelSize || 473cdf0e10cSrcweir IsShowSymbol() != rFormat.IsShowSymbol() || 474cdf0e10cSrcweir sCharStyleName != rFormat.sCharStyleName 475cdf0e10cSrcweir ) 476cdf0e10cSrcweir return sal_False; 477cdf0e10cSrcweir if ( 478cdf0e10cSrcweir (pGraphicBrush && !rFormat.pGraphicBrush) || 479cdf0e10cSrcweir (!pGraphicBrush && rFormat.pGraphicBrush) || 480cdf0e10cSrcweir (pGraphicBrush && *pGraphicBrush != *rFormat.pGraphicBrush) 481cdf0e10cSrcweir ) 482cdf0e10cSrcweir { 483cdf0e10cSrcweir return sal_False; 484cdf0e10cSrcweir } 485cdf0e10cSrcweir if ( 486cdf0e10cSrcweir (pBulletFont && !rFormat.pBulletFont) || 487cdf0e10cSrcweir (!pBulletFont && rFormat.pBulletFont) || 488cdf0e10cSrcweir (pBulletFont && *pBulletFont != *rFormat.pBulletFont) 489cdf0e10cSrcweir ) 490cdf0e10cSrcweir { 491cdf0e10cSrcweir return sal_False; 492cdf0e10cSrcweir } 493cdf0e10cSrcweir return sal_True; 494cdf0e10cSrcweir } 495cdf0e10cSrcweir /* -----------------28.10.98 09:53------------------- 496cdf0e10cSrcweir * 497cdf0e10cSrcweir * --------------------------------------------------*/ 498cdf0e10cSrcweir void SvxNumberFormat::SetGraphicBrush( const SvxBrushItem* pBrushItem, 499cdf0e10cSrcweir const Size* pSize, const sal_Int16* pOrient) 500cdf0e10cSrcweir { 501cdf0e10cSrcweir if(!pBrushItem) 502cdf0e10cSrcweir { 503cdf0e10cSrcweir delete pGraphicBrush; 504cdf0e10cSrcweir pGraphicBrush = 0; 505cdf0e10cSrcweir } 506cdf0e10cSrcweir else if ( !pGraphicBrush || (pGraphicBrush && !(*pBrushItem == *pGraphicBrush)) ) 507cdf0e10cSrcweir { 508cdf0e10cSrcweir delete pGraphicBrush; 509cdf0e10cSrcweir pGraphicBrush = (SvxBrushItem*)pBrushItem->Clone(); 510cdf0e10cSrcweir pGraphicBrush->SetDoneLink( STATIC_LINK( this, SvxNumberFormat, GraphicArrived) ); 511cdf0e10cSrcweir } 512cdf0e10cSrcweir 513cdf0e10cSrcweir if(pOrient) 514cdf0e10cSrcweir eVertOrient = *pOrient; 515cdf0e10cSrcweir else 516cdf0e10cSrcweir eVertOrient = text::VertOrientation::NONE; 517cdf0e10cSrcweir if(pSize) 518cdf0e10cSrcweir aGraphicSize = *pSize; 519cdf0e10cSrcweir else 520cdf0e10cSrcweir aGraphicSize.Width() = aGraphicSize.Height() = 0; 521cdf0e10cSrcweir } 522cdf0e10cSrcweir /* -----------------28.10.98 09:59------------------- 523cdf0e10cSrcweir * 524cdf0e10cSrcweir * --------------------------------------------------*/ 525cdf0e10cSrcweir void SvxNumberFormat::SetGraphic( const String& rName ) 526cdf0e10cSrcweir { 527cdf0e10cSrcweir const String* pName; 528cdf0e10cSrcweir if( pGraphicBrush && 529cdf0e10cSrcweir 0 != (pName = pGraphicBrush->GetGraphicLink()) 530cdf0e10cSrcweir && *pName == rName ) 531cdf0e10cSrcweir return ; 532cdf0e10cSrcweir 533cdf0e10cSrcweir delete pGraphicBrush; 534cdf0e10cSrcweir String sTmp; 535cdf0e10cSrcweir pGraphicBrush = new SvxBrushItem( rName, sTmp, GPOS_AREA, 0 ); 536cdf0e10cSrcweir pGraphicBrush->SetDoneLink( STATIC_LINK( this, SvxNumberFormat, GraphicArrived) ); 537cdf0e10cSrcweir if( eVertOrient == text::VertOrientation::NONE ) 538cdf0e10cSrcweir eVertOrient = text::VertOrientation::TOP; 539cdf0e10cSrcweir 540cdf0e10cSrcweir aGraphicSize.Width() = aGraphicSize.Height() = 0; 541cdf0e10cSrcweir } 542cdf0e10cSrcweir /* -----------------------------22.02.01 15:55-------------------------------- 543cdf0e10cSrcweir 544cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 545cdf0e10cSrcweir void SvxNumberFormat::SetVertOrient(sal_Int16 eSet) 546cdf0e10cSrcweir { 547cdf0e10cSrcweir eVertOrient = eSet; 548cdf0e10cSrcweir } 549cdf0e10cSrcweir /* -----------------------------22.02.01 15:55-------------------------------- 550cdf0e10cSrcweir 551cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 552cdf0e10cSrcweir sal_Int16 SvxNumberFormat::GetVertOrient() const 553cdf0e10cSrcweir { 554cdf0e10cSrcweir return eVertOrient; 555cdf0e10cSrcweir } 556cdf0e10cSrcweir /* -----------------28.10.98 09:59------------------- 557cdf0e10cSrcweir * 558cdf0e10cSrcweir * --------------------------------------------------*/ 559cdf0e10cSrcweir void SvxNumberFormat::SetBulletFont(const Font* pFont) 560cdf0e10cSrcweir { 561cdf0e10cSrcweir delete pBulletFont; 562cdf0e10cSrcweir pBulletFont = pFont ? new Font(*pFont): 0; 563cdf0e10cSrcweir } 564cdf0e10cSrcweir 565cdf0e10cSrcweir // --> OD 2008-01-09 #newlistlevelattrs# 566cdf0e10cSrcweir SvxNumberFormat::SvxNumPositionAndSpaceMode SvxNumberFormat::GetPositionAndSpaceMode() const 567cdf0e10cSrcweir { 568cdf0e10cSrcweir return mePositionAndSpaceMode; 569cdf0e10cSrcweir } 570cdf0e10cSrcweir void SvxNumberFormat::SetPositionAndSpaceMode( SvxNumPositionAndSpaceMode ePositionAndSpaceMode ) 571cdf0e10cSrcweir { 572cdf0e10cSrcweir mePositionAndSpaceMode = ePositionAndSpaceMode; 573cdf0e10cSrcweir } 574cdf0e10cSrcweir 575cdf0e10cSrcweir short SvxNumberFormat::GetLSpace() const 576cdf0e10cSrcweir { 577cdf0e10cSrcweir //#if OSL_DEBUG_LEVEL > 1 578cdf0e10cSrcweir // DBG_ASSERT( mePositionAndSpaceMode == LABEL_WIDTH_AND_POSITION, 579cdf0e10cSrcweir // "<SvxNumberFormat::GetLSpace()> - misusage: position-and-space-mode does not equal LABEL_WIDTH_AND_POSITION"); 580cdf0e10cSrcweir //#endif 581cdf0e10cSrcweir return mePositionAndSpaceMode == LABEL_WIDTH_AND_POSITION ? nLSpace : 0; 582cdf0e10cSrcweir } 583cdf0e10cSrcweir short SvxNumberFormat::GetAbsLSpace() const 584cdf0e10cSrcweir { 585cdf0e10cSrcweir //#if OSL_DEBUG_LEVEL > 1 586cdf0e10cSrcweir // DBG_ASSERT( mePositionAndSpaceMode == LABEL_WIDTH_AND_POSITION, 587cdf0e10cSrcweir // "<SvxNumberFormat::GetAbsLSpace()> - misusage: position-and-space-mode does not equal LABEL_WIDTH_AND_POSITION"); 588cdf0e10cSrcweir //#endif 589cdf0e10cSrcweir return mePositionAndSpaceMode == LABEL_WIDTH_AND_POSITION 590cdf0e10cSrcweir ? nAbsLSpace 591cdf0e10cSrcweir : static_cast<short>( GetFirstLineIndent() + GetIndentAt() ); 592cdf0e10cSrcweir } 593cdf0e10cSrcweir short SvxNumberFormat::GetFirstLineOffset() const 594cdf0e10cSrcweir { 595cdf0e10cSrcweir //#if OSL_DEBUG_LEVEL > 1 596cdf0e10cSrcweir // DBG_ASSERT( mePositionAndSpaceMode == LABEL_WIDTH_AND_POSITION, 597cdf0e10cSrcweir // "<SvxNumberFormat::GetFirstLineOffset()> - misusage: position-and-space-mode does not equal LABEL_WIDTH_AND_POSITION"); 598cdf0e10cSrcweir //#endif 599cdf0e10cSrcweir return mePositionAndSpaceMode == LABEL_WIDTH_AND_POSITION 600cdf0e10cSrcweir ? nFirstLineOffset 601cdf0e10cSrcweir : static_cast<short>( GetFirstLineIndent() ); 602cdf0e10cSrcweir } 603cdf0e10cSrcweir short SvxNumberFormat::GetCharTextDistance() const 604cdf0e10cSrcweir { 605cdf0e10cSrcweir //#if OSL_DEBUG_LEVEL > 1 606cdf0e10cSrcweir // DBG_ASSERT( mePositionAndSpaceMode == LABEL_WIDTH_AND_POSITION, 607cdf0e10cSrcweir // "<SvxNumberFormat::GetCharTextDistance()> - misusage: position-and-space-mode does not equal LABEL_WIDTH_AND_POSITION"); 608cdf0e10cSrcweir //#endif 609cdf0e10cSrcweir return mePositionAndSpaceMode == LABEL_WIDTH_AND_POSITION ? nCharTextDistance : 0; 610cdf0e10cSrcweir } 611cdf0e10cSrcweir 612cdf0e10cSrcweir void SvxNumberFormat::SetLabelFollowedBy( const SvxNumLabelFollowedBy eLabelFollowedBy ) 613cdf0e10cSrcweir { 614cdf0e10cSrcweir meLabelFollowedBy = eLabelFollowedBy; 615cdf0e10cSrcweir } 616cdf0e10cSrcweir SvxNumberFormat::SvxNumLabelFollowedBy SvxNumberFormat::GetLabelFollowedBy() const 617cdf0e10cSrcweir { 618cdf0e10cSrcweir return meLabelFollowedBy; 619cdf0e10cSrcweir } 620cdf0e10cSrcweir void SvxNumberFormat::SetListtabPos( const long nListtabPos ) 621cdf0e10cSrcweir { 622cdf0e10cSrcweir mnListtabPos = nListtabPos; 623cdf0e10cSrcweir } 624cdf0e10cSrcweir long SvxNumberFormat::GetListtabPos() const 625cdf0e10cSrcweir { 626cdf0e10cSrcweir return mnListtabPos; 627cdf0e10cSrcweir } 628cdf0e10cSrcweir void SvxNumberFormat::SetFirstLineIndent( const long nFirstLineIndent ) 629cdf0e10cSrcweir { 630cdf0e10cSrcweir mnFirstLineIndent = nFirstLineIndent; 631cdf0e10cSrcweir } 632cdf0e10cSrcweir long SvxNumberFormat::GetFirstLineIndent() const 633cdf0e10cSrcweir { 634cdf0e10cSrcweir return mnFirstLineIndent; 635cdf0e10cSrcweir } 636cdf0e10cSrcweir void SvxNumberFormat::SetIndentAt( const long nIndentAt ) 637cdf0e10cSrcweir { 638cdf0e10cSrcweir mnIndentAt = nIndentAt; 639cdf0e10cSrcweir } 640cdf0e10cSrcweir long SvxNumberFormat::GetIndentAt() const 641cdf0e10cSrcweir { 642cdf0e10cSrcweir return mnIndentAt; 643cdf0e10cSrcweir } 644cdf0e10cSrcweir // <-- 645cdf0e10cSrcweir 646cdf0e10cSrcweir /* -----------------28.10.98 10:03------------------- 647cdf0e10cSrcweir * 648cdf0e10cSrcweir * --------------------------------------------------*/ 649cdf0e10cSrcweir IMPL_STATIC_LINK( SvxNumberFormat, GraphicArrived, void *, EMPTYARG ) 650cdf0e10cSrcweir { 651cdf0e10cSrcweir // ggfs. die GrfSize setzen: 652cdf0e10cSrcweir if( !pThis->aGraphicSize.Width() || !pThis->aGraphicSize.Height() ) 653cdf0e10cSrcweir { 654cdf0e10cSrcweir const Graphic* pGrf = pThis->pGraphicBrush->GetGraphic(); 655cdf0e10cSrcweir if( pGrf ) 656cdf0e10cSrcweir pThis->aGraphicSize = SvxNumberFormat::GetGraphicSizeMM100( pGrf ); 657cdf0e10cSrcweir } 658cdf0e10cSrcweir pThis->NotifyGraphicArrived(); 659cdf0e10cSrcweir return 0; 660cdf0e10cSrcweir } 661cdf0e10cSrcweir /* -----------------------------02.07.01 15:36-------------------------------- 662cdf0e10cSrcweir 663cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 664cdf0e10cSrcweir void SvxNumberFormat::NotifyGraphicArrived() 665cdf0e10cSrcweir { 666cdf0e10cSrcweir } 667cdf0e10cSrcweir 668cdf0e10cSrcweir /* -----------------28.10.98 10:38------------------- 669cdf0e10cSrcweir * 670cdf0e10cSrcweir * --------------------------------------------------*/ 671cdf0e10cSrcweir Size SvxNumberFormat::GetGraphicSizeMM100(const Graphic* pGraphic) 672cdf0e10cSrcweir { 673cdf0e10cSrcweir const MapMode aMapMM100( MAP_100TH_MM ); 674cdf0e10cSrcweir const Size& rSize = pGraphic->GetPrefSize(); 675cdf0e10cSrcweir Size aRetSize; 676cdf0e10cSrcweir if ( pGraphic->GetPrefMapMode().GetMapUnit() == MAP_PIXEL ) 677cdf0e10cSrcweir { 678cdf0e10cSrcweir OutputDevice* pOutDev = Application::GetDefaultDevice(); 679cdf0e10cSrcweir MapMode aOldMap( pOutDev->GetMapMode() ); 680cdf0e10cSrcweir pOutDev->SetMapMode( aMapMM100 ); 681cdf0e10cSrcweir aRetSize = pOutDev->PixelToLogic( rSize ); 682cdf0e10cSrcweir pOutDev->SetMapMode( aOldMap ); 683cdf0e10cSrcweir } 684cdf0e10cSrcweir else 685cdf0e10cSrcweir aRetSize = OutputDevice::LogicToLogic( rSize, pGraphic->GetPrefMapMode(), aMapMM100 ); 686cdf0e10cSrcweir return aRetSize; 687cdf0e10cSrcweir } 688cdf0e10cSrcweir /* -----------------28.10.98 15:57------------------- 689cdf0e10cSrcweir * 690cdf0e10cSrcweir * --------------------------------------------------*/ 691cdf0e10cSrcweir String SvxNumberFormat::CreateRomanString( sal_uLong nNo, sal_Bool bUpper ) 692cdf0e10cSrcweir { 693cdf0e10cSrcweir nNo %= 4000; // mehr kann nicht dargestellt werden 694cdf0e10cSrcweir // i, ii, iii, iv, v, vi, vii, vii, viii, ix 695cdf0e10cSrcweir // (Dummy),1000,500,100,50,10,5,1 696cdf0e10cSrcweir const char *cRomanArr = bUpper 697cdf0e10cSrcweir ? "MDCLXVI--" // +2 Dummy-Eintraege !! 698cdf0e10cSrcweir : "mdclxvi--"; // +2 Dummy-Eintraege !! 699cdf0e10cSrcweir 700cdf0e10cSrcweir String sRet; 701cdf0e10cSrcweir sal_uInt16 nMask = 1000; 702cdf0e10cSrcweir while( nMask ) 703cdf0e10cSrcweir { 704cdf0e10cSrcweir sal_uInt8 nZahl = sal_uInt8(nNo / nMask); 705cdf0e10cSrcweir sal_uInt8 nDiff = 1; 706cdf0e10cSrcweir nNo %= nMask; 707cdf0e10cSrcweir 708cdf0e10cSrcweir if( 5 < nZahl ) 709cdf0e10cSrcweir { 710cdf0e10cSrcweir if( nZahl < 9 ) 711cdf0e10cSrcweir sRet += sal_Unicode(*(cRomanArr-1)); 712cdf0e10cSrcweir ++nDiff; 713cdf0e10cSrcweir nZahl -= 5; 714cdf0e10cSrcweir } 715cdf0e10cSrcweir switch( nZahl ) 716cdf0e10cSrcweir { 717cdf0e10cSrcweir case 3: { sRet += sal_Unicode(*cRomanArr); } 718cdf0e10cSrcweir case 2: { sRet += sal_Unicode(*cRomanArr); } 719cdf0e10cSrcweir case 1: { sRet += sal_Unicode(*cRomanArr); } 720cdf0e10cSrcweir break; 721cdf0e10cSrcweir 722cdf0e10cSrcweir case 4: { 723cdf0e10cSrcweir sRet += sal_Unicode(*cRomanArr); 724cdf0e10cSrcweir sRet += sal_Unicode(*(cRomanArr-nDiff)); 725cdf0e10cSrcweir } 726cdf0e10cSrcweir break; 727cdf0e10cSrcweir case 5: { sRet += sal_Unicode(*(cRomanArr-nDiff)); } 728cdf0e10cSrcweir break; 729cdf0e10cSrcweir } 730cdf0e10cSrcweir 731cdf0e10cSrcweir nMask /= 10; // zur naechsten Dekade 732cdf0e10cSrcweir cRomanArr += 2; 733cdf0e10cSrcweir } 734cdf0e10cSrcweir return sRet; 735cdf0e10cSrcweir } 736cdf0e10cSrcweir #ifdef OLD_NUMBER_FORMATTING 737cdf0e10cSrcweir void SvxNumberFormat::GetCharStr( sal_uLong nNo, String& rStr ) const 738cdf0e10cSrcweir { 739cdf0e10cSrcweir DBG_ASSERT( nNo, "0 ist eine ungueltige Nummer !!" ); 740cdf0e10cSrcweir 741cdf0e10cSrcweir const sal_uLong coDiff = 'Z' - 'A' +1; 742cdf0e10cSrcweir char cAdd = (SVX_NUM_CHARS_UPPER_LETTER == eNumType ? 'A' : 'a') - 1; 743cdf0e10cSrcweir sal_uLong nCalc; 744cdf0e10cSrcweir 745cdf0e10cSrcweir do { 746cdf0e10cSrcweir nCalc = nNo % coDiff; 747cdf0e10cSrcweir if( !nCalc ) 748cdf0e10cSrcweir nCalc = coDiff; 749cdf0e10cSrcweir rStr.Insert( sal_Unicode(cAdd + nCalc ), 0 ); 750cdf0e10cSrcweir nNo -= nCalc; 751cdf0e10cSrcweir if( nNo ) 752cdf0e10cSrcweir nNo /= coDiff; 753cdf0e10cSrcweir } while( nNo ); 754cdf0e10cSrcweir } 755cdf0e10cSrcweir 756cdf0e10cSrcweir void SvxNumberFormat::GetCharStrN( sal_uLong nNo, String& rStr ) const 757cdf0e10cSrcweir { 758cdf0e10cSrcweir DBG_ASSERT( nNo, "0 ist eine ungueltige Nummer !!" ); 759cdf0e10cSrcweir 760cdf0e10cSrcweir const sal_uLong coDiff = 'Z' - 'A' +1; 761cdf0e10cSrcweir char cChar = (char)(--nNo % coDiff); 762cdf0e10cSrcweir if( SVX_NUM_CHARS_UPPER_LETTER_N == eNumType ) 763cdf0e10cSrcweir cChar += 'A'; 764cdf0e10cSrcweir else 765cdf0e10cSrcweir cChar += 'a'; 766cdf0e10cSrcweir 767cdf0e10cSrcweir rStr.Fill( (sal_uInt16)(nNo / coDiff) + 1, sal_Unicode(cChar) ); 768cdf0e10cSrcweir } 769cdf0e10cSrcweir #endif //OLD_NUMBER_FORMATTING 770cdf0e10cSrcweir /* -----------------------------22.02.01 13:31-------------------------------- 771cdf0e10cSrcweir 772cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 773cdf0e10cSrcweir const String& SvxNumberFormat::GetCharFmtName()const 774cdf0e10cSrcweir { 775cdf0e10cSrcweir return sCharStyleName; 776cdf0e10cSrcweir } 777cdf0e10cSrcweir /* -----------------27.10.98 10:38------------------- 778cdf0e10cSrcweir * 779cdf0e10cSrcweir * --------------------------------------------------*/ 780cdf0e10cSrcweir sal_Int32 SvxNumRule::nRefCount = 0; 781cdf0e10cSrcweir static SvxNumberFormat* pStdNumFmt = 0; 782cdf0e10cSrcweir static SvxNumberFormat* pStdOutlineNumFmt = 0; 783cdf0e10cSrcweir // --> OD 2008-02-11 #newlistlevelattrs# 784cdf0e10cSrcweir SvxNumRule::SvxNumRule( sal_uLong nFeatures, 785cdf0e10cSrcweir sal_uInt16 nLevels, 786cdf0e10cSrcweir sal_Bool bCont, 787cdf0e10cSrcweir SvxNumRuleType eType, 788cdf0e10cSrcweir SvxNumberFormat::SvxNumPositionAndSpaceMode 789cdf0e10cSrcweir eDefaultNumberFormatPositionAndSpaceMode ) 790cdf0e10cSrcweir : nLevelCount(nLevels), 791cdf0e10cSrcweir nFeatureFlags(nFeatures), 792cdf0e10cSrcweir eNumberingType(eType), 793cdf0e10cSrcweir bContinuousNumbering(bCont) 794cdf0e10cSrcweir { 795cdf0e10cSrcweir ++nRefCount; 796cdf0e10cSrcweir LanguageType eLang = Application::GetSettings().GetLanguage(); 797cdf0e10cSrcweir aLocale = SvxCreateLocale(eLang); 798cdf0e10cSrcweir for(sal_uInt16 i = 0; i < SVX_MAX_NUM; i++) 799cdf0e10cSrcweir { 800cdf0e10cSrcweir if(i < nLevels) 801cdf0e10cSrcweir { 802cdf0e10cSrcweir aFmts[i] = new SvxNumberFormat(SVX_NUM_CHARS_UPPER_LETTER); 803cdf0e10cSrcweir //daran wird zwischen writer und draw unterschieden 804cdf0e10cSrcweir if(nFeatures & NUM_CONTINUOUS) 805cdf0e10cSrcweir { 806cdf0e10cSrcweir // --> OD 2008-02-11 #newlistlevelattrs# 807cdf0e10cSrcweir if ( eDefaultNumberFormatPositionAndSpaceMode == 808cdf0e10cSrcweir SvxNumberFormat::LABEL_WIDTH_AND_POSITION ) 809cdf0e10cSrcweir { 810cdf0e10cSrcweir aFmts[i]->SetLSpace( MM100_TO_TWIP(DEF_WRITER_LSPACE) ); 811cdf0e10cSrcweir aFmts[i]->SetAbsLSpace( MM100_TO_TWIP(DEF_WRITER_LSPACE * (i+1)) ); 812cdf0e10cSrcweir aFmts[i]->SetFirstLineOffset(MM100_TO_TWIP(-DEF_WRITER_LSPACE)); 813cdf0e10cSrcweir } 814cdf0e10cSrcweir else if ( eDefaultNumberFormatPositionAndSpaceMode == 815cdf0e10cSrcweir SvxNumberFormat::LABEL_ALIGNMENT ) 816cdf0e10cSrcweir { 817cdf0e10cSrcweir // first line indent of general numbering in inch: -0,25 inch 818cdf0e10cSrcweir const long cFirstLineIndent = -1440/4; 819cdf0e10cSrcweir // indent values of general numbering in inch: 820cdf0e10cSrcweir // 0,5 0,75 1,0 1,25 1,5 821cdf0e10cSrcweir // 1,75 2,0 2,25 2,5 2,75 822cdf0e10cSrcweir const long cIndentAt = 1440/4; 823cdf0e10cSrcweir aFmts[i]->SetPositionAndSpaceMode( SvxNumberFormat::LABEL_ALIGNMENT ); 824cdf0e10cSrcweir aFmts[i]->SetLabelFollowedBy( SvxNumberFormat::LISTTAB ); 825cdf0e10cSrcweir aFmts[i]->SetListtabPos( cIndentAt * (i+2) ); 826cdf0e10cSrcweir aFmts[i]->SetFirstLineIndent( cFirstLineIndent ); 827cdf0e10cSrcweir aFmts[i]->SetIndentAt( cIndentAt * (i+2) ); 828cdf0e10cSrcweir } 829cdf0e10cSrcweir // <-- 830cdf0e10cSrcweir } 831cdf0e10cSrcweir else 832cdf0e10cSrcweir { 833cdf0e10cSrcweir aFmts[i]->SetLSpace( DEF_DRAW_LSPACE ); 834cdf0e10cSrcweir aFmts[i]->SetAbsLSpace( DEF_DRAW_LSPACE * (i) ); 835cdf0e10cSrcweir } 836cdf0e10cSrcweir } 837cdf0e10cSrcweir else 838cdf0e10cSrcweir aFmts[i] = 0; 839cdf0e10cSrcweir aFmtsSet[i] = sal_False; 840cdf0e10cSrcweir } 841cdf0e10cSrcweir } 842cdf0e10cSrcweir /* -----------------27.10.98 10:41------------------- 843cdf0e10cSrcweir * 844cdf0e10cSrcweir * --------------------------------------------------*/ 845cdf0e10cSrcweir SvxNumRule::SvxNumRule(const SvxNumRule& rCopy) 846cdf0e10cSrcweir { 847cdf0e10cSrcweir ++nRefCount; 848cdf0e10cSrcweir aLocale = rCopy.aLocale; 849cdf0e10cSrcweir nLevelCount = rCopy.nLevelCount ; 850cdf0e10cSrcweir nFeatureFlags = rCopy.nFeatureFlags ; 851cdf0e10cSrcweir bContinuousNumbering = rCopy.bContinuousNumbering; 852cdf0e10cSrcweir eNumberingType = rCopy.eNumberingType; 853cdf0e10cSrcweir memset( aFmts, 0, sizeof( aFmts )); 854cdf0e10cSrcweir for(sal_uInt16 i = 0; i < SVX_MAX_NUM; i++) 855cdf0e10cSrcweir { 856cdf0e10cSrcweir if(rCopy.aFmts[i]) 857cdf0e10cSrcweir aFmts[i] = new SvxNumberFormat(*rCopy.aFmts[i]); 858cdf0e10cSrcweir else 859cdf0e10cSrcweir aFmts[i] = 0; 860cdf0e10cSrcweir aFmtsSet[i] = rCopy.aFmtsSet[i]; 861cdf0e10cSrcweir } 862cdf0e10cSrcweir } 863cdf0e10cSrcweir /* -----------------08.12.98 11:07------------------- 864cdf0e10cSrcweir * 865cdf0e10cSrcweir * --------------------------------------------------*/ 866cdf0e10cSrcweir SvxNumRule::SvxNumRule(SvStream &rStream) 867cdf0e10cSrcweir { 868cdf0e10cSrcweir ++nRefCount; 869cdf0e10cSrcweir LanguageType eLang = Application::GetSettings().GetLanguage(); 870cdf0e10cSrcweir aLocale = SvxCreateLocale(eLang); 871cdf0e10cSrcweir sal_uInt16 nVersion; 872cdf0e10cSrcweir sal_uInt16 nTemp; 873cdf0e10cSrcweir rStream >> nVersion; 874cdf0e10cSrcweir rStream >> nLevelCount; 875cdf0e10cSrcweir rStream >> nTemp; 876cdf0e10cSrcweir nFeatureFlags = nTemp; 877cdf0e10cSrcweir rStream >> nTemp; 878cdf0e10cSrcweir bContinuousNumbering = (sal_Bool)nTemp; 879cdf0e10cSrcweir rStream >> nTemp; 880cdf0e10cSrcweir eNumberingType = (SvxNumRuleType)nTemp; 881cdf0e10cSrcweir memset( aFmts, 0, sizeof( aFmts )); 882cdf0e10cSrcweir 883cdf0e10cSrcweir for(sal_uInt16 i = 0; i < SVX_MAX_NUM; i++) 884cdf0e10cSrcweir { 885cdf0e10cSrcweir sal_uInt16 nSet; 886cdf0e10cSrcweir rStream >> nSet; 887cdf0e10cSrcweir if(nSet) 888cdf0e10cSrcweir aFmts[i] = new SvxNumberFormat(rStream); 889cdf0e10cSrcweir else 890cdf0e10cSrcweir aFmts[i] = 0; 891cdf0e10cSrcweir aFmtsSet[i] = aFmts[i] ? sal_True : sal_False; 892cdf0e10cSrcweir } 893cdf0e10cSrcweir if(NUMITEM_VERSION_02 <= nVersion) 894cdf0e10cSrcweir { 895cdf0e10cSrcweir sal_uInt16 nShort; 896cdf0e10cSrcweir rStream >> nShort; 897cdf0e10cSrcweir nFeatureFlags = nShort; 898cdf0e10cSrcweir } 899cdf0e10cSrcweir } 900cdf0e10cSrcweir 901cdf0e10cSrcweir /* -----------------08.12.98 11:07------------------- 902cdf0e10cSrcweir * 903cdf0e10cSrcweir * --------------------------------------------------*/ 904cdf0e10cSrcweir SvStream& SvxNumRule::Store(SvStream &rStream) 905cdf0e10cSrcweir { 906cdf0e10cSrcweir rStream<<(sal_uInt16)NUMITEM_VERSION_03; 907cdf0e10cSrcweir rStream<<nLevelCount; 908cdf0e10cSrcweir //first save of nFeatureFlags for old versions 909cdf0e10cSrcweir rStream<<(sal_uInt16)nFeatureFlags; 910cdf0e10cSrcweir rStream<<(sal_uInt16)bContinuousNumbering; 911cdf0e10cSrcweir rStream<<(sal_uInt16)eNumberingType; 912cdf0e10cSrcweir 913cdf0e10cSrcweir FontToSubsFontConverter pConverter = 0; 914cdf0e10cSrcweir sal_Bool bConvertBulletFont = rStream.GetVersion() <= SOFFICE_FILEFORMAT_50; 915cdf0e10cSrcweir for(sal_uInt16 i = 0; i < SVX_MAX_NUM; i++) 916cdf0e10cSrcweir { 917cdf0e10cSrcweir if(aFmts[i]) 918cdf0e10cSrcweir { 919cdf0e10cSrcweir rStream << sal_uInt16(1); 920cdf0e10cSrcweir if(bConvertBulletFont && aFmts[i]->GetBulletFont()) 921cdf0e10cSrcweir { 922cdf0e10cSrcweir if(!pConverter) 923cdf0e10cSrcweir pConverter = 924cdf0e10cSrcweir CreateFontToSubsFontConverter(aFmts[i]->GetBulletFont()->GetName(), 925cdf0e10cSrcweir FONTTOSUBSFONT_EXPORT|FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS); 926cdf0e10cSrcweir } 927cdf0e10cSrcweir aFmts[i]->Store(rStream, pConverter); 928cdf0e10cSrcweir } 929cdf0e10cSrcweir else 930cdf0e10cSrcweir rStream << sal_uInt16(0); 931cdf0e10cSrcweir } 932cdf0e10cSrcweir //second save of nFeatureFlags for new versions 933cdf0e10cSrcweir rStream<<(sal_uInt16)nFeatureFlags; 934cdf0e10cSrcweir if(pConverter) 935cdf0e10cSrcweir DestroyFontToSubsFontConverter(pConverter); 936cdf0e10cSrcweir 937cdf0e10cSrcweir return rStream; 938cdf0e10cSrcweir } 939cdf0e10cSrcweir 940cdf0e10cSrcweir /* -----------------27.10.98 10:41------------------- 941cdf0e10cSrcweir * 942cdf0e10cSrcweir * --------------------------------------------------*/ 943cdf0e10cSrcweir SvxNumRule::~SvxNumRule() 944cdf0e10cSrcweir { 945cdf0e10cSrcweir for(sal_uInt16 i = 0; i < SVX_MAX_NUM; i++) 946cdf0e10cSrcweir delete aFmts[i]; 947cdf0e10cSrcweir if(!--nRefCount) 948cdf0e10cSrcweir { 949cdf0e10cSrcweir DELETEZ(pStdNumFmt); 950cdf0e10cSrcweir DELETEZ(pStdOutlineNumFmt); 951cdf0e10cSrcweir } 952cdf0e10cSrcweir } 953cdf0e10cSrcweir /* -----------------29.10.98 16:07------------------- 954cdf0e10cSrcweir * 955cdf0e10cSrcweir * --------------------------------------------------*/ 956cdf0e10cSrcweir SvxNumRule& SvxNumRule::operator=( const SvxNumRule& rCopy ) 957cdf0e10cSrcweir { 958cdf0e10cSrcweir nLevelCount = rCopy.nLevelCount; 959cdf0e10cSrcweir nFeatureFlags = rCopy.nFeatureFlags; 960cdf0e10cSrcweir bContinuousNumbering = rCopy.bContinuousNumbering; 961cdf0e10cSrcweir eNumberingType = rCopy.eNumberingType; 962cdf0e10cSrcweir for(sal_uInt16 i = 0; i < SVX_MAX_NUM; i++) 963cdf0e10cSrcweir { 964cdf0e10cSrcweir delete aFmts[i]; 965cdf0e10cSrcweir if(rCopy.aFmts[i]) 966cdf0e10cSrcweir aFmts[i] = new SvxNumberFormat(*rCopy.aFmts[i]); 967cdf0e10cSrcweir else 968cdf0e10cSrcweir aFmts[i] = 0; 969cdf0e10cSrcweir aFmtsSet[i] = rCopy.aFmtsSet[i]; 970cdf0e10cSrcweir } 971cdf0e10cSrcweir return *this; 972cdf0e10cSrcweir } 973cdf0e10cSrcweir /* -----------------27.10.98 10:41------------------- 974cdf0e10cSrcweir * 975cdf0e10cSrcweir * --------------------------------------------------*/ 976cdf0e10cSrcweir int SvxNumRule::operator==( const SvxNumRule& rCopy) const 977cdf0e10cSrcweir { 978cdf0e10cSrcweir if(nLevelCount != rCopy.nLevelCount || 979cdf0e10cSrcweir nFeatureFlags != rCopy.nFeatureFlags || 980cdf0e10cSrcweir bContinuousNumbering != rCopy.bContinuousNumbering || 981cdf0e10cSrcweir eNumberingType != rCopy.eNumberingType) 982cdf0e10cSrcweir return sal_False; 983cdf0e10cSrcweir for(sal_uInt16 i = 0; i < nLevelCount; i++) 984cdf0e10cSrcweir { 985cdf0e10cSrcweir if ( 986cdf0e10cSrcweir (aFmtsSet[i] != rCopy.aFmtsSet[i]) || 987cdf0e10cSrcweir (!aFmts[i] && rCopy.aFmts[i]) || 988cdf0e10cSrcweir (aFmts[i] && !rCopy.aFmts[i]) || 989cdf0e10cSrcweir (aFmts[i] && *aFmts[i] != *rCopy.aFmts[i]) 990cdf0e10cSrcweir ) 991cdf0e10cSrcweir { 992cdf0e10cSrcweir return sal_False; 993cdf0e10cSrcweir } 994cdf0e10cSrcweir } 995cdf0e10cSrcweir return sal_True; 996cdf0e10cSrcweir } 997cdf0e10cSrcweir /* -----------------27.10.98 10:41------------------- 998cdf0e10cSrcweir * 999cdf0e10cSrcweir * --------------------------------------------------*/ 1000cdf0e10cSrcweir const SvxNumberFormat* SvxNumRule::Get(sal_uInt16 nLevel)const 1001cdf0e10cSrcweir { 1002cdf0e10cSrcweir DBG_ASSERT(nLevel < SVX_MAX_NUM, "falsches Level" ); 1003cdf0e10cSrcweir if( nLevel < SVX_MAX_NUM ) 1004cdf0e10cSrcweir return aFmtsSet[nLevel] ? aFmts[nLevel] : 0; 1005cdf0e10cSrcweir else 1006cdf0e10cSrcweir return 0; 1007cdf0e10cSrcweir } 1008cdf0e10cSrcweir /* -----------------02.11.98 09:10------------------- 1009cdf0e10cSrcweir * 1010cdf0e10cSrcweir * --------------------------------------------------*/ 1011cdf0e10cSrcweir const SvxNumberFormat& SvxNumRule::GetLevel(sal_uInt16 nLevel)const 1012cdf0e10cSrcweir { 1013cdf0e10cSrcweir if(!pStdNumFmt) 1014cdf0e10cSrcweir { 1015cdf0e10cSrcweir pStdNumFmt = new SvxNumberFormat(SVX_NUM_ARABIC); 1016cdf0e10cSrcweir pStdOutlineNumFmt = new SvxNumberFormat(SVX_NUM_NUMBER_NONE); 1017cdf0e10cSrcweir } 1018cdf0e10cSrcweir 1019cdf0e10cSrcweir DBG_ASSERT(nLevel < SVX_MAX_NUM, "falsches Level" ); 1020cdf0e10cSrcweir 1021cdf0e10cSrcweir return ( ( nLevel < SVX_MAX_NUM ) && aFmts[nLevel] ) ? 1022cdf0e10cSrcweir *aFmts[nLevel] : eNumberingType == SVX_RULETYPE_NUMBERING ? 1023cdf0e10cSrcweir *pStdNumFmt : *pStdOutlineNumFmt; 1024cdf0e10cSrcweir } 1025cdf0e10cSrcweir 1026cdf0e10cSrcweir /* -----------------29.10.98 09:08------------------- 1027cdf0e10cSrcweir * 1028cdf0e10cSrcweir * --------------------------------------------------*/ 1029cdf0e10cSrcweir void SvxNumRule::SetLevel( sal_uInt16 i, const SvxNumberFormat& rNumFmt, sal_Bool bIsValid ) 1030cdf0e10cSrcweir { 1031cdf0e10cSrcweir DBG_ASSERT(i < SVX_MAX_NUM, "falsches Level" ); 1032cdf0e10cSrcweir 1033cdf0e10cSrcweir if( (i < SVX_MAX_NUM) && (!aFmtsSet[i] || !(rNumFmt == *Get( i ))) ) 1034cdf0e10cSrcweir { 1035cdf0e10cSrcweir delete aFmts[ i ]; 1036cdf0e10cSrcweir aFmts[ i ] = new SvxNumberFormat( rNumFmt ); 1037cdf0e10cSrcweir aFmtsSet[i] = bIsValid; 1038cdf0e10cSrcweir // bInvalidRuleFlag = sal_True; 1039cdf0e10cSrcweir } 1040cdf0e10cSrcweir } 1041cdf0e10cSrcweir /* -----------------30.10.98 12:44------------------- 1042cdf0e10cSrcweir * 1043cdf0e10cSrcweir * --------------------------------------------------*/ 1044cdf0e10cSrcweir void SvxNumRule::SetLevel(sal_uInt16 nLevel, const SvxNumberFormat* pFmt) 1045cdf0e10cSrcweir { 1046cdf0e10cSrcweir DBG_ASSERT(nLevel < SVX_MAX_NUM, "falsches Level" ); 1047cdf0e10cSrcweir 1048cdf0e10cSrcweir if( nLevel < SVX_MAX_NUM ) 1049cdf0e10cSrcweir { 1050cdf0e10cSrcweir aFmtsSet[nLevel] = 0 != pFmt; 1051cdf0e10cSrcweir if(pFmt) 1052cdf0e10cSrcweir SetLevel(nLevel, *pFmt); 1053cdf0e10cSrcweir else 1054cdf0e10cSrcweir { 1055cdf0e10cSrcweir delete aFmts[nLevel]; 1056cdf0e10cSrcweir aFmts[nLevel] = 0; 1057cdf0e10cSrcweir } 1058cdf0e10cSrcweir } 1059cdf0e10cSrcweir } 1060cdf0e10cSrcweir /* -----------------28.10.98 15:38------------------- 1061cdf0e10cSrcweir * 1062cdf0e10cSrcweir * --------------------------------------------------*/ 1063cdf0e10cSrcweir String SvxNumRule::MakeNumString( const SvxNodeNum& rNum, sal_Bool bInclStrings ) const 1064cdf0e10cSrcweir { 1065cdf0e10cSrcweir String aStr; 1066cdf0e10cSrcweir if( SVX_NO_NUM > rNum.GetLevel() && !( SVX_NO_NUMLEVEL & rNum.GetLevel() ) ) 1067cdf0e10cSrcweir { 1068cdf0e10cSrcweir const SvxNumberFormat& rMyNFmt = GetLevel( rNum.GetLevel() ); 1069cdf0e10cSrcweir if( SVX_NUM_NUMBER_NONE != rMyNFmt.GetNumberingType() ) 1070cdf0e10cSrcweir { 1071cdf0e10cSrcweir sal_uInt8 i = rNum.GetLevel(); 1072cdf0e10cSrcweir 1073cdf0e10cSrcweir if( !IsContinuousNumbering() && 1074cdf0e10cSrcweir 1 < rMyNFmt.GetIncludeUpperLevels() ) // nur der eigene Level ? 1075cdf0e10cSrcweir { 1076cdf0e10cSrcweir sal_uInt8 n = rMyNFmt.GetIncludeUpperLevels(); 1077cdf0e10cSrcweir if( 1 < n ) 1078cdf0e10cSrcweir { 1079cdf0e10cSrcweir if( i+1 >= n ) 1080cdf0e10cSrcweir i -= n - 1; 1081cdf0e10cSrcweir else 1082cdf0e10cSrcweir i = 0; 1083cdf0e10cSrcweir } 1084cdf0e10cSrcweir } 1085cdf0e10cSrcweir 1086cdf0e10cSrcweir for( ; i <= rNum.GetLevel(); ++i ) 1087cdf0e10cSrcweir { 1088cdf0e10cSrcweir const SvxNumberFormat& rNFmt = GetLevel( i ); 1089cdf0e10cSrcweir if( SVX_NUM_NUMBER_NONE == rNFmt.GetNumberingType() ) 1090cdf0e10cSrcweir { 1091cdf0e10cSrcweir // Soll aus 1.1.1 --> 2. NoNum --> 1..1 oder 1.1 ?? 1092cdf0e10cSrcweir // if( i != rNum.nMyLevel ) 1093cdf0e10cSrcweir // aStr += aDotStr; 1094cdf0e10cSrcweir continue; 1095cdf0e10cSrcweir } 1096cdf0e10cSrcweir 1097cdf0e10cSrcweir sal_Bool bDot = sal_True; 1098cdf0e10cSrcweir if( rNum.GetLevelVal()[ i ] ) 1099cdf0e10cSrcweir { 1100cdf0e10cSrcweir if(SVX_NUM_BITMAP != rNFmt.GetNumberingType()) 1101cdf0e10cSrcweir aStr += rNFmt.GetNumStr( rNum.GetLevelVal()[ i ], aLocale ); 1102cdf0e10cSrcweir else 1103cdf0e10cSrcweir bDot = sal_False; 1104cdf0e10cSrcweir } 1105cdf0e10cSrcweir else 1106cdf0e10cSrcweir aStr += sal_Unicode('0'); // alle 0-Level sind eine 0 1107cdf0e10cSrcweir if( i != rNum.GetLevel() && bDot) 1108cdf0e10cSrcweir aStr += sal_Unicode('.'); 1109cdf0e10cSrcweir } 1110cdf0e10cSrcweir } 1111cdf0e10cSrcweir 1112cdf0e10cSrcweir if( bInclStrings ) 1113cdf0e10cSrcweir { 1114cdf0e10cSrcweir aStr.Insert( rMyNFmt.GetPrefix(), 0 ); 1115cdf0e10cSrcweir aStr += rMyNFmt.GetSuffix(); 1116cdf0e10cSrcweir } 1117cdf0e10cSrcweir } 1118cdf0e10cSrcweir return aStr; 1119cdf0e10cSrcweir } 1120cdf0e10cSrcweir /* -----------------18.08.99 10:18------------------- 1121cdf0e10cSrcweir Description: changes linked to embedded bitmaps 1122cdf0e10cSrcweir --------------------------------------------------*/ 1123cdf0e10cSrcweir sal_Bool SvxNumRule::UnLinkGraphics() 1124cdf0e10cSrcweir { 1125cdf0e10cSrcweir sal_Bool bRet = sal_False; 1126cdf0e10cSrcweir for(sal_uInt16 i = 0; i < GetLevelCount(); i++) 1127cdf0e10cSrcweir { 1128cdf0e10cSrcweir SvxNumberFormat aFmt(GetLevel(i)); 1129cdf0e10cSrcweir const SvxBrushItem* pBrush = aFmt.GetBrush(); 1130cdf0e10cSrcweir const String* pLinkStr; 1131cdf0e10cSrcweir const Graphic* pGraphic; 1132cdf0e10cSrcweir if(SVX_NUM_BITMAP == aFmt.GetNumberingType()) 1133cdf0e10cSrcweir { 1134cdf0e10cSrcweir if(pBrush && 1135cdf0e10cSrcweir 0 != (pLinkStr = pBrush->GetGraphicLink()) && 1136cdf0e10cSrcweir pLinkStr->Len() && 1137cdf0e10cSrcweir 0 !=(pGraphic = pBrush->GetGraphic())) 1138cdf0e10cSrcweir { 1139cdf0e10cSrcweir SvxBrushItem aTempItem(*pBrush); 1140cdf0e10cSrcweir aTempItem.SetGraphicLink( String()); 1141cdf0e10cSrcweir aTempItem.SetGraphic(*pGraphic); 1142cdf0e10cSrcweir sal_Int16 eOrient = aFmt.GetVertOrient(); 1143cdf0e10cSrcweir aFmt.SetGraphicBrush( &aTempItem, &aFmt.GetGraphicSize(), &eOrient ); 1144cdf0e10cSrcweir bRet = sal_True; 1145cdf0e10cSrcweir } 1146cdf0e10cSrcweir } 1147cdf0e10cSrcweir else if((SVX_NUM_BITMAP|LINK_TOKEN) == aFmt.GetNumberingType()) 1148cdf0e10cSrcweir aFmt.SetNumberingType(SVX_NUM_BITMAP); 1149cdf0e10cSrcweir SetLevel(i, aFmt); 1150cdf0e10cSrcweir } 1151cdf0e10cSrcweir return bRet; 1152cdf0e10cSrcweir } 1153cdf0e10cSrcweir 1154cdf0e10cSrcweir /* -----------------27.10.98 10:41------------------- 1155cdf0e10cSrcweir * 1156cdf0e10cSrcweir * --------------------------------------------------*/ 1157cdf0e10cSrcweir SvxNumBulletItem::SvxNumBulletItem(SvxNumRule& rRule) : 1158cdf0e10cSrcweir SfxPoolItem(SID_ATTR_NUMBERING_RULE), 1159cdf0e10cSrcweir pNumRule(new SvxNumRule(rRule)) 1160cdf0e10cSrcweir { 1161cdf0e10cSrcweir } 1162cdf0e10cSrcweir 1163cdf0e10cSrcweir /*-----------------23.11.98 10:36------------------- 1164cdf0e10cSrcweir MT: Das sind ja sehr sinnige Kommentare... 1165cdf0e10cSrcweir --------------------------------------------------*/ 1166cdf0e10cSrcweir SvxNumBulletItem::SvxNumBulletItem(SvxNumRule& rRule, sal_uInt16 _nWhich ) : 1167cdf0e10cSrcweir SfxPoolItem(_nWhich), 1168cdf0e10cSrcweir pNumRule(new SvxNumRule(rRule)) 1169cdf0e10cSrcweir { 1170cdf0e10cSrcweir } 1171cdf0e10cSrcweir 1172cdf0e10cSrcweir SfxPoolItem* SvxNumBulletItem::Create(SvStream &s, sal_uInt16 n) const 1173cdf0e10cSrcweir { 1174cdf0e10cSrcweir return SfxPoolItem::Create(s, n ); 1175cdf0e10cSrcweir } 1176cdf0e10cSrcweir 1177cdf0e10cSrcweir /* -----------------27.10.98 10:41------------------- 1178cdf0e10cSrcweir * 1179cdf0e10cSrcweir * --------------------------------------------------*/ 1180cdf0e10cSrcweir SvxNumBulletItem::SvxNumBulletItem(const SvxNumBulletItem& rCopy) : 1181cdf0e10cSrcweir SfxPoolItem(rCopy.Which()) 1182cdf0e10cSrcweir { 1183cdf0e10cSrcweir pNumRule = new SvxNumRule(*rCopy.pNumRule); 1184cdf0e10cSrcweir } 1185cdf0e10cSrcweir /* -----------------27.10.98 10:41------------------- 1186cdf0e10cSrcweir * 1187cdf0e10cSrcweir * --------------------------------------------------*/ 1188cdf0e10cSrcweir SvxNumBulletItem::~SvxNumBulletItem() 1189cdf0e10cSrcweir { 1190cdf0e10cSrcweir delete pNumRule; 1191cdf0e10cSrcweir } 1192cdf0e10cSrcweir 1193cdf0e10cSrcweir /* -----------------27.10.98 10:41------------------- 1194cdf0e10cSrcweir * 1195cdf0e10cSrcweir * --------------------------------------------------*/ 1196cdf0e10cSrcweir int SvxNumBulletItem::operator==( const SfxPoolItem& rCopy) const 1197cdf0e10cSrcweir { 1198cdf0e10cSrcweir return *pNumRule == *((SvxNumBulletItem&)rCopy).pNumRule; 1199cdf0e10cSrcweir } 1200cdf0e10cSrcweir /* -----------------27.10.98 10:41------------------- 1201cdf0e10cSrcweir * 1202cdf0e10cSrcweir * --------------------------------------------------*/ 1203cdf0e10cSrcweir SfxPoolItem* SvxNumBulletItem::Clone( SfxItemPool * ) const 1204cdf0e10cSrcweir { 1205cdf0e10cSrcweir return new SvxNumBulletItem(*this); 1206cdf0e10cSrcweir } 1207cdf0e10cSrcweir /* -----------------08.12.98 10:43------------------- 1208cdf0e10cSrcweir * 1209cdf0e10cSrcweir * --------------------------------------------------*/ 1210cdf0e10cSrcweir sal_uInt16 SvxNumBulletItem::GetVersion( sal_uInt16 /*nFileVersion*/ ) const 1211cdf0e10cSrcweir { 1212cdf0e10cSrcweir return NUMITEM_VERSION_03; 1213cdf0e10cSrcweir } 1214cdf0e10cSrcweir /* -----------------08.12.98 10:43------------------- 1215cdf0e10cSrcweir * 1216cdf0e10cSrcweir * --------------------------------------------------*/ 1217cdf0e10cSrcweir SvStream& SvxNumBulletItem::Store(SvStream &rStream, sal_uInt16 /*nItemVersion*/ )const 1218cdf0e10cSrcweir { 1219cdf0e10cSrcweir pNumRule->Store(rStream); 1220cdf0e10cSrcweir return rStream; 1221cdf0e10cSrcweir } 1222cdf0e10cSrcweir 1223cdf0e10cSrcweir /* -----------------08.12.98 10:43------------------- 1224cdf0e10cSrcweir * 1225cdf0e10cSrcweir * --------------------------------------------------*/ 1226cdf0e10cSrcweir 1227cdf0e10cSrcweir sal_Bool SvxNumBulletItem::QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/ ) const 1228cdf0e10cSrcweir { 1229cdf0e10cSrcweir rVal <<= SvxCreateNumRule( pNumRule ); 1230cdf0e10cSrcweir return sal_True; 1231cdf0e10cSrcweir } 1232cdf0e10cSrcweir 1233cdf0e10cSrcweir sal_Bool SvxNumBulletItem::PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/ ) 1234cdf0e10cSrcweir { 1235cdf0e10cSrcweir uno::Reference< container::XIndexReplace > xRule; 1236cdf0e10cSrcweir if( rVal >>= xRule ) 1237cdf0e10cSrcweir { 1238cdf0e10cSrcweir try 1239cdf0e10cSrcweir { 1240cdf0e10cSrcweir SvxNumRule* pNewRule = new SvxNumRule( SvxGetNumRule( xRule ) ); 1241cdf0e10cSrcweir if( pNewRule->GetLevelCount() != pNumRule->GetLevelCount() || 1242cdf0e10cSrcweir pNewRule->GetNumRuleType() != pNumRule->GetNumRuleType() ) 1243cdf0e10cSrcweir { 1244cdf0e10cSrcweir SvxNumRule* pConverted = SvxConvertNumRule( pNewRule, pNumRule->GetLevelCount(), pNumRule->GetNumRuleType() ); 1245cdf0e10cSrcweir delete pNewRule; 1246cdf0e10cSrcweir pNewRule = pConverted; 1247cdf0e10cSrcweir } 1248cdf0e10cSrcweir delete pNumRule; 1249cdf0e10cSrcweir pNumRule = pNewRule; 1250cdf0e10cSrcweir return sal_True; 1251cdf0e10cSrcweir } 1252cdf0e10cSrcweir catch(lang::IllegalArgumentException&) 1253cdf0e10cSrcweir { 1254cdf0e10cSrcweir } 1255cdf0e10cSrcweir } 1256cdf0e10cSrcweir return sal_False; 1257cdf0e10cSrcweir } 1258cdf0e10cSrcweir 1259cdf0e10cSrcweir /* -----------------08.12.98 10:43------------------- 1260cdf0e10cSrcweir * 1261cdf0e10cSrcweir * --------------------------------------------------*/ 1262cdf0e10cSrcweir SvxNumRule* SvxConvertNumRule( const SvxNumRule* pRule, sal_uInt16 nLevels, SvxNumRuleType eType ) 1263cdf0e10cSrcweir { 1264cdf0e10cSrcweir const sal_uInt16 nSrcLevels = pRule->GetLevelCount(); 1265cdf0e10cSrcweir SvxNumRule* pNewRule = new SvxNumRule( pRule->GetFeatureFlags(), nLevels, pRule->IsContinuousNumbering(), eType ); 1266cdf0e10cSrcweir 1267cdf0e10cSrcweir for( sal_uInt16 nLevel = 0; (nLevel < nLevels) && (nLevel < nSrcLevels); nLevel++ ) 1268cdf0e10cSrcweir pNewRule->SetLevel( nLevel, pRule->GetLevel( nLevel ) ); 1269cdf0e10cSrcweir 1270cdf0e10cSrcweir return pNewRule; 1271cdf0e10cSrcweir } 1272