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