diff options
Diffstat (limited to 'chart2/source/tools/PropertyHelper.cxx')
-rw-r--r-- | chart2/source/tools/PropertyHelper.cxx | 317 |
1 files changed, 0 insertions, 317 deletions
diff --git a/chart2/source/tools/PropertyHelper.cxx b/chart2/source/tools/PropertyHelper.cxx deleted file mode 100644 index 9f6a47975..000000000 --- a/chart2/source/tools/PropertyHelper.cxx +++ /dev/null @@ -1,317 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_chart2.hxx" -#include "PropertyHelper.hxx" -#include "ContainerHelper.hxx" -#include "macros.hxx" -#include <com/sun/star/beans/PropertyAttribute.hpp> -#include <com/sun/star/container/XNameContainer.hpp> - -#include <vector> -#include <algorithm> -#include <functional> - -using namespace ::com::sun::star; -using namespace ::com::sun::star::beans; -using ::rtl::OUString; -using ::com::sun::star::uno::Any; -using ::com::sun::star::uno::Reference; -using ::com::sun::star::uno::Sequence; - -namespace -{ -struct lcl_EqualsElement : public ::std::unary_function< OUString, bool > -{ - explicit lcl_EqualsElement( const Any & rValue, const Reference< container::XNameAccess > & xAccess ) - : m_aValue( rValue ), m_xAccess( xAccess ) - { - OSL_ASSERT( m_xAccess.is()); - } - - bool operator() ( const OUString & rName ) - { - try - { - return (m_xAccess->getByName( rName ) == m_aValue); - } - catch( const uno::Exception & ex ) - { - ASSERT_EXCEPTION( ex ); - } - return false; - } - -private: - Any m_aValue; - Reference< container::XNameAccess > m_xAccess; -}; - -struct lcl_StringMatches : public ::std::unary_function< OUString ,bool > -{ - lcl_StringMatches( const OUString & rCmpStr ) : - m_aCmpStr( rCmpStr ) - {} - - bool operator() ( const OUString & rStr ) - { - return rStr.match( m_aCmpStr ); - } - -private: - OUString m_aCmpStr; -}; - -struct lcl_OUStringRestToInt32 : public ::std::unary_function< OUString, sal_Int32 > -{ - lcl_OUStringRestToInt32( sal_Int32 nPrefixLength ) : - m_nPrefixLength( nPrefixLength ) - {} - sal_Int32 operator() ( const OUString & rStr ) - { - if( m_nPrefixLength > rStr.getLength() ) - return 0; - return rStr.copy( m_nPrefixLength ).toInt32( 10 /* radix */ ); - } -private: - sal_Int32 m_nPrefixLength; -}; - -/** adds a fill gradient, fill hatch, fill bitmap, fill transparency gradient, - line dash or line marker to the corresponding name container with a unique - name. - - @param rPrefix - The prefix used for automated name generation. - - @param rPreferredName - If this string is not empty it is used as name if it is unique in the - table. Otherwise a new name is generated using pPrefix. - - @return the new name under which the property was stored in the table -*/ -OUString lcl_addNamedPropertyUniqueNameToTable( - const Any & rValue, - const Reference< container::XNameContainer > & xNameContainer, - const OUString & rPrefix, - const OUString & rPreferredName ) -{ - if( ! xNameContainer.is() || - ! rValue.hasValue() || - ( rValue.getValueType() != xNameContainer->getElementType())) - return rPreferredName; - - try - { - Reference< container::XNameAccess > xNameAccess( xNameContainer, uno::UNO_QUERY_THROW ); - ::std::vector< OUString > aNames( ::chart::ContainerHelper::SequenceToVector( xNameAccess->getElementNames())); - ::std::vector< OUString >::const_iterator aIt( - ::std::find_if( aNames.begin(), aNames.end(), lcl_EqualsElement( rValue, xNameAccess ))); - - // element not found in container - if( aIt == aNames.end()) - { - OUString aUniqueName; - - // check if preferred name is already used - if( rPreferredName.getLength()) - { - aIt = ::std::find( aNames.begin(), aNames.end(), rPreferredName ); - if( aIt == aNames.end()) - aUniqueName = rPreferredName; - } - - if( ! aUniqueName.getLength()) - { - // create a unique id using the prefix plus a number - ::std::vector< sal_Int32 > aNumbers; - ::std::vector< OUString >::iterator aNonConstIt( - ::std::partition( aNames.begin(), aNames.end(), lcl_StringMatches( rPrefix ))); - ::std::transform( aNames.begin(), aNonConstIt, - back_inserter( aNumbers ), - lcl_OUStringRestToInt32( rPrefix.getLength() )); - ::std::vector< sal_Int32 >::const_iterator aMaxIt( - ::std::max_element( aNumbers.begin(), aNumbers.end())); - - sal_Int32 nIndex = 1; - if( aMaxIt != aNumbers.end()) - nIndex = (*aMaxIt) + 1; - - aUniqueName = rPrefix + OUString::valueOf( nIndex ); - } - - OSL_ASSERT( aUniqueName.getLength()); - xNameContainer->insertByName( aUniqueName, rValue ); - return aUniqueName; - } - else - // element found => return name - return *aIt; - } - catch( const uno::Exception & ex ) - { - ASSERT_EXCEPTION( ex ); - } - - return rPreferredName; -} - -} // anonymous namespace - -namespace chart -{ -namespace PropertyHelper -{ - -OUString addLineDashUniqueNameToTable( - const Any & rValue, - const Reference< lang::XMultiServiceFactory > & xFact, - const OUString & rPreferredName ) -{ - if( xFact.is()) - { - Reference< container::XNameContainer > xNameCnt( - xFact->createInstance( C2U( "com.sun.star.drawing.DashTable" )), - uno::UNO_QUERY ); - if( xNameCnt.is()) - return lcl_addNamedPropertyUniqueNameToTable( - rValue, xNameCnt, C2U( "ChartDash " ), rPreferredName ); - } - return OUString(); -} - -OUString addGradientUniqueNameToTable( - const Any & rValue, - const Reference< lang::XMultiServiceFactory > & xFact, - const OUString & rPreferredName ) -{ - if( xFact.is()) - { - Reference< container::XNameContainer > xNameCnt( - xFact->createInstance( C2U( "com.sun.star.drawing.GradientTable" )), - uno::UNO_QUERY ); - if( xNameCnt.is()) - return lcl_addNamedPropertyUniqueNameToTable( - rValue, xNameCnt, C2U( "ChartGradient " ), rPreferredName ); - } - return OUString(); -} - - -OUString addTransparencyGradientUniqueNameToTable( - const Any & rValue, - const Reference< lang::XMultiServiceFactory > & xFact, - const OUString & rPreferredName ) -{ - if( xFact.is()) - { - Reference< container::XNameContainer > xNameCnt( - xFact->createInstance( C2U( "com.sun.star.drawing.TransparencyGradientTable" )), - uno::UNO_QUERY ); - if( xNameCnt.is()) - return lcl_addNamedPropertyUniqueNameToTable( - rValue, xNameCnt, C2U( "ChartTransparencyGradient " ), rPreferredName ); - } - return OUString(); -} - -OUString addHatchUniqueNameToTable( - const Any & rValue, - const Reference< lang::XMultiServiceFactory > & xFact, - const OUString & rPreferredName ) -{ - if( xFact.is()) - { - Reference< container::XNameContainer > xNameCnt( - xFact->createInstance( C2U( "com.sun.star.drawing.HatchTable" )), - uno::UNO_QUERY ); - if( xNameCnt.is()) - return lcl_addNamedPropertyUniqueNameToTable( - rValue, xNameCnt, C2U( "ChartHatch " ), rPreferredName ); - } - return OUString(); -} - -OUString addBitmapUniqueNameToTable( - const Any & rValue, - const Reference< lang::XMultiServiceFactory > & xFact, - const OUString & rPreferredName ) -{ - if( xFact.is()) - { - Reference< container::XNameContainer > xNameCnt( - xFact->createInstance( C2U( "com.sun.star.drawing.BitmapTable" )), - uno::UNO_QUERY ); - if( xNameCnt.is()) - return lcl_addNamedPropertyUniqueNameToTable( - rValue, xNameCnt, C2U( "ChartBitmap " ), rPreferredName ); - } - return OUString(); -} - -// ---------------------------------------- - -void setPropertyValueAny( tPropertyValueMap & rOutMap, tPropertyValueMapKey key, const uno::Any & rAny ) -{ - tPropertyValueMap::iterator aIt( rOutMap.find( key )); - if( aIt == rOutMap.end()) - rOutMap.insert( tPropertyValueMap::value_type( key, rAny )); - else - (*aIt).second = rAny; -} - -template<> - void setPropertyValue< ::com::sun::star::uno::Any >( tPropertyValueMap & rOutMap, tPropertyValueMapKey key, const ::com::sun::star::uno::Any & rAny ) -{ - setPropertyValueAny( rOutMap, key, rAny ); -} - -void setPropertyValueDefaultAny( tPropertyValueMap & rOutMap, tPropertyValueMapKey key, const uno::Any & rAny ) -{ - OSL_ENSURE( rOutMap.end() == rOutMap.find( key ), "Default already exists for property" ); - setPropertyValue( rOutMap, key, rAny ); -} - -template<> - void setPropertyValueDefault< ::com::sun::star::uno::Any >( tPropertyValueMap & rOutMap, tPropertyValueMapKey key, const ::com::sun::star::uno::Any & rAny ) -{ - setPropertyValueDefaultAny( rOutMap, key, rAny ); -} - - -void setEmptyPropertyValueDefault( tPropertyValueMap & rOutMap, tPropertyValueMapKey key ) -{ - setPropertyValueDefault( rOutMap, key, uno::Any()); -} - -} // namespace PropertyHelper - -} // namespace chart - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |