xref: /trunk/main/svl/source/items/rngitem_inc.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
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
10cdf0e10cSrcweir  *
11*40df464eSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
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.
19cdf0e10cSrcweir  *
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