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