diff options
author | Jens-Heiner Rechtien <hr@openoffice.org> | 2000-09-18 16:07:07 +0000 |
---|---|---|
committer | Jens-Heiner Rechtien <hr@openoffice.org> | 2000-09-18 16:07:07 +0000 |
commit | fd069bee7e57ad529c3c0974559fd2d84ec3151a (patch) | |
tree | ef2eddeefb786feaf966d6a1c0c291872c0ae420 /svx/source/items/numitem.cxx | |
parent | 04c1c754ab9d0ad07f2c5362d46597d13efe75c2 (diff) |
initial import
Diffstat (limited to 'svx/source/items/numitem.cxx')
-rw-r--r-- | svx/source/items/numitem.cxx | 886 |
1 files changed, 886 insertions, 0 deletions
diff --git a/svx/source/items/numitem.cxx b/svx/source/items/numitem.cxx new file mode 100644 index 000000000000..5c5c4c4635b7 --- /dev/null +++ b/svx/source/items/numitem.cxx @@ -0,0 +1,886 @@ +/************************************************************************* + * + * $RCSfile: numitem.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 17:01:21 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#pragma hdrstop +#include <numitem.hxx> + +#define ITEMID_BRUSH SID_ATTR_BRUSH +#ifndef _SVX_BRSHITEM_HXX //autogen +#include <brshitem.hxx> +#endif +#ifndef _SV_FONT_HXX //autogen +#include <vcl/font.hxx> +#endif +#ifndef _SVX_SVXIDS_HRC +#include <svxids.hrc> +#endif +#ifndef _SVX_NUMDEF_HXX +#include <numdef.hxx> +#endif +#ifndef _SV_GRAPH_HXX //autogen +#include <vcl/graph.hxx> +#endif +#ifndef _SV_WINDOW_HXX //autogen +#include <vcl/window.hxx> +#endif +#include <vcl/svapp.hxx> + +SvxNumberFormat SvxNumRule::aStdNumFmt(SVX_NUM_ARABIC); +SvxNumberFormat SvxNumRule::aStdOutlineNumFmt(SVX_NUM_NUMBER_NONE); + +#define MM100_TO_TWIP(MM100) ((MM100*72L+63L)/127L) + +#define DEF_WRITER_LSPACE 500 //Standardeinrueckung +#define DEF_DRAW_LSPACE 800 //Standardeinrueckung + +/* -----------------27.10.98 10:33------------------- + * + * --------------------------------------------------*/ +SvxNumberFormat::SvxNumberFormat(SvxExtNumType eType) : + eNumType(eType), + eNumAdjust(SVX_ADJUST_LEFT), + nInclUpperLevels(0), + nStart(1), + cBullet(SVX_DEF_BULLET), + nFirstLineOffset(0), + nAbsLSpace(0), + nLSpace(0), + nCharTextDistance(0), + pGraphicBrush(0), + eVertOrient(SVX_VERT_NONE), + nBulletRelSize(100), + nBulletColor(COL_BLACK), + pBulletFont(0), + bShowSymbol(TRUE) +{ +} +/* -----------------27.10.98 10:56------------------- + * + * --------------------------------------------------*/ +SvxNumberFormat::SvxNumberFormat(const SvxNumberFormat& rFormat) +{ + eNumType = rFormat.eNumType; + eNumAdjust = rFormat.eNumAdjust; + nInclUpperLevels = rFormat.nInclUpperLevels; + nStart = rFormat.nStart; + cBullet = rFormat.cBullet; + nFirstLineOffset = rFormat.nFirstLineOffset; + nAbsLSpace = rFormat.nAbsLSpace; + nLSpace = rFormat.nLSpace; + nCharTextDistance = rFormat.nCharTextDistance; + sPrefix = rFormat.sPrefix; + sSuffix = rFormat.sSuffix; + sCharStyleName = rFormat.sCharStyleName; + pGraphicBrush = rFormat.pGraphicBrush ? new SvxBrushItem(*rFormat.pGraphicBrush) : 0; + eVertOrient = rFormat.eVertOrient; + pBulletFont = rFormat.pBulletFont ? new Font(*rFormat.pBulletFont) : 0; + aGraphicSize = rFormat.aGraphicSize; + nBulletColor = rFormat.nBulletColor; + nBulletRelSize = rFormat.nBulletRelSize; + bShowSymbol = rFormat.bShowSymbol; +} +/* -----------------27.10.98 10:56------------------- + * + * --------------------------------------------------*/ +SvxNumberFormat::~SvxNumberFormat() +{ + delete pGraphicBrush; + delete pBulletFont; +} +/* -----------------08.12.98 11:14------------------- + * + * --------------------------------------------------*/ +SvxNumberFormat::SvxNumberFormat(SvStream &rStream) +{ + USHORT nVersion; + rStream >> nVersion; + + USHORT nUSHORT; + rStream >> nUSHORT; + eNumType = (SvxExtNumType )nUSHORT; + rStream >> nUSHORT; + eNumAdjust = (SvxAdjust)nUSHORT; + rStream >> nUSHORT; + nInclUpperLevels = (BYTE)nUSHORT; + rStream >> nUSHORT; + nStart = nUSHORT; + rStream >> nUSHORT; + cBullet = nUSHORT; + + short nShort; + rStream >> nShort; + nFirstLineOffset = nShort; + rStream >> nShort; + nAbsLSpace = nShort; + rStream >> nShort; + nLSpace = nShort; + + rStream >> nShort; + nCharTextDistance = nShort; + rtl_TextEncoding eEnc = gsl_getSystemTextEncoding(); + rStream.ReadByteString(sPrefix, eEnc); + rStream.ReadByteString(sSuffix, eEnc); + rStream.ReadByteString(sCharStyleName, eEnc); + rStream >> nUSHORT; + if(nUSHORT) + { + SvxBrushItem aHelper; + pGraphicBrush = (SvxBrushItem*) aHelper.Create( rStream, BRUSH_GRAPHIC_VERSION ); + } + else + pGraphicBrush = 0; + + rStream >> nUSHORT; + eVertOrient = (SvxFrameVertOrient)nUSHORT; + + rStream >> nUSHORT; + if(nUSHORT) + { + pBulletFont = new Font; + rStream >> *pBulletFont; + } + else + pBulletFont = 0; + rStream >> aGraphicSize; + + rStream >> nBulletColor; + rStream >> nUSHORT; + nBulletRelSize = nUSHORT; + rStream >> nUSHORT; + bShowSymbol = (BOOL)nUSHORT; + + if( nVersion < NUMITEM_VERSION_03 ) + cBullet = ByteString::ConvertToUnicode( cBullet, + pBulletFont ? pBulletFont->GetCharSet() + : RTL_TEXTENCODING_SYMBOL ); +} +/* -----------------08.12.98 11:14------------------- + * + * --------------------------------------------------*/ +SvStream& SvxNumberFormat::Store(SvStream &rStream) +{ + rStream << (USHORT)NUMITEM_VERSION_03; + + rStream << (USHORT)eNumType; + rStream << (USHORT)eNumAdjust; + rStream << (USHORT)nInclUpperLevels; + rStream << nStart; + rStream << (USHORT)cBullet; + + rStream << nFirstLineOffset; + rStream << nAbsLSpace; + rStream << nLSpace; + + rStream << nCharTextDistance; + rtl_TextEncoding eEnc = gsl_getSystemTextEncoding(); + rStream.WriteByteString(sPrefix, eEnc); + rStream.WriteByteString(sSuffix, eEnc); + rStream.WriteByteString(sCharStyleName, eEnc); + if(pGraphicBrush) + { + rStream << (USHORT)1; + + // #75113# in SD or SI force bullet itself to be stored, + // for that purpose throw away link when link and graphic + // are present, so Brush save is forced + if(pGraphicBrush->GetGraphicLink() && pGraphicBrush->GetGraphic()) + { + String aEmpty; + pGraphicBrush->SetGraphicLink(aEmpty); + } + + pGraphicBrush->Store(rStream, BRUSH_GRAPHIC_VERSION); + } + else + rStream << (USHORT)0; + + rStream << (USHORT)eVertOrient; + if(pBulletFont) + { + rStream << (USHORT)1; + rStream << *pBulletFont; + } + else + rStream << (USHORT)0; + rStream << aGraphicSize; + + rStream << nBulletColor; + rStream << nBulletRelSize; + rStream << (USHORT)bShowSymbol; + return rStream; +} + +/* -----------------27.10.98 10:56------------------- + * + * --------------------------------------------------*/ +BOOL SvxNumberFormat::operator==( const SvxNumberFormat& rFormat) const +{ + if( eNumType != rFormat.eNumType || + eNumAdjust != rFormat.eNumAdjust || + nInclUpperLevels != rFormat.nInclUpperLevels || + nStart != rFormat.nStart || + cBullet != rFormat.cBullet || + nFirstLineOffset != rFormat.nFirstLineOffset || + nAbsLSpace != rFormat.nAbsLSpace || + nLSpace != rFormat.nLSpace || + nCharTextDistance != rFormat.nCharTextDistance || + eVertOrient != rFormat.eVertOrient || + sPrefix != rFormat.sPrefix || + sSuffix != rFormat.sSuffix || + aGraphicSize != rFormat.aGraphicSize || + nBulletColor != rFormat.nBulletColor || + nBulletRelSize != rFormat.nBulletRelSize || + bShowSymbol != rFormat.bShowSymbol || + sCharStyleName != rFormat.sCharStyleName + ) + return FALSE; + if(pGraphicBrush && !rFormat.pGraphicBrush || + !pGraphicBrush && rFormat.pGraphicBrush || + pGraphicBrush && *pGraphicBrush != *rFormat.pGraphicBrush ) + return FALSE; + if(pBulletFont && !rFormat.pBulletFont || + !pBulletFont && rFormat.pBulletFont || + pBulletFont && *pBulletFont != *rFormat.pBulletFont) + return FALSE; + return TRUE; +} +/* -----------------28.10.98 09:53------------------- + * + * --------------------------------------------------*/ +void SvxNumberFormat::SetGraphicBrush( const SvxBrushItem* pBrushItem, + const Size* pSize, const SvxFrameVertOrient* pOrient) +{ + if(!pBrushItem) + { + delete pGraphicBrush; + pGraphicBrush = 0; + } + else if(!pGraphicBrush || pGraphicBrush && !(*pBrushItem == *pGraphicBrush)) + { + delete pGraphicBrush; + pGraphicBrush = (SvxBrushItem*)pBrushItem->Clone(); + } + + if(pOrient) + eVertOrient = *pOrient; + else + eVertOrient = SVX_VERT_NONE; + if(pSize) + aGraphicSize = *pSize; + else + aGraphicSize.Width() = aGraphicSize.Height() = 0; +} +/* -----------------28.10.98 09:59------------------- + * + * --------------------------------------------------*/ +void SvxNumberFormat::SetGraphic( const String& rName ) +{ + const String* pName; + if( pGraphicBrush && + 0 != (pName = pGraphicBrush->GetGraphicLink()) + && *pName == rName ) + return ; + + delete pGraphicBrush; + String sTmp; + pGraphicBrush = new SvxBrushItem( rName, sTmp, GPOS_AREA ); + pGraphicBrush->SetDoneLink( STATIC_LINK( this, SvxNumberFormat, GraphicArrived) ); + if( eVertOrient == SVX_VERT_NONE ) + eVertOrient = SVX_VERT_TOP; + + aGraphicSize.Width() = aGraphicSize.Height() = 0; +} +void SvxNumberFormat::SetBulletFont(const Font* pFont) +{ + delete pBulletFont; + pBulletFont = pFont ? new Font(*pFont): 0; +} + +/* -----------------28.10.98 10:03------------------- + * + * --------------------------------------------------*/ +IMPL_STATIC_LINK( SvxNumberFormat, GraphicArrived, void *, EMPTYARG ) +{ + // ggfs. die GrfSize setzen: + if( !pThis->aGraphicSize.Width() || !pThis->aGraphicSize.Height() ) + { + const Graphic* pGrf = pThis->pGraphicBrush->GetGraphic(); + if( pGrf ) + pThis->aGraphicSize = SvxNumberFormat::GetGraphicSizeMM100( pGrf ); + } + return 0; +} +/* -----------------28.10.98 10:38------------------- + * + * --------------------------------------------------*/ +Size SvxNumberFormat::GetGraphicSizeMM100(const Graphic* pGraphic) +{ + const MapMode aMapMM100( MAP_100TH_MM ); + const Size& rSize = pGraphic->GetPrefSize(); + Size aRetSize; + if ( pGraphic->GetPrefMapMode().GetMapUnit() == MAP_PIXEL ) + { + OutputDevice* pOutDev = Application::GetDefaultDevice(); + MapMode aOldMap( pOutDev->GetMapMode() ); + pOutDev->SetMapMode( aMapMM100 ); + aRetSize = pOutDev->PixelToLogic( rSize ); + pOutDev->SetMapMode( aOldMap ); + } + else + aRetSize = OutputDevice::LogicToLogic( rSize, pGraphic->GetPrefMapMode(), aMapMM100 ); + return aRetSize; +} +/* -----------------28.10.98 15:57------------------- + * + * --------------------------------------------------*/ +String SvxNumberFormat::CreateRomanString( ULONG nNo, BOOL bUpper ) +{ + nNo %= 4000; // mehr kann nicht dargestellt werden +// i, ii, iii, iv, v, vi, vii, vii, viii, ix +// (Dummy),1000,500,100,50,10,5,1 + char *cRomanArr = bUpper + ? "MDCLXVI--" // +2 Dummy-Eintraege !! + : "mdclxvi--"; // +2 Dummy-Eintraege !! + + String sRet; + USHORT nMask = 1000; + while( nMask ) + { + BYTE nZahl = BYTE(nNo / nMask); + BYTE nDiff = 1; + nNo %= nMask; + + if( 5 < nZahl ) + { + if( nZahl < 9 ) + sRet += sal_Unicode(*(cRomanArr-1)); + ++nDiff; + nZahl -= 5; + } + switch( nZahl ) + { + case 3: { sRet += sal_Unicode(*cRomanArr); } + case 2: { sRet += sal_Unicode(*cRomanArr); } + case 1: { sRet += sal_Unicode(*cRomanArr); } + break; + + case 4: { + sRet += sal_Unicode(*cRomanArr); + sRet += sal_Unicode(*(cRomanArr-nDiff)); + } + break; + case 5: { sRet += sal_Unicode(*(cRomanArr-nDiff)); } + break; + } + + nMask /= 10; // zur naechsten Dekade + cRomanArr += 2; + } + return sRet; +} + + +void SvxNumberFormat::GetCharStr( ULONG nNo, String& rStr ) const +{ + DBG_ASSERT( nNo, "0 ist eine ungueltige Nummer !!" ); + + const ULONG coDiff = 'Z' - 'A' +1; + char cAdd = (SVX_NUM_CHARS_UPPER_LETTER == eNumType ? 'A' : 'a') - 1; + ULONG nCalc; + + do { + nCalc = nNo % coDiff; + if( !nCalc ) + nCalc = coDiff; + rStr.Insert( sal_Unicode(cAdd + nCalc ), 0 ); + nNo -= nCalc; + if( nNo ) + nNo /= coDiff; + } while( nNo ); +} + +void SvxNumberFormat::GetCharStrN( ULONG nNo, String& rStr ) const +{ + DBG_ASSERT( nNo, "0 ist eine ungueltige Nummer !!" ); + + const ULONG coDiff = 'Z' - 'A' +1; + char cChar = (char)(--nNo % coDiff); + if( SVX_NUM_CHARS_UPPER_LETTER_N == eNumType ) + cChar += 'A'; + else + cChar += 'a'; + + rStr.Fill( (USHORT)(nNo / coDiff) + 1, sal_Unicode(cChar) ); +} + +/* -----------------28.10.98 15:56------------------- + * + * --------------------------------------------------*/ +String SvxNumberFormat::GetNumStr( ULONG nNo ) const +{ + String aTmpStr; + if(bShowSymbol) + { + if( nNo ) + { + switch( eNumType ) + { + case SVX_NUM_CHARS_UPPER_LETTER: + case SVX_NUM_CHARS_LOWER_LETTER: + GetCharStr( nNo, aTmpStr ); + break; + + case SVX_NUM_CHARS_UPPER_LETTER_N: + case SVX_NUM_CHARS_LOWER_LETTER_N: + GetCharStrN( nNo, aTmpStr ); + break; + + case SVX_NUM_ROMAN_UPPER: + case SVX_NUM_ROMAN_LOWER: + aTmpStr += CreateRomanString( nNo, SVX_NUM_ROMAN_UPPER == eNumType ); + break; + + case SVX_NUM_NUMBER_NONE: + break; + + // SVX_NUM_CHAR_SPECIAL: + // ???? + + // case SVX_NUM_ARABIC: ist jetzt default + default: + aTmpStr = UniString::CreateFromInt32( nNo ); + break; + } + } + else + aTmpStr = sal_Unicode('0'); + } + return aTmpStr; +} + +/* -----------------27.10.98 10:38------------------- + * + * --------------------------------------------------*/ +SvxNumRule::SvxNumRule(ULONG nFeatures, USHORT nLevels, BOOL bCont, SvxNumRuleType eType) : + nLevelCount(nLevels), + nFeatureFlags(nFeatures), + bContinuousNumbering(bCont), + eNumberingType(eType) +{ + for(USHORT i = 0; i < SVX_MAX_NUM; i++) + { + if(i < nLevels) + { + aFmts[i] = new SvxNumberFormat(SVX_NUM_CHARS_UPPER_LETTER); + //daran wird zwischen writer und draw unterschieden + if(bContinuousNumbering) + { + aFmts[i]->SetLSpace( MM100_TO_TWIP(DEF_WRITER_LSPACE) ); + aFmts[i]->SetAbsLSpace( MM100_TO_TWIP(DEF_WRITER_LSPACE * (i+1)) ); + } + else + { + aFmts[i]->SetLSpace( DEF_DRAW_LSPACE ); + aFmts[i]->SetAbsLSpace( DEF_DRAW_LSPACE * (i) ); + } + } + else + aFmts[i] = 0; + aFmtsSet[i] = FALSE; + } +} +/* -----------------27.10.98 10:41------------------- + * + * --------------------------------------------------*/ +SvxNumRule::SvxNumRule(const SvxNumRule& rCopy) +{ + nLevelCount = rCopy.nLevelCount ; + nFeatureFlags = rCopy.nFeatureFlags ; + bContinuousNumbering = rCopy.bContinuousNumbering; + eNumberingType = rCopy.eNumberingType; + memset( aFmts, 0, sizeof( aFmts )); + for(USHORT i = 0; i < SVX_MAX_NUM; i++) + { + if(rCopy.aFmts[i]) + aFmts[i] = new SvxNumberFormat(*rCopy.aFmts[i]); + else + aFmts[i] = 0; + aFmtsSet[i] = rCopy.aFmtsSet[i]; + } +} +/* -----------------08.12.98 11:07------------------- + * + * --------------------------------------------------*/ +SvxNumRule::SvxNumRule(SvStream &rStream) +{ + USHORT nVersion; + USHORT nTemp; + rStream >> nVersion; + rStream >> nLevelCount; + rStream >> nTemp; + nFeatureFlags = nTemp; + rStream >> nTemp; + bContinuousNumbering = (BOOL)nTemp; + rStream >> nTemp; + eNumberingType = (SvxNumRuleType)nTemp; + memset( aFmts, 0, sizeof( aFmts )); + + for(USHORT i = 0; i < SVX_MAX_NUM; i++) + { + USHORT nSet; + rStream >> nSet; + if(nSet) + aFmts[i] = new SvxNumberFormat(rStream); + else + aFmts[i] = 0; + aFmtsSet[i] = aFmts[i] ? TRUE : FALSE; + } + if(NUMITEM_VERSION_02 <= nVersion) + { + USHORT nShort; + rStream >> nShort; + nFeatureFlags = nShort; + } +} + +/* -----------------08.12.98 11:07------------------- + * + * --------------------------------------------------*/ +SvStream& SvxNumRule::Store(SvStream &rStream) +{ + rStream<<(USHORT)NUMITEM_VERSION_03; + rStream<<nLevelCount; + //first save of nFeatureFlags for old versions + rStream<<(USHORT)nFeatureFlags; + rStream<<(USHORT)bContinuousNumbering; + rStream<<(USHORT)eNumberingType; + + for(USHORT i = 0; i < SVX_MAX_NUM; i++) + { + if(aFmts[i]) + { + rStream << USHORT(1); + aFmts[i]->Store(rStream); + } + else + rStream << USHORT(0); + } + //second save of nFeatureFlags for new versions + rStream<<(USHORT)nFeatureFlags; + + return rStream; +} + +/* -----------------27.10.98 10:41------------------- + * + * --------------------------------------------------*/ +SvxNumRule::~SvxNumRule() +{ + for(USHORT i = 0; i < SVX_MAX_NUM; i++) + delete aFmts[i]; +} +/* -----------------29.10.98 16:07------------------- + * + * --------------------------------------------------*/ +SvxNumRule& SvxNumRule::operator=( const SvxNumRule& rCopy ) +{ + nLevelCount = rCopy.nLevelCount; + nFeatureFlags = rCopy.nFeatureFlags; + bContinuousNumbering = rCopy.bContinuousNumbering; + eNumberingType = rCopy.eNumberingType; + for(USHORT i = 0; i < SVX_MAX_NUM; i++) + { + delete aFmts[i]; + if(rCopy.aFmts[i]) + aFmts[i] = new SvxNumberFormat(*rCopy.aFmts[i]); + else + aFmts[i] = 0; + aFmtsSet[i] = rCopy.aFmtsSet[i]; + } + return *this; +} +/* -----------------27.10.98 10:41------------------- + * + * --------------------------------------------------*/ +int SvxNumRule::operator==( const SvxNumRule& rCopy) const +{ + if(nLevelCount != rCopy.nLevelCount || + nFeatureFlags != rCopy.nFeatureFlags || + bContinuousNumbering != rCopy.bContinuousNumbering || + eNumberingType != rCopy.eNumberingType) + return FALSE; + for(USHORT i = 0; i < nLevelCount; i++) + { + if( aFmtsSet[i] != rCopy.aFmtsSet[i] || + !aFmts[i] && rCopy.aFmts[i] || + aFmts[i] && !rCopy.aFmts[i] || + aFmts[i] && *aFmts[i] != *rCopy.aFmts[i] ) + return FALSE; + } + return TRUE; +} +/* -----------------27.10.98 10:41------------------- + * + * --------------------------------------------------*/ +const SvxNumberFormat* SvxNumRule::Get(USHORT nLevel)const +{ + DBG_ASSERT(nLevel < SVX_MAX_NUM, "falsches Level" ) + return aFmtsSet[nLevel] ? aFmts[nLevel] : 0; +} +/* -----------------02.11.98 09:10------------------- + * + * --------------------------------------------------*/ +const SvxNumberFormat& SvxNumRule::GetLevel(USHORT nLevel)const +{ + DBG_ASSERT(nLevel < SVX_MAX_NUM, "falsches Level" ) + return aFmts[nLevel] ? + *aFmts[nLevel] : eNumberingType == SVX_RULETYPE_NUMBERING ? + aStdNumFmt : aStdOutlineNumFmt; +} + +/* -----------------29.10.98 09:08------------------- + * + * --------------------------------------------------*/ +void SvxNumRule::SetLevel( USHORT i, const SvxNumberFormat& rNumFmt, BOOL bIsValid ) +{ + if( !aFmtsSet[i] || !(rNumFmt == *Get( i )) ) + { + delete aFmts[ i ]; + aFmts[ i ] = new SvxNumberFormat( rNumFmt ); + aFmtsSet[i] = bIsValid; +// bInvalidRuleFlag = TRUE; + } +} +/* -----------------30.10.98 12:44------------------- + * + * --------------------------------------------------*/ +void SvxNumRule::SetLevel(USHORT nLevel, const SvxNumberFormat* pFmt) +{ + aFmtsSet[nLevel] = 0 != pFmt; + if(pFmt) + SetLevel(nLevel, *pFmt); + else + { + delete aFmts[nLevel]; + aFmts[nLevel] = 0; + } +} +/* -----------------28.10.98 15:38------------------- + * + * --------------------------------------------------*/ +String SvxNumRule::MakeNumString( const SvxNodeNum& rNum, BOOL bInclStrings ) const +{ + String aStr; + if( SVX_NO_NUM > rNum.GetLevel() && !( SVX_NO_NUMLEVEL & rNum.GetLevel() ) ) + { + const SvxNumberFormat& rMyNFmt = GetLevel( rNum.GetLevel() ); + if( SVX_NUM_NUMBER_NONE != rMyNFmt.GetNumType() ) + { + BYTE i = rNum.GetLevel(); + + if( !IsContinuousNumbering() && + 1 < rMyNFmt.GetIncludeUpperLevels() ) // nur der eigene Level ? + { + BYTE n = rMyNFmt.GetIncludeUpperLevels(); + if( 1 < n ) + { + if( i+1 >= n ) + i -= n - 1; + else + i = 0; + } + } + + for( ; i <= rNum.GetLevel(); ++i ) + { + const SvxNumberFormat& rNFmt = GetLevel( i ); + if( SVX_NUM_NUMBER_NONE == rNFmt.GetNumType() ) + { + // Soll aus 1.1.1 --> 2. NoNum --> 1..1 oder 1.1 ?? + // if( i != rNum.nMyLevel ) + // aStr += aDotStr; + continue; + } + + if( rNum.GetLevelVal()[ i ] ) + aStr += rNFmt.GetNumStr( rNum.GetLevelVal()[ i ] ); + else + aStr += sal_Unicode('0'); // alle 0-Level sind eine 0 + if( i != rNum.GetLevel() ) + aStr += sal_Unicode('.'); + } + } + + if( bInclStrings ) + { + aStr.Insert( rMyNFmt.GetPrefix(), 0 ); + aStr += rMyNFmt.GetSuffix(); + } + } + return aStr; +} +/* -----------------18.08.99 10:18------------------- + Description: changes linked to embedded bitmaps + --------------------------------------------------*/ +BOOL SvxNumRule::UnLinkGraphics() +{ + BOOL bRet = FALSE; + for(USHORT i = 0; i < GetLevelCount(); i++) + { + SvxNumberFormat aFmt(GetLevel(i)); + const SvxBrushItem* pBrush = aFmt.GetBrush(); + const String* pLinkStr; + const Graphic* pGraphic; + if(SVX_NUM_BITMAP == aFmt.GetNumType()) + { + if(pBrush && + 0 != (pLinkStr = pBrush->GetGraphicLink()) && + pLinkStr->Len() && + 0 !=(pGraphic = pBrush->GetGraphic())) + { + SvxBrushItem aTempItem(*pBrush); + aTempItem.SetGraphicLink( String()); + aTempItem.SetGraphic(*pGraphic); + SvxFrameVertOrient eOrient = aFmt.GetVertOrient(); + aFmt.SetGraphicBrush( &aTempItem, &aFmt.GetGraphicSize(), &eOrient ); + bRet = TRUE; + } + } + else if((SVX_NUM_BITMAP|LINK_TOKEN) == aFmt.GetNumType()) + aFmt.SetNumType(SVX_NUM_BITMAP); + SetLevel(i, aFmt); + } + return bRet; +} + +/* -----------------27.10.98 10:41------------------- + * + * --------------------------------------------------*/ +SvxNumBulletItem::SvxNumBulletItem(SvxNumRule& rRule) : + SfxPoolItem(SID_ATTR_NUMBERING_RULE), + pNumRule(new SvxNumRule(rRule)) +{ +} + +/*-----------------23.11.98 10:36------------------- + MT: Das sind ja sehr sinnige Kommentare... +--------------------------------------------------*/ +SvxNumBulletItem::SvxNumBulletItem(SvxNumRule& rRule, USHORT nWhich ) : + SfxPoolItem(nWhich), + pNumRule(new SvxNumRule(rRule)) +{ +} + +/* -----------------27.10.98 10:41------------------- + * + * --------------------------------------------------*/ +SvxNumBulletItem::SvxNumBulletItem(const SvxNumBulletItem& rCopy) : + SfxPoolItem(rCopy.Which()) +{ + pNumRule = new SvxNumRule(*rCopy.pNumRule); +} +/* -----------------27.10.98 10:41------------------- + * + * --------------------------------------------------*/ +SvxNumBulletItem::~SvxNumBulletItem() +{ + delete pNumRule; +} + +/* -----------------27.10.98 10:41------------------- + * + * --------------------------------------------------*/ +int SvxNumBulletItem::operator==( const SfxPoolItem& rCopy) const +{ + return *pNumRule == *((SvxNumBulletItem&)rCopy).pNumRule; +} +/* -----------------27.10.98 10:41------------------- + * + * --------------------------------------------------*/ +SfxPoolItem* SvxNumBulletItem::Clone( SfxItemPool *pPool ) const +{ + return new SvxNumBulletItem(*this); +} +/* -----------------08.12.98 10:43------------------- + * + * --------------------------------------------------*/ +SfxPoolItem* SvxNumBulletItem::Create(SvStream &rStream, USHORT) const +{ + SvxNumRule aRule(rStream); + return new SvxNumBulletItem(aRule, Which() ); +} +/* -----------------08.12.98 10:43------------------- + * + * --------------------------------------------------*/ +SvStream& SvxNumBulletItem::Store(SvStream &rStream, USHORT nItemVersion )const +{ + pNumRule->Store(rStream); + return rStream; +} +/* -----------------08.12.98 10:43------------------- + * + * --------------------------------------------------*/ +USHORT SvxNumBulletItem::GetVersion( USHORT nFileVersion ) const +{ + return NUMITEM_VERSION_03; +} + + |