/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // This snippet of code is included by rngitem.cxx but not compiled directly. // Ugly hack, probably due to lack of templates in the 20th century. static inline NUMTYPE Count_Impl(const NUMTYPE * pRanges) { NUMTYPE nCount = 0; for (; *pRanges; pRanges += 2) nCount += 2; return nCount; } // ----------------------------------------------------------------------- TYPEINIT1_AUTOFACTORY(SfxXRangeItem, SfxPoolItem); TYPEINIT1_AUTOFACTORY(SfxXRangesItem, SfxPoolItem); NUMTYPE Count_Impl( const NUMTYPE *pRanges ); // ----------------------------------------------------------------------- SfxXRangeItem::SfxXRangeItem() { nFrom = 0; nTo = 0; } // ----------------------------------------------------------------------- SfxXRangeItem::SfxXRangeItem( sal_uInt16 which, NUMTYPE from, NUMTYPE to ): SfxPoolItem( which ), nFrom( from ), nTo( to ) { } // ----------------------------------------------------------------------- SfxXRangeItem::SfxXRangeItem( sal_uInt16 nW, SvStream &rStream ) : SfxPoolItem( nW ) { rStream >> nFrom; rStream >> nTo; } // ----------------------------------------------------------------------- SfxXRangeItem::SfxXRangeItem( const SfxXRangeItem& rItem ) : SfxPoolItem( rItem ) { nFrom = rItem.nFrom; nTo = rItem.nTo; } // ----------------------------------------------------------------------- SfxItemPresentation SfxXRangeItem::GetPresentation ( SfxItemPresentation /*ePresentation*/, SfxMapUnit /*eCoreMetric*/, SfxMapUnit /*ePresentationMetric*/, XubString& rText, const IntlWrapper * ) const { rText = UniString::CreateFromInt64(nFrom); rText += ':'; rText += UniString::CreateFromInt64(nTo); return SFX_ITEM_PRESENTATION_NAMELESS; } // ----------------------------------------------------------------------- int SfxXRangeItem::operator==( const SfxPoolItem& rItem ) const { DBG_ASSERT( SfxPoolItem::operator==( rItem ), "unequal type" ); SfxXRangeItem* pT = (SfxXRangeItem*)&rItem; if( nFrom==pT->nFrom && nTo==pT->nTo ) return 1; return 0; } // ----------------------------------------------------------------------- SfxPoolItem* SfxXRangeItem::Clone(SfxItemPool *) const { return new SfxXRangeItem( Which(), nFrom, nTo ); } // ----------------------------------------------------------------------- SfxPoolItem* SfxXRangeItem::Create(SvStream &rStream, sal_uInt16) const { NUMTYPE nVon, nBis; rStream >> nVon; rStream >> nBis; return new SfxXRangeItem( Which(), nVon, nBis ); } // ----------------------------------------------------------------------- SvStream& SfxXRangeItem::Store(SvStream &rStream, sal_uInt16) const { rStream << nFrom; rStream << nTo; return rStream; } //========================================================================= SfxXRangesItem::SfxXRangesItem() : _pRanges(0) { } //------------------------------------------------------------------------- SfxXRangesItem::SfxXRangesItem( sal_uInt16 nWID, const NUMTYPE *pRanges ) : SfxPoolItem( nWID ) { NUMTYPE nCount = Count_Impl(pRanges) + 1; _pRanges = new NUMTYPE[nCount]; memcpy( _pRanges, pRanges, sizeof(NUMTYPE) * nCount ); } //------------------------------------------------------------------------- SfxXRangesItem::SfxXRangesItem( sal_uInt16 nWID, SvStream &rStream ) : SfxPoolItem( nWID ) { NUMTYPE nCount; rStream >> nCount; _pRanges = new NUMTYPE[nCount + 1]; for ( NUMTYPE n = 0; n < nCount; ++n ) rStream >> _pRanges[n]; _pRanges[nCount] = 0; } //------------------------------------------------------------------------- SfxXRangesItem::SfxXRangesItem( const SfxXRangesItem& rItem ) : SfxPoolItem( rItem ) { NUMTYPE nCount = Count_Impl(rItem._pRanges) + 1; _pRanges = new NUMTYPE[nCount]; memcpy( _pRanges, rItem._pRanges, sizeof(NUMTYPE) * nCount ); } //------------------------------------------------------------------------- SfxXRangesItem::~SfxXRangesItem() { delete _pRanges; } //------------------------------------------------------------------------- int SfxXRangesItem::operator==( const SfxPoolItem &rItem ) const { const SfxXRangesItem &rOther = (const SfxXRangesItem&) rItem; if ( !_pRanges && !rOther._pRanges ) return sal_True; if ( _pRanges || rOther._pRanges ) return sal_False; NUMTYPE n; for ( n = 0; _pRanges[n] && rOther._pRanges[n]; ++n ) if ( *_pRanges != rOther._pRanges[n] ) return 0; return !_pRanges[n] && !rOther._pRanges[n]; } //------------------------------------------------------------------------- SfxItemPresentation SfxXRangesItem::GetPresentation( SfxItemPresentation /*ePres*/, SfxMapUnit /*eCoreMetric*/, SfxMapUnit /*ePresMetric*/, XubString &/*rText*/, const IntlWrapper * ) const { HACK(n. i.) return SFX_ITEM_PRESENTATION_NONE; } //------------------------------------------------------------------------- SfxPoolItem* SfxXRangesItem::Clone( SfxItemPool * ) const { return new SfxXRangesItem( *this ); } //------------------------------------------------------------------------- SfxPoolItem* SfxXRangesItem::Create( SvStream &rStream, sal_uInt16 ) const { return new SfxXRangesItem( Which(), rStream ); } //------------------------------------------------------------------------- SvStream& SfxXRangesItem::Store( SvStream &rStream, sal_uInt16 ) const { NUMTYPE nCount = Count_Impl( _pRanges ); rStream >> nCount; for ( NUMTYPE n = 0; _pRanges[n]; ++n ) rStream >> _pRanges[n]; return rStream; } #undef NUMTYPE #undef SfxXRangeItem #undef SfxXRangesItem