diff options
author | Rüdiger Timm <rt@openoffice.org> | 2004-04-02 13:07:39 +0000 |
---|---|---|
committer | Rüdiger Timm <rt@openoffice.org> | 2004-04-02 13:07:39 +0000 |
commit | 50a73f5963c4d0ca34629f36cc04e8b45f61bd62 (patch) | |
tree | a2919966bef0113f432c552f70aab76f64a86289 /svx/source/items | |
parent | 55363c09f97e295fb5aec109e1dd9986f32bc571 (diff) |
INTEGRATION: CWS sj05 (1.1.2); FILE ADDED
2004/02/05 13:22:48 sj 1.1.2.1: initial version
Diffstat (limited to 'svx/source/items')
-rw-r--r-- | svx/source/items/customshapeitem.cxx | 320 |
1 files changed, 320 insertions, 0 deletions
diff --git a/svx/source/items/customshapeitem.cxx b/svx/source/items/customshapeitem.cxx new file mode 100644 index 000000000000..af4e0ab59e6f --- /dev/null +++ b/svx/source/items/customshapeitem.cxx @@ -0,0 +1,320 @@ +/************************************************************************* + * + * $RCSfile: customshapeitem.cxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: rt $ $Date: 2004-04-02 14:07:39 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _SDASITM_HXX +#include "sdasitm.hxx" +#endif +#include "svdattr.hxx" + +using namespace ::std; +using namespace com::sun::star; + +SdrCustomShapeEngineItem::SdrCustomShapeEngineItem() +: SfxStringItem( SDRATTR_CUSTOMSHAPE_ENGINE, String() ) +{} +SdrCustomShapeEngineItem::SdrCustomShapeEngineItem( const String& rVal ) +: SfxStringItem( SDRATTR_CUSTOMSHAPE_ENGINE, rVal ) +{} + +SdrCustomShapeDataItem::SdrCustomShapeDataItem() +: SfxStringItem( SDRATTR_CUSTOMSHAPE_DATA, String() ) +{} +SdrCustomShapeDataItem::SdrCustomShapeDataItem( const String& rVal ) +: SfxStringItem( SDRATTR_CUSTOMSHAPE_DATA, rVal ) +{} + +bool SdrCustomShapeGeometryItem::PropertyEq::operator()( const rtl::OUString& r1, const rtl::OUString& r2 ) const +{ + return r1.equals( r2 ); +} +bool SdrCustomShapeGeometryItem::PropertyPairEq::operator()( const SdrCustomShapeGeometryItem::PropertyPair& r1, const SdrCustomShapeGeometryItem::PropertyPair& r2 ) const +{ + return ( r1.first.equals( r2.first ) ) && ( r1.second.equals( r2.second ) ); +} +size_t SdrCustomShapeGeometryItem::PropertyPairHash::operator()( const SdrCustomShapeGeometryItem::PropertyPair &r1 ) const +{ + return (size_t)r1.first.hashCode() + r1.second.hashCode(); +}; + +TYPEINIT1_AUTOFACTORY( SdrCustomShapeGeometryItem, SfxPoolItem ); +SdrCustomShapeGeometryItem::SdrCustomShapeGeometryItem() +: SfxPoolItem( SDRATTR_CUSTOMSHAPE_GEOMETRY ) +{} +SdrCustomShapeGeometryItem::SdrCustomShapeGeometryItem( const uno::Sequence< beans::PropertyValue >& rVal ) +: SfxPoolItem( SDRATTR_CUSTOMSHAPE_GEOMETRY ) +{ + sal_Int32 i, j; + aPropSeq = rVal; + + // hashing property values + beans::PropertyValue* pPropValues = aPropSeq.getArray(); + const rtl::OUString* pPtr = NULL; + for ( i = 0; i < aPropSeq.getLength(); i++ ) + { + beans::PropertyValue& rPropVal = aPropSeq[ i ]; + aPropHashMap[ rPropVal.Name ] = i; + if ( rPropVal.Value.getValueType() == ::getCppuType((const ::com::sun::star::uno::Sequence < beans::PropertyValue >*)0) ) + { + uno::Sequence< beans::PropertyValue >& rPropSeq = *( uno::Sequence< beans::PropertyValue >*)rPropVal.Value.getValue(); + for ( j = 0; j < rPropSeq.getLength(); j++ ) + { + beans::PropertyValue& rPropVal2 = rPropSeq[ j ]; + aPropPairHashMap[ PropertyPair( rPropVal.Name, rPropVal2.Name ) ] = j; + } + } + } +} + +com::sun::star::uno::Any* SdrCustomShapeGeometryItem::GetPropertyValueByName( const rtl::OUString& rPropName ) +{ + com::sun::star::uno::Any* pRet = NULL; + PropertyHashMap::iterator aHashIter( aPropHashMap.find( rPropName ) ); + if ( aHashIter != aPropHashMap.end() ) + pRet = &aPropSeq[ (*aHashIter).second ].Value; + return pRet; +} + +com::sun::star::uno::Any* SdrCustomShapeGeometryItem::GetPropertyValueByName( const rtl::OUString& rSequenceName, const rtl::OUString& rPropName ) +{ + com::sun::star::uno::Any* pRet = NULL; + com::sun::star::uno::Any* pSeqAny = GetPropertyValueByName( rSequenceName ); + if ( pSeqAny ) + { + if ( pSeqAny->getValueType() == ::getCppuType((const ::com::sun::star::uno::Sequence < beans::PropertyValue >*)0) ) + { + PropertyPairHashMap::iterator aHashIter( aPropPairHashMap.find( PropertyPair( rSequenceName, rPropName ) ) ); + if ( aHashIter != aPropPairHashMap.end() ) + { + ::com::sun::star::uno::Sequence < beans::PropertyValue >& rSecSequence = + *((::com::sun::star::uno::Sequence < beans::PropertyValue >*)pSeqAny->getValue()); + pRet = &rSecSequence[ (*aHashIter).second ].Value; + } + } + } + return pRet; +} + +void SdrCustomShapeGeometryItem::SetPropertyValue( const com::sun::star::beans::PropertyValue& rPropVal ) +{ + com::sun::star::uno::Any* pAny = GetPropertyValueByName( rPropVal.Name ); + if ( pAny ) + *pAny = rPropVal.Value; + else + { + sal_uInt32 nIndex = aPropSeq.getLength(); + aPropSeq.realloc( nIndex + 1 ); + aPropSeq[ nIndex ] = rPropVal ; + + aPropHashMap[ rPropVal.Name ] = nIndex; + } +} + +void SdrCustomShapeGeometryItem::SetPropertyValue( const rtl::OUString& rSequenceName, const com::sun::star::beans::PropertyValue& rPropVal ) +{ + com::sun::star::uno::Any* pAny = GetPropertyValueByName( rSequenceName, rPropVal.Name ); + if ( pAny ) + *pAny = rPropVal.Value; + else + { + com::sun::star::uno::Any* pSeqAny = GetPropertyValueByName( rSequenceName ); + if( pSeqAny == NULL ) + { + ::com::sun::star::uno::Sequence < beans::PropertyValue > aSeq; + beans::PropertyValue aValue; + aValue.Name = rSequenceName; + aValue.Value = ::com::sun::star::uno::makeAny( aSeq ); + SetPropertyValue( aValue ); + + pSeqAny = GetPropertyValueByName( rSequenceName ); + } + + DBG_ASSERT( pSeqAny, "SdrCustomShapeGeometryItem::SetPropertyValue() - No Value??" ); + + if( pSeqAny ) + { + if ( pSeqAny->getValueType() == ::getCppuType((const ::com::sun::star::uno::Sequence < beans::PropertyValue >*)0) ) + { + PropertyPairHashMap::iterator aHashIter( aPropPairHashMap.find( PropertyPair( rSequenceName, rPropVal.Name ) ) ); + if ( aHashIter != aPropPairHashMap.end() ) + { + ::com::sun::star::uno::Sequence < beans::PropertyValue >& rSecSequence = + *((::com::sun::star::uno::Sequence < beans::PropertyValue >*)pSeqAny->getValue()); + rSecSequence[ (*aHashIter).second ].Value = rPropVal.Value; + } + else + { + ::com::sun::star::uno::Sequence < beans::PropertyValue >& rSecSequence = + *((::com::sun::star::uno::Sequence < beans::PropertyValue >*)pSeqAny->getValue()); + + sal_Int32 nCount = rSecSequence.getLength(); + rSecSequence.realloc( nCount + 1 ); + rSecSequence[ nCount ] = rPropVal; + + aPropPairHashMap[ PropertyPair( rSequenceName, rPropVal.Name ) ] = nCount; + } + } + } + } +} + +SdrCustomShapeGeometryItem::~SdrCustomShapeGeometryItem() +{ +} +SdrCustomShapeGeometryItem::SdrCustomShapeGeometryItem( SvStream& rIn, sal_uInt16 nVersion ): + SfxPoolItem( SDRATTR_CUSTOMSHAPE_GEOMETRY ) +{ + if ( nVersion ) + { + + } +} +int __EXPORT SdrCustomShapeGeometryItem::operator==( const SfxPoolItem& rCmp ) const +{ + int bRet = SfxPoolItem::operator==( rCmp ); + if ( bRet ) + bRet = ((SdrCustomShapeGeometryItem&)rCmp).aPropSeq == aPropSeq; + return bRet; +} + +SfxItemPresentation __EXPORT SdrCustomShapeGeometryItem::GetPresentation( + SfxItemPresentation ePresentation, SfxMapUnit eCoreMetric, + SfxMapUnit ePresentationMetric, XubString &rText, const IntlWrapper *) const +{ + rText += sal_Unicode( ' ' ); + if ( ePresentation == SFX_ITEM_PRESENTATION_COMPLETE ) + { + XubString aStr; +// SdrItemPool::TakeItemName( Which(), aStr ); + aStr += sal_Unicode( ' ' ); + rText.Insert( aStr, 0 ); + } + return ePresentation; +} + +SfxPoolItem* __EXPORT SdrCustomShapeGeometryItem::Create( SvStream& rIn, sal_uInt16 nItemVersion ) const +{ + return new SdrCustomShapeGeometryItem( rIn, nItemVersion ); +} + +SvStream& __EXPORT SdrCustomShapeGeometryItem::Store( SvStream& rOut, sal_uInt16 nItemVersion ) const +{ + if ( nItemVersion ) + { + + } + return rOut; +} + +SfxPoolItem* __EXPORT SdrCustomShapeGeometryItem::Clone( SfxItemPool *pPool ) const +{ + SdrCustomShapeGeometryItem* pItem = new SdrCustomShapeGeometryItem( GetGeometry() ); +// SdrCustomShapeGeometryItem* pItem = new SdrCustomShapeGeometryItem( *this ); + +/* + for ( i = 0; i < GetCount(); i++ ) + { + const SdrCustomShapeAdjustmentValue& rVal = GetValue( i ); + pItem->SetValue( i, rVal ); + } +*/ + return pItem; +} + +#ifdef SDR_ISPOOLABLE +int __EXPORT SdrCustomShapeGeometryItem::IsPoolable() const +{ + USHORT nId=Which(); + return nId < SDRATTR_NOTPERSIST_FIRST || nId > SDRATTR_NOTPERSIST_LAST; +} +#endif +sal_uInt16 SdrCustomShapeGeometryItem::GetVersion( sal_uInt16 nFileFormatVersion ) const +{ + return 1; +} +sal_Bool SdrCustomShapeGeometryItem::QueryValue( uno::Any& rVal, BYTE nMemberId ) const +{ + rVal <<= aPropSeq; + return sal_True; +} +sal_Bool SdrCustomShapeGeometryItem::PutValue( const uno::Any& rVal, BYTE nMemberId ) +{ + if ( ! ( rVal >>= aPropSeq ) ) + return sal_False; + else + return sal_True; +} +const uno::Sequence< beans::PropertyValue >& SdrCustomShapeGeometryItem::GetGeometry() const +{ + return aPropSeq; +} +/* +const uno::Any* GetValueByName( const rtl::OUString& rProperty ) const +{ + +} +*/ +SdrCustomShapeReplacementURLItem::SdrCustomShapeReplacementURLItem() +: SfxStringItem( SDRATTR_CUSTOMSHAPE_REPLACEMENT_URL, String() ) +{} +SdrCustomShapeReplacementURLItem::SdrCustomShapeReplacementURLItem( const String& rVal ) +: SfxStringItem( SDRATTR_CUSTOMSHAPE_REPLACEMENT_URL, rVal ) +{} + |