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