xref: /aoo41x/main/svl/source/items/rngitem_inc.cxx (revision 79aad27f)
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 
Count_Impl(const NUMTYPE * pRanges)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 
SfxXRangeItem()43cdf0e10cSrcweir SfxXRangeItem::SfxXRangeItem()
44cdf0e10cSrcweir {
45cdf0e10cSrcweir 	nFrom = 0;
46cdf0e10cSrcweir 	nTo = 0;
47cdf0e10cSrcweir }
48cdf0e10cSrcweir 
49cdf0e10cSrcweir // -----------------------------------------------------------------------
50cdf0e10cSrcweir 
SfxXRangeItem(sal_uInt16 which,NUMTYPE from,NUMTYPE to)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 
SfxXRangeItem(sal_uInt16 nW,SvStream & rStream)61cdf0e10cSrcweir SfxXRangeItem::SfxXRangeItem( sal_uInt16 nW, SvStream &rStream ) :
62cdf0e10cSrcweir 	SfxPoolItem( nW )
63cdf0e10cSrcweir {
64cdf0e10cSrcweir 	rStream >> nFrom;
65cdf0e10cSrcweir 	rStream >> nTo;
66cdf0e10cSrcweir }
67cdf0e10cSrcweir 
68cdf0e10cSrcweir // -----------------------------------------------------------------------
69cdf0e10cSrcweir 
SfxXRangeItem(const SfxXRangeItem & rItem)70cdf0e10cSrcweir SfxXRangeItem::SfxXRangeItem( const SfxXRangeItem& rItem ) :
71cdf0e10cSrcweir 	SfxPoolItem( rItem )
72cdf0e10cSrcweir {
73cdf0e10cSrcweir 	nFrom = rItem.nFrom;
74cdf0e10cSrcweir 	nTo = rItem.nTo;
75cdf0e10cSrcweir }
76cdf0e10cSrcweir 
77cdf0e10cSrcweir // -----------------------------------------------------------------------
78cdf0e10cSrcweir 
GetPresentation(SfxItemPresentation,SfxMapUnit,SfxMapUnit,XubString & rText,const IntlWrapper *) const79cdf0e10cSrcweir 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 
operator ==(const SfxPoolItem & rItem) const96cdf0e10cSrcweir 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 
Clone(SfxItemPool *) const107cdf0e10cSrcweir SfxPoolItem* SfxXRangeItem::Clone(SfxItemPool *) const
108cdf0e10cSrcweir {
109cdf0e10cSrcweir 	return new SfxXRangeItem( Which(), nFrom, nTo );
110cdf0e10cSrcweir }
111cdf0e10cSrcweir 
112cdf0e10cSrcweir // -----------------------------------------------------------------------
113cdf0e10cSrcweir 
Create(SvStream & rStream,sal_uInt16) const114cdf0e10cSrcweir 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 
Store(SvStream & rStream,sal_uInt16) const124cdf0e10cSrcweir SvStream& SfxXRangeItem::Store(SvStream &rStream, sal_uInt16) const
125cdf0e10cSrcweir {
126cdf0e10cSrcweir 	rStream << nFrom;
127cdf0e10cSrcweir 	rStream << nTo;
128cdf0e10cSrcweir 	return rStream;
129cdf0e10cSrcweir }
130cdf0e10cSrcweir 
131cdf0e10cSrcweir //=========================================================================
132cdf0e10cSrcweir 
SfxXRangesItem()133cdf0e10cSrcweir SfxXRangesItem::SfxXRangesItem()
134cdf0e10cSrcweir :	_pRanges(0)
135cdf0e10cSrcweir {
136cdf0e10cSrcweir }
137cdf0e10cSrcweir 
138cdf0e10cSrcweir //-------------------------------------------------------------------------
139cdf0e10cSrcweir 
SfxXRangesItem(sal_uInt16 nWID,const NUMTYPE * pRanges)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 
SfxXRangesItem(sal_uInt16 nWID,SvStream & rStream)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 
SfxXRangesItem(const SfxXRangesItem & rItem)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 
~SfxXRangesItem()173cdf0e10cSrcweir SfxXRangesItem::~SfxXRangesItem()
174cdf0e10cSrcweir {
175cdf0e10cSrcweir 	delete _pRanges;
176cdf0e10cSrcweir }
177cdf0e10cSrcweir 
178cdf0e10cSrcweir //-------------------------------------------------------------------------
179cdf0e10cSrcweir 
operator ==(const SfxPoolItem & rItem) const180cdf0e10cSrcweir 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 
GetPresentation(SfxItemPresentation,SfxMapUnit,SfxMapUnit,XubString &,const IntlWrapper *) const198cdf0e10cSrcweir 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 
Clone(SfxItemPool *) const210cdf0e10cSrcweir SfxPoolItem* SfxXRangesItem::Clone( SfxItemPool * ) const
211cdf0e10cSrcweir {
212cdf0e10cSrcweir 	return new SfxXRangesItem( *this );
213cdf0e10cSrcweir }
214cdf0e10cSrcweir 
215cdf0e10cSrcweir //-------------------------------------------------------------------------
216cdf0e10cSrcweir 
Create(SvStream & rStream,sal_uInt16) const217cdf0e10cSrcweir SfxPoolItem* SfxXRangesItem::Create( SvStream &rStream, sal_uInt16 ) const
218cdf0e10cSrcweir {
219cdf0e10cSrcweir 	return new SfxXRangesItem( Which(), rStream );
220cdf0e10cSrcweir }
221cdf0e10cSrcweir 
222cdf0e10cSrcweir //-------------------------------------------------------------------------
223cdf0e10cSrcweir 
Store(SvStream & rStream,sal_uInt16) const224cdf0e10cSrcweir 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