xref: /aoo42x/main/svx/source/items/pageitem.cxx (revision f6e50924)
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 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_svx.hxx"
26 
27 // include ---------------------------------------------------------------
28 #include <tools/stream.hxx>
29 
30 
31 #include <svx/pageitem.hxx>
32 #include <editeng/itemtype.hxx>
33 #include <svx/unomid.hxx>
34 #include <com/sun/star/style/PageStyleLayout.hpp>
35 #include <com/sun/star/style/BreakType.hpp>
36 #include <svl/itemset.hxx>
37 #include <svx/svxitems.hrc>
38 #include <svx/dialmgr.hxx>
39 
40 using namespace ::rtl;
41 using namespace ::com::sun::star;
42 
43 // STATIC DATA -----------------------------------------------------------
44 
45 TYPEINIT1_FACTORY( SvxPageItem, SfxPoolItem , new  SvxPageItem(0));
46 
47 /*--------------------------------------------------------------------
48 	Beschreibung: Konstruktor
49  --------------------------------------------------------------------*/
50 
51 SvxPageItem::SvxPageItem( const sal_uInt16 nId ) : SfxPoolItem( nId ),
52 
53 	eNumType	( SVX_ARABIC ),
54 	bLandscape	( sal_False ),
55 	eUse		( SVX_PAGE_ALL )
56 {
57 }
58 
59 /*--------------------------------------------------------------------
60 	Beschreibung: Copy-Konstruktor
61  --------------------------------------------------------------------*/
62 
63 SvxPageItem::SvxPageItem( const SvxPageItem& rItem )
64 	: SfxPoolItem( rItem )
65 {
66 	eNumType 	= rItem.eNumType;
67 	bLandscape 	= rItem.bLandscape;
68 	eUse 		= rItem.eUse;
69 }
70 
71 /*--------------------------------------------------------------------
72 	Beschreibung: Clonen
73  --------------------------------------------------------------------*/
74 
75 SfxPoolItem* SvxPageItem::Clone( SfxItemPool * ) const
76 {
77 	return new SvxPageItem( *this );
78 }
79 
80 /*--------------------------------------------------------------------
81 	Beschreibung: Abfrage auf Gleichheit
82  --------------------------------------------------------------------*/
83 
84 int SvxPageItem::operator==( const SfxPoolItem& rAttr ) const
85 {
86 	DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" );
87 	const SvxPageItem& rItem = (SvxPageItem&)rAttr;
88 	return ( eNumType 	== rItem.eNumType 	&&
89 			 bLandscape == rItem.bLandscape &&
90 			 eUse 		== rItem.eUse );
91 }
92 
93 inline XubString GetUsageText( const sal_uInt16 eU )
94 {
95 	if ( eU & SVX_PAGE_LEFT )
96 		return SVX_RESSTR(RID_SVXITEMS_PAGE_USAGE_LEFT);
97 	if ( eU & SVX_PAGE_RIGHT )
98 		return SVX_RESSTR(RID_SVXITEMS_PAGE_USAGE_RIGHT);
99 	if ( eU & SVX_PAGE_ALL )
100 		return SVX_RESSTR(RID_SVXITEMS_PAGE_USAGE_ALL);
101 	if ( eU & SVX_PAGE_MIRROR )
102 		return SVX_RESSTR(RID_SVXITEMS_PAGE_USAGE_MIRROR);
103 	return String();
104 }
105 
106 //------------------------------------------------------------------------
107 
108 SfxItemPresentation SvxPageItem::GetPresentation
109 (
110 	SfxItemPresentation ePres,
111     SfxMapUnit          /*eCoreUnit*/,
112     SfxMapUnit          /*ePresUnit*/,
113     XubString&          rText, const IntlWrapper *
114 )	const
115 {
116 	rText.Erase();
117 
118 	switch ( ePres )
119 	{
120 		case SFX_ITEM_PRESENTATION_NONE:
121 			return SFX_ITEM_PRESENTATION_NONE;
122 		case SFX_ITEM_PRESENTATION_NAMELESS:
123 		{
124 			if ( aDescName.Len() )
125 			{
126 				rText = aDescName;
127 				rText += cpDelim;
128 			}
129 			DBG_ASSERT( eNumType <= SVX_NUMBER_NONE, "enum overflow" );
130 			rText += SVX_RESSTR(RID_SVXITEMS_PAGE_NUM_BEGIN + eNumType);
131 			rText += cpDelim;
132 			if ( bLandscape )
133 				rText += SVX_RESSTR(RID_SVXITEMS_PAGE_LAND_TRUE);
134 			else
135 				rText += SVX_RESSTR(RID_SVXITEMS_PAGE_LAND_FALSE);
136 			rText += GetUsageText( eUse );
137 			return SFX_ITEM_PRESENTATION_NAMELESS;
138 		}
139 		case SFX_ITEM_PRESENTATION_COMPLETE:
140 		{
141 			rText += SVX_RESSTR(RID_SVXITEMS_PAGE_COMPLETE);
142 			if ( aDescName.Len() )
143 			{
144 				rText += aDescName;
145 				rText += cpDelim;
146 			}
147 			DBG_ASSERT( eNumType <= SVX_NUMBER_NONE, "enum overflow" );
148 			rText += SVX_RESSTR(RID_SVXITEMS_PAGE_NUM_BEGIN + eNumType);
149 			rText += cpDelim;
150 			if ( bLandscape )
151 				rText += SVX_RESSTR(RID_SVXITEMS_PAGE_LAND_TRUE);
152 			else
153 				rText += SVX_RESSTR(RID_SVXITEMS_PAGE_LAND_FALSE);
154 			rText += GetUsageText( eUse );
155 			return SFX_ITEM_PRESENTATION_COMPLETE;
156 		}
157         default: ;//prevent warning
158 	}
159 	return SFX_ITEM_PRESENTATION_NONE;
160 }
161 
162 //------------------------------------------------------------------------
163 sal_Bool SvxPageItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
164 {
165 //    sal_Bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
166     nMemberId &= ~CONVERT_TWIPS;
167 	switch( nMemberId )
168 	{
169 		case MID_PAGE_NUMTYPE:
170 		{
171 			//!	die Konstanten sind nicht mehr in den IDLs ?!?
172 			rVal <<= (sal_Int16)( eNumType );
173 		}
174 		break;
175 		case MID_PAGE_ORIENTATION:
176 			//Landscape= sal_True
177 			rVal = Bool2Any(bLandscape);
178 		break;
179 		case MID_PAGE_LAYOUT     :
180 		{
181 			style::PageStyleLayout eRet;
182 			switch(eUse & 0x0f)
183 			{
184 				case SVX_PAGE_LEFT	: eRet = style::PageStyleLayout_LEFT;	   break;
185 				case SVX_PAGE_RIGHT	: eRet = style::PageStyleLayout_RIGHT;	   break;
186 				case SVX_PAGE_ALL	: eRet = style::PageStyleLayout_ALL;	   break;
187 				case SVX_PAGE_MIRROR: eRet = style::PageStyleLayout_MIRRORED; break;
188 				default:
189 					DBG_ERROR("was fuer ein Layout ist das?");
190 					return sal_False;
191 			}
192 			rVal <<= eRet;
193 		}
194 		break;
195 	}
196 
197 	return sal_True;
198 }
199 //------------------------------------------------------------------------
200 sal_Bool SvxPageItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
201 {
202 	switch( nMemberId )
203 	{
204 		case MID_PAGE_NUMTYPE:
205 		{
206 			sal_Int32 nValue = 0;
207 			if(!(rVal >>= nValue))
208 				return sal_False;
209 
210 			eNumType = (SvxNumType)nValue;
211 		}
212 		break;
213 		case MID_PAGE_ORIENTATION:
214 			bLandscape = Any2Bool(rVal);
215 		break;
216 		case MID_PAGE_LAYOUT     :
217 		{
218 			style::PageStyleLayout eLayout;
219 			if(!(rVal >>= eLayout))
220 			{
221 				sal_Int32 nValue = 0;
222 				if(!(rVal >>= nValue))
223 					return sal_False;
224 				eLayout = (style::PageStyleLayout)nValue;
225 			}
226 			eUse &= 0xfff0;
227 			switch( eLayout )
228 			{
229 				case style::PageStyleLayout_LEFT  	 : eUse |= SVX_PAGE_LEFT ; break;
230 				case style::PageStyleLayout_RIGHT   : eUse |= SVX_PAGE_RIGHT; break;
231 				case style::PageStyleLayout_ALL     : eUse |= SVX_PAGE_ALL  ; break;
232 				case style::PageStyleLayout_MIRRORED: eUse |= SVX_PAGE_MIRROR;break;
233                 default: ;//prevent warning
234             }
235 		}
236 		break;
237 	}
238 	return sal_True;
239 }
240 
241 //------------------------------------------------------------------------
242 
243 SfxPoolItem* SvxPageItem::Create( SvStream& rStream, sal_uInt16 ) const
244 {
245 	XubString sStr;
246 	sal_uInt8 eType;
247 	sal_Bool bLand;
248 	sal_uInt16 nUse;
249 
250 	// UNICODE: rStream >> sStr;
251 	rStream.ReadByteString( sStr );
252 
253 	rStream >> eType;
254 	rStream >> bLand;
255 	rStream >> nUse;
256 
257 	SvxPageItem* pPage = new SvxPageItem( Which() );
258 	pPage->SetDescName( sStr );
259 	pPage->SetNumType( (SvxNumType)eType );
260 	pPage->SetLandscape( bLand );
261 	pPage->SetPageUsage( nUse );
262 	return pPage;
263 }
264 
265 //------------------------------------------------------------------------
266 
267 SvStream& SvxPageItem::Store( SvStream &rStrm, sal_uInt16 /*nItemVersion*/ ) const
268 {
269 	// UNICODE: rStrm << aDescName;
270 	rStrm.WriteByteString(aDescName);
271 
272 	rStrm << (sal_uInt8)eNumType << bLandscape << eUse;
273 	return rStrm;
274 }
275 
276 /*--------------------------------------------------------------------
277 	Beschreibung:	HeaderFooterSet
278  --------------------------------------------------------------------*/
279 
280 SvxSetItem::SvxSetItem( const sal_uInt16 nId, const SfxItemSet& rSet ) :
281 
282 	SfxSetItem( nId, rSet )
283 {
284 }
285 
286 SvxSetItem::SvxSetItem( const SvxSetItem& rItem ) :
287 
288 	SfxSetItem( rItem )
289 {
290 }
291 
292 SvxSetItem::SvxSetItem( const sal_uInt16 nId, SfxItemSet* _pSet ) :
293 
294     SfxSetItem( nId, _pSet )
295 {
296 }
297 
298 SfxPoolItem* SvxSetItem::Clone( SfxItemPool * ) const
299 {
300 	return new SvxSetItem(*this);
301 }
302 
303 //------------------------------------------------------------------------
304 
305 SfxItemPresentation SvxSetItem::GetPresentation
306 (
307     SfxItemPresentation /*ePres*/,
308     SfxMapUnit          /*eCoreUnit*/,
309     SfxMapUnit          /*ePresUnit*/,
310     XubString&          rText, const IntlWrapper *
311 )	const
312 {
313 	rText.Erase();
314 	return SFX_ITEM_PRESENTATION_NONE;
315 }
316 
317 SfxPoolItem* SvxSetItem::Create(SvStream &rStrm, sal_uInt16 /*nVersion*/) const
318 {
319     SfxItemSet* _pSet = new SfxItemSet( *GetItemSet().GetPool(),
320 									   GetItemSet().GetRanges() );
321 
322     _pSet->Load( rStrm );
323 
324     return new SvxSetItem( Which(), *_pSet );
325 }
326 
327 SvStream& SvxSetItem::Store(SvStream &rStrm, sal_uInt16 nItemVersion) const
328 {
329 	GetItemSet().Store( rStrm, nItemVersion );
330 
331 	return rStrm;
332 }
333 
334 
335