1*40df464eSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*40df464eSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*40df464eSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*40df464eSAndrew Rist * distributed with this work for additional information 6*40df464eSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*40df464eSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*40df464eSAndrew Rist * "License"); you may not use this file except in compliance 9*40df464eSAndrew Rist * with the License. You may obtain a copy of the License at 10*40df464eSAndrew Rist * 11*40df464eSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*40df464eSAndrew Rist * 13*40df464eSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*40df464eSAndrew Rist * software distributed under the License is distributed on an 15*40df464eSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*40df464eSAndrew Rist * KIND, either express or implied. See the License for the 17*40df464eSAndrew Rist * specific language governing permissions and limitations 18*40df464eSAndrew Rist * under the License. 19*40df464eSAndrew Rist * 20*40df464eSAndrew Rist *************************************************************/ 21*40df464eSAndrew Rist 22*40df464eSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // This snippet of code is included by rngitem.cxx but not compiled directly. 25cdf0e10cSrcweir // Ugly hack, probably due to lack of templates in the 20th century. 26cdf0e10cSrcweir 27cdf0e10cSrcweir static inline NUMTYPE Count_Impl(const NUMTYPE * pRanges) 28cdf0e10cSrcweir { 29cdf0e10cSrcweir NUMTYPE nCount = 0; 30cdf0e10cSrcweir for (; *pRanges; pRanges += 2) nCount += 2; 31cdf0e10cSrcweir return nCount; 32cdf0e10cSrcweir } 33cdf0e10cSrcweir 34cdf0e10cSrcweir // ----------------------------------------------------------------------- 35cdf0e10cSrcweir 36cdf0e10cSrcweir TYPEINIT1_AUTOFACTORY(SfxXRangeItem, SfxPoolItem); 37cdf0e10cSrcweir TYPEINIT1_AUTOFACTORY(SfxXRangesItem, SfxPoolItem); 38cdf0e10cSrcweir 39cdf0e10cSrcweir NUMTYPE Count_Impl( const NUMTYPE *pRanges ); 40cdf0e10cSrcweir 41cdf0e10cSrcweir // ----------------------------------------------------------------------- 42cdf0e10cSrcweir 43cdf0e10cSrcweir SfxXRangeItem::SfxXRangeItem() 44cdf0e10cSrcweir { 45cdf0e10cSrcweir nFrom = 0; 46cdf0e10cSrcweir nTo = 0; 47cdf0e10cSrcweir } 48cdf0e10cSrcweir 49cdf0e10cSrcweir // ----------------------------------------------------------------------- 50cdf0e10cSrcweir 51cdf0e10cSrcweir SfxXRangeItem::SfxXRangeItem( sal_uInt16 which, NUMTYPE from, NUMTYPE to ): 52cdf0e10cSrcweir SfxPoolItem( which ), 53cdf0e10cSrcweir nFrom( from ), 54cdf0e10cSrcweir nTo( to ) 55cdf0e10cSrcweir { 56cdf0e10cSrcweir } 57cdf0e10cSrcweir 58cdf0e10cSrcweir 59cdf0e10cSrcweir // ----------------------------------------------------------------------- 60cdf0e10cSrcweir 61cdf0e10cSrcweir SfxXRangeItem::SfxXRangeItem( sal_uInt16 nW, SvStream &rStream ) : 62cdf0e10cSrcweir SfxPoolItem( nW ) 63cdf0e10cSrcweir { 64cdf0e10cSrcweir rStream >> nFrom; 65cdf0e10cSrcweir rStream >> nTo; 66cdf0e10cSrcweir } 67cdf0e10cSrcweir 68cdf0e10cSrcweir // ----------------------------------------------------------------------- 69cdf0e10cSrcweir 70cdf0e10cSrcweir SfxXRangeItem::SfxXRangeItem( const SfxXRangeItem& rItem ) : 71cdf0e10cSrcweir SfxPoolItem( rItem ) 72cdf0e10cSrcweir { 73cdf0e10cSrcweir nFrom = rItem.nFrom; 74cdf0e10cSrcweir nTo = rItem.nTo; 75cdf0e10cSrcweir } 76cdf0e10cSrcweir 77cdf0e10cSrcweir // ----------------------------------------------------------------------- 78cdf0e10cSrcweir 79cdf0e10cSrcweir SfxItemPresentation SfxXRangeItem::GetPresentation 80cdf0e10cSrcweir ( 81cdf0e10cSrcweir SfxItemPresentation /*ePresentation*/, 82cdf0e10cSrcweir SfxMapUnit /*eCoreMetric*/, 83cdf0e10cSrcweir SfxMapUnit /*ePresentationMetric*/, 84cdf0e10cSrcweir XubString& rText, 85cdf0e10cSrcweir const IntlWrapper * 86cdf0e10cSrcweir ) const 87cdf0e10cSrcweir { 88cdf0e10cSrcweir rText = UniString::CreateFromInt64(nFrom); 89cdf0e10cSrcweir rText += ':'; 90cdf0e10cSrcweir rText += UniString::CreateFromInt64(nTo); 91cdf0e10cSrcweir return SFX_ITEM_PRESENTATION_NAMELESS; 92cdf0e10cSrcweir } 93cdf0e10cSrcweir 94cdf0e10cSrcweir // ----------------------------------------------------------------------- 95cdf0e10cSrcweir 96cdf0e10cSrcweir int SfxXRangeItem::operator==( const SfxPoolItem& rItem ) const 97cdf0e10cSrcweir { 98cdf0e10cSrcweir DBG_ASSERT( SfxPoolItem::operator==( rItem ), "unequal type" ); 99cdf0e10cSrcweir SfxXRangeItem* pT = (SfxXRangeItem*)&rItem; 100cdf0e10cSrcweir if( nFrom==pT->nFrom && nTo==pT->nTo ) 101cdf0e10cSrcweir return 1; 102cdf0e10cSrcweir return 0; 103cdf0e10cSrcweir } 104cdf0e10cSrcweir 105cdf0e10cSrcweir // ----------------------------------------------------------------------- 106cdf0e10cSrcweir 107cdf0e10cSrcweir SfxPoolItem* SfxXRangeItem::Clone(SfxItemPool *) const 108cdf0e10cSrcweir { 109cdf0e10cSrcweir return new SfxXRangeItem( Which(), nFrom, nTo ); 110cdf0e10cSrcweir } 111cdf0e10cSrcweir 112cdf0e10cSrcweir // ----------------------------------------------------------------------- 113cdf0e10cSrcweir 114cdf0e10cSrcweir SfxPoolItem* SfxXRangeItem::Create(SvStream &rStream, sal_uInt16) const 115cdf0e10cSrcweir { 116cdf0e10cSrcweir NUMTYPE nVon, nBis; 117cdf0e10cSrcweir rStream >> nVon; 118cdf0e10cSrcweir rStream >> nBis; 119cdf0e10cSrcweir return new SfxXRangeItem( Which(), nVon, nBis ); 120cdf0e10cSrcweir } 121cdf0e10cSrcweir 122cdf0e10cSrcweir // ----------------------------------------------------------------------- 123cdf0e10cSrcweir 124cdf0e10cSrcweir SvStream& SfxXRangeItem::Store(SvStream &rStream, sal_uInt16) const 125cdf0e10cSrcweir { 126cdf0e10cSrcweir rStream << nFrom; 127cdf0e10cSrcweir rStream << nTo; 128cdf0e10cSrcweir return rStream; 129cdf0e10cSrcweir } 130cdf0e10cSrcweir 131cdf0e10cSrcweir //========================================================================= 132cdf0e10cSrcweir 133cdf0e10cSrcweir SfxXRangesItem::SfxXRangesItem() 134cdf0e10cSrcweir : _pRanges(0) 135cdf0e10cSrcweir { 136cdf0e10cSrcweir } 137cdf0e10cSrcweir 138cdf0e10cSrcweir //------------------------------------------------------------------------- 139cdf0e10cSrcweir 140cdf0e10cSrcweir SfxXRangesItem::SfxXRangesItem( sal_uInt16 nWID, const NUMTYPE *pRanges ) 141cdf0e10cSrcweir : SfxPoolItem( nWID ) 142cdf0e10cSrcweir { 143cdf0e10cSrcweir NUMTYPE nCount = Count_Impl(pRanges) + 1; 144cdf0e10cSrcweir _pRanges = new NUMTYPE[nCount]; 145cdf0e10cSrcweir memcpy( _pRanges, pRanges, sizeof(NUMTYPE) * nCount ); 146cdf0e10cSrcweir } 147cdf0e10cSrcweir 148cdf0e10cSrcweir //------------------------------------------------------------------------- 149cdf0e10cSrcweir 150cdf0e10cSrcweir SfxXRangesItem::SfxXRangesItem( sal_uInt16 nWID, SvStream &rStream ) 151cdf0e10cSrcweir : SfxPoolItem( nWID ) 152cdf0e10cSrcweir { 153cdf0e10cSrcweir NUMTYPE nCount; 154cdf0e10cSrcweir rStream >> nCount; 155cdf0e10cSrcweir _pRanges = new NUMTYPE[nCount + 1]; 156cdf0e10cSrcweir for ( NUMTYPE n = 0; n < nCount; ++n ) 157cdf0e10cSrcweir rStream >> _pRanges[n]; 158cdf0e10cSrcweir _pRanges[nCount] = 0; 159cdf0e10cSrcweir } 160cdf0e10cSrcweir 161cdf0e10cSrcweir //------------------------------------------------------------------------- 162cdf0e10cSrcweir 163cdf0e10cSrcweir SfxXRangesItem::SfxXRangesItem( const SfxXRangesItem& rItem ) 164cdf0e10cSrcweir : SfxPoolItem( rItem ) 165cdf0e10cSrcweir { 166cdf0e10cSrcweir NUMTYPE nCount = Count_Impl(rItem._pRanges) + 1; 167cdf0e10cSrcweir _pRanges = new NUMTYPE[nCount]; 168cdf0e10cSrcweir memcpy( _pRanges, rItem._pRanges, sizeof(NUMTYPE) * nCount ); 169cdf0e10cSrcweir } 170cdf0e10cSrcweir 171cdf0e10cSrcweir //------------------------------------------------------------------------- 172cdf0e10cSrcweir 173cdf0e10cSrcweir SfxXRangesItem::~SfxXRangesItem() 174cdf0e10cSrcweir { 175cdf0e10cSrcweir delete _pRanges; 176cdf0e10cSrcweir } 177cdf0e10cSrcweir 178cdf0e10cSrcweir //------------------------------------------------------------------------- 179cdf0e10cSrcweir 180cdf0e10cSrcweir int SfxXRangesItem::operator==( const SfxPoolItem &rItem ) const 181cdf0e10cSrcweir { 182cdf0e10cSrcweir const SfxXRangesItem &rOther = (const SfxXRangesItem&) rItem; 183cdf0e10cSrcweir if ( !_pRanges && !rOther._pRanges ) 184cdf0e10cSrcweir return sal_True; 185cdf0e10cSrcweir if ( _pRanges || rOther._pRanges ) 186cdf0e10cSrcweir return sal_False; 187cdf0e10cSrcweir 188cdf0e10cSrcweir NUMTYPE n; 189cdf0e10cSrcweir for ( n = 0; _pRanges[n] && rOther._pRanges[n]; ++n ) 190cdf0e10cSrcweir if ( *_pRanges != rOther._pRanges[n] ) 191cdf0e10cSrcweir return 0; 192cdf0e10cSrcweir 193cdf0e10cSrcweir return !_pRanges[n] && !rOther._pRanges[n]; 194cdf0e10cSrcweir } 195cdf0e10cSrcweir 196cdf0e10cSrcweir //------------------------------------------------------------------------- 197cdf0e10cSrcweir 198cdf0e10cSrcweir SfxItemPresentation SfxXRangesItem::GetPresentation( SfxItemPresentation /*ePres*/, 199cdf0e10cSrcweir SfxMapUnit /*eCoreMetric*/, 200cdf0e10cSrcweir SfxMapUnit /*ePresMetric*/, 201cdf0e10cSrcweir XubString &/*rText*/, 202cdf0e10cSrcweir const IntlWrapper * ) const 203cdf0e10cSrcweir { 204cdf0e10cSrcweir HACK(n. i.) 205cdf0e10cSrcweir return SFX_ITEM_PRESENTATION_NONE; 206cdf0e10cSrcweir } 207cdf0e10cSrcweir 208cdf0e10cSrcweir //------------------------------------------------------------------------- 209cdf0e10cSrcweir 210cdf0e10cSrcweir SfxPoolItem* SfxXRangesItem::Clone( SfxItemPool * ) const 211cdf0e10cSrcweir { 212cdf0e10cSrcweir return new SfxXRangesItem( *this ); 213cdf0e10cSrcweir } 214cdf0e10cSrcweir 215cdf0e10cSrcweir //------------------------------------------------------------------------- 216cdf0e10cSrcweir 217cdf0e10cSrcweir SfxPoolItem* SfxXRangesItem::Create( SvStream &rStream, sal_uInt16 ) const 218cdf0e10cSrcweir { 219cdf0e10cSrcweir return new SfxXRangesItem( Which(), rStream ); 220cdf0e10cSrcweir } 221cdf0e10cSrcweir 222cdf0e10cSrcweir //------------------------------------------------------------------------- 223cdf0e10cSrcweir 224cdf0e10cSrcweir SvStream& SfxXRangesItem::Store( SvStream &rStream, sal_uInt16 ) const 225cdf0e10cSrcweir { 226cdf0e10cSrcweir NUMTYPE nCount = Count_Impl( _pRanges ); 227cdf0e10cSrcweir rStream >> nCount; 228cdf0e10cSrcweir for ( NUMTYPE n = 0; _pRanges[n]; ++n ) 229cdf0e10cSrcweir rStream >> _pRanges[n]; 230cdf0e10cSrcweir return rStream; 231cdf0e10cSrcweir } 232cdf0e10cSrcweir 233cdf0e10cSrcweir 234cdf0e10cSrcweir #undef NUMTYPE 235cdf0e10cSrcweir #undef SfxXRangeItem 236cdf0e10cSrcweir #undef SfxXRangesItem 237