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