xref: /AOO41X/main/svx/source/items/pageitem.cxx (revision ff0525f24f03981d56b7579b645949f111420994)
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