1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_svx.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir // include --------------------------------------------------------------- 32*cdf0e10cSrcweir 33*cdf0e10cSrcweir #include <sot/formats.hxx> 34*cdf0e10cSrcweir #include <tools/vcompat.hxx> 35*cdf0e10cSrcweir #include <svx/xflasit.hxx> 36*cdf0e10cSrcweir #include <svx/xfillit0.hxx> 37*cdf0e10cSrcweir #ifndef _SFXIPOOL_HXX 38*cdf0e10cSrcweir #include <svl/itempool.hxx> 39*cdf0e10cSrcweir #endif 40*cdf0e10cSrcweir #include <svl/whiter.hxx> 41*cdf0e10cSrcweir #ifndef _SFXIPOOL_HXX 42*cdf0e10cSrcweir #include <svl/itempool.hxx> 43*cdf0e10cSrcweir #endif 44*cdf0e10cSrcweir #include <svl/itemset.hxx> 45*cdf0e10cSrcweir #include <svx/xdef.hxx> 46*cdf0e10cSrcweir #include "svx/xexch.hxx" 47*cdf0e10cSrcweir 48*cdf0e10cSrcweir 49*cdf0e10cSrcweir TYPEINIT1_AUTOFACTORY( XFillExchangeData, SvDataCopyStream ); 50*cdf0e10cSrcweir 51*cdf0e10cSrcweir 52*cdf0e10cSrcweir /************************************************************************* 53*cdf0e10cSrcweir |* 54*cdf0e10cSrcweir |* Default-Ctor (Fuer Assign()) 55*cdf0e10cSrcweir |* 56*cdf0e10cSrcweir *************************************************************************/ 57*cdf0e10cSrcweir XFillExchangeData::XFillExchangeData() : 58*cdf0e10cSrcweir pXFillAttrSetItem( NULL ), 59*cdf0e10cSrcweir pPool( NULL ) 60*cdf0e10cSrcweir { 61*cdf0e10cSrcweir } 62*cdf0e10cSrcweir 63*cdf0e10cSrcweir 64*cdf0e10cSrcweir /************************************************************************* 65*cdf0e10cSrcweir |* 66*cdf0e10cSrcweir |* Ctor 67*cdf0e10cSrcweir |* 68*cdf0e10cSrcweir *************************************************************************/ 69*cdf0e10cSrcweir XFillExchangeData::XFillExchangeData( const XFillAttrSetItem rXFillAttrSetItem ) : 70*cdf0e10cSrcweir pXFillAttrSetItem( (XFillAttrSetItem*) rXFillAttrSetItem.Clone( rXFillAttrSetItem.GetItemSet().GetPool() ) ), 71*cdf0e10cSrcweir pPool( rXFillAttrSetItem.GetItemSet().GetPool() ) 72*cdf0e10cSrcweir { 73*cdf0e10cSrcweir } 74*cdf0e10cSrcweir 75*cdf0e10cSrcweir 76*cdf0e10cSrcweir /************************************************************************* 77*cdf0e10cSrcweir |* 78*cdf0e10cSrcweir |* Dtor 79*cdf0e10cSrcweir |* 80*cdf0e10cSrcweir *************************************************************************/ 81*cdf0e10cSrcweir XFillExchangeData::~XFillExchangeData() 82*cdf0e10cSrcweir { 83*cdf0e10cSrcweir delete pXFillAttrSetItem; 84*cdf0e10cSrcweir } 85*cdf0e10cSrcweir 86*cdf0e10cSrcweir /************************************************************************* 87*cdf0e10cSrcweir |* 88*cdf0e10cSrcweir |* 89*cdf0e10cSrcweir |* 90*cdf0e10cSrcweir *************************************************************************/ 91*cdf0e10cSrcweir sal_uIntPtr XFillExchangeData::RegisterClipboardFormatName() 92*cdf0e10cSrcweir { 93*cdf0e10cSrcweir return( SOT_FORMATSTR_ID_XFA ); 94*cdf0e10cSrcweir } 95*cdf0e10cSrcweir 96*cdf0e10cSrcweir /****************************************************************************** 97*cdf0e10cSrcweir |* 98*cdf0e10cSrcweir |* Binaer-Export (z.Z. ohne Versionsverwaltung, da nicht persistent!) 99*cdf0e10cSrcweir |* 100*cdf0e10cSrcweir \******************************************************************************/ 101*cdf0e10cSrcweir 102*cdf0e10cSrcweir SvStream& operator<<( SvStream& rOStm, const XFillExchangeData& rData ) 103*cdf0e10cSrcweir { 104*cdf0e10cSrcweir if( rData.pXFillAttrSetItem ) 105*cdf0e10cSrcweir { 106*cdf0e10cSrcweir SfxWhichIter aIter( rData.pXFillAttrSetItem->GetItemSet() ); 107*cdf0e10cSrcweir sal_uInt16 nWhich = aIter.FirstWhich(); 108*cdf0e10cSrcweir const SfxPoolItem* pItem; 109*cdf0e10cSrcweir sal_uInt32 nItemCount = 0; 110*cdf0e10cSrcweir sal_Size nFirstPos = rOStm.Tell(); 111*cdf0e10cSrcweir 112*cdf0e10cSrcweir rOStm << nItemCount; 113*cdf0e10cSrcweir 114*cdf0e10cSrcweir while( nWhich ) 115*cdf0e10cSrcweir { 116*cdf0e10cSrcweir if( SFX_ITEM_SET == rData.pXFillAttrSetItem->GetItemSet().GetItemState( nWhich, sal_False, &pItem ) ) 117*cdf0e10cSrcweir { 118*cdf0e10cSrcweir VersionCompat aCompat( rOStm, STREAM_WRITE ); 119*cdf0e10cSrcweir const sal_uInt16 nItemVersion2 = pItem->GetVersion( (sal_uInt16) rOStm.GetVersion() ); 120*cdf0e10cSrcweir 121*cdf0e10cSrcweir rOStm << nWhich << nItemVersion2; 122*cdf0e10cSrcweir pItem->Store( rOStm, nItemVersion2 ); 123*cdf0e10cSrcweir 124*cdf0e10cSrcweir nItemCount++; 125*cdf0e10cSrcweir } 126*cdf0e10cSrcweir 127*cdf0e10cSrcweir nWhich = aIter.NextWhich(); 128*cdf0e10cSrcweir } 129*cdf0e10cSrcweir 130*cdf0e10cSrcweir const sal_uIntPtr nLastPos = rOStm.Tell(); 131*cdf0e10cSrcweir rOStm.Seek( nFirstPos ); 132*cdf0e10cSrcweir rOStm << nItemCount; 133*cdf0e10cSrcweir rOStm.Seek( nLastPos ); 134*cdf0e10cSrcweir } 135*cdf0e10cSrcweir 136*cdf0e10cSrcweir return rOStm; 137*cdf0e10cSrcweir } 138*cdf0e10cSrcweir 139*cdf0e10cSrcweir 140*cdf0e10cSrcweir /****************************************************************************** 141*cdf0e10cSrcweir |* 142*cdf0e10cSrcweir |* Binaer-Import (z.Z. ohne Versionsverwaltung, da nicht persistent!) 143*cdf0e10cSrcweir |* 144*cdf0e10cSrcweir \******************************************************************************/ 145*cdf0e10cSrcweir 146*cdf0e10cSrcweir SvStream& operator>>( SvStream& rIStm, XFillExchangeData& rData ) 147*cdf0e10cSrcweir { 148*cdf0e10cSrcweir DBG_ASSERT( rData.pPool, "XFillExchangeData has no pool" ); 149*cdf0e10cSrcweir 150*cdf0e10cSrcweir SfxItemSet* pSet = new SfxItemSet ( *rData.pPool, XATTR_FILL_FIRST, XATTR_FILL_LAST ); 151*cdf0e10cSrcweir SfxPoolItem* pNewItem; 152*cdf0e10cSrcweir sal_uInt32 nItemCount = 0; 153*cdf0e10cSrcweir sal_uInt16 nWhich, nItemVersion; 154*cdf0e10cSrcweir 155*cdf0e10cSrcweir rIStm >> nItemCount; 156*cdf0e10cSrcweir 157*cdf0e10cSrcweir if( nItemCount > ( XATTR_FILL_LAST - XATTR_FILL_FIRST + 1 ) ) 158*cdf0e10cSrcweir nItemCount = ( XATTR_FILL_LAST - XATTR_FILL_FIRST + 1 ); 159*cdf0e10cSrcweir 160*cdf0e10cSrcweir for( sal_uInt32 i = 0; i < nItemCount; i++ ) 161*cdf0e10cSrcweir { 162*cdf0e10cSrcweir VersionCompat aCompat( rIStm, STREAM_READ ); 163*cdf0e10cSrcweir 164*cdf0e10cSrcweir rIStm >> nWhich >> nItemVersion; 165*cdf0e10cSrcweir 166*cdf0e10cSrcweir if( nWhich ) 167*cdf0e10cSrcweir { 168*cdf0e10cSrcweir pNewItem = rData.pPool->GetDefaultItem( nWhich ).Create( rIStm, nItemVersion ); 169*cdf0e10cSrcweir 170*cdf0e10cSrcweir if( pNewItem ) 171*cdf0e10cSrcweir { 172*cdf0e10cSrcweir pSet->Put( *pNewItem ); 173*cdf0e10cSrcweir delete pNewItem; 174*cdf0e10cSrcweir } 175*cdf0e10cSrcweir } 176*cdf0e10cSrcweir } 177*cdf0e10cSrcweir 178*cdf0e10cSrcweir delete rData.pXFillAttrSetItem; 179*cdf0e10cSrcweir rData.pXFillAttrSetItem = new XFillAttrSetItem( pSet ); 180*cdf0e10cSrcweir rData.pPool = rData.pXFillAttrSetItem->GetItemSet().GetPool(); 181*cdf0e10cSrcweir 182*cdf0e10cSrcweir return rIStm; 183*cdf0e10cSrcweir } 184*cdf0e10cSrcweir 185*cdf0e10cSrcweir /************************************************************************* 186*cdf0e10cSrcweir |* 187*cdf0e10cSrcweir |* XBitmap& XBitmap::operator=( const XBitmap& rXBmp ) 188*cdf0e10cSrcweir |* 189*cdf0e10cSrcweir *************************************************************************/ 190*cdf0e10cSrcweir 191*cdf0e10cSrcweir XFillExchangeData& XFillExchangeData::operator=( const XFillExchangeData& rData ) 192*cdf0e10cSrcweir { 193*cdf0e10cSrcweir delete pXFillAttrSetItem; 194*cdf0e10cSrcweir 195*cdf0e10cSrcweir if( rData.pXFillAttrSetItem ) 196*cdf0e10cSrcweir pXFillAttrSetItem = (XFillAttrSetItem*) rData.pXFillAttrSetItem->Clone( pPool = rData.pXFillAttrSetItem->GetItemSet().GetPool() ); 197*cdf0e10cSrcweir else 198*cdf0e10cSrcweir { 199*cdf0e10cSrcweir pPool = NULL; 200*cdf0e10cSrcweir pXFillAttrSetItem = NULL; 201*cdf0e10cSrcweir } 202*cdf0e10cSrcweir 203*cdf0e10cSrcweir return( *this ); 204*cdf0e10cSrcweir } 205