diff options
Diffstat (limited to 'framework/source/classes')
18 files changed, 8 insertions, 5913 deletions
diff --git a/framework/source/classes/actiontriggercontainer.cxx b/framework/source/classes/actiontriggercontainer.cxx deleted file mode 100644 index ea549fd3fda8..000000000000 --- a/framework/source/classes/actiontriggercontainer.cxx +++ /dev/null @@ -1,203 +0,0 @@ -/************************************************************************* - * - * 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_framework.hxx" -#include <classes/actiontriggercontainer.hxx> -#include <cppuhelper/typeprovider.hxx> - -#include <classes/actiontriggerpropertyset.hxx> -#include <classes/actiontriggerseparatorpropertyset.hxx> - -using namespace cppu; -using namespace com::sun::star::uno; -using namespace com::sun::star::lang; -using namespace com::sun::star::container; - -namespace framework -{ - -ActionTriggerContainer::ActionTriggerContainer( const Reference< XMultiServiceFactory >& rServiceManager ) : - PropertySetContainer( rServiceManager ) -{ -} - - -ActionTriggerContainer::~ActionTriggerContainer() -{ -} - -// XInterface -Any SAL_CALL ActionTriggerContainer::queryInterface( const Type& aType ) -throw ( RuntimeException ) -{ - Any a = ::cppu::queryInterface( - aType , - SAL_STATIC_CAST( XMultiServiceFactory*, this ), - SAL_STATIC_CAST( XServiceInfo* , this )); - - if( a.hasValue() ) - { - return a; - } - - return PropertySetContainer::queryInterface( aType ); -} - -void ActionTriggerContainer::acquire() throw() -{ - PropertySetContainer::acquire(); -} - -void ActionTriggerContainer::release() throw() -{ - PropertySetContainer::release(); -} - - -// XMultiServiceFactory -Reference< XInterface > SAL_CALL ActionTriggerContainer::createInstance( const ::rtl::OUString& aServiceSpecifier ) -throw ( ::com::sun::star::uno::Exception, RuntimeException) -{ - if ( aServiceSpecifier.equalsAscii( SERVICENAME_ACTIONTRIGGER )) - return (OWeakObject *)( new ActionTriggerPropertySet( m_xServiceManager )); - else if ( aServiceSpecifier.equalsAscii( SERVICENAME_ACTIONTRIGGERCONTAINER )) - return (OWeakObject *)( new ActionTriggerContainer( m_xServiceManager )); - else if ( aServiceSpecifier.equalsAscii( SERVICENAME_ACTIONTRIGGERSEPARATOR )) - return (OWeakObject *)( new ActionTriggerSeparatorPropertySet( m_xServiceManager )); - else - throw com::sun::star::uno::RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unknown service specifier!" )), (OWeakObject *)this ); -} - - -Reference< XInterface > SAL_CALL ActionTriggerContainer::createInstanceWithArguments( const ::rtl::OUString& ServiceSpecifier, const Sequence< Any >& /*Arguments*/ ) -throw ( Exception, RuntimeException) -{ - return createInstance( ServiceSpecifier ); -} - - -Sequence< ::rtl::OUString > SAL_CALL ActionTriggerContainer::getAvailableServiceNames() -throw ( RuntimeException ) -{ - Sequence< ::rtl::OUString > aSeq( 3 ); - - aSeq[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SERVICENAME_ACTIONTRIGGER )); - aSeq[1] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SERVICENAME_ACTIONTRIGGERCONTAINER )); - aSeq[2] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SERVICENAME_ACTIONTRIGGERSEPARATOR )); - - return aSeq; -} - -// XServiceInfo -::rtl::OUString SAL_CALL ActionTriggerContainer::getImplementationName() -throw ( RuntimeException ) -{ - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( IMPLEMENTATIONNAME_ACTIONTRIGGERCONTAINER )); -} - -sal_Bool SAL_CALL ActionTriggerContainer::supportsService( const ::rtl::OUString& ServiceName ) -throw ( RuntimeException ) -{ - if ( ServiceName.equalsAscii( SERVICENAME_ACTIONTRIGGERCONTAINER )) - return sal_True; - - return sal_False; -} - -Sequence< ::rtl::OUString > SAL_CALL ActionTriggerContainer::getSupportedServiceNames() -throw ( RuntimeException ) -{ - Sequence< ::rtl::OUString > seqServiceNames( 1 ); - - seqServiceNames[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SERVICENAME_ACTIONTRIGGERCONTAINER )); - return seqServiceNames; -} - -// XTypeProvider -Sequence< Type > SAL_CALL ActionTriggerContainer::getTypes() throw ( RuntimeException ) -{ - // Optimize this method ! - // We initialize a static variable only one time. And we don't must use a mutex at every call! - // For the first call; pTypeCollection is NULL - for the second call pTypeCollection is different from NULL! - static ::cppu::OTypeCollection* pTypeCollection = NULL ; - - if ( pTypeCollection == NULL ) - { - // Ready for multithreading; get global mutex for first call of this method only! see before - osl::MutexGuard aGuard( osl::Mutex::getGlobalMutex() ) ; - - // Control these pointer again ... it can be, that another instance will be faster then these! - if ( pTypeCollection == NULL ) - { - // Create a static typecollection ... - static ::cppu::OTypeCollection aTypeCollection( - ::getCppuType(( const Reference< XMultiServiceFactory >*)NULL ) , - ::getCppuType(( const Reference< XIndexContainer >*)NULL ) , - ::getCppuType(( const Reference< XIndexAccess >*)NULL ) , - ::getCppuType(( const Reference< XIndexReplace >*)NULL ) , - ::getCppuType(( const Reference< XServiceInfo >*)NULL ) , - ::getCppuType(( const Reference< XTypeProvider >*)NULL ) ) ; - - // ... and set his address to static pointer! - pTypeCollection = &aTypeCollection ; - } - } - - return pTypeCollection->getTypes() ; -} - -Sequence< sal_Int8 > SAL_CALL ActionTriggerContainer::getImplementationId() throw ( RuntimeException ) -{ - // Create one Id for all instances of this class. - // Use ethernet address to do this! (sal_True) - - // Optimize this method - // We initialize a static variable only one time. And we don't must use a mutex at every call! - // For the first call; pID is NULL - for the second call pID is different from NULL! - static ::cppu::OImplementationId* pID = NULL ; - - if ( pID == NULL ) - { - // Ready for multithreading; get global mutex for first call of this method only! see before - osl::MutexGuard aGuard( osl::Mutex::getGlobalMutex() ) ; - - // Control these pointer again ... it can be, that another instance will be faster then these! - if ( pID == NULL ) - { - // Create a new static ID ... - static ::cppu::OImplementationId aID( sal_False ) ; - // ... and set his address to static pointer! - pID = &aID ; - } - } - - return pID->getImplementationId() ; -} - -} - diff --git a/framework/source/classes/actiontriggerpropertyset.cxx b/framework/source/classes/actiontriggerpropertyset.cxx deleted file mode 100644 index e72efe6e7cba..000000000000 --- a/framework/source/classes/actiontriggerpropertyset.cxx +++ /dev/null @@ -1,478 +0,0 @@ -/************************************************************************* - * - * 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_framework.hxx" - -#include <classes/actiontriggerpropertyset.hxx> -#include <com/sun/star/beans/PropertyAttribute.hpp> -#include <cppuhelper/proptypehlp.hxx> -#include <cppuhelper/typeprovider.hxx> -#include <vcl/svapp.hxx> - - -using namespace cppu; -using namespace com::sun::star::uno; -using namespace com::sun::star::beans; -using namespace com::sun::star::lang; -using namespace com::sun::star::awt; - -// Handles for properties -// (PLEASE SORT THIS FIELD, IF YOU ADD NEW PROPERTIES!) -// We use an enum to define these handles, to use all numbers from 0 to nn and -// if you add someone, you don't must control this! -// But don't forget to change values of follow defines, if you do something with this enum! -enum EPROPERTIES -{ - HANDLE_COMMANDURL, - HANDLE_HELPURL, - HANDLE_IMAGE, - HANDLE_SUBCONTAINER, - HANDLE_TEXT, - PROPERTYCOUNT -}; - -namespace framework -{ - -ActionTriggerPropertySet::ActionTriggerPropertySet( const Reference< XMultiServiceFactory >& /*xServiceManager*/ ) - : ThreadHelpBase ( &Application::GetSolarMutex() ) - , OBroadcastHelper ( m_aLock.getShareableOslMutex() ) - , OPropertySetHelper ( *SAL_STATIC_CAST( OBroadcastHelper *, this )) - , OWeakObject () - , m_xBitmap ( 0 ) - , m_xActionTriggerContainer( 0 ) -{ -} - -ActionTriggerPropertySet::~ActionTriggerPropertySet() -{ -} - -// XInterface -Any SAL_CALL ActionTriggerPropertySet::queryInterface( const Type& aType ) -throw ( RuntimeException ) -{ - Any a = ::cppu::queryInterface( - aType , - SAL_STATIC_CAST( XServiceInfo*, this )); - - if( a.hasValue() ) - return a; - else - { - a = OPropertySetHelper::queryInterface( aType ); - - if( a.hasValue() ) - return a; - } - - return OWeakObject::queryInterface( aType ); -} - -void SAL_CALL ActionTriggerPropertySet::acquire() throw () -{ - OWeakObject::acquire(); -} - -void SAL_CALL ActionTriggerPropertySet::release() throw () -{ - OWeakObject::release(); -} - - -// XServiceInfo -::rtl::OUString SAL_CALL ActionTriggerPropertySet::getImplementationName() -throw ( RuntimeException ) -{ - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( IMPLEMENTATIONNAME_ACTIONTRIGGER )); -} - -sal_Bool SAL_CALL ActionTriggerPropertySet::supportsService( const ::rtl::OUString& ServiceName ) -throw ( RuntimeException ) -{ - if ( ServiceName.equalsAscii( SERVICENAME_ACTIONTRIGGER )) - return sal_True; - - return sal_False; -} - -Sequence< ::rtl::OUString > SAL_CALL ActionTriggerPropertySet::getSupportedServiceNames() -throw ( RuntimeException ) -{ - Sequence< ::rtl::OUString > seqServiceNames( 1 ); - seqServiceNames[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SERVICENAME_ACTIONTRIGGER )); - return seqServiceNames; -} - -// XTypeProvider -Sequence< Type > SAL_CALL ActionTriggerPropertySet::getTypes() throw ( RuntimeException ) -{ - // Optimize this method ! - // We initialize a static variable only one time. And we don't must use a mutex at every call! - // For the first call; pTypeCollection is NULL - for the second call pTypeCollection is different from NULL! - static ::cppu::OTypeCollection* pTypeCollection = NULL ; - - if ( pTypeCollection == NULL ) - { - // Ready for multithreading; get global mutex for first call of this method only! see before - osl::MutexGuard aGuard( osl::Mutex::getGlobalMutex() ) ; - - // Control these pointer again ... it can be, that another instance will be faster then these! - if ( pTypeCollection == NULL ) - { - // Create a static typecollection ... - static ::cppu::OTypeCollection aTypeCollection( - ::getCppuType(( const Reference< XPropertySet >*)NULL ) , - ::getCppuType(( const Reference< XFastPropertySet >*)NULL ) , - ::getCppuType(( const Reference< XMultiPropertySet >*)NULL ) , - ::getCppuType(( const Reference< XServiceInfo >*)NULL ) , - ::getCppuType(( const Reference< XTypeProvider >*)NULL ) ) ; - - // ... and set his address to static pointer! - pTypeCollection = &aTypeCollection ; - } - } - - return pTypeCollection->getTypes() ; -} - -Sequence< sal_Int8 > SAL_CALL ActionTriggerPropertySet::getImplementationId() throw ( RuntimeException ) -{ - // Create one Id for all instances of this class. - // Use ethernet address to do this! (sal_True) - - // Optimize this method - // We initialize a static variable only one time. And we don't must use a mutex at every call! - // For the first call; pID is NULL - for the second call pID is different from NULL! - static ::cppu::OImplementationId* pID = NULL ; - - if ( pID == NULL ) - { - // Ready for multithreading; get global mutex for first call of this method only! see before - osl::MutexGuard aGuard( osl::Mutex::getGlobalMutex() ) ; - - // Control these pointer again ... it can be, that another instance will be faster then these! - if ( pID == NULL ) - { - // Create a new static ID ... - static ::cppu::OImplementationId aID( sal_False ) ; - // ... and set his address to static pointer! - pID = &aID ; - } - } - - return pID->getImplementationId() ; -} - -//--------------------------------------------------------------------------------------------------------- -// OPropertySetHelper implementation -//--------------------------------------------------------------------------------------------------------- - -sal_Bool SAL_CALL ActionTriggerPropertySet::convertFastPropertyValue( - Any& aConvertedValue, - Any& aOldValue, - sal_Int32 nHandle, - const Any& aValue ) -throw( IllegalArgumentException ) -{ - // Check, if value of property will changed in method "setFastPropertyValue_NoBroadcast()". - // Return TRUE, if changed - else return FALSE. - // Attention: Method "impl_tryToChangeProperty()" can throw the IllegalArgumentException !!! - // Initialize return value with FALSE !!! - // (Handle can be invalid) - sal_Bool bReturn = sal_False; - - switch( nHandle ) - { - case HANDLE_COMMANDURL: - bReturn = impl_tryToChangeProperty( m_aCommandURL, aValue, aOldValue, aConvertedValue ); - break; - - case HANDLE_HELPURL: - bReturn = impl_tryToChangeProperty( m_aHelpURL, aValue, aOldValue, aConvertedValue ) ; - break; - - case HANDLE_IMAGE: - bReturn = impl_tryToChangeProperty( m_xBitmap, aValue, aOldValue, aConvertedValue ) ; - break; - - case HANDLE_SUBCONTAINER: - bReturn = impl_tryToChangeProperty( m_xActionTriggerContainer, aValue, aOldValue, aConvertedValue ); - break; - - case HANDLE_TEXT: - bReturn = impl_tryToChangeProperty( m_aText, aValue, aOldValue, aConvertedValue ) ; - break; - } - - // Return state of operation. - return bReturn; -} - - -void SAL_CALL ActionTriggerPropertySet::setFastPropertyValue_NoBroadcast( - sal_Int32 nHandle, const Any& aValue ) -throw( Exception ) -{ - ::osl::MutexGuard aGuard( LockHelper::getGlobalLock().getShareableOslMutex() ); - - // Search for right handle ... and try to set property value. - switch( nHandle ) - { - case HANDLE_COMMANDURL: - aValue >>= m_aCommandURL; - break; - - case HANDLE_HELPURL: - aValue >>= m_aHelpURL; - break; - - case HANDLE_IMAGE: - aValue >>= m_xBitmap; - break; - - case HANDLE_SUBCONTAINER: - aValue >>= m_xActionTriggerContainer; - break; - - case HANDLE_TEXT: - aValue >>= m_aText; - break; - } -} - -void SAL_CALL ActionTriggerPropertySet::getFastPropertyValue( - Any& aValue, sal_Int32 nHandle ) const -{ - ::osl::MutexGuard aGuard( LockHelper::getGlobalLock().getShareableOslMutex() ); - - // Search for right handle ... and try to get property value. - switch( nHandle ) - { - case HANDLE_COMMANDURL: - aValue <<= m_aCommandURL; - break; - - case HANDLE_HELPURL: - aValue <<= m_aHelpURL; - break; - - case HANDLE_IMAGE: - aValue <<= m_xBitmap; - break; - - case HANDLE_SUBCONTAINER: - aValue <<= m_xActionTriggerContainer; - break; - - case HANDLE_TEXT: - aValue <<= m_aText; - break; - } -} - -::cppu::IPropertyArrayHelper& SAL_CALL ActionTriggerPropertySet::getInfoHelper() -{ - // Optimize this method ! - // We initialize a static variable only one time. And we don't must use a mutex at every call! - // For the first call; pInfoHelper is NULL - for the second call pInfoHelper is different from NULL! - static OPropertyArrayHelper* pInfoHelper = NULL; - - if( pInfoHelper == NULL ) - { - // Ready for multithreading - ::osl::MutexGuard aGuard( LockHelper::getGlobalLock().getShareableOslMutex() ); - // Control this pointer again, another instance can be faster then these! - if( pInfoHelper == NULL ) - { - // Define static member to give structure of properties to baseclass "OPropertySetHelper". - // "impl_getStaticPropertyDescriptor" is a non exported and static funtion, who will define a static propertytable. - // "sal_True" say: Table is sorted by name. - static OPropertyArrayHelper aInfoHelper( impl_getStaticPropertyDescriptor(), sal_True ); - pInfoHelper = &aInfoHelper; - } - } - - return (*pInfoHelper); -} - -Reference< XPropertySetInfo > SAL_CALL ActionTriggerPropertySet::getPropertySetInfo() -throw ( RuntimeException ) -{ - // Optimize this method ! - // We initialize a static variable only one time. And we don't must use a mutex at every call! - // For the first call; pInfo is NULL - for the second call pInfo is different from NULL! - static Reference< XPropertySetInfo >* pInfo = NULL ; - - if( pInfo == NULL ) - { - // Ready for multithreading - ::osl::MutexGuard aGuard( LockHelper::getGlobalLock().getShareableOslMutex() ); - // Control this pointer again, another instance can be faster then these! - if( pInfo == NULL ) - { - // Create structure of propertysetinfo for baseclass "OPropertySetHelper". - // (Use method "getInfoHelper()".) - static Reference< XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) ); - pInfo = &xInfo; - } - } - - return (*pInfo); -} - -const Sequence< Property > ActionTriggerPropertySet::impl_getStaticPropertyDescriptor() -{ - static const Property pActionTriggerPropertys[] = - { - Property( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CommandURL" )), HANDLE_COMMANDURL , ::getCppuType((::rtl::OUString*)0) , PropertyAttribute::TRANSIENT ), - Property( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "HelpURL" )), HANDLE_HELPURL , ::getCppuType((::rtl::OUString*)0) , PropertyAttribute::TRANSIENT ), - Property( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Image" )), HANDLE_IMAGE , ::getCppuType((Reference<XBitmap>*)0) , PropertyAttribute::TRANSIENT ), - Property( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "SubContainer" )), HANDLE_SUBCONTAINER , ::getCppuType((::rtl::OUString*)0) , PropertyAttribute::TRANSIENT ), - Property( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Text" )), HANDLE_TEXT , ::getCppuType((Reference<XInterface>*)0) , PropertyAttribute::TRANSIENT ) - }; - - // Use it to initialize sequence! - static const Sequence< Property > seqActionTriggerPropertyDescriptor( pActionTriggerPropertys, PROPERTYCOUNT ); - - // Return static "PropertyDescriptor" - return seqActionTriggerPropertyDescriptor ; -} - - -//****************************************************************************************************************************** -// private method -//****************************************************************************************************************************** -sal_Bool ActionTriggerPropertySet::impl_tryToChangeProperty( - const ::rtl::OUString& sCurrentValue , - const Any& aNewValue , - Any& aOldValue , - Any& aConvertedValue ) -throw( IllegalArgumentException ) -{ - // Set default return value if method failed. - sal_Bool bReturn = sal_False; - // Get new value from any. - // IllegalArgumentException() can be thrown! - ::rtl::OUString sValue ; - convertPropertyValue( sValue, aNewValue ); - - // If value change ... - if( sValue != sCurrentValue ) - { - // ... set information of change. - aOldValue <<= sCurrentValue ; - aConvertedValue <<= sValue ; - // Return OK - "value will be change ..." - bReturn = sal_True; - } - else - { - // ... clear information of return parameter! - aOldValue.clear () ; - aConvertedValue.clear () ; - // Return NOTHING - "value will not be change ..." - bReturn = sal_False; - } - - return bReturn; -} - - -sal_Bool ActionTriggerPropertySet::impl_tryToChangeProperty( - const Reference< XBitmap > aCurrentValue , - const Any& aNewValue , - Any& aOldValue , - Any& aConvertedValue ) -throw( IllegalArgumentException ) -{ - // Set default return value if method failed. - sal_Bool bReturn = sal_False; - // Get new value from any. - // IllegalArgumentException() can be thrown! - Reference< XBitmap > aValue ; - convertPropertyValue( aValue, aNewValue ); - - // If value change ... - if( aValue != aCurrentValue ) - { - // ... set information of change. - aOldValue <<= aCurrentValue ; - aConvertedValue <<= aValue ; - // Return OK - "value will be change ..." - bReturn = sal_True; - } - else - { - // ... clear information of return parameter! - aOldValue.clear () ; - aConvertedValue.clear () ; - // Return NOTHING - "value will not be change ..." - bReturn = sal_False; - } - - return bReturn; -} - -sal_Bool ActionTriggerPropertySet::impl_tryToChangeProperty( - const Reference< XInterface > aCurrentValue , - const Any& aNewValue , - Any& aOldValue , - Any& aConvertedValue ) -throw( IllegalArgumentException ) -{ - // Set default return value if method failed. - sal_Bool bReturn = sal_False; - // Get new value from any. - // IllegalArgumentException() can be thrown! - Reference< XInterface > aValue ; - convertPropertyValue( aValue, aNewValue ); - - // If value change ... - if( aValue != aCurrentValue ) - { - // ... set information of change. - aOldValue <<= aCurrentValue ; - aConvertedValue <<= aValue ; - // Return OK - "value will be change ..." - bReturn = sal_True; - } - else - { - // ... clear information of return parameter! - aOldValue.clear () ; - aConvertedValue.clear () ; - // Return NOTHING - "value will not be change ..." - bReturn = sal_False; - } - - return bReturn; -} - -} - diff --git a/framework/source/classes/actiontriggerseparatorpropertyset.cxx b/framework/source/classes/actiontriggerseparatorpropertyset.cxx deleted file mode 100644 index f68c293fcef4..000000000000 --- a/framework/source/classes/actiontriggerseparatorpropertyset.cxx +++ /dev/null @@ -1,349 +0,0 @@ -/************************************************************************* - * - * 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_framework.hxx" - -#include <classes/actiontriggerseparatorpropertyset.hxx> -#include <com/sun/star/beans/PropertyAttribute.hpp> -#include <cppuhelper/proptypehlp.hxx> -#include <cppuhelper/typeprovider.hxx> -#include <vcl/svapp.hxx> - - -using namespace cppu; -using namespace com::sun::star::uno; -using namespace com::sun::star::beans; -using namespace com::sun::star::lang; -using namespace com::sun::star::awt; - -// Handles for properties -// (PLEASE SORT THIS FIELD, IF YOU ADD NEW PROPERTIES!) -// We use an enum to define these handles, to use all numbers from 0 to nn and -// if you add someone, you don't must control this! -// But don't forget to change values of follow defines, if you do something with this enum! -enum EPROPERTIES -{ - HANDLE_TYPE, - PROPERTYCOUNT -}; - -namespace framework -{ - -ActionTriggerSeparatorPropertySet::ActionTriggerSeparatorPropertySet( const Reference< XMultiServiceFactory >& /*ServiceManager*/ ) - : ThreadHelpBase ( &Application::GetSolarMutex() ) - , OBroadcastHelper ( m_aLock.getShareableOslMutex() ) - , OPropertySetHelper ( *SAL_STATIC_CAST( OBroadcastHelper *, this ) ) - , OWeakObject ( ) - , m_nSeparatorType( 0 ) -{ -} - -ActionTriggerSeparatorPropertySet::~ActionTriggerSeparatorPropertySet() -{ -} - -// XInterface -Any SAL_CALL ActionTriggerSeparatorPropertySet::queryInterface( const Type& aType ) -throw ( RuntimeException ) -{ - Any a = ::cppu::queryInterface( - aType , - SAL_STATIC_CAST( XServiceInfo*, this )); - - if( a.hasValue() ) - return a; - else - { - a = OPropertySetHelper::queryInterface( aType ); - - if( a.hasValue() ) - return a; - } - - return OWeakObject::queryInterface( aType ); -} - -void ActionTriggerSeparatorPropertySet::acquire() throw() -{ - OWeakObject::acquire(); -} - -void ActionTriggerSeparatorPropertySet::release() throw() -{ - OWeakObject::release(); -} - -// XServiceInfo -::rtl::OUString SAL_CALL ActionTriggerSeparatorPropertySet::getImplementationName() -throw ( RuntimeException ) -{ - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( IMPLEMENTATIONNAME_ACTIONTRIGGERSEPARATOR )); -} - -sal_Bool SAL_CALL ActionTriggerSeparatorPropertySet::supportsService( const ::rtl::OUString& ServiceName ) -throw ( RuntimeException ) -{ - if ( ServiceName.equalsAscii( SERVICENAME_ACTIONTRIGGERSEPARATOR )) - return sal_True; - - return sal_False; -} - -Sequence< ::rtl::OUString > SAL_CALL ActionTriggerSeparatorPropertySet::getSupportedServiceNames() -throw ( RuntimeException ) -{ - Sequence< ::rtl::OUString > seqServiceNames( 1 ); - seqServiceNames[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SERVICENAME_ACTIONTRIGGERSEPARATOR )); - return seqServiceNames; -} - -// XTypeProvider -Sequence< Type > SAL_CALL ActionTriggerSeparatorPropertySet::getTypes() throw ( RuntimeException ) -{ - // Optimize this method ! - // We initialize a static variable only one time. And we don't must use a mutex at every call! - // For the first call; pTypeCollection is NULL - for the second call pTypeCollection is different from NULL! - static ::cppu::OTypeCollection* pTypeCollection = NULL ; - - if ( pTypeCollection == NULL ) - { - // Ready for multithreading; get global mutex for first call of this method only! see before - osl::MutexGuard aGuard( osl::Mutex::getGlobalMutex() ) ; - - // Control these pointer again ... it can be, that another instance will be faster then these! - if ( pTypeCollection == NULL ) - { - // Create a static typecollection ... - static ::cppu::OTypeCollection aTypeCollection( - ::getCppuType(( const Reference< XPropertySet >*)NULL ) , - ::getCppuType(( const Reference< XFastPropertySet >*)NULL ) , - ::getCppuType(( const Reference< XMultiPropertySet >*)NULL ) , - ::getCppuType(( const Reference< XServiceInfo >*)NULL ) , - ::getCppuType(( const Reference< XTypeProvider >*)NULL ) ) ; - - // ... and set his address to static pointer! - pTypeCollection = &aTypeCollection ; - } - } - - return pTypeCollection->getTypes() ; -} - -Sequence< sal_Int8 > SAL_CALL ActionTriggerSeparatorPropertySet::getImplementationId() throw ( RuntimeException ) -{ - // Create one Id for all instances of this class. - // Use ethernet address to do this! (sal_True) - - // Optimize this method - // We initialize a static variable only one time. And we don't must use a mutex at every call! - // For the first call; pID is NULL - for the second call pID is different from NULL! - static ::cppu::OImplementationId* pID = NULL ; - - if ( pID == NULL ) - { - // Ready for multithreading; get global mutex for first call of this method only! see before - osl::MutexGuard aGuard( osl::Mutex::getGlobalMutex() ) ; - - // Control these pointer again ... it can be, that another instance will be faster then these! - if ( pID == NULL ) - { - // Create a new static ID ... - static ::cppu::OImplementationId aID( sal_False ) ; - // ... and set his address to static pointer! - pID = &aID ; - } - } - - return pID->getImplementationId() ; -} - -//--------------------------------------------------------------------------------------------------------- -// OPropertySetHelper implementation -//--------------------------------------------------------------------------------------------------------- - -sal_Bool SAL_CALL ActionTriggerSeparatorPropertySet::convertFastPropertyValue( - Any& aConvertedValue, - Any& aOldValue, - sal_Int32 nHandle, - const Any& aValue ) -throw( IllegalArgumentException ) -{ - // Check, if value of property will changed in method "setFastPropertyValue_NoBroadcast()". - // Return TRUE, if changed - else return FALSE. - // Attention: Method "impl_tryToChangeProperty()" can throw the IllegalArgumentException !!! - // Initialize return value with FALSE !!! - // (Handle can be invalid) - sal_Bool bReturn = sal_False; - - switch( nHandle ) - { - case HANDLE_TYPE: - bReturn = impl_tryToChangeProperty( m_nSeparatorType, aValue, aOldValue, aConvertedValue ); - break; - } - - // Return state of operation. - return bReturn; -} - - -void SAL_CALL ActionTriggerSeparatorPropertySet::setFastPropertyValue_NoBroadcast( - sal_Int32 nHandle, const Any& aValue ) -throw( Exception ) -{ - ::osl::MutexGuard aGuard( LockHelper::getGlobalLock().getShareableOslMutex() ); - - // Search for right handle ... and try to set property value. - switch( nHandle ) - { - case HANDLE_TYPE: - aValue >>= m_nSeparatorType; - break; - } -} - -void SAL_CALL ActionTriggerSeparatorPropertySet::getFastPropertyValue( - Any& aValue, sal_Int32 nHandle ) const -{ - ::osl::MutexGuard aGuard( LockHelper::getGlobalLock().getShareableOslMutex() ); - - // Search for right handle ... and try to get property value. - switch( nHandle ) - { - case HANDLE_TYPE: - aValue <<= m_nSeparatorType; - break; - } -} - -::cppu::IPropertyArrayHelper& SAL_CALL ActionTriggerSeparatorPropertySet::getInfoHelper() -{ - // Optimize this method ! - // We initialize a static variable only one time. And we don't must use a mutex at every call! - // For the first call; pInfoHelper is NULL - for the second call pInfoHelper is different from NULL! - static OPropertyArrayHelper* pInfoHelper = NULL; - - if( pInfoHelper == NULL ) - { - // Ready for multithreading - ::osl::MutexGuard aGuard( LockHelper::getGlobalLock().getShareableOslMutex() ); - // Control this pointer again, another instance can be faster then these! - if( pInfoHelper == NULL ) - { - // Define static member to give structure of properties to baseclass "OPropertySetHelper". - // "impl_getStaticPropertyDescriptor" is a non exported and static funtion, who will define a static propertytable. - // "sal_True" say: Table is sorted by name. - static OPropertyArrayHelper aInfoHelper( impl_getStaticPropertyDescriptor(), sal_True ); - pInfoHelper = &aInfoHelper; - } - } - - return (*pInfoHelper); -} - -Reference< XPropertySetInfo > SAL_CALL ActionTriggerSeparatorPropertySet::getPropertySetInfo() -throw ( RuntimeException ) -{ - // Optimize this method ! - // We initialize a static variable only one time. And we don't must use a mutex at every call! - // For the first call; pInfo is NULL - for the second call pInfo is different from NULL! - static Reference< XPropertySetInfo >* pInfo = NULL ; - - if( pInfo == NULL ) - { - // Ready for multithreading - ::osl::MutexGuard aGuard( LockHelper::getGlobalLock().getShareableOslMutex() ); - // Control this pointer again, another instance can be faster then these! - if( pInfo == NULL ) - { - // Create structure of propertysetinfo for baseclass "OPropertySetHelper". - // (Use method "getInfoHelper()".) - static Reference< XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) ); - pInfo = &xInfo; - } - } - - return (*pInfo); -} - -const Sequence< Property > ActionTriggerSeparatorPropertySet::impl_getStaticPropertyDescriptor() -{ - static const Property pActionTriggerPropertys[] = - { - Property( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "SeparatorType" )), HANDLE_TYPE, ::getCppuType((sal_Int16*)0), PropertyAttribute::TRANSIENT ) - }; - - // Use it to initialize sequence! - static const Sequence< Property > seqActionTriggerPropertyDescriptor( pActionTriggerPropertys, PROPERTYCOUNT ); - - // Return static "PropertyDescriptor" - return seqActionTriggerPropertyDescriptor ; -} - - -//****************************************************************************************************************************** -// private method -//****************************************************************************************************************************** -sal_Bool ActionTriggerSeparatorPropertySet::impl_tryToChangeProperty( - sal_Int16 aCurrentValue , - const Any& aNewValue , - Any& aOldValue , - Any& aConvertedValue ) -throw( IllegalArgumentException ) -{ - // Set default return value if method failed. - sal_Bool bReturn = sal_False; - // Get new value from any. - // IllegalArgumentException() can be thrown! - sal_Int16 aValue = 0; - convertPropertyValue( aValue, aNewValue ); - - // If value change ... - if( aValue != aCurrentValue ) - { - // ... set information of change. - aOldValue <<= aCurrentValue ; - aConvertedValue <<= aValue ; - // Return OK - "value will be change ..." - bReturn = sal_True; - } - else - { - // ... clear information of return parameter! - aOldValue.clear () ; - aConvertedValue.clear () ; - // Return NOTHING - "value will not be change ..." - bReturn = sal_False; - } - - return bReturn; -} - -} - diff --git a/framework/source/classes/addonmenu.cxx b/framework/source/classes/addonmenu.cxx deleted file mode 100644 index 4961a8f7c1f2..000000000000 --- a/framework/source/classes/addonmenu.cxx +++ /dev/null @@ -1,456 +0,0 @@ -/************************************************************************* - * - * 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_framework.hxx" - -//_________________________________________________________________________________________________________________ -// my own includes -//_________________________________________________________________________________________________________________ -#include "classes/addonmenu.hxx" -#include "classes/addonsoptions.hxx" -#include <general.h> -#include <macros/debug/assertion.hxx> -#include <helper/imageproducer.hxx> -#include <xml/menuconfiguration.hxx> - -//_________________________________________________________________________________________________________________ -// interface includes -//_________________________________________________________________________________________________________________ -#include <com/sun/star/uno/Reference.hxx> -#include <com/sun/star/util/URL.hpp> -#include <com/sun/star/util/XURLTransformer.hpp> -#include <com/sun/star/lang/XServiceInfo.hpp> - -//_________________________________________________________________________________________________________________ -// includes of other projects -//_________________________________________________________________________________________________________________ -#include <tools/config.hxx> -#include <vcl/svapp.hxx> -#include <svtools/menuoptions.hxx> -#include <svl/solar.hrc> -//_________________________________________________________________________________________________________________ -// namespace -//_________________________________________________________________________________________________________________ - -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::frame; -using namespace ::com::sun::star::beans; - -// Please look at sfx2/inc/sfxsids.hrc the values are defined there. Due to build dependencies -// we cannot include the header file. -const USHORT SID_HELPMENU = (SID_SFX_START + 410); -const USHORT SID_ONLINE_REGISTRATION = (SID_SFX_START + 1537); - -namespace framework -{ - -AddonMenu::AddonMenu( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame ) : - m_xFrame( rFrame ) -{ -} - -AddonMenu::~AddonMenu() -{ - for ( USHORT i = 0; i < GetItemCount(); i++ ) - { - if ( GetItemType( i ) != MENUITEM_SEPARATOR ) - { - // delete user attributes created with new! - USHORT nId = GetItemId( i ); - MenuConfiguration::Attributes* pUserAttributes = (MenuConfiguration::Attributes*)GetUserValue( nId ); - delete pUserAttributes; - delete GetPopupMenu( nId ); - } - } -} - -// ------------------------------------------------------------------------ - -// ------------------------------------------------------------------------ -// Check if command URL string has the unique prefix to identify addon popup menus -sal_Bool AddonPopupMenu::IsCommandURLPrefix( const ::rtl::OUString& aCmdURL ) -{ - const char aPrefixCharBuf[] = ADDONSPOPUPMENU_URL_PREFIX_STR; - - return aCmdURL.matchAsciiL( aPrefixCharBuf, sizeof( aPrefixCharBuf )-1, 0 ); -} - -AddonPopupMenu::AddonPopupMenu( const com::sun::star::uno::Reference< com::sun::star::frame::XFrame >& rFrame ) : - AddonMenu( rFrame ) -{ -} - -AddonPopupMenu::~AddonPopupMenu() -{ -} - -// ------------------------------------------------------------------------ - -static Reference< XModel > GetModelFromFrame( const Reference< XFrame >& rFrame ) -{ - // Query for the model to get check the context information - Reference< XModel > xModel; - if ( rFrame.is() ) - { - Reference< XController > xController( rFrame->getController(), UNO_QUERY ); - if ( xController.is() ) - xModel = xController->getModel(); - } - - return xModel; -} - -// ------------------------------------------------------------------------ - -sal_Bool AddonMenuManager::HasAddonMenuElements() -{ - return AddonsOptions().HasAddonsMenu(); -} - -sal_Bool AddonMenuManager::HasAddonHelpMenuElements() -{ - return AddonsOptions().HasAddonsHelpMenu(); -} - -// Factory method to create different Add-On menu types -PopupMenu* AddonMenuManager::CreatePopupMenuType( MenuType eMenuType, const Reference< XFrame >& rFrame ) -{ - if ( eMenuType == ADDON_MENU ) - return new AddonMenu( rFrame ); - else if ( eMenuType == ADDON_POPUPMENU ) - return new AddonPopupMenu( rFrame ); - else - return NULL; -} - -// Create the Add-Ons menu -AddonMenu* AddonMenuManager::CreateAddonMenu( const Reference< XFrame >& rFrame ) -{ - AddonsOptions aOptions; - AddonMenu* pAddonMenu = NULL; - USHORT nUniqueMenuId = ADDONMENU_ITEMID_START; - - const Sequence< Sequence< PropertyValue > >& rAddonMenuEntries = aOptions.GetAddonsMenu(); - if ( rAddonMenuEntries.getLength() > 0 ) - { - pAddonMenu = (AddonMenu *)AddonMenuManager::CreatePopupMenuType( ADDON_MENU, rFrame ); - Reference< XModel > xModel = GetModelFromFrame( rFrame ); - AddonMenuManager::BuildMenu( pAddonMenu, ADDON_MENU, MENU_APPEND, nUniqueMenuId, rAddonMenuEntries, rFrame, xModel ); - - // Don't return an empty Add-On menu - if ( pAddonMenu->GetItemCount() == 0 ) - { - delete pAddonMenu; - pAddonMenu = NULL; - } - } - - return pAddonMenu; -} - -// Returns the next insert position from nPos. -USHORT AddonMenuManager::GetNextPos( USHORT nPos ) -{ - return ( nPos == MENU_APPEND ) ? MENU_APPEND : ( nPos+1 ); -} - - -static USHORT FindMenuId( Menu* pMenu, const String aCommand ) -{ - USHORT nPos = 0; - String aCmd; - for ( nPos = 0; nPos < pMenu->GetItemCount(); nPos++ ) - { - USHORT nId = pMenu->GetItemId( nPos ); - aCmd = pMenu->GetItemCommand( nId ); - if ( aCmd == aCommand ) - return nId; - } - - return USHRT_MAX; -} - - -// Merge the Add-Ons help menu items into the given menu bar at a defined pos -void AddonMenuManager::MergeAddonHelpMenu( const Reference< XFrame >& rFrame, MenuBar* pMergeMenuBar ) -{ - if ( pMergeMenuBar ) - { - PopupMenu* pHelpMenu = pMergeMenuBar->GetPopupMenu( SID_HELPMENU ); - if ( !pHelpMenu ) - { - USHORT nId = FindMenuId( pMergeMenuBar, String::CreateFromAscii( ".uno:HelpMenu" )); - if ( nId != USHRT_MAX ) - pHelpMenu = pMergeMenuBar->GetPopupMenu( nId ); - } - - if ( pHelpMenu ) - { - static const char REFERENCECOMMAND_AFTER[] = ".uno:OnlineRegistrationDlg"; - static const char REFERENCECOMMAND_BEFORE[] = ".uno:About"; - - // Add-Ons help menu items should be inserted after the "registration" menu item - bool bAddAfter = true; - USHORT nItemCount = pHelpMenu->GetItemCount(); - USHORT nRegPos = pHelpMenu->GetItemPos( SID_ONLINE_REGISTRATION ); - USHORT nInsPos = nRegPos; - USHORT nInsSepAfterPos = MENU_APPEND; - USHORT nUniqueMenuId = ADDONMENU_ITEMID_START; - AddonsOptions aOptions; - - if ( nRegPos == USHRT_MAX ) - { - // try to detect the online registration dialog menu item with the command URL - USHORT nId = FindMenuId( pHelpMenu, String::CreateFromAscii( REFERENCECOMMAND_AFTER )); - nRegPos = pHelpMenu->GetItemPos( nId ); - nInsPos = nRegPos; - } - - if ( nRegPos == USHRT_MAX ) - { - // second try: - // try to detect the about menu item with the command URL - USHORT nId = FindMenuId( pHelpMenu, String::CreateFromAscii( REFERENCECOMMAND_BEFORE )); - nRegPos = pHelpMenu->GetItemPos( nId ); - nInsPos = nRegPos; - bAddAfter = false; - } - - Sequence< Sequence< PropertyValue > > aAddonSubMenu; - const Sequence< Sequence< PropertyValue > >& rAddonHelpMenuEntries = aOptions.GetAddonsHelpMenu(); - - nInsPos = bAddAfter ? AddonMenuManager::GetNextPos( nInsPos ) : nInsPos; - if ( nInsPos < nItemCount && pHelpMenu->GetItemType( nInsPos ) != MENUITEM_SEPARATOR ) - nInsSepAfterPos = nInsPos; - - Reference< XModel > xModel = GetModelFromFrame( rFrame ); - AddonMenuManager::BuildMenu( pHelpMenu, ADDON_MENU, nInsPos, nUniqueMenuId, rAddonHelpMenuEntries, rFrame, xModel ); - - if ( pHelpMenu->GetItemCount() > nItemCount ) - { - if ( nInsSepAfterPos < MENU_APPEND ) - { - nInsSepAfterPos += ( pHelpMenu->GetItemCount() - nItemCount ); - if ( pHelpMenu->GetItemType( nInsSepAfterPos ) != MENUITEM_SEPARATOR ) - pHelpMenu->InsertSeparator( nInsSepAfterPos ); - } - if ( nRegPos < MENU_APPEND ) - pHelpMenu->InsertSeparator( nRegPos+1 ); - else - pHelpMenu->InsertSeparator( nItemCount ); - } - } - } -} - -// Merge the addon popup menus into the given menu bar at the provided pos. -void AddonMenuManager::MergeAddonPopupMenus( const Reference< XFrame >& rFrame, - const Reference< XModel >& rModel, - USHORT nMergeAtPos, - MenuBar* pMergeMenuBar ) -{ - if ( pMergeMenuBar ) - { - AddonsOptions aAddonsOptions; - USHORT nInsertPos = nMergeAtPos; - - ::rtl::OUString aTitle; - ::rtl::OUString aURL; - ::rtl::OUString aTarget; - ::rtl::OUString aImageId; - ::rtl::OUString aContext; - Sequence< Sequence< PropertyValue > > aAddonSubMenu; - USHORT nUniqueMenuId = ADDONMENU_ITEMID_START; - - const Sequence< Sequence< PropertyValue > >& rAddonMenuEntries = aAddonsOptions.GetAddonsMenuBarPart(); - for ( sal_Int32 i = 0; i < rAddonMenuEntries.getLength(); i++ ) - { - AddonMenuManager::GetMenuEntry( rAddonMenuEntries[i], - aTitle, - aURL, - aTarget, - aImageId, - aContext, - aAddonSubMenu ); - if ( aTitle.getLength() > 0 && - aURL.getLength() > 0 && - aAddonSubMenu.getLength() > 0 && - AddonMenuManager::IsCorrectContext( rModel, aContext )) - { - USHORT nId = nUniqueMenuId++; - AddonPopupMenu* pAddonPopupMenu = (AddonPopupMenu *)AddonMenuManager::CreatePopupMenuType( ADDON_POPUPMENU, rFrame ); - - AddonMenuManager::BuildMenu( pAddonPopupMenu, ADDON_MENU, MENU_APPEND, nUniqueMenuId, aAddonSubMenu, rFrame, rModel ); - - if ( pAddonPopupMenu->GetItemCount() > 0 ) - { - pAddonPopupMenu->SetCommandURL( aURL ); - pMergeMenuBar->InsertItem( nId, aTitle, 0, nInsertPos++ ); - pMergeMenuBar->SetPopupMenu( nId, pAddonPopupMenu ); - - // Store the command URL into the VCL menu bar for later identification - pMergeMenuBar->SetItemCommand( nId, aURL ); - } - else - delete pAddonPopupMenu; - } - } - } -} - -// Insert the menu and sub menu entries into pCurrentMenu with the aAddonMenuDefinition provided -void AddonMenuManager::BuildMenu( PopupMenu* pCurrentMenu, - MenuType nSubMenuType, - USHORT nInsPos, - USHORT& nUniqueMenuId, - Sequence< Sequence< PropertyValue > > aAddonMenuDefinition, - const Reference< XFrame >& rFrame, - const Reference< XModel >& rModel ) -{ - Sequence< Sequence< PropertyValue > > aAddonSubMenu; - BOOL bInsertSeparator = FALSE; - UINT32 i = 0; - UINT32 nElements = 0; - UINT32 nCount = aAddonMenuDefinition.getLength(); - AddonsOptions aAddonsOptions; - - ::rtl::OUString aTitle; - ::rtl::OUString aURL; - ::rtl::OUString aTarget; - ::rtl::OUString aImageId; - ::rtl::OUString aContext; - - for ( i = 0; i < nCount; ++i ) - { - GetMenuEntry( aAddonMenuDefinition[i], aTitle, aURL, aTarget, aImageId, aContext, aAddonSubMenu ); - - if ( !IsCorrectContext( rModel, aContext ) || ( !aTitle.getLength() && !aURL.getLength() )) - continue; - - if ( aURL == ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "private:separator" ))) - bInsertSeparator = TRUE; - else - { - PopupMenu* pSubMenu = NULL; - if ( aAddonSubMenu.getLength() > 0 ) - { - pSubMenu = AddonMenuManager::CreatePopupMenuType( nSubMenuType, rFrame ); - AddonMenuManager::BuildMenu( pSubMenu, nSubMenuType, MENU_APPEND, nUniqueMenuId, aAddonSubMenu, rFrame, rModel ); - - // Don't create a menu item for an empty sub menu - if ( pSubMenu->GetItemCount() == 0 ) - { - delete pSubMenu; - pSubMenu = NULL; - continue; - } - } - - if ( bInsertSeparator && nElements > 0 ) - { - // Insert a separator only when we insert a new element afterwards and we - // have already one before us - nElements = 0; - bInsertSeparator = FALSE; - pCurrentMenu->InsertSeparator( nInsPos ); - nInsPos = AddonMenuManager::GetNextPos( nInsPos ); - } - - USHORT nId = nUniqueMenuId++; - pCurrentMenu->InsertItem( nId, aTitle, 0, nInsPos ); - nInsPos = AddonMenuManager::GetNextPos( nInsPos ); - - ++nElements; - - // Store values from configuration to the New and Wizard menu entries to enable - // sfx2 based code to support high contrast mode correctly! - pCurrentMenu->SetUserValue( nId, ULONG( new MenuConfiguration::Attributes( aTarget, aImageId )) ); - pCurrentMenu->SetItemCommand( nId, aURL ); - - if ( pSubMenu ) - pCurrentMenu->SetPopupMenu( nId, pSubMenu ); - } - } -} - -// Retrieve the menu entry property values from a sequence -void AddonMenuManager::GetMenuEntry( const Sequence< PropertyValue >& rAddonMenuEntry, - ::rtl::OUString& rTitle, - ::rtl::OUString& rURL, - ::rtl::OUString& rTarget, - ::rtl::OUString& rImageId, - ::rtl::OUString& rContext, - Sequence< Sequence< PropertyValue > >& rAddonSubMenu ) -{ - // Reset submenu parameter - rAddonSubMenu = Sequence< Sequence< PropertyValue > >(); - - for ( int i = 0; i < rAddonMenuEntry.getLength(); i++ ) - { - ::rtl::OUString aMenuEntryPropName = rAddonMenuEntry[i].Name; - if ( aMenuEntryPropName == ADDONSMENUITEM_PROPERTYNAME_URL ) - rAddonMenuEntry[i].Value >>= rURL; - else if ( aMenuEntryPropName == ADDONSMENUITEM_PROPERTYNAME_TITLE ) - rAddonMenuEntry[i].Value >>= rTitle; - else if ( aMenuEntryPropName == ADDONSMENUITEM_PROPERTYNAME_TARGET ) - rAddonMenuEntry[i].Value >>= rTarget; - else if ( aMenuEntryPropName == ADDONSMENUITEM_PROPERTYNAME_IMAGEIDENTIFIER ) - rAddonMenuEntry[i].Value >>= rImageId; - else if ( aMenuEntryPropName == ADDONSMENUITEM_PROPERTYNAME_SUBMENU ) - rAddonMenuEntry[i].Value >>= rAddonSubMenu; - else if ( aMenuEntryPropName == ADDONSMENUITEM_PROPERTYNAME_CONTEXT ) - rAddonMenuEntry[i].Value >>= rContext; - } -} - -// Check if the context string matches the provided xModel context -sal_Bool AddonMenuManager::IsCorrectContext( const Reference< XModel >& rModel, const ::rtl::OUString& aContext ) -{ - if ( rModel.is() ) - { - Reference< com::sun::star::lang::XServiceInfo > xServiceInfo( rModel, UNO_QUERY ); - if ( xServiceInfo.is() ) - { - sal_Int32 nIndex = 0; - do - { - ::rtl::OUString aToken = aContext.getToken( 0, ',', nIndex ); - - if ( xServiceInfo->supportsService( aToken )) - return sal_True; - } - while ( nIndex >= 0 ); - } - } - - return ( aContext.getLength() == 0 ); -} - -} - diff --git a/framework/source/classes/addonsoptions.cxx b/framework/source/classes/addonsoptions.cxx deleted file mode 100644 index 9bdaeb7dfda3..000000000000 --- a/framework/source/classes/addonsoptions.cxx +++ /dev/null @@ -1,1858 +0,0 @@ -/************************************************************************* - * - * 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_framework.hxx" - -//_________________________________________________________________________________________________________________ -// includes -//_________________________________________________________________________________________________________________ -#include <classes/addonsoptions.hxx> -#include <unotools/configmgr.hxx> -#include <unotools/configitem.hxx> -#include <unotools/ucbstreamhelper.hxx> -#include <tools/debug.hxx> -#include <tools/stream.hxx> -#include <tools/color.hxx> -#include <com/sun/star/uno/Any.hxx> -#include <com/sun/star/uno/Sequence.hxx> -#include "com/sun/star/util/XMacroExpander.hpp" -#include "com/sun/star/uno/XComponentContext.hpp" -#include "com/sun/star/beans/XPropertySet.hpp" -#include <rtl/ustrbuf.hxx> -#include <rtl/uri.hxx> -#include <comphelper/processfactory.hxx> -#include <vcl/graph.hxx> -#include <svtools/filter.hxx> - -#include <hash_map> -#include <algorithm> -#include <vector> - -//_________________________________________________________________________________________________________________ -// namespaces -//_________________________________________________________________________________________________________________ - -using namespace ::std ; -using namespace ::utl ; -using namespace ::osl ; -using namespace ::com::sun::star::uno ; -using namespace ::com::sun::star::beans ; -using namespace ::com::sun::star::lang ; - -//_________________________________________________________________________________________________________________ -// const -//_________________________________________________________________________________________________________________ - -#define ROOTNODE_ADDONMENU ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Office.Addons" )) -#define PATHDELIMITER ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/" )) -#define TOOLBARITEMS ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ToolBarItems" )) -#define SEPARATOR_URL_STR "private:separator" -#define SEPARATOR_URL_LEN 17 -#define SEPARATOR_URL ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( SEPARATOR_URL_STR )) - -#define PROPERTYNAME_URL ADDONSMENUITEM_PROPERTYNAME_URL -#define PROPERTYNAME_TITLE ADDONSMENUITEM_PROPERTYNAME_TITLE -#define PROPERTYNAME_TARGET ADDONSMENUITEM_PROPERTYNAME_TARGET -#define PROPERTYNAME_IMAGEIDENTIFIER ADDONSMENUITEM_PROPERTYNAME_IMAGEIDENTIFIER -#define PROPERTYNAME_CONTEXT ADDONSMENUITEM_PROPERTYNAME_CONTEXT -#define PROPERTYNAME_SUBMENU ADDONSMENUITEM_PROPERTYNAME_SUBMENU -#define PROPERTYNAME_CONTROLTYPE ADDONSMENUITEM_PROPERTYNAME_CONTROLTYPE -#define PROPERTYNAME_WIDTH ADDONSMENUITEM_PROPERTYNAME_WIDTH - -#define PROPERTYNAME_IMAGESMALL ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ImageSmall" )) -#define PROPERTYNAME_IMAGEBIG ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ImageBig" )) -#define PROPERTYNAME_IMAGESMALLHC ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ImageSmallHC" )) -#define PROPERTYNAME_IMAGEBIGHC ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ImageBigHC" )) -#define PROPERTYNAME_IMAGESMALL_URL ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ImageSmallURL" )) -#define PROPERTYNAME_IMAGEBIG_URL ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ImageBigURL" )) -#define PROPERTYNAME_IMAGESMALLHC_URL ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ImageSmallHCURL" )) -#define PROPERTYNAME_IMAGEBIGHC_URL ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ImageBigHCURL" )) - -#define IMAGES_NODENAME ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("UserDefinedImages" )) -#define PRIVATE_IMAGE_URL ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("private:image/" )) - -#define PROPERTYNAME_MERGEMENU_MERGEPOINT ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergePoint" )) -#define PROPERTYNAME_MERGEMENU_MERGECOMMAND ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergeCommand" )) -#define PROPERTYNAME_MERGEMENU_MERGECOMMANDPARAMETER ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergeCommandParameter" )) -#define PROPERTYNAME_MERGEMENU_MERGEFALLBACK ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergeFallback" )) -#define PROPERTYNAME_MERGEMENU_MERGECONTEXT ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergeContext" )) -#define PROPERTYNAME_MERGEMENU_MENUITEMS ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MenuItems" )) -#define MERGEMENU_MERGEPOINT_SEPARATOR '\\' - -#define PROPERTYNAME_MERGETOOLBAR_TOOLBAR ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergeToolBar" )) -#define PROPERTYNAME_MERGETOOLBAR_MERGEPOINT ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergePoint" )) -#define PROPERTYNAME_MERGETOOLBAR_MERGECOMMAND ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergeCommand" )) -#define PROPERTYNAME_MERGETOOLBAR_MERGECOMMANDPARAMETER ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergeCommandParameter" )) -#define PROPERTYNAME_MERGETOOLBAR_MERGEFALLBACK ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergeFallback" )) -#define PROPERTYNAME_MERGETOOLBAR_MERGECONTEXT ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergeContext" )) -#define PROPERTYNAME_MERGETOOLBAR_TOOLBARITEMS ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ToolBarItems" )) - -// The following order is mandatory. Please add properties at the end! -#define INDEX_URL 0 -#define INDEX_TITLE 1 -#define INDEX_IMAGEIDENTIFIER 2 -#define INDEX_TARGET 3 -#define INDEX_CONTEXT 4 -#define INDEX_SUBMENU 5 -#define INDEX_CONTROLTYPE 6 -#define INDEX_WIDTH 7 -#define PROPERTYCOUNT_INDEX 8 - -// The following order is mandatory. Please add properties at the end! -#define PROPERTYCOUNT_MENUITEM 6 -#define OFFSET_MENUITEM_URL 0 -#define OFFSET_MENUITEM_TITLE 1 -#define OFFSET_MENUITEM_IMAGEIDENTIFIER 2 -#define OFFSET_MENUITEM_TARGET 3 -#define OFFSET_MENUITEM_CONTEXT 4 -#define OFFSET_MENUITEM_SUBMENU 5 - -// The following order is mandatory. Please add properties at the end! -#define PROPERTYCOUNT_POPUPMENU 4 -#define OFFSET_POPUPMENU_TITLE 0 -#define OFFSET_POPUPMENU_CONTEXT 1 -#define OFFSET_POPUPMENU_SUBMENU 2 -#define OFFSET_POPUPMENU_URL 3 // Used for property set - -// The following order is mandatory. Please add properties at the end! -#define PROPERTYCOUNT_TOOLBARITEM 7 -#define OFFSET_TOOLBARITEM_URL 0 -#define OFFSET_TOOLBARITEM_TITLE 1 -#define OFFSET_TOOLBARITEM_IMAGEIDENTIFIER 2 -#define OFFSET_TOOLBARITEM_TARGET 3 -#define OFFSET_TOOLBARITEM_CONTEXT 4 -#define OFFSET_TOOLBARITEM_CONTROLTYPE 5 -#define OFFSET_TOOLBARITEM_WIDTH 6 - -// The following order is mandatory. Please add properties at the end! -#define PROPERTYCOUNT_IMAGES 8 -#define PROPERTYCOUNT_EMBEDDED_IMAGES 4 -#define OFFSET_IMAGES_SMALL 0 -#define OFFSET_IMAGES_BIG 1 -#define OFFSET_IMAGES_SMALLHC 2 -#define OFFSET_IMAGES_BIGHC 3 -#define OFFSET_IMAGES_SMALL_URL 4 -#define OFFSET_IMAGES_BIG_URL 5 -#define OFFSET_IMAGES_SMALLHC_URL 6 -#define OFFSET_IMAGES_BIGHC_URL 7 - -#define PROPERTYCOUNT_MERGE_MENUBAR 6 -#define OFFSET_MERGEMENU_MERGEPOINT 0 -#define OFFSET_MERGEMENU_MERGECOMMAND 1 -#define OFFSET_MERGEMENU_MERGECOMMANDPARAMETER 2 -#define OFFSET_MERGEMENU_MERGEFALLBACK 3 -#define OFFSET_MERGEMENU_MERGECONTEXT 4 -#define OFFSET_MERGEMENU_MENUITEMS 5 - -#define PROPERTYCOUNT_MERGE_TOOLBAR 7 -#define OFFSET_MERGETOOLBAR_TOOLBAR 0 -#define OFFSET_MERGETOOLBAR_MERGEPOINT 1 -#define OFFSET_MERGETOOLBAR_MERGECOMMAND 2 -#define OFFSET_MERGETOOLBAR_MERGECOMMANDPARAMETER 3 -#define OFFSET_MERGETOOLBAR_MERGEFALLBACK 4 -#define OFFSET_MERGETOOLBAR_MERGECONTEXT 5 -#define OFFSET_MERGETOOLBAR_TOOLBARITEMS 6 - -#define EXPAND_PROTOCOL "vnd.sun.star.expand:" - -const Size aImageSizeSmall( 16, 16 ); -const Size aImageSizeBig( 26, 26 ); - -//_________________________________________________________________________________________________________________ -// private declarations! -//_________________________________________________________________________________________________________________ - -/*-**************************************************************************************************************** - @descr struct to hold information about one menu entry. -****************************************************************************************************************-*/ - -namespace framework -{ - -class AddonsOptions_Impl : public ConfigItem -{ - //------------------------------------------------------------------------------------------------------------- - // public methods - //------------------------------------------------------------------------------------------------------------- - - public: - //--------------------------------------------------------------------------------------------------------- - // constructor / destructor - //--------------------------------------------------------------------------------------------------------- - - AddonsOptions_Impl(); - ~AddonsOptions_Impl(); - - //--------------------------------------------------------------------------------------------------------- - // overloaded methods of baseclass - //--------------------------------------------------------------------------------------------------------- - - /*-****************************************************************************************************//** - @short called for notify of configmanager - @descr These method is called from the ConfigManager before application ends or from the - PropertyChangeListener if the sub tree broadcasts changes. You must update your - internal values. - - @seealso baseclass ConfigItem - - @param "lPropertyNames" is the list of properties which should be updated. - @return - - - @onerror - - *//*-*****************************************************************************************************/ - - virtual void Notify( const Sequence< ::rtl::OUString >& lPropertyNames ); - - /*-****************************************************************************************************//** - @short write changes to configuration - @descr These method writes the changed values into the sub tree - and should always called in our destructor to guarantee consistency of config data. - - @seealso baseclass ConfigItem - - @param - - @return - - - @onerror - - *//*-*****************************************************************************************************/ - - virtual void Commit(); - - //--------------------------------------------------------------------------------------------------------- - // public interface - //--------------------------------------------------------------------------------------------------------- - - /*-****************************************************************************************************//** - @short base implementation of public interface for "SvtDynamicMenuOptions"! - @descr These class is used as static member of "SvtDynamicMenuOptions" ... - => The code exist only for one time and isn't duplicated for every instance! - - @seealso - - - @param - - @return - - - @onerror - - *//*-*****************************************************************************************************/ - - sal_Bool HasAddonsMenu () const ; - sal_Bool HasAddonsHelpMenu () const ; - sal_Int32 GetAddonsToolBarCount() const ; - const Sequence< Sequence< PropertyValue > >& GetAddonsMenu () const ; - const Sequence< Sequence< PropertyValue > >& GetAddonsMenuBarPart () const ; - const Sequence< Sequence< PropertyValue > >& GetAddonsToolBarPart ( sal_uInt32 nIndex ) const ; - const ::rtl::OUString GetAddonsToolbarResourceName( sal_uInt32 nIndex ) const; - const Sequence< Sequence< PropertyValue > >& GetAddonsHelpMenu () const ; - Image GetImageFromURL( const rtl::OUString& aURL, sal_Bool bBig, sal_Bool bHiContrast, sal_Bool bNoScale ) const; - const MergeMenuInstructionContainer& GetMergeMenuInstructions() const; - bool GetMergeToolbarInstructions( const ::rtl::OUString& rToolbarName, MergeToolbarInstructionContainer& rToolbarInstructions ) const; - - void ReadConfigurationData(); - - //------------------------------------------------------------------------------------------------------------- - // private methods - //------------------------------------------------------------------------------------------------------------- - - private: - struct OUStringHashCode - { - size_t operator()( const ::rtl::OUString& sString ) const - { - return sString.hashCode(); - } - }; - - struct ImageEntry - { - Image aImageSmall; - Image aImageBig; - Image aImageSmallHC; - Image aImageBigHC; - - Image aImageSmallNoScale; - Image aImageBigNoScale; - Image aImageSmallHCNoScale; - Image aImageBigHCNoScale; - }; - - typedef std::hash_map< ::rtl::OUString, ImageEntry, OUStringHashCode, ::std::equal_to< ::rtl::OUString > > ImageManager; - typedef std::hash_map< ::rtl::OUString, sal_uInt32, OUStringHashCode, ::std::equal_to< ::rtl::OUString > > StringToIndexMap; - typedef std::vector< Sequence< Sequence< PropertyValue > > > AddonToolBars; - typedef ::std::hash_map< ::rtl::OUString, MergeToolbarInstructionContainer, OUStringHashCode, ::std::equal_to< ::rtl::OUString > > ToolbarMergingInstructions; - - enum ImageSize - { - IMGSIZE_SMALL, - IMGSIZE_BIG - }; - - /*-****************************************************************************************************//** - @short return list of key names of our configuration management which represent oue module tree - @descr These methods return the current list of key names! We need it to get needed values from our - configuration management! - - @seealso - - - @param "nCount" , returns count of menu entries for "new" - @return A list of configuration key names is returned. - - @onerror - - *//*-*****************************************************************************************************/ - - sal_Bool ReadAddonMenuSet( Sequence< Sequence< PropertyValue > >& aAddonMenuSeq ); - sal_Bool ReadOfficeMenuBarSet( Sequence< Sequence< PropertyValue > >& aAddonOfficeMenuBarSeq ); - sal_Bool ReadOfficeToolBarSet( AddonToolBars& rAddonOfficeToolBars, std::vector< rtl::OUString >& rAddonOfficeToolBarResNames ); - sal_Bool ReadToolBarItemSet( const rtl::OUString rToolBarItemSetNodeName, Sequence< Sequence< PropertyValue > >& aAddonOfficeToolBarSeq ); - sal_Bool ReadOfficeHelpSet( Sequence< Sequence< PropertyValue > >& aAddonOfficeHelpMenuSeq ); - sal_Bool ReadImages( ImageManager& aImageManager ); - sal_Bool ReadMenuMergeInstructions( MergeMenuInstructionContainer& rContainer ); - sal_Bool ReadToolbarMergeInstructions( ToolbarMergingInstructions& rToolbarMergeMap ); - - sal_Bool ReadMergeMenuData( const ::rtl::OUString& aMergeAddonInstructionBase, Sequence< Sequence< PropertyValue > >& rMergeMenu ); - sal_Bool ReadMergeToolbarData( const ::rtl::OUString& aMergeAddonInstructionBase, Sequence< Sequence< PropertyValue > >& rMergeToolbarItems ); - sal_Bool ReadMenuItem( const ::rtl::OUString& aMenuItemNodeName, Sequence< PropertyValue >& aMenuItem, sal_Bool bIgnoreSubMenu = sal_False ); - sal_Bool ReadPopupMenu( const ::rtl::OUString& aPopupMenuNodeName, Sequence< PropertyValue >& aPopupMenu ); - sal_Bool AppendPopupMenu( Sequence< PropertyValue >& aTargetPopupMenu, const Sequence< PropertyValue >& rSourcePopupMenu ); - sal_Bool ReadToolBarItem( const ::rtl::OUString& aToolBarItemNodeName, Sequence< PropertyValue >& aToolBarItem ); - sal_Bool ReadImagesItem( const ::rtl::OUString& aImagesItemNodeName, Sequence< PropertyValue >& aImagesItem ); - ImageEntry* ReadImageData( const ::rtl::OUString& aImagesNodeName ); - void ReadAndAssociateImages( const ::rtl::OUString& aURL, const ::rtl::OUString& aImageId ); - void ReadImageFromURL( ImageSize nImageSize, const ::rtl::OUString& aURL, Image& aImage, Image& aNoScaleImage ); - sal_Bool HasAssociatedImages( const ::rtl::OUString& aURL ); - void SubstituteVariables( ::rtl::OUString& aURL ); - - sal_Bool ReadSubMenuEntries( const Sequence< ::rtl::OUString >& aSubMenuNodeNames, Sequence< Sequence< PropertyValue > >& rSubMenu ); - void InsertToolBarSeparator( Sequence< Sequence< PropertyValue > >& rAddonOfficeToolBarSeq ); - ::rtl::OUString GeneratePrefixURL(); - - Sequence< ::rtl::OUString > GetPropertyNamesMergeMenuInstruction( const ::rtl::OUString& aPropertyRootName ) const; - Sequence< ::rtl::OUString > GetPropertyNamesMenuItem( const ::rtl::OUString& aPropertyRootNode ) const; - Sequence< ::rtl::OUString > GetPropertyNamesPopupMenu( const ::rtl::OUString& aPropertyRootNode ) const; - Sequence< ::rtl::OUString > GetPropertyNamesToolBarItem( const ::rtl::OUString& aPropertyRootNode ) const; - Sequence< ::rtl::OUString > GetPropertyNamesImages( const ::rtl::OUString& aPropertyRootNode ) const; - sal_Bool CreateImageFromSequence( Image& rImage, sal_Bool bBig, Sequence< sal_Int8 >& rBitmapDataSeq ) const; - - //------------------------------------------------------------------------------------------------------------- - // private member - //------------------------------------------------------------------------------------------------------------- - - private: - ImageEntry* ReadOptionalImageData( const ::rtl::OUString& aMenuNodeName ); - - sal_Int32 m_nRootAddonPopupMenuId; - ::rtl::OUString m_aPropNames[PROPERTYCOUNT_INDEX]; - ::rtl::OUString m_aPropImagesNames[PROPERTYCOUNT_IMAGES]; - ::rtl::OUString m_aPropMergeMenuNames[PROPERTYCOUNT_MERGE_MENUBAR]; - ::rtl::OUString m_aPropMergeToolbarNames[PROPERTYCOUNT_MERGE_TOOLBAR]; - ::rtl::OUString m_aEmpty; - ::rtl::OUString m_aPathDelimiter; - ::rtl::OUString m_aSeparator; - ::rtl::OUString m_aRootAddonPopupMenuURLPrexfix; - ::rtl::OUString m_aPrivateImageURL; - Sequence< Sequence< PropertyValue > > m_aCachedMenuProperties; - Sequence< Sequence< PropertyValue > > m_aCachedMenuBarPartProperties; - AddonToolBars m_aCachedToolBarPartProperties; - std::vector< rtl::OUString > m_aCachedToolBarPartResourceNames; - Sequence< Sequence< PropertyValue > > m_aCachedHelpMenuProperties; - Reference< com::sun::star::util::XMacroExpander > m_xMacroExpander; - ImageManager m_aImageManager; - Sequence< Sequence< PropertyValue > > m_aEmptyAddonToolBar; - MergeMenuInstructionContainer m_aCachedMergeMenuInsContainer; - ToolbarMergingInstructions m_aCachedToolbarMergingInstructions; -}; - -//_________________________________________________________________________________________________________________ -// definitions -//_________________________________________________________________________________________________________________ - -//***************************************************************************************************************** -// constructor -//***************************************************************************************************************** -AddonsOptions_Impl::AddonsOptions_Impl() - // Init baseclasses first - : ConfigItem( ROOTNODE_ADDONMENU ), - m_nRootAddonPopupMenuId( 0 ), - m_aPathDelimiter( PATHDELIMITER ), - m_aSeparator( SEPARATOR_URL ), - m_aRootAddonPopupMenuURLPrexfix( ADDONSPOPUPMENU_URL_PREFIX ), - m_aPrivateImageURL( PRIVATE_IMAGE_URL ) -{ - // initialize array with fixed property names - m_aPropNames[ INDEX_URL ] = PROPERTYNAME_URL; - m_aPropNames[ INDEX_TITLE ] = PROPERTYNAME_TITLE; - m_aPropNames[ INDEX_TARGET ] = PROPERTYNAME_TARGET; - m_aPropNames[ INDEX_IMAGEIDENTIFIER ] = PROPERTYNAME_IMAGEIDENTIFIER; - m_aPropNames[ INDEX_CONTEXT ] = PROPERTYNAME_CONTEXT; - m_aPropNames[ INDEX_SUBMENU ] = PROPERTYNAME_SUBMENU; // Submenu set! - m_aPropNames[ INDEX_CONTROLTYPE ] = PROPERTYNAME_CONTROLTYPE; - m_aPropNames[ INDEX_WIDTH ] = PROPERTYNAME_WIDTH; - - // initialize array with fixed images property names - m_aPropImagesNames[ OFFSET_IMAGES_SMALL ] = PROPERTYNAME_IMAGESMALL; - m_aPropImagesNames[ OFFSET_IMAGES_BIG ] = PROPERTYNAME_IMAGEBIG; - m_aPropImagesNames[ OFFSET_IMAGES_SMALLHC ] = PROPERTYNAME_IMAGESMALLHC; - m_aPropImagesNames[ OFFSET_IMAGES_BIGHC ] = PROPERTYNAME_IMAGEBIGHC; - m_aPropImagesNames[ OFFSET_IMAGES_SMALL_URL ] = PROPERTYNAME_IMAGESMALL_URL; - m_aPropImagesNames[ OFFSET_IMAGES_BIG_URL ] = PROPERTYNAME_IMAGEBIG_URL; - m_aPropImagesNames[ OFFSET_IMAGES_SMALLHC_URL ] = PROPERTYNAME_IMAGESMALLHC_URL; - m_aPropImagesNames[ OFFSET_IMAGES_BIGHC_URL ] = PROPERTYNAME_IMAGEBIGHC_URL; - - // initialize array with fixed merge menu property names - m_aPropMergeMenuNames[ OFFSET_MERGEMENU_MERGEPOINT ] = PROPERTYNAME_MERGEMENU_MERGEPOINT; - m_aPropMergeMenuNames[ OFFSET_MERGEMENU_MERGECOMMAND ] = PROPERTYNAME_MERGEMENU_MERGECOMMAND; - m_aPropMergeMenuNames[ OFFSET_MERGEMENU_MERGECOMMANDPARAMETER ] = PROPERTYNAME_MERGEMENU_MERGECOMMANDPARAMETER; - m_aPropMergeMenuNames[ OFFSET_MERGEMENU_MERGEFALLBACK ] = PROPERTYNAME_MERGEMENU_MERGEFALLBACK; - m_aPropMergeMenuNames[ OFFSET_MERGEMENU_MERGECONTEXT ] = PROPERTYNAME_MERGEMENU_MERGECONTEXT; - m_aPropMergeMenuNames[ OFFSET_MERGEMENU_MENUITEMS ] = PROPERTYNAME_MERGEMENU_MENUITEMS; - - m_aPropMergeToolbarNames[ OFFSET_MERGETOOLBAR_TOOLBAR ] = PROPERTYNAME_MERGETOOLBAR_TOOLBAR; - m_aPropMergeToolbarNames[ OFFSET_MERGETOOLBAR_MERGEPOINT ] = PROPERTYNAME_MERGETOOLBAR_MERGEPOINT; - m_aPropMergeToolbarNames[ OFFSET_MERGETOOLBAR_MERGECOMMAND ] = PROPERTYNAME_MERGETOOLBAR_MERGECOMMAND; - m_aPropMergeToolbarNames[ OFFSET_MERGETOOLBAR_MERGECOMMANDPARAMETER ] = PROPERTYNAME_MERGETOOLBAR_MERGECOMMANDPARAMETER; - m_aPropMergeToolbarNames[ OFFSET_MERGETOOLBAR_MERGEFALLBACK ] = PROPERTYNAME_MERGETOOLBAR_MERGEFALLBACK; - m_aPropMergeToolbarNames[ OFFSET_MERGETOOLBAR_MERGECONTEXT ] = PROPERTYNAME_MERGETOOLBAR_MERGECONTEXT; - m_aPropMergeToolbarNames[ OFFSET_MERGETOOLBAR_TOOLBARITEMS ] = PROPERTYNAME_MERGETOOLBAR_TOOLBARITEMS; - - Reference< XComponentContext > xContext; - Reference< com::sun::star::beans::XPropertySet > xProps( ::comphelper::getProcessServiceFactory(), UNO_QUERY ); - xProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ))) >>= xContext; - if ( xContext.is() ) - { - m_xMacroExpander = Reference< com::sun::star::util::XMacroExpander >( xContext->getValueByName( - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "/singletons/com.sun.star.util.theMacroExpander"))), - UNO_QUERY ); - } - - ReadConfigurationData(); - - // Enable notification mechanism of ouer baseclass. - // We need it to get information about changes outside these class on ouer used configuration keys! - Sequence< rtl::OUString > aNotifySeq( 1 ); - aNotifySeq[0] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "AddonUI" )); - EnableNotification( aNotifySeq ); -} - -//***************************************************************************************************************** -// destructor -//***************************************************************************************************************** -AddonsOptions_Impl::~AddonsOptions_Impl() -{ - // We must save our current values .. if user forget it! - if( IsModified() == sal_True ) - { - Commit(); - } -} - -void AddonsOptions_Impl::ReadConfigurationData() -{ - // reset members to be read again from configuration - m_aCachedMenuProperties = Sequence< Sequence< PropertyValue > >(); - m_aCachedMenuBarPartProperties = Sequence< Sequence< PropertyValue > >(); - m_aCachedToolBarPartProperties = AddonToolBars(); - m_aCachedHelpMenuProperties = Sequence< Sequence< PropertyValue > >(); - m_aCachedToolBarPartResourceNames.clear(); - m_aImageManager = ImageManager(); - - ReadAddonMenuSet( m_aCachedMenuProperties ); - ReadOfficeMenuBarSet( m_aCachedMenuBarPartProperties ); - ReadOfficeToolBarSet( m_aCachedToolBarPartProperties, m_aCachedToolBarPartResourceNames ); - ReadOfficeHelpSet( m_aCachedHelpMenuProperties ); - ReadImages( m_aImageManager ); - - m_aCachedMergeMenuInsContainer.clear(); - m_aCachedToolbarMergingInstructions.clear(); - - ReadMenuMergeInstructions( m_aCachedMergeMenuInsContainer ); - ReadToolbarMergeInstructions( m_aCachedToolbarMergingInstructions ); -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -void AddonsOptions_Impl::Notify( const Sequence< ::rtl::OUString >& /*lPropertyNames*/ ) -{ - Application::PostUserEvent( STATIC_LINK( 0, AddonsOptions, Notify ) ); -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -void AddonsOptions_Impl::Commit() -{ - DBG_ERROR( "AddonsOptions_Impl::Commit()\nNot implemented yet!\n" ); -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -sal_Bool AddonsOptions_Impl::HasAddonsMenu() const -{ - return ( m_aCachedMenuProperties.getLength() > 0 ); -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -sal_Bool AddonsOptions_Impl::HasAddonsHelpMenu () const -{ - return ( m_aCachedHelpMenuProperties.getLength() > 0 ); -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -sal_Int32 AddonsOptions_Impl::GetAddonsToolBarCount() const -{ - return m_aCachedToolBarPartProperties.size(); -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -const Sequence< Sequence< PropertyValue > >& AddonsOptions_Impl::GetAddonsMenu() const -{ - return m_aCachedMenuProperties; -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -const Sequence< Sequence< PropertyValue > >& AddonsOptions_Impl::GetAddonsMenuBarPart() const -{ - return m_aCachedMenuBarPartProperties; -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -const Sequence< Sequence< PropertyValue > >& AddonsOptions_Impl::GetAddonsToolBarPart( sal_uInt32 nIndex ) const -{ - if ( /*nIndex >= 0 &&*/ nIndex < m_aCachedToolBarPartProperties.size() ) - return m_aCachedToolBarPartProperties[nIndex]; - else - return m_aEmptyAddonToolBar; -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -const ::rtl::OUString AddonsOptions_Impl::GetAddonsToolbarResourceName( sal_uInt32 nIndex ) const -{ - if ( nIndex < m_aCachedToolBarPartResourceNames.size() ) - return m_aCachedToolBarPartResourceNames[nIndex]; - else - return rtl::OUString(); -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -const Sequence< Sequence< PropertyValue > >& AddonsOptions_Impl::GetAddonsHelpMenu () const -{ - return m_aCachedHelpMenuProperties; -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -const MergeMenuInstructionContainer& AddonsOptions_Impl::GetMergeMenuInstructions() const -{ - return m_aCachedMergeMenuInsContainer; -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -bool AddonsOptions_Impl::GetMergeToolbarInstructions( - const ::rtl::OUString& rToolbarName, - MergeToolbarInstructionContainer& rToolbarInstructions ) const -{ - ToolbarMergingInstructions::const_iterator pIter = m_aCachedToolbarMergingInstructions.find( rToolbarName ); - if ( pIter != m_aCachedToolbarMergingInstructions.end() ) - { - rToolbarInstructions = pIter->second; - return true; - } - else - return false; -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -Image AddonsOptions_Impl::GetImageFromURL( const rtl::OUString& aURL, sal_Bool bBig, sal_Bool bHiContrast, sal_Bool bNoScale ) const -{ - Image aImage; - - ImageManager::const_iterator pIter = m_aImageManager.find( aURL ); - if ( pIter != m_aImageManager.end() ) - { - if ( !bHiContrast ) - { - if ( bNoScale ) - aImage = ( bBig ? pIter->second.aImageBigNoScale : pIter->second.aImageSmallNoScale ); - if ( !aImage ) - aImage = ( bBig ? pIter->second.aImageBig : pIter->second.aImageSmall ); - } - else - { - if ( bNoScale ) - aImage = ( bBig ? pIter->second.aImageBigHCNoScale : pIter->second.aImageSmallHCNoScale ); - if ( !aImage ) - aImage = ( bBig ? pIter->second.aImageBigHC : pIter->second.aImageSmallHC ); - } - } - - return aImage; -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -sal_Bool AddonsOptions_Impl::ReadAddonMenuSet( Sequence< Sequence< PropertyValue > >& rAddonMenuSeq ) -{ - // Read the AddonMenu set and fill property sequences - ::rtl::OUString aAddonMenuNodeName( RTL_CONSTASCII_USTRINGPARAM( "AddonUI/AddonMenu" )); - Sequence< ::rtl::OUString > aAddonMenuNodeSeq = GetNodeNames( aAddonMenuNodeName ); - ::rtl::OUString aAddonMenuItemNode( aAddonMenuNodeName + m_aPathDelimiter ); - - sal_uInt32 nCount = aAddonMenuNodeSeq.getLength(); - sal_uInt32 nIndex = 0; - Sequence< PropertyValue > aMenuItem( PROPERTYCOUNT_MENUITEM ); - - // Init the property value sequence - aMenuItem[ OFFSET_MENUITEM_URL ].Name = m_aPropNames[ INDEX_URL ]; - aMenuItem[ OFFSET_MENUITEM_TITLE ].Name = m_aPropNames[ INDEX_TITLE ]; - aMenuItem[ OFFSET_MENUITEM_TARGET ].Name = m_aPropNames[ INDEX_TARGET ]; - aMenuItem[ OFFSET_MENUITEM_IMAGEIDENTIFIER ].Name = m_aPropNames[ INDEX_IMAGEIDENTIFIER]; - aMenuItem[ OFFSET_MENUITEM_CONTEXT ].Name = m_aPropNames[ INDEX_CONTEXT ]; - aMenuItem[ OFFSET_MENUITEM_SUBMENU ].Name = m_aPropNames[ INDEX_SUBMENU ]; // Submenu set! - - for ( sal_uInt32 n = 0; n < nCount; n++ ) - { - ::rtl::OUString aRootMenuItemNode( aAddonMenuItemNode + aAddonMenuNodeSeq[n] ); - - // Read the MenuItem - if ( ReadMenuItem( aRootMenuItemNode, aMenuItem ) ) - { - // Successfully read a menu item, append to our list - sal_uInt32 nMenuItemCount = rAddonMenuSeq.getLength() + 1; - rAddonMenuSeq.realloc( nMenuItemCount ); - rAddonMenuSeq[nIndex++] = aMenuItem; - } - } - - return ( rAddonMenuSeq.getLength() > 0 ); -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -sal_Bool AddonsOptions_Impl::ReadOfficeHelpSet( Sequence< Sequence< PropertyValue > >& rAddonOfficeHelpMenuSeq ) -{ - // Read the AddonMenu set and fill property sequences - ::rtl::OUString aAddonHelpMenuNodeName( RTL_CONSTASCII_USTRINGPARAM( "AddonUI/OfficeHelp" )); - Sequence< ::rtl::OUString > aAddonHelpMenuNodeSeq = GetNodeNames( aAddonHelpMenuNodeName ); - ::rtl::OUString aAddonHelpMenuItemNode( aAddonHelpMenuNodeName + m_aPathDelimiter ); - - sal_uInt32 nCount = aAddonHelpMenuNodeSeq.getLength(); - sal_uInt32 nIndex = 0; - Sequence< PropertyValue > aMenuItem( PROPERTYCOUNT_MENUITEM ); - - // Init the property value sequence - aMenuItem[ OFFSET_MENUITEM_URL ].Name = m_aPropNames[ INDEX_URL ]; - aMenuItem[ OFFSET_MENUITEM_TITLE ].Name = m_aPropNames[ INDEX_TITLE ]; - aMenuItem[ OFFSET_MENUITEM_TARGET ].Name = m_aPropNames[ INDEX_TARGET ]; - aMenuItem[ OFFSET_MENUITEM_IMAGEIDENTIFIER ].Name = m_aPropNames[ INDEX_IMAGEIDENTIFIER]; - aMenuItem[ OFFSET_MENUITEM_CONTEXT ].Name = m_aPropNames[ INDEX_CONTEXT ]; - aMenuItem[ OFFSET_MENUITEM_SUBMENU ].Name = m_aPropNames[ INDEX_SUBMENU ]; // Submenu set! - - for ( sal_uInt32 n = 0; n < nCount; n++ ) - { - ::rtl::OUString aRootMenuItemNode( aAddonHelpMenuItemNode + aAddonHelpMenuNodeSeq[n] ); - - // Read the MenuItem - if ( ReadMenuItem( aRootMenuItemNode, aMenuItem, sal_True ) ) - { - // Successfully read a menu item, append to our list - sal_uInt32 nMenuItemCount = rAddonOfficeHelpMenuSeq.getLength() + 1; - rAddonOfficeHelpMenuSeq.realloc( nMenuItemCount ); - rAddonOfficeHelpMenuSeq[nIndex++] = aMenuItem; - } - } - - return ( rAddonOfficeHelpMenuSeq.getLength() > 0 ); -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -sal_Bool AddonsOptions_Impl::ReadOfficeMenuBarSet( Sequence< Sequence< PropertyValue > >& rAddonOfficeMenuBarSeq ) -{ - // Read the OfficeMenuBar set and fill property sequences - ::rtl::OUString aAddonMenuBarNodeName( RTL_CONSTASCII_USTRINGPARAM( "AddonUI/OfficeMenuBar" )); - Sequence< ::rtl::OUString > aAddonMenuBarNodeSeq = GetNodeNames( aAddonMenuBarNodeName ); - ::rtl::OUString aAddonMenuBarNode( aAddonMenuBarNodeName + m_aPathDelimiter ); - - sal_uInt32 nCount = aAddonMenuBarNodeSeq.getLength(); - sal_uInt32 nIndex = 0; - Sequence< PropertyValue > aPopupMenu( PROPERTYCOUNT_POPUPMENU ); - - // Init the property value sequence - aPopupMenu[ OFFSET_POPUPMENU_TITLE ].Name = m_aPropNames[ INDEX_TITLE ]; - aPopupMenu[ OFFSET_POPUPMENU_CONTEXT ].Name = m_aPropNames[ INDEX_CONTEXT]; - aPopupMenu[ OFFSET_POPUPMENU_SUBMENU ].Name = m_aPropNames[ INDEX_SUBMENU]; - aPopupMenu[ OFFSET_POPUPMENU_URL ].Name = m_aPropNames[ INDEX_URL ]; - - StringToIndexMap aTitleToIndexMap; - - for ( sal_uInt32 n = 0; n < nCount; n++ ) - { - ::rtl::OUString aPopupMenuNode( aAddonMenuBarNode + aAddonMenuBarNodeSeq[n] ); - - // Read the MenuItem - if ( ReadPopupMenu( aPopupMenuNode, aPopupMenu ) ) - { - // Successfully read a popup menu, append to our list - ::rtl::OUString aPopupTitle; - if ( aPopupMenu[OFFSET_POPUPMENU_TITLE].Value >>= aPopupTitle ) - { - StringToIndexMap::const_iterator pIter = aTitleToIndexMap.find( aPopupTitle ); - if ( pIter != aTitleToIndexMap.end() ) - { - // title already there => concat both popup menus - Sequence< PropertyValue >& rOldPopupMenu = rAddonOfficeMenuBarSeq[pIter->second]; - AppendPopupMenu( rOldPopupMenu, aPopupMenu ); - } - else - { - // not found - sal_uInt32 nMenuItemCount = rAddonOfficeMenuBarSeq.getLength() + 1; - rAddonOfficeMenuBarSeq.realloc( nMenuItemCount ); - rAddonOfficeMenuBarSeq[nIndex] = aPopupMenu; - aTitleToIndexMap.insert( StringToIndexMap::value_type( aPopupTitle, nIndex )); - ++nIndex; - } - } - } - } - - return ( rAddonOfficeMenuBarSeq.getLength() > 0 ); -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -sal_Bool AddonsOptions_Impl::ReadOfficeToolBarSet( AddonToolBars& rAddonOfficeToolBars, std::vector< rtl::OUString >& rAddonOfficeToolBarResNames ) -{ - // Read the OfficeToolBar set and fill property sequences - ::rtl::OUString aAddonToolBarNodeName( RTL_CONSTASCII_USTRINGPARAM( "AddonUI/OfficeToolBar" )); - Sequence< ::rtl::OUString > aAddonToolBarNodeSeq = GetNodeNames( aAddonToolBarNodeName ); - ::rtl::OUString aAddonToolBarNode( aAddonToolBarNodeName + m_aPathDelimiter ); - - sal_uInt32 nCount = aAddonToolBarNodeSeq.getLength(); - - for ( sal_uInt32 n = 0; n < nCount; n++ ) - { - ::rtl::OUString aToolBarItemNode( aAddonToolBarNode + aAddonToolBarNodeSeq[n] ); - rAddonOfficeToolBarResNames.push_back( aAddonToolBarNodeSeq[n] ); - rAddonOfficeToolBars.push_back( m_aEmptyAddonToolBar ); - ReadToolBarItemSet( aToolBarItemNode, rAddonOfficeToolBars[n] ); - } - - return ( !rAddonOfficeToolBars.empty() ); -} - - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -sal_Bool AddonsOptions_Impl::ReadToolBarItemSet( const rtl::OUString rToolBarItemSetNodeName, Sequence< Sequence< PropertyValue > >& rAddonOfficeToolBarSeq ) -{ - sal_Bool bInsertSeparator = sal_False; - sal_uInt32 nToolBarItemCount = rAddonOfficeToolBarSeq.getLength(); - ::rtl::OUString aAddonToolBarItemSetNode( rToolBarItemSetNodeName + m_aPathDelimiter ); - Sequence< ::rtl::OUString > aAddonToolBarItemSetNodeSeq = GetNodeNames( rToolBarItemSetNodeName ); - Sequence< PropertyValue > aToolBarItem( PROPERTYCOUNT_TOOLBARITEM ); - - // Init the property value sequence - aToolBarItem[ OFFSET_TOOLBARITEM_URL ].Name = m_aPropNames[ INDEX_URL ]; - aToolBarItem[ OFFSET_TOOLBARITEM_TITLE ].Name = m_aPropNames[ INDEX_TITLE ]; - aToolBarItem[ OFFSET_TOOLBARITEM_IMAGEIDENTIFIER ].Name = m_aPropNames[ INDEX_IMAGEIDENTIFIER]; - aToolBarItem[ OFFSET_TOOLBARITEM_TARGET ].Name = m_aPropNames[ INDEX_TARGET ]; - aToolBarItem[ OFFSET_TOOLBARITEM_CONTEXT ].Name = m_aPropNames[ INDEX_CONTEXT ]; - aToolBarItem[ OFFSET_TOOLBARITEM_CONTROLTYPE ].Name = m_aPropNames[ INDEX_CONTROLTYPE ]; - aToolBarItem[ OFFSET_TOOLBARITEM_WIDTH ].Name = m_aPropNames[ INDEX_WIDTH ]; - - sal_uInt32 nCount = aAddonToolBarItemSetNodeSeq.getLength(); - for ( sal_uInt32 n = 0; n < nCount; n++ ) - { - ::rtl::OUString aToolBarItemNode( aAddonToolBarItemSetNode + aAddonToolBarItemSetNodeSeq[n] ); - - // Read the ToolBarItem - if ( ReadToolBarItem( aToolBarItemNode, aToolBarItem ) ) - { - if ( bInsertSeparator ) - { - bInsertSeparator = sal_False; - InsertToolBarSeparator( rAddonOfficeToolBarSeq ); - } - - // Successfully read a toolbar item, append to our list - sal_uInt32 nAddonCount = rAddonOfficeToolBarSeq.getLength(); - rAddonOfficeToolBarSeq.realloc( nAddonCount+1 ); - rAddonOfficeToolBarSeq[nAddonCount] = aToolBarItem; - } - } - - return ( (sal_uInt32)rAddonOfficeToolBarSeq.getLength() > nToolBarItemCount ); -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -void AddonsOptions_Impl::InsertToolBarSeparator( Sequence< Sequence< PropertyValue > >& rAddonOfficeToolBarSeq ) -{ - Sequence< PropertyValue > aToolBarItem( PROPERTYCOUNT_TOOLBARITEM ); - - aToolBarItem[ OFFSET_TOOLBARITEM_URL ].Name = m_aPropNames[ INDEX_URL ]; - aToolBarItem[ OFFSET_TOOLBARITEM_TITLE ].Name = m_aPropNames[ INDEX_TITLE ]; - aToolBarItem[ OFFSET_TOOLBARITEM_IMAGEIDENTIFIER ].Name = m_aPropNames[ INDEX_IMAGEIDENTIFIER]; - aToolBarItem[ OFFSET_TOOLBARITEM_TARGET ].Name = m_aPropNames[ INDEX_TARGET ]; - aToolBarItem[ OFFSET_TOOLBARITEM_CONTEXT ].Name = m_aPropNames[ INDEX_CONTEXT ]; - - aToolBarItem[ OFFSET_TOOLBARITEM_URL ].Value <<= SEPARATOR_URL; - aToolBarItem[ OFFSET_TOOLBARITEM_TITLE ].Value <<= m_aEmpty; - aToolBarItem[ OFFSET_TOOLBARITEM_TARGET ].Value <<= m_aEmpty; - aToolBarItem[ OFFSET_TOOLBARITEM_IMAGEIDENTIFIER ].Value <<= m_aEmpty; - aToolBarItem[ OFFSET_TOOLBARITEM_CONTEXT ].Value <<= m_aEmpty; - - sal_uInt32 nToolBarItemCount = rAddonOfficeToolBarSeq.getLength(); - rAddonOfficeToolBarSeq.realloc( nToolBarItemCount+1 ); - rAddonOfficeToolBarSeq[nToolBarItemCount] = aToolBarItem; -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -sal_Bool AddonsOptions_Impl::ReadImages( ImageManager& aImageManager ) -{ - // Read the user-defined Images set and fill image manager - ::rtl::OUString aAddonImagesNodeName( RTL_CONSTASCII_USTRINGPARAM( "AddonUI/Images" )); - Sequence< ::rtl::OUString > aAddonImagesNodeSeq = GetNodeNames( aAddonImagesNodeName ); - ::rtl::OUString aAddonImagesNode( aAddonImagesNodeName + m_aPathDelimiter ); - - sal_uInt32 nCount = aAddonImagesNodeSeq.getLength(); - - // Init the property value sequence - Sequence< ::rtl::OUString > aAddonImageItemNodePropNames( 1 ); - ::rtl::OUString aURL; - - for ( sal_uInt32 n = 0; n < nCount; n++ ) - { - ::rtl::OUString aImagesItemNode( aAddonImagesNode + aAddonImagesNodeSeq[n] ); - - // Create sequence for data access - ::rtl::OUStringBuffer aBuffer( aImagesItemNode ); - aBuffer.append( m_aPathDelimiter ); - aBuffer.append( m_aPropNames[ OFFSET_MENUITEM_URL ] ); - aAddonImageItemNodePropNames[0] = aBuffer.makeStringAndClear(); - - Sequence< Any > aAddonImageItemNodeValues = GetProperties( aAddonImageItemNodePropNames ); - - // An user-defined image entry must have an URL. As "ImageIdentifier" has a higher priority - // we also check if we already have an images association. - if (( aAddonImageItemNodeValues[0] >>= aURL ) && - aURL.getLength() > 0 && - !HasAssociatedImages( aURL )) - { - ::rtl::OUStringBuffer aBuf( aImagesItemNode ); - aBuf.append( m_aPathDelimiter ); - aBuf.append( IMAGES_NODENAME ); - aBuf.append( m_aPathDelimiter ); - ::rtl::OUString aImagesUserDefinedItemNode = aBuf.makeStringAndClear(); - - // Read a user-defined images data - ImageEntry* pImageEntry = ReadImageData( aImagesUserDefinedItemNode ); - if ( pImageEntry ) - { - // Successfully read a user-defined images item, put it into our image manager - aImageManager.insert( ImageManager::value_type( aURL, *pImageEntry )); - delete pImageEntry; // We have the ownership of the pointer - } - } - } - - return sal_True; -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** - -::rtl::OUString AddonsOptions_Impl::GeneratePrefixURL() -{ - // Create an unique prefixed Add-On popup menu URL so it can be identified later as a runtime popup menu. - // They use a different image manager, so they must be identified by the sfx2/framework code. - ::rtl::OUString aPopupMenuURL; - ::rtl::OUStringBuffer aBuf( m_aRootAddonPopupMenuURLPrexfix.getLength() + 3 ); - aBuf.append( m_aRootAddonPopupMenuURLPrexfix ); - aBuf.append( ::rtl::OUString::valueOf( ++m_nRootAddonPopupMenuId )); - aPopupMenuURL = aBuf.makeStringAndClear(); - return aPopupMenuURL; -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** - -sal_Bool AddonsOptions_Impl::ReadMenuMergeInstructions( MergeMenuInstructionContainer& aContainer ) -{ - const ::rtl::OUString aMenuMergeRootName( RTL_CONSTASCII_USTRINGPARAM( "AddonUI/OfficeMenuBarMerging/" )); - - Sequence< ::rtl::OUString > aAddonMergeNodesSeq = GetNodeNames( aMenuMergeRootName ); - ::rtl::OUString aAddonMergeNode( aMenuMergeRootName ); - - sal_uInt32 nCount = aAddonMergeNodesSeq.getLength(); - - // Init the property value sequence - Sequence< ::rtl::OUString > aNodePropNames( 5 ); - ::rtl::OUString aURL; - - for ( sal_uInt32 i = 0; i < nCount; i++ ) - { - ::rtl::OUString aMergeAddonInstructions( aAddonMergeNode + aAddonMergeNodesSeq[i] ); - - Sequence< ::rtl::OUString > aAddonInstMergeNodesSeq = GetNodeNames( aMergeAddonInstructions ); - sal_uInt32 nCountAddons = aAddonInstMergeNodesSeq.getLength(); - - for ( sal_uInt32 j = 0; j < nCountAddons; j++ ) - { - ::rtl::OUStringBuffer aMergeAddonInstructionBase( aMergeAddonInstructions ); - aMergeAddonInstructionBase.append( m_aPathDelimiter ); - aMergeAddonInstructionBase.append( aAddonInstMergeNodesSeq[j] ); - aMergeAddonInstructionBase.append( m_aPathDelimiter ); - - // Create sequence for data access - ::rtl::OUStringBuffer aBuffer( aMergeAddonInstructionBase ); - aBuffer.append( m_aPropMergeMenuNames[ OFFSET_MERGEMENU_MERGEPOINT ] ); - aNodePropNames[0] = aBuffer.makeStringAndClear(); - - aBuffer = aMergeAddonInstructionBase; - aBuffer.append( m_aPropMergeMenuNames[ OFFSET_MERGEMENU_MERGECOMMAND ] ); - aNodePropNames[1] = aBuffer.makeStringAndClear(); - - aBuffer = aMergeAddonInstructionBase; - aBuffer.append( m_aPropMergeMenuNames[ OFFSET_MERGEMENU_MERGECOMMANDPARAMETER ] ); - aNodePropNames[2] = aBuffer.makeStringAndClear(); - - aBuffer = aMergeAddonInstructionBase; - aBuffer.append( m_aPropMergeMenuNames[ OFFSET_MERGEMENU_MERGEFALLBACK ] ); - aNodePropNames[3] = aBuffer.makeStringAndClear(); - - aBuffer = aMergeAddonInstructionBase; - aBuffer.append( m_aPropMergeMenuNames[ OFFSET_MERGEMENU_MERGECONTEXT ] ); - aNodePropNames[4] = aBuffer.makeStringAndClear(); - - Sequence< Any > aNodePropValues = GetProperties( aNodePropNames ); - - MergeMenuInstruction aMergeMenuInstruction; - aNodePropValues[0] >>= aMergeMenuInstruction.aMergePoint; - aNodePropValues[1] >>= aMergeMenuInstruction.aMergeCommand; - aNodePropValues[2] >>= aMergeMenuInstruction.aMergeCommandParameter; - aNodePropValues[3] >>= aMergeMenuInstruction.aMergeFallback; - aNodePropValues[4] >>= aMergeMenuInstruction.aMergeContext; - - ::rtl::OUString aMergeMenuBase = aMergeAddonInstructionBase.makeStringAndClear(); - ReadMergeMenuData( aMergeMenuBase, aMergeMenuInstruction.aMergeMenu ); - - aContainer.push_back( aMergeMenuInstruction ); - } - } - - return sal_True; -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -sal_Bool AddonsOptions_Impl::ReadMergeMenuData( const ::rtl::OUString& aMergeAddonInstructionBase, Sequence< Sequence< PropertyValue > >& rMergeMenu ) -{ - ::rtl::OUString aMergeMenuBaseNode( aMergeAddonInstructionBase+m_aPropMergeMenuNames[ OFFSET_MERGEMENU_MENUITEMS ] ); - - Sequence< ::rtl::OUString > aSubMenuNodeNames = GetNodeNames( aMergeMenuBaseNode ); - aMergeMenuBaseNode += m_aPathDelimiter; - - // extend the node names to have full path strings - for ( sal_uInt32 i = 0; i < (sal_uInt32)aSubMenuNodeNames.getLength(); i++ ) - aSubMenuNodeNames[i] = ::rtl::OUString( aMergeMenuBaseNode + aSubMenuNodeNames[i] ); - - return ReadSubMenuEntries( aSubMenuNodeNames, rMergeMenu ); -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -sal_Bool AddonsOptions_Impl::ReadToolbarMergeInstructions( ToolbarMergingInstructions& rCachedToolbarMergingInstructions ) -{ - const ::rtl::OUString aToolbarMergeRootName( RTL_CONSTASCII_USTRINGPARAM( "AddonUI/OfficeToolbarMerging/" )); - - Sequence< ::rtl::OUString > aAddonMergeNodesSeq = GetNodeNames( aToolbarMergeRootName ); - ::rtl::OUString aAddonMergeNode( aToolbarMergeRootName ); - - sal_uInt32 nCount = aAddonMergeNodesSeq.getLength(); - - // Init the property value sequence - Sequence< ::rtl::OUString > aNodePropNames( 6 ); - ::rtl::OUString aURL; - - for ( sal_uInt32 i = 0; i < nCount; i++ ) - { - ::rtl::OUString aMergeAddonInstructions( aAddonMergeNode + aAddonMergeNodesSeq[i] ); - - Sequence< ::rtl::OUString > aAddonInstMergeNodesSeq = GetNodeNames( aMergeAddonInstructions ); - sal_uInt32 nCountAddons = aAddonInstMergeNodesSeq.getLength(); - - for ( sal_uInt32 j = 0; j < nCountAddons; j++ ) - { - ::rtl::OUStringBuffer aMergeAddonInstructionBase( aMergeAddonInstructions ); - aMergeAddonInstructionBase.append( m_aPathDelimiter ); - aMergeAddonInstructionBase.append( aAddonInstMergeNodesSeq[j] ); - aMergeAddonInstructionBase.append( m_aPathDelimiter ); - - // Create sequence for data access - ::rtl::OUStringBuffer aBuffer( aMergeAddonInstructionBase ); - aBuffer.append( m_aPropMergeToolbarNames[ OFFSET_MERGETOOLBAR_TOOLBAR ] ); - aNodePropNames[0] = aBuffer.makeStringAndClear(); - - aBuffer = aMergeAddonInstructionBase; - aBuffer.append( m_aPropMergeToolbarNames[ OFFSET_MERGETOOLBAR_MERGEPOINT ] ); - aNodePropNames[1] = aBuffer.makeStringAndClear(); - - aBuffer = aMergeAddonInstructionBase; - aBuffer.append( m_aPropMergeToolbarNames[ OFFSET_MERGETOOLBAR_MERGECOMMAND ] ); - aNodePropNames[2] = aBuffer.makeStringAndClear(); - - aBuffer = aMergeAddonInstructionBase; - aBuffer.append( m_aPropMergeToolbarNames[ OFFSET_MERGETOOLBAR_MERGECOMMANDPARAMETER ] ); - aNodePropNames[3] = aBuffer.makeStringAndClear(); - - aBuffer = aMergeAddonInstructionBase; - aBuffer.append( m_aPropMergeToolbarNames[ OFFSET_MERGETOOLBAR_MERGEFALLBACK ] ); - aNodePropNames[4] = aBuffer.makeStringAndClear(); - - aBuffer = aMergeAddonInstructionBase; - aBuffer.append( m_aPropMergeToolbarNames[ OFFSET_MERGETOOLBAR_MERGECONTEXT ] ); - aNodePropNames[5] = aBuffer.makeStringAndClear(); - - Sequence< Any > aNodePropValues = GetProperties( aNodePropNames ); - - MergeToolbarInstruction aMergeToolbarInstruction; - aNodePropValues[0] >>= aMergeToolbarInstruction.aMergeToolbar; - aNodePropValues[1] >>= aMergeToolbarInstruction.aMergePoint; - aNodePropValues[2] >>= aMergeToolbarInstruction.aMergeCommand; - aNodePropValues[3] >>= aMergeToolbarInstruction.aMergeCommandParameter; - aNodePropValues[4] >>= aMergeToolbarInstruction.aMergeFallback; - aNodePropValues[5] >>= aMergeToolbarInstruction.aMergeContext; - - ReadMergeToolbarData( aMergeAddonInstructionBase.makeStringAndClear(), - aMergeToolbarInstruction.aMergeToolbarItems ); - - MergeToolbarInstructionContainer& rVector = rCachedToolbarMergingInstructions[ aMergeToolbarInstruction.aMergeToolbar ]; - rVector.push_back( aMergeToolbarInstruction ); - } - } - - return sal_True; -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -sal_Bool AddonsOptions_Impl::ReadMergeToolbarData( const ::rtl::OUString& aMergeAddonInstructionBase, Sequence< Sequence< PropertyValue > >& rMergeToolbarItems ) -{ - ::rtl::OUStringBuffer aBuffer( aMergeAddonInstructionBase ); - aBuffer.append( m_aPropMergeToolbarNames[ OFFSET_MERGETOOLBAR_TOOLBARITEMS ] ); - - ::rtl::OUString aMergeToolbarBaseNode = aBuffer.makeStringAndClear(); - - return ReadToolBarItemSet( aMergeToolbarBaseNode, rMergeToolbarItems ); -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -sal_Bool AddonsOptions_Impl::ReadMenuItem( const ::rtl::OUString& aMenuNodeName, Sequence< PropertyValue >& aMenuItem, sal_Bool bIgnoreSubMenu ) -{ - sal_Bool bResult = sal_False; - ::rtl::OUString aStrValue; - ::rtl::OUString aAddonMenuItemTreeNode( aMenuNodeName + m_aPathDelimiter ); - Sequence< Any > aMenuItemNodePropValues; - - aMenuItemNodePropValues = GetProperties( GetPropertyNamesMenuItem( aAddonMenuItemTreeNode ) ); - if (( aMenuItemNodePropValues[ OFFSET_MENUITEM_TITLE ] >>= aStrValue ) && aStrValue.getLength() > 0 ) - { - aMenuItem[ OFFSET_MENUITEM_TITLE ].Value <<= aStrValue; - - ::rtl::OUString aRootSubMenuName( aAddonMenuItemTreeNode + m_aPropNames[ INDEX_SUBMENU ] ); - Sequence< ::rtl::OUString > aRootSubMenuNodeNames = GetNodeNames( aRootSubMenuName ); - if ( aRootSubMenuNodeNames.getLength() > 0 && !bIgnoreSubMenu ) - { - // Set a unique prefixed Add-On popup menu URL so it can be identified later - ::rtl::OUString aPopupMenuURL = GeneratePrefixURL(); - ::rtl::OUString aPopupMenuImageId; - - aMenuItemNodePropValues[ OFFSET_MENUITEM_IMAGEIDENTIFIER ] >>= aPopupMenuImageId; - ReadAndAssociateImages( aPopupMenuURL, aPopupMenuImageId ); - - // A popup menu must have a title and can have a URL and ImageIdentifier - // Set the other property values to empty - aMenuItem[ OFFSET_MENUITEM_URL ].Value <<= aPopupMenuURL; - aMenuItem[ OFFSET_MENUITEM_TARGET ].Value <<= m_aEmpty; - aMenuItem[ OFFSET_MENUITEM_IMAGEIDENTIFIER ].Value <<= aPopupMenuImageId; - aMenuItem[ OFFSET_MENUITEM_CONTEXT ].Value <<= aMenuItemNodePropValues[ OFFSET_MENUITEM_CONTEXT ]; - - // Continue to read the sub menu nodes - Sequence< Sequence< PropertyValue > > aSubMenuSeq; - ::rtl::OUString aSubMenuRootNodeName( aRootSubMenuName + m_aPathDelimiter ); - for ( sal_uInt32 n = 0; n < (sal_uInt32)aRootSubMenuNodeNames.getLength(); n++ ) - aRootSubMenuNodeNames[n] = ::rtl::OUString( aSubMenuRootNodeName + aRootSubMenuNodeNames[n] ); - ReadSubMenuEntries( aRootSubMenuNodeNames, aSubMenuSeq ); - aMenuItem[ OFFSET_MENUITEM_SUBMENU ].Value <<= aSubMenuSeq; - bResult = sal_True; - } - else if (( aMenuItemNodePropValues[ OFFSET_MENUITEM_URL ] >>= aStrValue ) && aStrValue.getLength() > 0 ) - { - // A simple menu item => read the other properties; - ::rtl::OUString aMenuImageId; - - aMenuItemNodePropValues[ OFFSET_MENUITEM_IMAGEIDENTIFIER ] >>= aMenuImageId; - ReadAndAssociateImages( aStrValue, aMenuImageId ); - - aMenuItem[ OFFSET_MENUITEM_URL ].Value <<= aStrValue; - aMenuItem[ OFFSET_MENUITEM_TARGET ].Value <<= aMenuItemNodePropValues[ OFFSET_MENUITEM_TARGET ]; - aMenuItem[ OFFSET_MENUITEM_IMAGEIDENTIFIER ].Value <<= aMenuImageId; - aMenuItem[ OFFSET_MENUITEM_CONTEXT ].Value <<= aMenuItemNodePropValues[ OFFSET_MENUITEM_CONTEXT ]; - aMenuItem[ OFFSET_MENUITEM_SUBMENU ].Value <<= Sequence< Sequence< PropertyValue > >(); // Submenu set! - - bResult = sal_True; - } - } - else if (( aMenuItemNodePropValues[ OFFSET_MENUITEM_URL ] >>= aStrValue ) && - aStrValue.equalsAsciiL( SEPARATOR_URL_STR, SEPARATOR_URL_LEN )) - { - // Separator - aMenuItem[ OFFSET_MENUITEM_URL ].Value <<= aStrValue; - aMenuItem[ OFFSET_MENUITEM_TARGET ].Value <<= m_aEmpty; - aMenuItem[ OFFSET_MENUITEM_IMAGEIDENTIFIER ].Value <<= m_aEmpty; - aMenuItem[ OFFSET_MENUITEM_CONTEXT ].Value <<= m_aEmpty; - aMenuItem[ OFFSET_MENUITEM_SUBMENU ].Value <<= Sequence< Sequence< PropertyValue > >(); // Submenu set! - bResult = sal_True; - } - - return bResult; -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -sal_Bool AddonsOptions_Impl::ReadPopupMenu( const ::rtl::OUString& aPopupMenuNodeName, Sequence< PropertyValue >& aPopupMenu ) -{ - sal_Bool bResult = sal_False; - ::rtl::OUString aStrValue; - ::rtl::OUString aAddonPopupMenuTreeNode( aPopupMenuNodeName + m_aPathDelimiter ); - Sequence< Any > aPopupMenuNodePropValues; - - aPopupMenuNodePropValues = GetProperties( GetPropertyNamesPopupMenu( aAddonPopupMenuTreeNode ) ); - if (( aPopupMenuNodePropValues[ OFFSET_POPUPMENU_TITLE ] >>= aStrValue ) && - aStrValue.getLength() > 0 ) - { - aPopupMenu[ OFFSET_POPUPMENU_TITLE ].Value <<= aStrValue; - - ::rtl::OUString aRootSubMenuName( aAddonPopupMenuTreeNode + m_aPropNames[ INDEX_SUBMENU ] ); - Sequence< ::rtl::OUString > aRootSubMenuNodeNames = GetNodeNames( aRootSubMenuName ); - if ( aRootSubMenuNodeNames.getLength() > 0 ) - { - // A top-level popup menu needs a title - // Set a unique prefixed Add-On popup menu URL so it can be identified later - ::rtl::OUString aPopupMenuURL = GeneratePrefixURL(); - - aPopupMenu[ OFFSET_POPUPMENU_URL ].Value <<= aPopupMenuURL; - aPopupMenu[ OFFSET_POPUPMENU_CONTEXT ].Value <<= aPopupMenuNodePropValues[ OFFSET_POPUPMENU_CONTEXT ]; - - // Continue to read the sub menu nodes - Sequence< Sequence< PropertyValue > > aSubMenuSeq; - ::rtl::OUString aSubMenuRootNodeName( aRootSubMenuName + m_aPathDelimiter ); - for ( sal_uInt32 n = 0; n < (sal_uInt32)aRootSubMenuNodeNames.getLength(); n++ ) - aRootSubMenuNodeNames[n] = ::rtl::OUString( aSubMenuRootNodeName + aRootSubMenuNodeNames[n] ); - ReadSubMenuEntries( aRootSubMenuNodeNames, aSubMenuSeq ); - aPopupMenu[ OFFSET_POPUPMENU_SUBMENU ].Value <<= aSubMenuSeq; - bResult = sal_True; - } - } - - return bResult; -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -sal_Bool AddonsOptions_Impl::AppendPopupMenu( Sequence< PropertyValue >& rTargetPopupMenu, const Sequence< PropertyValue >& rSourcePopupMenu ) -{ - Sequence< Sequence< PropertyValue > > aTargetSubMenuSeq; - Sequence< Sequence< PropertyValue > > aSourceSubMenuSeq; - - if (( rTargetPopupMenu[ OFFSET_POPUPMENU_SUBMENU ].Value >>= aTargetSubMenuSeq ) && - ( rSourcePopupMenu[ OFFSET_POPUPMENU_SUBMENU ].Value >>= aSourceSubMenuSeq )) - { - sal_uInt32 nIndex = aTargetSubMenuSeq.getLength(); - aTargetSubMenuSeq.realloc( nIndex + aSourceSubMenuSeq.getLength() ); - for ( sal_uInt32 i = 0; i < sal_uInt32( aSourceSubMenuSeq.getLength() ); i++ ) - aTargetSubMenuSeq[nIndex++] = aSourceSubMenuSeq[i]; - rTargetPopupMenu[ OFFSET_POPUPMENU_SUBMENU ].Value <<= aTargetSubMenuSeq; - } - - return sal_True; -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -sal_Bool AddonsOptions_Impl::ReadToolBarItem( const ::rtl::OUString& aToolBarItemNodeName, Sequence< PropertyValue >& aToolBarItem ) -{ - sal_Bool bResult = sal_False; - ::rtl::OUString aTitle; - ::rtl::OUString aURL; - ::rtl::OUString aAddonToolBarItemTreeNode( aToolBarItemNodeName + m_aPathDelimiter ); - Sequence< Any > aToolBarItemNodePropValues; - - aToolBarItemNodePropValues = GetProperties( GetPropertyNamesToolBarItem( aAddonToolBarItemTreeNode ) ); - - // A toolbar item must have a command URL - if (( aToolBarItemNodePropValues[ OFFSET_TOOLBARITEM_URL ] >>= aURL ) && aURL.getLength() > 0 ) - { - if ( aURL.equals( SEPARATOR_URL )) - { - // A speparator toolbar item only needs a URL - aToolBarItem[ OFFSET_TOOLBARITEM_URL ].Value <<= aURL; - aToolBarItem[ OFFSET_TOOLBARITEM_TITLE ].Value <<= m_aEmpty; - aToolBarItem[ OFFSET_TOOLBARITEM_TARGET ].Value <<= m_aEmpty; - aToolBarItem[ OFFSET_TOOLBARITEM_IMAGEIDENTIFIER ].Value <<= m_aEmpty; - aToolBarItem[ OFFSET_TOOLBARITEM_CONTEXT ].Value <<= m_aEmpty; - aToolBarItem[ OFFSET_TOOLBARITEM_CONTROLTYPE ].Value <<= m_aEmpty; - aToolBarItem[ OFFSET_TOOLBARITEM_WIDTH ].Value <<= sal_Int32( 0 ); - - bResult = sal_True; - } - else if (( aToolBarItemNodePropValues[ OFFSET_TOOLBARITEM_TITLE ] >>= aTitle ) && aTitle.getLength() > 0 ) - { - // A normal toolbar item must also have title => read the other properties; - ::rtl::OUString aImageId; - - // Try to map a user-defined image URL to our internal private image URL - aToolBarItemNodePropValues[ OFFSET_TOOLBARITEM_IMAGEIDENTIFIER ] >>= aImageId; - ReadAndAssociateImages( aURL, aImageId ); - - aToolBarItem[ OFFSET_TOOLBARITEM_URL ].Value <<= aURL; - aToolBarItem[ OFFSET_TOOLBARITEM_TITLE ].Value <<= aTitle; - aToolBarItem[ OFFSET_TOOLBARITEM_TARGET ].Value <<= aToolBarItemNodePropValues[ OFFSET_TOOLBARITEM_TARGET ]; - aToolBarItem[ OFFSET_TOOLBARITEM_IMAGEIDENTIFIER ].Value <<= aImageId; - aToolBarItem[ OFFSET_TOOLBARITEM_CONTEXT ].Value <<= aToolBarItemNodePropValues[ OFFSET_TOOLBARITEM_CONTEXT ]; - aToolBarItem[ OFFSET_TOOLBARITEM_CONTROLTYPE ].Value <<= aToolBarItemNodePropValues[ OFFSET_TOOLBARITEM_CONTROLTYPE ]; - - // Configuration uses hyper for long. Therefore transform into sal_Int32 - sal_Int64 nValue( 0 ); - aToolBarItemNodePropValues[ OFFSET_TOOLBARITEM_WIDTH ] >>= nValue; - aToolBarItem[ OFFSET_TOOLBARITEM_WIDTH ].Value <<= sal_Int32( nValue ); - - bResult = sal_True; - } - } - - return bResult; -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -sal_Bool AddonsOptions_Impl::ReadSubMenuEntries( const Sequence< ::rtl::OUString >& aSubMenuNodeNames, Sequence< Sequence< PropertyValue > >& rSubMenuSeq ) -{ - Sequence< PropertyValue > aMenuItem( PROPERTYCOUNT_MENUITEM ); - - // Init the property value sequence - aMenuItem[ OFFSET_MENUITEM_URL ].Name = PROPERTYNAME_URL; - aMenuItem[ OFFSET_MENUITEM_TITLE ].Name = PROPERTYNAME_TITLE; - aMenuItem[ OFFSET_MENUITEM_TARGET ].Name = PROPERTYNAME_TARGET; - aMenuItem[ OFFSET_MENUITEM_IMAGEIDENTIFIER ].Name = PROPERTYNAME_IMAGEIDENTIFIER; - aMenuItem[ OFFSET_MENUITEM_CONTEXT ].Name = PROPERTYNAME_CONTEXT; - aMenuItem[ OFFSET_MENUITEM_SUBMENU ].Name = PROPERTYNAME_SUBMENU; // Submenu set! - - sal_uInt32 nIndex = 0; - sal_uInt32 nCount = aSubMenuNodeNames.getLength(); - for ( sal_uInt32 n = 0; n < nCount; n++ ) - { - if ( ReadMenuItem( aSubMenuNodeNames[n], aMenuItem )) - { - sal_uInt32 nSubMenuCount = rSubMenuSeq.getLength() + 1; - rSubMenuSeq.realloc( nSubMenuCount ); - rSubMenuSeq[nIndex++] = aMenuItem; - } - } - - return sal_True; -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -sal_Bool AddonsOptions_Impl::HasAssociatedImages( const ::rtl::OUString& aURL ) -{ - ImageManager::const_iterator pIter = m_aImageManager.find( aURL ); - return ( pIter != m_aImageManager.end() ); -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -void AddonsOptions_Impl::SubstituteVariables( ::rtl::OUString& aURL ) -{ - if (( aURL.compareToAscii( RTL_CONSTASCII_STRINGPARAM( EXPAND_PROTOCOL )) == 0 ) && - m_xMacroExpander.is() ) - { - // cut protocol - ::rtl::OUString macro( aURL.copy( sizeof ( EXPAND_PROTOCOL ) -1 ) ); - // decode uric class chars - macro = ::rtl::Uri::decode( - macro, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 ); - // expand macro string - aURL = m_xMacroExpander->expandMacros( macro ); - } -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -void AddonsOptions_Impl::ReadImageFromURL( ImageSize nImageSize, const ::rtl::OUString& aImageURL, Image& aImage, Image& aImageNoScale ) -{ - SvStream* pStream = UcbStreamHelper::CreateStream( aImageURL, STREAM_STD_READ ); - if ( pStream && ( pStream->GetErrorCode() == 0 )) - { - // Use graphic class to also support more graphic formats (bmp,png,...) - Graphic aGraphic; - - GraphicFilter* pGF = GraphicFilter::GetGraphicFilter(); - pGF->ImportGraphic( aGraphic, String(), *pStream, GRFILTER_FORMAT_DONTKNOW ); - - BitmapEx aBitmapEx = aGraphic.GetBitmapEx(); - - const Size aSize = ( nImageSize == IMGSIZE_SMALL ) ? aImageSizeSmall : aImageSizeBig; // Sizes used for menu/toolbox images - - Size aBmpSize = aBitmapEx.GetSizePixel(); - if ( aBmpSize.Width() > 0 && aBmpSize.Height() > 0 ) - { - // Support non-transparent bitmaps to be downward compatible with OOo 1.1.x addons - if( !aBitmapEx.IsTransparent() ) - aBitmapEx = BitmapEx( aBitmapEx.GetBitmap(), COL_LIGHTMAGENTA ); - - // A non-scaled bitmap can have a flexible width, but must have a defined height! - Size aNoScaleSize( aBmpSize.Width(), aSize.Height() ); - if ( aBmpSize != aNoScaleSize ) - { - BitmapEx aNoScaleBmp( aBitmapEx ); - aNoScaleBmp.Scale( aNoScaleSize, BMP_SCALE_INTERPOLATE ); - } - else - aImageNoScale = Image( aBitmapEx ); - - if ( aBmpSize != aSize ) - aBitmapEx.Scale( aSize, BMP_SCALE_INTERPOLATE ); - - aImage = Image( aBitmapEx ); - } - } - - delete pStream; -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -void AddonsOptions_Impl::ReadAndAssociateImages( const ::rtl::OUString& aURL, const ::rtl::OUString& aImageId ) -{ - const int MAX_NUM_IMAGES = 4; - const char* aExtArray[MAX_NUM_IMAGES] = { "_16", "_26", "_16h", "_26h" }; - const char* pBmpExt = ".bmp"; - - if ( aImageId.getLength() == 0 ) - return; - - bool bImageFound = true; - ImageEntry aImageEntry; - ::rtl::OUString aImageURL( aImageId ); - - SubstituteVariables( aImageURL ); - - // Loop to create the four possible image names and try to read the bitmap files - for ( int i = 0; i < MAX_NUM_IMAGES; i++ ) - { - ::rtl::OUStringBuffer aFileURL( aImageURL ); - aFileURL.appendAscii( aExtArray[i] ); - aFileURL.appendAscii( pBmpExt ); - - Image aImage; - Image aImageNoScale; - ReadImageFromURL( ((i==0)||(i==2)) ? IMGSIZE_SMALL : IMGSIZE_BIG, aFileURL.makeStringAndClear(), aImage, aImageNoScale ); - if ( !!aImage ) - { - bImageFound = true; - switch ( i ) - { - case 0: - aImageEntry.aImageSmall = aImage; - aImageEntry.aImageSmallNoScale = aImageNoScale; - break; - case 1: - aImageEntry.aImageBig = aImage; - aImageEntry.aImageBigNoScale = aImageNoScale; - break; - case 2: - aImageEntry.aImageSmallHC = aImage; - aImageEntry.aImageSmallHCNoScale = aImageNoScale; - break; - case 3: - aImageEntry.aImageBigHC = aImage; - aImageEntry.aImageBigHCNoScale = aImageNoScale; - break; - } - } - } - - if ( bImageFound ) - m_aImageManager.insert( ImageManager::value_type( aURL, aImageEntry )); -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -AddonsOptions_Impl::ImageEntry* AddonsOptions_Impl::ReadImageData( const ::rtl::OUString& aImagesNodeName ) -{ - Sequence< ::rtl::OUString > aImageDataNodeNames = GetPropertyNamesImages( aImagesNodeName ); - Sequence< Any > aPropertyData; - Sequence< sal_Int8 > aImageDataSeq; - ::rtl::OUString aImageURL; - - ImageEntry* pEntry = NULL; - - // It is possible to use both forms (embedded image data and URLs to external bitmap files) at the - // same time. Embedded image data has a higher priority. - aPropertyData = GetProperties( aImageDataNodeNames ); - for ( int i = 0; i < PROPERTYCOUNT_IMAGES; i++ ) - { - if ( i < PROPERTYCOUNT_EMBEDDED_IMAGES ) - { - // Extract image data from the embedded hex binary sequence - Image aImage; - if (( aPropertyData[i] >>= aImageDataSeq ) && - aImageDataSeq.getLength() > 0 && - ( CreateImageFromSequence( aImage, - (( i == OFFSET_IMAGES_BIG ) || - ( i == OFFSET_IMAGES_BIGHC )), - aImageDataSeq )) ) - { - if ( !pEntry ) - pEntry = new ImageEntry; - - if ( i == OFFSET_IMAGES_SMALL ) - pEntry->aImageSmall = aImage; - else if ( i == OFFSET_IMAGES_BIG ) - pEntry->aImageBig = aImage; - else if ( i == OFFSET_IMAGES_SMALLHC ) - pEntry->aImageSmallHC = aImage; - else - pEntry->aImageBigHC = aImage; - } - } - else - { - // Retrieve image data from a external bitmap file. Make sure that embedded image data - // has a higher priority. - aPropertyData[i] >>= aImageURL; - - if ( aImageURL.getLength() > 0 ) - { - Image aImage; - Image aImageNoScale; - - SubstituteVariables( aImageURL ); - ReadImageFromURL( ((i==OFFSET_IMAGES_SMALL_URL)||(i==OFFSET_IMAGES_SMALLHC_URL)) ? IMGSIZE_SMALL : IMGSIZE_BIG, - aImageURL, aImage, aImageNoScale ); - if ( !!aImage ) - { - if ( !pEntry ) - pEntry = new ImageEntry; - - if ( i == OFFSET_IMAGES_SMALL_URL && !pEntry->aImageSmall ) - { - pEntry->aImageSmall = aImage; - pEntry->aImageSmallNoScale = aImageNoScale; - } - else if ( i == OFFSET_IMAGES_BIG_URL && !pEntry->aImageBig ) - { - pEntry->aImageBig = aImage; - pEntry->aImageBigNoScale = aImageNoScale; - } - else if ( i == OFFSET_IMAGES_SMALLHC_URL && !pEntry->aImageSmallHC ) - { - pEntry->aImageSmallHC = aImage; - pEntry->aImageSmallHCNoScale = aImageNoScale; - } - else if ( !pEntry->aImageBigHC ) - { - pEntry->aImageBigHC = aImage; - pEntry->aImageBigHCNoScale = aImageNoScale; - } - } - } - } - } - - return pEntry; -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -sal_Bool AddonsOptions_Impl::CreateImageFromSequence( Image& rImage, sal_Bool bBig, Sequence< sal_Int8 >& rBitmapDataSeq ) const -{ - sal_Bool bResult = sal_False; - Size aSize = bBig ? aImageSizeBig : aImageSizeSmall; // Sizes used for menu/toolbox images - - if ( rBitmapDataSeq.getLength() > 0 ) - { - SvMemoryStream aMemStream( rBitmapDataSeq.getArray(), rBitmapDataSeq.getLength(), STREAM_STD_READ ); - BitmapEx aBitmapEx; - - aMemStream >> aBitmapEx; - - // Scale bitmap to fit the correct size for the menu/toolbar. Use best quality - if ( aBitmapEx.GetSizePixel() != aSize ) - aBitmapEx.Scale( aSize, BMP_SCALE_INTERPOLATE ); - - if( !aBitmapEx.IsTransparent() ) - { - // Support non-transparent bitmaps to be downward compatible with OOo 1.1.x addons - aBitmapEx = BitmapEx( aBitmapEx.GetBitmap(), COL_LIGHTMAGENTA ); - } - - rImage = Image( aBitmapEx ); - bResult = sal_True; - } - - return bResult; -} - -//***************************************************************************************************************** -// private methods -//***************************************************************************************************************** -Sequence< ::rtl::OUString > AddonsOptions_Impl::GetPropertyNamesMergeMenuInstruction( const ::rtl::OUString& aPropertyRootNode ) const -{ - Sequence< ::rtl::OUString > lResult( PROPERTYCOUNT_MERGE_MENUBAR ); - - // Create property names dependent from the root node name - lResult[ OFFSET_MERGEMENU_MERGEPOINT ] = ::rtl::OUString( aPropertyRootNode + m_aPropMergeMenuNames[ OFFSET_MERGEMENU_MERGEPOINT ] ); - lResult[ OFFSET_MERGEMENU_MERGECOMMAND ] = ::rtl::OUString( aPropertyRootNode + m_aPropMergeMenuNames[ OFFSET_MERGEMENU_MERGECOMMAND ] ); - lResult[ OFFSET_MERGEMENU_MERGECOMMANDPARAMETER ] = ::rtl::OUString( aPropertyRootNode + m_aPropMergeMenuNames[ OFFSET_MERGEMENU_MERGECOMMANDPARAMETER ] ); - lResult[ OFFSET_MERGEMENU_MERGEFALLBACK ] = ::rtl::OUString( aPropertyRootNode + m_aPropMergeMenuNames[ OFFSET_MERGEMENU_MERGEFALLBACK ] ); - lResult[ OFFSET_MERGEMENU_MERGECONTEXT ] = ::rtl::OUString( aPropertyRootNode + m_aPropMergeMenuNames[ OFFSET_MERGEMENU_MERGECONTEXT ] ); - lResult[ OFFSET_MERGEMENU_MENUITEMS ] = ::rtl::OUString( aPropertyRootNode + m_aPropMergeMenuNames[ OFFSET_MERGEMENU_MENUITEMS ] ); - - return lResult; -} - -Sequence< ::rtl::OUString > AddonsOptions_Impl::GetPropertyNamesMenuItem( const ::rtl::OUString& aPropertyRootNode ) const -{ - Sequence< ::rtl::OUString > lResult( PROPERTYCOUNT_MENUITEM ); - - // Create property names dependent from the root node name - lResult[OFFSET_MENUITEM_URL] = ::rtl::OUString( aPropertyRootNode + m_aPropNames[ INDEX_URL ] ); - lResult[OFFSET_MENUITEM_TITLE] = ::rtl::OUString( aPropertyRootNode + m_aPropNames[ INDEX_TITLE ] ); - lResult[OFFSET_MENUITEM_IMAGEIDENTIFIER] = ::rtl::OUString( aPropertyRootNode + m_aPropNames[ INDEX_IMAGEIDENTIFIER ] ); - lResult[OFFSET_MENUITEM_TARGET] = ::rtl::OUString( aPropertyRootNode + m_aPropNames[ INDEX_TARGET ] ); - lResult[OFFSET_MENUITEM_CONTEXT] = ::rtl::OUString( aPropertyRootNode + m_aPropNames[ INDEX_CONTEXT ] ); - lResult[OFFSET_MENUITEM_SUBMENU] = ::rtl::OUString( aPropertyRootNode + m_aPropNames[ INDEX_SUBMENU ] ); - - return lResult; -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -Sequence< ::rtl::OUString > AddonsOptions_Impl::GetPropertyNamesPopupMenu( const ::rtl::OUString& aPropertyRootNode ) const -{ - // The URL is automatically set and not read from the configuration. - Sequence< ::rtl::OUString > lResult( PROPERTYCOUNT_POPUPMENU-1 ); - - // Create property names dependent from the root node name - lResult[OFFSET_POPUPMENU_TITLE] = ::rtl::OUString( aPropertyRootNode + m_aPropNames[ INDEX_TITLE ] ); - lResult[OFFSET_POPUPMENU_CONTEXT] = ::rtl::OUString( aPropertyRootNode + m_aPropNames[ INDEX_CONTEXT ] ); - lResult[OFFSET_POPUPMENU_SUBMENU] = ::rtl::OUString( aPropertyRootNode + m_aPropNames[ INDEX_SUBMENU ] ); - - return lResult; -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -Sequence< ::rtl::OUString > AddonsOptions_Impl::GetPropertyNamesToolBarItem( const ::rtl::OUString& aPropertyRootNode ) const -{ - Sequence< ::rtl::OUString > lResult( PROPERTYCOUNT_TOOLBARITEM ); - - // Create property names dependent from the root node name - lResult[0] = ::rtl::OUString( aPropertyRootNode + m_aPropNames[ INDEX_URL ] ); - lResult[1] = ::rtl::OUString( aPropertyRootNode + m_aPropNames[ INDEX_TITLE ] ); - lResult[2] = ::rtl::OUString( aPropertyRootNode + m_aPropNames[ INDEX_IMAGEIDENTIFIER] ); - lResult[3] = ::rtl::OUString( aPropertyRootNode + m_aPropNames[ INDEX_TARGET ] ); - lResult[4] = ::rtl::OUString( aPropertyRootNode + m_aPropNames[ INDEX_CONTEXT ] ); - lResult[5] = ::rtl::OUString( aPropertyRootNode + m_aPropNames[ INDEX_CONTROLTYPE ] ); - lResult[6] = ::rtl::OUString( aPropertyRootNode + m_aPropNames[ INDEX_WIDTH ] ); - - return lResult; -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -Sequence< ::rtl::OUString > AddonsOptions_Impl::GetPropertyNamesImages( const ::rtl::OUString& aPropertyRootNode ) const -{ - Sequence< ::rtl::OUString > lResult( PROPERTYCOUNT_IMAGES ); - - // Create property names dependent from the root node name - lResult[0] = ::rtl::OUString( aPropertyRootNode + m_aPropImagesNames[ OFFSET_IMAGES_SMALL ] ); - lResult[1] = ::rtl::OUString( aPropertyRootNode + m_aPropImagesNames[ OFFSET_IMAGES_BIG ] ); - lResult[2] = ::rtl::OUString( aPropertyRootNode + m_aPropImagesNames[ OFFSET_IMAGES_SMALLHC ] ); - lResult[3] = ::rtl::OUString( aPropertyRootNode + m_aPropImagesNames[ OFFSET_IMAGES_BIGHC ] ); - lResult[4] = ::rtl::OUString( aPropertyRootNode + m_aPropImagesNames[ OFFSET_IMAGES_SMALL_URL ] ); - lResult[5] = ::rtl::OUString( aPropertyRootNode + m_aPropImagesNames[ OFFSET_IMAGES_BIG_URL ] ); - lResult[6] = ::rtl::OUString( aPropertyRootNode + m_aPropImagesNames[ OFFSET_IMAGES_SMALLHC_URL] ); - lResult[7] = ::rtl::OUString( aPropertyRootNode + m_aPropImagesNames[ OFFSET_IMAGES_BIGHC_URL ] ); - - return lResult; -} - -//***************************************************************************************************************** -// initialize static member -// DON'T DO IT IN YOUR HEADER! -// see definition for further informations -//***************************************************************************************************************** -AddonsOptions_Impl* AddonsOptions::m_pDataContainer = NULL ; -sal_Int32 AddonsOptions::m_nRefCount = 0 ; - -//***************************************************************************************************************** -// constructor -//***************************************************************************************************************** -AddonsOptions::AddonsOptions() -{ - // Global access, must be guarded (multithreading!). - MutexGuard aGuard( GetOwnStaticMutex() ); - // Increase ouer refcount ... - ++m_nRefCount; - // ... and initialize ouer data container only if it not already exist! - if( m_pDataContainer == NULL ) - { - m_pDataContainer = new AddonsOptions_Impl; - } -} - -//***************************************************************************************************************** -// destructor -//***************************************************************************************************************** -AddonsOptions::~AddonsOptions() -{ - // Global access, must be guarded (multithreading!) - MutexGuard aGuard( GetOwnStaticMutex() ); - // Decrease ouer refcount. - --m_nRefCount; - // If last instance was deleted ... - // we must destroy ouer static data container! - if( m_nRefCount <= 0 ) - { - delete m_pDataContainer; - m_pDataContainer = NULL; - } -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -sal_Bool AddonsOptions::HasAddonsMenu() const -{ - MutexGuard aGuard( GetOwnStaticMutex() ); - return m_pDataContainer->HasAddonsMenu(); -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** - -sal_Bool AddonsOptions::HasAddonsHelpMenu() const -{ - MutexGuard aGuard( GetOwnStaticMutex() ); - return m_pDataContainer->HasAddonsHelpMenu(); -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** - -sal_Int32 AddonsOptions::GetAddonsToolBarCount() const -{ - MutexGuard aGuard( GetOwnStaticMutex() ); - return m_pDataContainer->GetAddonsToolBarCount(); -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -const Sequence< Sequence< PropertyValue > >& AddonsOptions::GetAddonsMenu() const -{ - MutexGuard aGuard( GetOwnStaticMutex() ); - return m_pDataContainer->GetAddonsMenu(); -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -const Sequence< Sequence< PropertyValue > >& AddonsOptions::GetAddonsMenuBarPart() const -{ - MutexGuard aGuard( GetOwnStaticMutex() ); - return m_pDataContainer->GetAddonsMenuBarPart(); -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -const Sequence< Sequence< PropertyValue > >& AddonsOptions::GetAddonsToolBarPart( sal_uInt32 nIndex ) const -{ - MutexGuard aGuard( GetOwnStaticMutex() ); - return m_pDataContainer->GetAddonsToolBarPart( nIndex ); -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -const ::rtl::OUString AddonsOptions::GetAddonsToolbarResourceName( sal_uInt32 nIndex ) const -{ - MutexGuard aGuard( GetOwnStaticMutex() ); - return m_pDataContainer->GetAddonsToolbarResourceName( nIndex ); -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -const Sequence< Sequence< PropertyValue > >& AddonsOptions::GetAddonsHelpMenu() const -{ - MutexGuard aGuard( GetOwnStaticMutex() ); - return m_pDataContainer->GetAddonsHelpMenu(); -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -const MergeMenuInstructionContainer& AddonsOptions::GetMergeMenuInstructions() const -{ - MutexGuard aGuard( GetOwnStaticMutex() ); - return m_pDataContainer->GetMergeMenuInstructions(); -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -bool AddonsOptions::GetMergeToolbarInstructions( - const ::rtl::OUString& rToolbarName, - MergeToolbarInstructionContainer& rToolbarInstructions ) const -{ - MutexGuard aGuard( GetOwnStaticMutex() ); - return m_pDataContainer->GetMergeToolbarInstructions( - rToolbarName, rToolbarInstructions ); -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -Image AddonsOptions::GetImageFromURL( const rtl::OUString& aURL, sal_Bool bBig, sal_Bool bHiContrast, sal_Bool bNoScale ) const -{ - MutexGuard aGuard( GetOwnStaticMutex() ); - return m_pDataContainer->GetImageFromURL( aURL, bBig, bHiContrast, bNoScale ); -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -Image AddonsOptions::GetImageFromURL( const rtl::OUString& aURL, sal_Bool bBig, sal_Bool bHiContrast ) const -{ - return GetImageFromURL( aURL, bBig, bHiContrast, sal_False ); -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -Mutex& AddonsOptions::GetOwnStaticMutex() -{ - // Initialize static mutex only for one time! - static Mutex* pMutex = NULL; - // If these method first called (Mutex not already exist!) ... - if( pMutex == NULL ) - { - // ... we must create a new one. Protect follow code with the global mutex - - // It must be - we create a static variable! - MutexGuard aGuard( Mutex::getGlobalMutex() ); - // We must check our pointer again - because it can be that another instance of ouer class will be fastr then these! - if( pMutex == NULL ) - { - // Create the new mutex and set it for return on static variable. - static Mutex aMutex; - pMutex = &aMutex; - } - } - // Return new created or already existing mutex object. - return *pMutex; -} - -//***************************************************************************************************************** -// private method -//***************************************************************************************************************** -IMPL_STATIC_LINK_NOINSTANCE( AddonsOptions, Notify, void*, EMPTYARG ) -{ - MutexGuard aGuard( GetOwnStaticMutex() ); - m_pDataContainer->ReadConfigurationData(); - return 0; -} - -} - diff --git a/framework/source/classes/bmkmenu.cxx b/framework/source/classes/bmkmenu.cxx deleted file mode 100644 index aa2aef3b9d2b..000000000000 --- a/framework/source/classes/bmkmenu.cxx +++ /dev/null @@ -1,254 +0,0 @@ -/************************************************************************* - * - * 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_framework.hxx" - -//_________________________________________________________________________________________________________________ -// my own includes -//_________________________________________________________________________________________________________________ - -#include <limits.h> - -#include "classes/bmkmenu.hxx" -#include <general.h> -#include <macros/debug/assertion.hxx> -#include <helper/imageproducer.hxx> -#include <xml/menuconfiguration.hxx> - -//_________________________________________________________________________________________________________________ -// interface includes -//_________________________________________________________________________________________________________________ -#include <com/sun/star/uno/Reference.h> -#include <com/sun/star/util/URL.hpp> -#include <com/sun/star/beans/PropertyValue.hpp> -#ifndef _UNOTOOLS_PROCESSFACTORY_HXX -#include <comphelper/processfactory.hxx> -#endif -#include <com/sun/star/util/XURLTransformer.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/util/DateTime.hpp> - -//_________________________________________________________________________________________________________________ -// includes of other projects -//_________________________________________________________________________________________________________________ -#include <tools/config.hxx> -#include <vcl/svapp.hxx> -#include <unotools/dynamicmenuoptions.hxx> -#include <svtools/menuoptions.hxx> -#include <rtl/logfile.hxx> - -//_________________________________________________________________________________________________________________ -// namespace -//_________________________________________________________________________________________________________________ - -using namespace ::comphelper; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::util; -using namespace ::com::sun::star::frame; -using namespace ::com::sun::star::beans; - -namespace framework -{ - -void GetMenuEntry( - Sequence< PropertyValue >& aDynamicMenuEntry, - ::rtl::OUString& rTitle, - ::rtl::OUString& rURL, - ::rtl::OUString& rFrame, - ::rtl::OUString& rImageId ); - -class BmkMenu_Impl -{ - private: - static USHORT m_nMID; - - public: - BmkMenu* m_pRoot; - BOOL m_bInitialized; - - BmkMenu_Impl( BmkMenu* pRoot ); - BmkMenu_Impl(); - ~BmkMenu_Impl(); - - static USHORT GetMID(); -}; - -USHORT BmkMenu_Impl::m_nMID = BMKMENU_ITEMID_START; - -BmkMenu_Impl::BmkMenu_Impl( BmkMenu* pRoot ) : - m_pRoot(pRoot), - m_bInitialized(FALSE) -{ -} - -BmkMenu_Impl::BmkMenu_Impl() : - m_pRoot(0), - m_bInitialized(FALSE) -{ -} - -BmkMenu_Impl::~BmkMenu_Impl() -{ -} - -USHORT BmkMenu_Impl::GetMID() -{ - m_nMID++; - if( !m_nMID ) - m_nMID = BMKMENU_ITEMID_START; - return m_nMID; -} - -// ------------------------------------------------------------------------ - -BmkMenu::BmkMenu( com::sun::star::uno::Reference< XFrame >& xFrame, BmkMenu::BmkMenuType nType, BmkMenu* pRoot ) - :AddonMenu(xFrame) - ,m_nType( nType ) -{ - _pImp = new BmkMenu_Impl( pRoot ); - Initialize(); -} - -BmkMenu::BmkMenu( Reference< XFrame >& xFrame, BmkMenu::BmkMenuType nType ) - :AddonMenu(xFrame) - ,m_nType( nType ) -{ - _pImp = new BmkMenu_Impl(); - Initialize(); -} - -BmkMenu::~BmkMenu() -{ - delete _pImp; -} - -void BmkMenu::Initialize() -{ - RTL_LOGFILE_CONTEXT( aLog, "framework (cd100003) ::BmkMenu::Initialize" ); - - if( _pImp->m_bInitialized ) - return; - - _pImp->m_bInitialized = TRUE; - - Sequence< Sequence< PropertyValue > > aDynamicMenuEntries; - - if ( m_nType == BmkMenu::BMK_NEWMENU ) - aDynamicMenuEntries = SvtDynamicMenuOptions().GetMenu( E_NEWMENU ); - else if ( m_nType == BmkMenu::BMK_WIZARDMENU ) - aDynamicMenuEntries = SvtDynamicMenuOptions().GetMenu( E_WIZARDMENU ); - - const StyleSettings& rSettings = Application::GetSettings().GetStyleSettings(); - BOOL bShowMenuImages = rSettings.GetUseImagesInMenus(); - - ::rtl::OUString aTitle; - ::rtl::OUString aURL; - ::rtl::OUString aTargetFrame; - ::rtl::OUString aImageId; - - BOOL bIsHiContrastMode = rSettings.GetHighContrastMode(); - - UINT32 i, nCount = aDynamicMenuEntries.getLength(); - for ( i = 0; i < nCount; ++i ) - { - GetMenuEntry( aDynamicMenuEntries[i], aTitle, aURL, aTargetFrame, aImageId ); - - if ( !aTitle.getLength() && !aURL.getLength() ) - continue; - - if ( aURL == ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "private:separator" ))) - InsertSeparator(); - else - { - sal_Bool bImageSet = sal_False; - USHORT nId = CreateMenuId(); - - if ( bShowMenuImages ) - { - if ( aImageId.getLength() > 0 ) - { - Image aImage = GetImageFromURL( m_xFrame, aImageId, FALSE, bIsHiContrastMode ); - if ( !!aImage ) - { - bImageSet = sal_True; - InsertItem( nId, aTitle, aImage ); - } - } - - if ( !bImageSet ) - { - Image aImage = GetImageFromURL( m_xFrame, aURL, FALSE, bIsHiContrastMode ); - if ( !aImage ) - InsertItem( nId, aTitle ); - else - InsertItem( nId, aTitle, aImage ); - } - } - else - InsertItem( nId, aTitle ); - - // Store values from configuration to the New and Wizard menu entries to enable - // sfx2 based code to support high contrast mode correctly! - MenuConfiguration::Attributes* pUserAttributes = new MenuConfiguration::Attributes( aTargetFrame, aImageId ); - SetUserValue( nId, (ULONG)pUserAttributes ); - - SetItemCommand( nId, aURL ); - } - } -} - -USHORT BmkMenu::CreateMenuId() -{ - return BmkMenu_Impl::GetMID(); -} - -void GetMenuEntry -( - Sequence< PropertyValue >& aDynamicMenuEntry, - ::rtl::OUString& rTitle, - ::rtl::OUString& rURL, - ::rtl::OUString& rFrame, - ::rtl::OUString& rImageId -) -{ - for ( int i = 0; i < aDynamicMenuEntry.getLength(); i++ ) - { - if ( aDynamicMenuEntry[i].Name == DYNAMICMENU_PROPERTYNAME_URL ) - aDynamicMenuEntry[i].Value >>= rURL; - else if ( aDynamicMenuEntry[i].Name == DYNAMICMENU_PROPERTYNAME_TITLE ) - aDynamicMenuEntry[i].Value >>= rTitle; - else if ( aDynamicMenuEntry[i].Name == DYNAMICMENU_PROPERTYNAME_IMAGEIDENTIFIER ) - aDynamicMenuEntry[i].Value >>= rImageId; - else if ( aDynamicMenuEntry[i].Name == DYNAMICMENU_PROPERTYNAME_TARGETNAME ) - aDynamicMenuEntry[i].Value >>= rFrame; - } -} - -} - diff --git a/framework/source/classes/converter.cxx b/framework/source/classes/converter.cxx deleted file mode 100644 index d70b099c9e03..000000000000 --- a/framework/source/classes/converter.cxx +++ /dev/null @@ -1,316 +0,0 @@ -/************************************************************************* - * - * 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_framework.hxx" -#include <classes/converter.hxx> -#include <rtl/ustrbuf.hxx> - -namespace framework{ - -//----------------------------------------------------------------------------- -/** - * pack every property item of source list into an any entry of destination list - * Resulting list will have follow format then: "sequence< Any(PropertyValue) >". - * If one item couldn't be converted it will be ignored - means target list can - * be smaller then source list. Source list isn't changed anytime. - * - * algorithm: - * (a) reserve enough space on destination list for all possible entries of - * source list - * (b) try to pack every property of source into an any of destination list - * (b1) count successfully packed entries only - * (c) use this count of packed entries to resize destination list - * Because we getted enough space before - that will remove unused items - * of destination list at the end of it only. - */ -css::uno::Sequence< css::uno::Any > Converter::convert_seqProp2seqAny( const css::uno::Sequence< css::beans::PropertyValue >& lSource ) -{ - sal_Int32 nCount = lSource.getLength(); - css::uno::Sequence< css::uno::Any > lDestination(nCount); - - for (sal_Int32 nItem=0; nItem<nCount; ++nItem) - lDestination[nItem]<<=lSource[nItem]; - - return lDestination; -} - -//----------------------------------------------------------------------------- -/** - * do the same like convert_seqProp2seqAny() before - but reverse. - * It try to unpack PropertyValue items from given Any's. - */ -css::uno::Sequence< css::beans::PropertyValue > Converter::convert_seqAny2seqProp( const css::uno::Sequence< css::uno::Any >& lSource ) -{ - sal_Int32 nCount = lSource.getLength(); - sal_Int32 nRealCount = 0; - css::uno::Sequence< css::beans::PropertyValue > lDestination(nCount); - - for (sal_Int32 nItem=0; nItem<nCount; ++nItem) - { - if (lSource[nItem]>>=lDestination[nItem]) - ++nRealCount; - } - - if (nRealCount!=nCount) - lDestination.realloc(nRealCount); - - return lDestination; -} - -//----------------------------------------------------------------------------- -/** - * converts a sequence of NamedValue to a sequence of PropertyValue. - */ -css::uno::Sequence< css::beans::PropertyValue > Converter::convert_seqNamedVal2seqPropVal( const css::uno::Sequence< css::beans::NamedValue >& lSource ) -{ - sal_Int32 nCount = lSource.getLength(); - css::uno::Sequence< css::beans::PropertyValue > lDestination(nCount); - for (sal_Int32 nItem=0; nItem<nCount; ++nItem) - { - lDestination[nItem].Name = lSource[nItem].Name ; - lDestination[nItem].Value = lSource[nItem].Value; - } - return lDestination; -} - -//----------------------------------------------------------------------------- -/** - * converts a sequence of PropertyValue to a sequence of NamedValue. - */ -css::uno::Sequence< css::beans::NamedValue > Converter::convert_seqPropVal2seqNamedVal( const css::uno::Sequence< css::beans::PropertyValue >& lSource ) -{ - sal_Int32 nCount = lSource.getLength(); - css::uno::Sequence< css::beans::NamedValue > lDestination(nCount); - for (sal_Int32 nItem=0; nItem<nCount; ++nItem) - { - lDestination[nItem].Name = lSource[nItem].Name ; - lDestination[nItem].Value = lSource[nItem].Value; - } - return lDestination; -} - -//----------------------------------------------------------------------------- -/** - * converts a sequence of unicode strings into a vector of such items - */ -OUStringList Converter::convert_seqOUString2OUStringList( const css::uno::Sequence< ::rtl::OUString >& lSource ) -{ - OUStringList lDestination; - sal_Int32 nCount = lSource.getLength(); - - for (sal_Int32 nItem=0; nItem<nCount; ++nItem ) - { - lDestination.push_back(lSource[nItem]); - } - - return lDestination; -} - -//----------------------------------------------------------------------------- -/** - * converts a vector of unicode strings into a sequence of such items - */ -css::uno::Sequence< ::rtl::OUString > Converter::convert_OUStringList2seqOUString( const OUStringList& lSource ) -{ - css::uno::Sequence< ::rtl::OUString > lDestination(lSource.size()); - sal_uInt32 nItem = 0; - for (OUStringList::const_iterator pIterator=lSource.begin(); pIterator!=lSource.end(); ++pIterator) - { - lDestination[nItem] = *pIterator; - ++nItem; - } - return lDestination; -} - -//----------------------------------------------------------------------------- -/** - * converts an unicode string hash to a sequence<PropertyValue>, where names and values match to key and values. - */ -css::uno::Sequence< css::beans::PropertyValue > Converter::convert_OUStringHash2seqProp( const OUStringHash& lSource ) -{ - css::uno::Sequence< css::beans::PropertyValue > lDestination (lSource.size()); - css::beans::PropertyValue* pDestination = lDestination.getArray(); - sal_Int32 nItem = 0; - for (OUStringHash::const_iterator pItem=lSource.begin(); pItem!=lSource.end(); ++pItem) - { - pDestination[nItem].Name = pItem->first ; - pDestination[nItem].Value <<= pItem->second; - ++nItem; - } - return lDestination; -} - -//----------------------------------------------------------------------------- -/** - * converts a sequence<PropertyValue> to an unicode string hash, where keys and values match to names and values. - */ -OUStringHash Converter::convert_seqProp2OUStringHash( const css::uno::Sequence< css::beans::PropertyValue >& lSource ) -{ - OUStringHash lDestination; - sal_Int32 nCount = lSource.getLength(); - const css::beans::PropertyValue* pSource = lSource.getConstArray(); - for (sal_Int32 nItem=0; nItem<nCount; ++nItem) - { - pSource[nItem].Value >>= lDestination[pSource[nItem].Name]; - } - return lDestination; -} - -//----------------------------------------------------------------------------- -/** - @short convert timestamp from String to tools::DateTime notation - @descr Format: "<day>.<month>.<year>/<hour>:<min>:<sec>" - e.g. : "1.11.2001/13:45:16" - - @param sString - timestamp in string notation - - @return timestamp in DateTime notation - */ -DateTime Converter::convert_String2DateTime( /*IN*/ const ::rtl::OUString& sSource ) -{ - DateTime aStamp ; - sal_Int32 nIndex = 0; - - sal_uInt16 nDay = (sal_uInt16)(sSource.getToken( 0, (sal_Unicode)'.', nIndex ).toInt32()); - if( nIndex>0 ) - { - sal_uInt16 nMonth = (sal_uInt16)(sSource.getToken( 0, (sal_Unicode)'.', nIndex ).toInt32()); - if( nIndex>0 ) - { - sal_uInt16 nYear = (sal_uInt16)(sSource.getToken( 0, (sal_Unicode)'/', nIndex ).toInt32()); - if( nIndex>0 ) - { - sal_uInt32 nHour = sSource.getToken( 0, (sal_Unicode)':', nIndex ).toInt32(); - if( nIndex>0 ) - { - sal_uInt32 nMin = sSource.getToken( 0, (sal_Unicode)':', nIndex ).toInt32(); - if( nIndex>0 && nIndex<sSource.getLength() ) - { - sal_uInt32 nSec = sSource.copy( nIndex, sSource.getLength()-nIndex ).toInt32(); - - Date aDate( nDay , nMonth, nYear ); - Time aTime( nHour, nMin , nSec ); - aStamp = DateTime( aDate, aTime ); - } - } - } - } - } - return aStamp; -} - -//----------------------------------------------------------------------------- -/** - @short convert timestamp from DateTime to String notation - @descr Format: "<day>.<month>.<year>/<hour>:<min>:<sec>" - e.g. : "1.11.2001/13:45:16" - - @param aStamp - timestamp in DateTime notation - - @return timestamp in String notation - */ -::rtl::OUString Converter::convert_DateTime2String( /*IN*/ const DateTime& aSource ) -{ - ::rtl::OUStringBuffer sBuffer(25); - - sBuffer.append( (sal_Int32)aSource.GetDay() ); - sBuffer.append( (sal_Unicode)'.' ); - sBuffer.append( (sal_Int32)aSource.GetMonth() ); - sBuffer.append( (sal_Unicode)'.' ); - sBuffer.append( (sal_Int32)aSource.GetYear() ); - sBuffer.append( (sal_Unicode)'/' ); - sBuffer.append( (sal_Int32)aSource.GetHour() ); - sBuffer.append( (sal_Unicode)':' ); - sBuffer.append( (sal_Int32)aSource.GetMin() ); - sBuffer.append( (sal_Unicode)':' ); - sBuffer.append( (sal_Int32)aSource.GetSec() ); - - return sBuffer.makeStringAndClear(); -} - -::rtl::OUString Converter::convert_DateTime2ISO8601( const DateTime& aSource ) -{ - ::rtl::OUStringBuffer sBuffer(25); - - sal_Int32 nYear = aSource.GetYear(); - sal_Int32 nMonth = aSource.GetMonth(); - sal_Int32 nDay = aSource.GetDay(); - - sal_Int32 nHour = aSource.GetHour(); - sal_Int32 nMin = aSource.GetMin(); - sal_Int32 nSec = aSource.GetSec(); - - // write year formated as "YYYY" - if (nYear<10) - sBuffer.appendAscii("000"); - else - if (nYear<100) - sBuffer.appendAscii("00"); - else - if (nYear<1000) - sBuffer.appendAscii("0"); - sBuffer.append( (sal_Int32)nYear ); - - sBuffer.appendAscii("-"); - // write month formated as "MM" - if (nMonth<10) - sBuffer.appendAscii("0"); - sBuffer.append( (sal_Int32)nMonth ); - - sBuffer.appendAscii("-"); - // write day formated as "DD" - if (nDay<10) - sBuffer.appendAscii("0"); - sBuffer.append( (sal_Int32)nDay ); - - sBuffer.appendAscii("T"); - // write hours formated as "hh" - if (nHour<10) - sBuffer.appendAscii("0"); - sBuffer.append( (sal_Int32)nHour ); - - sBuffer.appendAscii(":"); - // write min formated as "mm" - if (nMin<10) - sBuffer.appendAscii("0"); - sBuffer.append( (sal_Int32)nMin ); - - sBuffer.appendAscii(":"); - // write sec formated as "ss" - if (nSec<10) - sBuffer.appendAscii("0"); - sBuffer.append( (sal_Int32)nSec ); - - sBuffer.appendAscii("Z"); - - return sBuffer.makeStringAndClear(); -} - -} // namespace framework diff --git a/framework/source/classes/framelistanalyzer.cxx b/framework/source/classes/framelistanalyzer.cxx deleted file mode 100644 index 22f019e78df5..000000000000 --- a/framework/source/classes/framelistanalyzer.cxx +++ /dev/null @@ -1,302 +0,0 @@ -/************************************************************************* - * - * 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_framework.hxx" - -#include "classes/framelistanalyzer.hxx" - -//_______________________________________________ -// my own includes -#include <threadhelp/writeguard.hxx> -#include <threadhelp/readguard.hxx> -#include <targets.h> -#include <properties.h> -#include <services.h> - -//_______________________________________________ -// interface includes -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/frame/XModuleManager.hpp> - -//_______________________________________________ -// includes of other projects -#include <unotools/processfactory.hxx> -#include <vcl/svapp.hxx> - -//_______________________________________________ -// namespace - -namespace framework{ - -//_______________________________________________ -// non exported const - -//_______________________________________________ -// non exported definitions - -//_______________________________________________ -// declarations - -//_______________________________________________ - -/** - */ - -FrameListAnalyzer::FrameListAnalyzer( const css::uno::Reference< css::frame::XFramesSupplier >& xSupplier , - const css::uno::Reference< css::frame::XFrame >& xReferenceFrame , - sal_uInt32 eDetectMode ) - : m_xSupplier (xSupplier ) - , m_xReferenceFrame(xReferenceFrame) - , m_eDetectMode (eDetectMode ) -{ - impl_analyze(); -} - -//_______________________________________________ - -/** - */ - -FrameListAnalyzer::~FrameListAnalyzer() -{ -} - -//_______________________________________________ - -/** returns an analyzed list of all currently opened (top!) frames inside the desktop tree. - - We try to get a snapshot of all opened frames, which are part of the desktop frame container. - Of course we can't access frames, which stands outside of this tree. - But it's neccessary to collect top frames here only. Otherwhise we interpret closing of last - frame wrong. Further we analyze this list and split into different parts. - E.g. for "CloseDoc" we must know, which frames of the given list referr to the same model. - These frames must be closed then. But all other frames must be untouched. - In case the request was "CloseWin" these splitted lists can be used too, to decide if the last window - or document was closed. Then we have to initialize the backing window ... - Last but not least we must know something about our special help frame. It must be handled - seperatly. And last but not least - the backing component frame must be detected too. -*/ - -void FrameListAnalyzer::impl_analyze() -{ - // reset all members to get a consistent state - m_bReferenceIsHidden = sal_False; - m_bReferenceIsHelp = sal_False; - m_bReferenceIsBacking = sal_False; - m_xHelp = css::uno::Reference< css::frame::XFrame >(); - m_xBackingComponent = css::uno::Reference< css::frame::XFrame >(); - - // try to get the task container by using the given supplier - css::uno::Reference< css::container::XIndexAccess > xFrameContainer(m_xSupplier->getFrames(), css::uno::UNO_QUERY); - - // All return list get an initial size to include all possible frames. - // They will be packed at the end of this method ... using the actual step positions then. - sal_Int32 nVisibleStep = 0; - sal_Int32 nHiddenStep = 0; - sal_Int32 nModelStep = 0; - sal_Int32 nCount = xFrameContainer->getCount(); - - m_lOtherVisibleFrames.realloc(nCount); - m_lOtherHiddenFrames.realloc(nCount); - m_lModelFrames.realloc(nCount); - - // ask for the model of the given reference frame. - // It must be compared with the model of every frame of the container - // to sort it into the list of frames with the same model. - // Supress this step, if right detect mode isn't set. - css::uno::Reference< css::frame::XModel > xReferenceModel; - if ((m_eDetectMode & E_MODEL) == E_MODEL ) - { - css::uno::Reference< css::frame::XController > xReferenceController; - if (m_xReferenceFrame.is()) - xReferenceController = m_xReferenceFrame->getController(); - if (xReferenceController.is()) - xReferenceModel = xReferenceController->getModel(); - } - - // check, if the reference frame is in hidden mode. - // But look, if this analyze step is realy needed. - css::uno::Reference< css::beans::XPropertySet > xSet(m_xReferenceFrame, css::uno::UNO_QUERY); - if ( - ((m_eDetectMode & E_HIDDEN) == E_HIDDEN) && - (xSet.is() ) - ) - { - xSet->getPropertyValue(FRAME_PROPNAME_ISHIDDEN) >>= m_bReferenceIsHidden; - } - - // check, if the reference frame includes the backing component. - // But look, if this analyze step is realy needed. - if ((m_eDetectMode & E_BACKINGCOMPONENT) == E_BACKINGCOMPONENT) - { - try - { - css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR = ::utl::getProcessServiceFactory(); - css::uno::Reference< css::frame::XModuleManager > xModuleMgr(xSMGR->createInstance(SERVICENAME_MODULEMANAGER), css::uno::UNO_QUERY_THROW); - ::rtl::OUString sModule = xModuleMgr->identify(m_xReferenceFrame); - m_bReferenceIsBacking = (sModule.equals(SERVICENAME_STARTMODULE)); - } - catch(const css::uno::Exception&) - {} - } - - // check, if the reference frame includes the help module. - // But look, if this analyze step is realy needed. - if ( - ((m_eDetectMode & E_HELP) == E_HELP ) && - (m_xReferenceFrame.is() ) && - (m_xReferenceFrame->getName() == SPECIALTARGET_HELPTASK) - ) - { - m_bReferenceIsHelp = sal_True; - } - - try - { - // Step over all frames of the desktop frame container and analyze it. - for (sal_Int32 i=0; i<nCount; ++i) - { - // Ignore invalid items ... and of course the reference frame. - // It will be a member of the given frame list too - but it was already - // analyzed before! - css::uno::Reference< css::frame::XFrame > xFrame; - if ( - !(xFrameContainer->getByIndex(i) >>= xFrame) || - !(xFrame.is() ) || - (xFrame==m_xReferenceFrame ) - ) - continue; - - #ifdef ENABLE_WARNINGS - if ( - ((m_eDetectMode & E_ZOMBIE) == E_ZOMBIE) && - ( - (!xFrame->getContainerWindow().is()) || - (!xFrame->getComponentWindow().is()) - ) - ) - { - LOG_WARNING("FrameListAnalyzer::impl_analyze()", "ZOMBIE!") - } - #endif - - // ------------------------------------------------- - // a) Is it the special help task? - // Return it seperated from any return list. - if ( - ((m_eDetectMode & E_HELP) == E_HELP ) && - (xFrame->getName()==SPECIALTARGET_HELPTASK) - ) - { - m_xHelp = xFrame; - continue; - } - - // ------------------------------------------------- - // b) Or is includes this task the special backing component? - // Return it seperated from any return list. - // But check if the reference task itself is the backing frame. - // Our user mst know it to decide right. - if ((m_eDetectMode & E_BACKINGCOMPONENT) == E_BACKINGCOMPONENT) - { - try - { - css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR = ::utl::getProcessServiceFactory(); - css::uno::Reference< css::frame::XModuleManager > xModuleMgr(xSMGR->createInstance(SERVICENAME_MODULEMANAGER), css::uno::UNO_QUERY); - ::rtl::OUString sModule = xModuleMgr->identify(xFrame); - if (sModule.equals(SERVICENAME_STARTMODULE)) - { - m_xBackingComponent = xFrame; - continue; - } - } - catch(const css::uno::Exception&) - {} - } - - // ------------------------------------------------- - // c) Or is it the a task, which uses the specified model? - // Add it to the list of "model frames". - if ((m_eDetectMode & E_MODEL) == E_MODEL) - { - css::uno::Reference< css::frame::XController > xController = xFrame->getController(); - css::uno::Reference< css::frame::XModel > xModel ; - if (xController.is()) - xModel = xController->getModel(); - if (xModel==xReferenceModel) - { - m_lModelFrames[nModelStep] = xFrame; - ++nModelStep; - continue; - } - } - - // ------------------------------------------------- - // d) Or is it the a task, which use another or no model at all? - // Add it to the list of "other frames". But look for it's - // visible state ... if it's allowed to do so. - // ------------------------------------------------- - sal_Bool bHidden = sal_False; - if ((m_eDetectMode & E_HIDDEN) == E_HIDDEN ) - { - xSet = css::uno::Reference< css::beans::XPropertySet >(xFrame, css::uno::UNO_QUERY); - if (xSet.is()) - { - xSet->getPropertyValue(FRAME_PROPNAME_ISHIDDEN) >>= bHidden; - } - } - - if (bHidden) - { - m_lOtherHiddenFrames[nHiddenStep] = xFrame; - ++nHiddenStep; - } - else - { - m_lOtherVisibleFrames[nVisibleStep] = xFrame; - ++nVisibleStep; - } - } - } - catch(css::lang::IndexOutOfBoundsException) - { - // stop copying if index seams to be wrong. - // This interface can't realy guarantee its count for multithreaded - // environments. So it can occure! - } - - // Pack both lists by using the actual step positions. - // All empty or ignorable items should exist at the end of these lists - // behind the position pointers. So they will be removed by a reallocation. - m_lOtherVisibleFrames.realloc(nVisibleStep); - m_lOtherHiddenFrames.realloc(nHiddenStep); - m_lModelFrames.realloc(nModelStep); -} - -} // namespace framework diff --git a/framework/source/classes/fwkresid.cxx b/framework/source/classes/fwkresid.cxx deleted file mode 100644 index 54b37da6dbf7..000000000000 --- a/framework/source/classes/fwkresid.cxx +++ /dev/null @@ -1,65 +0,0 @@ -/************************************************************************* - * - * 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_framework.hxx" - -#include "classes/fwkresid.hxx" -#include <tools/string.hxx> -#include <vos/mutex.hxx> -#include <vcl/svapp.hxx> - -#include <rtl/strbuf.hxx> - -namespace framework -{ - -ResMgr* FwkResId::GetResManager() -{ - static ResMgr* pResMgr = NULL; - - if ( !pResMgr ) - { - rtl::OStringBuffer aBuf( 32 ); - aBuf.append( "fwe" ); - - vos::OGuard aSolarGuard( Application::GetSolarMutex() ); - pResMgr = ResMgr::CreateResMgr( aBuf.getStr() ); - } - - return pResMgr; -} - -// ----------------------------------------------------------------------- - -FwkResId::FwkResId( USHORT nId ) : - ResId( nId, *FwkResId::GetResManager() ) -{ -} - -} - diff --git a/framework/source/classes/fwktabwindow.cxx b/framework/source/classes/fwktabwindow.cxx index aa550807460c..a441f251a592 100644 --- a/framework/source/classes/fwktabwindow.cxx +++ b/framework/source/classes/fwktabwindow.cxx @@ -30,7 +30,7 @@ #include <classes/fwktabwindow.hxx> #include "framework.hrc" -#include <classes/fwlresid.hxx> +#include <classes/fwkresid.hxx> #include <com/sun/star/awt/PosSize.hpp> #include <com/sun/star/awt/XContainerWindowEventHandler.hpp> @@ -205,9 +205,9 @@ void FwkTabPage::Resize() FwkTabWindow::FwkTabWindow( Window* pParent ) : - Window( pParent, FwlResId( WIN_TABWINDOW ) ), + Window( pParent, FwkResId( WIN_TABWINDOW ) ), - m_aTabCtrl ( this, FwlResId( TC_TABCONTROL ) ) + m_aTabCtrl ( this, FwkResId( TC_TABCONTROL ) ) { uno::Reference < lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() ); m_xWinProvider = uno::Reference < awt::XContainerWindowProvider >( diff --git a/framework/source/classes/imagewrapper.cxx b/framework/source/classes/imagewrapper.cxx deleted file mode 100644 index 82a7f684413c..000000000000 --- a/framework/source/classes/imagewrapper.cxx +++ /dev/null @@ -1,120 +0,0 @@ -/************************************************************************* - * - * 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_framework.hxx" - -#include <classes/imagewrapper.hxx> -#include <osl/mutex.hxx> -#include <vcl/svapp.hxx> -#include <vcl/bitmap.hxx> -#include <vcl/bitmapex.hxx> -#include <tools/stream.hxx> -#include <cppuhelper/typeprovider.hxx> - -using namespace com::sun::star::lang; -using namespace com::sun::star::uno; - -namespace framework -{ - -static Sequence< sal_Int8 > impl_getStaticIdentifier() -{ - static sal_uInt8 pGUID[16] = { 0x46, 0xAD, 0x69, 0xFB, 0xA7, 0xBE, 0x44, 0x83, 0xB2, 0xA7, 0xB3, 0xEC, 0x59, 0x4A, 0xB7, 0x00 }; - static ::com::sun::star::uno::Sequence< sal_Int8 > seqID((sal_Int8*)pGUID,16) ; - return seqID ; -} - - -ImageWrapper::ImageWrapper( const Image& aImage ) : ThreadHelpBase( &Application::GetSolarMutex() ) - , m_aImage( aImage ) -{ -} - - -ImageWrapper::~ImageWrapper() -{ -} - - -Sequence< sal_Int8 > ImageWrapper::GetUnoTunnelId() -{ - return impl_getStaticIdentifier(); -} - -// XBitmap -com::sun::star::awt::Size SAL_CALL ImageWrapper::getSize() throw ( RuntimeException ) -{ - vos::OGuard aGuard( Application::GetSolarMutex() ); - - BitmapEx aBitmapEx( m_aImage.GetBitmapEx() ); - Size aBitmapSize( aBitmapEx.GetSizePixel() ); - - return com::sun::star::awt::Size( aBitmapSize.Width(), aBitmapSize.Height() ); -} - -Sequence< sal_Int8 > SAL_CALL ImageWrapper::getDIB() throw ( RuntimeException ) -{ - vos::OGuard aGuard( Application::GetSolarMutex() ); - - SvMemoryStream aMem; - aMem << m_aImage.GetBitmapEx().GetBitmap(); - return Sequence< sal_Int8 >( (sal_Int8*) aMem.GetData(), aMem.Tell() ); -} - -Sequence< sal_Int8 > SAL_CALL ImageWrapper::getMaskDIB() throw ( RuntimeException ) -{ - vos::OGuard aGuard( Application::GetSolarMutex() ); - BitmapEx aBmpEx( m_aImage.GetBitmapEx() ); - - if ( aBmpEx.IsAlpha() ) - { - SvMemoryStream aMem; - aMem << aBmpEx.GetAlpha().GetBitmap(); - return Sequence< sal_Int8 >( (sal_Int8*) aMem.GetData(), aMem.Tell() ); - } - else if ( aBmpEx.IsTransparent() ) - { - SvMemoryStream aMem; - aMem << aBmpEx.GetMask(); - return Sequence< sal_Int8 >( (sal_Int8*) aMem.GetData(), aMem.Tell() ); - } - - return Sequence< sal_Int8 >(); -} - -// XUnoTunnel -sal_Int64 SAL_CALL ImageWrapper::getSomething( const Sequence< sal_Int8 >& aIdentifier ) throw ( RuntimeException ) -{ - if ( aIdentifier == impl_getStaticIdentifier() ) - return reinterpret_cast< sal_Int64 >( this ); - else - return 0; -} - -} - diff --git a/framework/source/classes/makefile.mk b/framework/source/classes/makefile.mk deleted file mode 100644 index 22e8a6d540f0..000000000000 --- a/framework/source/classes/makefile.mk +++ /dev/null @@ -1,69 +0,0 @@ -#************************************************************************* -# -# 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. -# -#************************************************************************* -PRJ=..$/.. - -PRJNAME= framework -TARGET= fwk_classes -ENABLE_EXCEPTIONS= TRUE - -# --- Settings ----------------------------------------------------- - -.INCLUDE : settings.mk - -# --- Generate ----------------------------------------------------- - -SLOFILES= \ - $(SLO)$/propertysethelper.obj \ - $(SLO)$/framecontainer.obj \ - $(SLO)$/taskcreator.obj \ - $(SLO)$/menumanager.obj \ - $(SLO)$/bmkmenu.obj \ - $(SLO)$/droptargetlistener.obj \ - $(SLO)$/converter.obj \ - $(SLO)$/actiontriggerpropertyset.obj \ - $(SLO)$/actiontriggerseparatorpropertyset.obj \ - $(SLO)$/actiontriggercontainer.obj \ - $(SLO)$/imagewrapper.obj \ - $(SLO)$/rootactiontriggercontainer.obj \ - $(SLO)$/protocolhandlercache.obj \ - $(SLO)$/addonmenu.obj \ - $(SLO)$/addonsoptions.obj \ - $(SLO)$/fwkresid.obj \ - $(SLO)$/fwlresid.obj \ - $(SLO)$/framelistanalyzer.obj \ - $(SLO)$/sfxhelperfunctions.obj \ - $(SLO)$/menuextensionsupplier.obj \ - $(SLO)$/fwktabwindow.obj - -SRS1NAME=$(TARGET) -SRC1FILES =\ - resource.src - -# --- Targets ------------------------------------------------------ - -.INCLUDE : target.mk - diff --git a/framework/source/classes/menuextensionsupplier.cxx b/framework/source/classes/menuextensionsupplier.cxx deleted file mode 100644 index 07991c61f90f..000000000000 --- a/framework/source/classes/menuextensionsupplier.cxx +++ /dev/null @@ -1,64 +0,0 @@ -/************************************************************************* - * - * 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_framework.hxx" -#include <classes/menuextensionsupplier.hxx> -#include <osl/mutex.hxx> - -static pfunc_setMenuExtensionSupplier pMenuExtensionSupplierFunc = NULL; - -namespace framework -{ - -pfunc_setMenuExtensionSupplier SAL_CALL SetMenuExtensionSupplier( pfunc_setMenuExtensionSupplier pMenuExtensionSupplierFuncArg ) -{ - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); - - pfunc_setMenuExtensionSupplier pOldMenuExtensionSupplierFunc = pMenuExtensionSupplierFunc; - pMenuExtensionSupplierFunc = pMenuExtensionSupplierFuncArg; - return pOldMenuExtensionSupplierFunc; -} - -MenuExtensionItem SAL_CALL GetMenuExtension() -{ - MenuExtensionItem aItem; - - pfunc_setMenuExtensionSupplier pLocalMenuExtensionSupplierFunc( 0 ); - - { - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); - pLocalMenuExtensionSupplierFunc = pMenuExtensionSupplierFunc; - } - - if ( pLocalMenuExtensionSupplierFunc ) - return (*pLocalMenuExtensionSupplierFunc)(); - else - return aItem; -} - -} diff --git a/framework/source/classes/menumanager.cxx b/framework/source/classes/menumanager.cxx index 61cb8eb4a253..493ac9dfb4a1 100644 --- a/framework/source/classes/menumanager.cxx +++ b/framework/source/classes/menumanager.cxx @@ -33,12 +33,12 @@ // my own includes //_________________________________________________________________________________________________________________ #include <classes/menumanager.hxx> -#include <xml/menuconfiguration.hxx> -#include <classes/bmkmenu.hxx> -#include <classes/addonmenu.hxx> -#include <helper/imageproducer.hxx> +#include <framework/menuconfiguration.hxx> +#include <framework/bmkmenu.hxx> +#include <framework/addonmenu.hxx> +#include <framework/imageproducer.hxx> #include <threadhelp/resetableguard.hxx> -#include "classes/addonsoptions.hxx" +#include "framework/addonsoptions.hxx" #include <classes/fwkresid.hxx> #include <services.h> #include "classes/resource.hrc" diff --git a/framework/source/classes/propertysethelper.cxx b/framework/source/classes/propertysethelper.cxx deleted file mode 100644 index 2e41106a9ceb..000000000000 --- a/framework/source/classes/propertysethelper.cxx +++ /dev/null @@ -1,450 +0,0 @@ -/************************************************************************* - * - * 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_framework.hxx" - -//_________________________________________________________________________________________________________________ -// my own includes - -#include <classes/propertysethelper.hxx> -#include <threadhelp/transactionguard.hxx> -#include <threadhelp/readguard.hxx> -#include <threadhelp/writeguard.hxx> - -//_________________________________________________________________________________________________________________ -// interface includes - -//_________________________________________________________________________________________________________________ -// other includes - -//_________________________________________________________________________________________________________________ -// namespace - -namespace framework{ - -//_________________________________________________________________________________________________________________ -// non exported definitions - -//----------------------------------------------------------------------------- -PropertySetHelper::PropertySetHelper(const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR , - LockHelper* pExternalLock , - TransactionManager* pExternalTransactionManager , - sal_Bool bReleaseLockOnCall ) - : m_xSMGR (xSMGR ) - , m_lSimpleChangeListener(pExternalLock->getShareableOslMutex()) - , m_lVetoChangeListener (pExternalLock->getShareableOslMutex()) - , m_bReleaseLockOnCall (bReleaseLockOnCall ) - , m_rLock (*pExternalLock ) - , m_rTransactionManager (*pExternalTransactionManager ) -{ -} - -//----------------------------------------------------------------------------- -PropertySetHelper::~PropertySetHelper() -{ -} - -//----------------------------------------------------------------------------- -void PropertySetHelper::impl_setPropertyChangeBroadcaster(const css::uno::Reference< css::uno::XInterface >& xBroadcaster) -{ - TransactionGuard aTransaction(m_rTransactionManager, E_SOFTEXCEPTIONS); - - // SAFE -> - WriteGuard aWriteLock(m_rLock); - m_xBroadcaster = xBroadcaster; - aWriteLock.unlock(); - // <- SAFE -} - -//----------------------------------------------------------------------------- -void SAL_CALL PropertySetHelper::impl_addPropertyInfo(const css::beans::Property& aProperty) - throw(css::beans::PropertyExistException, - css::uno::Exception ) -{ - TransactionGuard aTransaction(m_rTransactionManager, E_SOFTEXCEPTIONS); - - // SAFE -> - WriteGuard aWriteLock(m_rLock); - - PropertySetHelper::TPropInfoHash::const_iterator pIt = m_lProps.find(aProperty.Name); - if (pIt != m_lProps.end()) - throw css::beans::PropertyExistException(); - - m_lProps[aProperty.Name] = aProperty; - // <- SAFE -} - -//----------------------------------------------------------------------------- -void SAL_CALL PropertySetHelper::impl_removePropertyInfo(const ::rtl::OUString& sProperty) - throw(css::beans::UnknownPropertyException, - css::uno::Exception ) -{ - TransactionGuard aTransaction(m_rTransactionManager, E_SOFTEXCEPTIONS); - - // SAFE -> - WriteGuard aWriteLock(m_rLock); - - PropertySetHelper::TPropInfoHash::iterator pIt = m_lProps.find(sProperty); - if (pIt == m_lProps.end()) - throw css::beans::UnknownPropertyException(); - - m_lProps.erase(pIt); - // <- SAFE -} - -//----------------------------------------------------------------------------- -void SAL_CALL PropertySetHelper::impl_enablePropertySet() -{ -} - -//----------------------------------------------------------------------------- -void SAL_CALL PropertySetHelper::impl_disablePropertySet() -{ - TransactionGuard aTransaction(m_rTransactionManager, E_SOFTEXCEPTIONS); - - // SAFE -> - WriteGuard aWriteLock(m_rLock); - - css::uno::Reference< css::uno::XInterface > xThis(static_cast< css::beans::XPropertySet* >(this), css::uno::UNO_QUERY); - css::lang::EventObject aEvent(xThis); - - m_lSimpleChangeListener.disposeAndClear(aEvent); - m_lVetoChangeListener.disposeAndClear(aEvent); - m_lProps.free(); - - aWriteLock.unlock(); - // <- SAFE -} - -//----------------------------------------------------------------------------- -sal_Bool PropertySetHelper::impl_existsVeto(const css::beans::PropertyChangeEvent& aEvent) -{ - /* Dont use the lock here! - The used helper is threadsafe and it lives for the whole lifetime of - our own object. - */ - ::cppu::OInterfaceContainerHelper* pVetoListener = m_lVetoChangeListener.getContainer(aEvent.PropertyName); - if (! pVetoListener) - return sal_False; - - ::cppu::OInterfaceIteratorHelper pListener(*pVetoListener); - while (pListener.hasMoreElements()) - { - try - { - css::uno::Reference< css::beans::XVetoableChangeListener > xListener( - ((css::beans::XVetoableChangeListener*)pListener.next()), - css::uno::UNO_QUERY_THROW); - xListener->vetoableChange(aEvent); - } - catch(const css::uno::RuntimeException&) - { pListener.remove(); } - catch(const css::beans::PropertyVetoException&) - { return sal_True; } - } - - return sal_False; -} - -//----------------------------------------------------------------------------- -void PropertySetHelper::impl_notifyChangeListener(const css::beans::PropertyChangeEvent& aEvent) -{ - /* Dont use the lock here! - The used helper is threadsafe and it lives for the whole lifetime of - our own object. - */ - ::cppu::OInterfaceContainerHelper* pSimpleListener = m_lSimpleChangeListener.getContainer(aEvent.PropertyName); - if (! pSimpleListener) - return; - - ::cppu::OInterfaceIteratorHelper pListener(*pSimpleListener); - while (pListener.hasMoreElements()) - { - try - { - css::uno::Reference< css::beans::XPropertyChangeListener > xListener( - ((css::beans::XVetoableChangeListener*)pListener.next()), - css::uno::UNO_QUERY_THROW); - xListener->propertyChange(aEvent); - } - catch(const css::uno::RuntimeException&) - { pListener.remove(); } - } -} - -//----------------------------------------------------------------------------- -css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL PropertySetHelper::getPropertySetInfo() - throw(css::uno::RuntimeException) -{ - TransactionGuard aTransaction(m_rTransactionManager, E_HARDEXCEPTIONS); - - css::uno::Reference< css::beans::XPropertySetInfo > xInfo(static_cast< css::beans::XPropertySetInfo* >(this), css::uno::UNO_QUERY_THROW); - return xInfo; -} - -//----------------------------------------------------------------------------- -void SAL_CALL PropertySetHelper::setPropertyValue(const ::rtl::OUString& sProperty, - const css::uno::Any& aValue ) - throw(css::beans::UnknownPropertyException, - css::beans::PropertyVetoException , - css::lang::IllegalArgumentException , - css::lang::WrappedTargetException , - css::uno::RuntimeException ) -{ - // TODO look for e.g. readonly props and reject setProp() call! - - TransactionGuard aTransaction(m_rTransactionManager, E_HARDEXCEPTIONS); - - // SAFE -> - WriteGuard aWriteLock(m_rLock); - - PropertySetHelper::TPropInfoHash::const_iterator pIt = m_lProps.find(sProperty); - if (pIt == m_lProps.end()) - throw css::beans::UnknownPropertyException(); - - css::beans::Property aPropInfo = pIt->second; - - sal_Bool bLocked = sal_True; - if (m_bReleaseLockOnCall) - { - aWriteLock.unlock(); - bLocked = sal_False; - // <- SAFE - } - - css::uno::Any aCurrentValue = impl_getPropertyValue(aPropInfo.Name, aPropInfo.Handle); - - if (! bLocked) - { - // SAFE -> - aWriteLock.lock(); - bLocked = sal_True; - } - - sal_Bool bWillBeChanged = (aCurrentValue != aValue); - if (! bWillBeChanged) - return; - - css::beans::PropertyChangeEvent aEvent; - aEvent.PropertyName = aPropInfo.Name; - aEvent.Further = sal_False; - aEvent.PropertyHandle = aPropInfo.Handle; - aEvent.OldValue = aCurrentValue; - aEvent.NewValue = aValue; - aEvent.Source = css::uno::Reference< css::uno::XInterface >(m_xBroadcaster.get(), css::uno::UNO_QUERY); - - if (m_bReleaseLockOnCall) - { - aWriteLock.unlock(); - bLocked = sal_False; - // <- SAFE - } - - if (impl_existsVeto(aEvent)) - throw css::beans::PropertyVetoException(); - - impl_setPropertyValue(aPropInfo.Name, aPropInfo.Handle, aValue); - - impl_notifyChangeListener(aEvent); -} - -//----------------------------------------------------------------------------- -css::uno::Any SAL_CALL PropertySetHelper::getPropertyValue(const ::rtl::OUString& sProperty) - throw(css::beans::UnknownPropertyException, - css::lang::WrappedTargetException , - css::uno::RuntimeException ) -{ - TransactionGuard aTransaction(m_rTransactionManager, E_HARDEXCEPTIONS); - - // SAFE -> - ReadGuard aReadLock(m_rLock); - - PropertySetHelper::TPropInfoHash::const_iterator pIt = m_lProps.find(sProperty); - if (pIt == m_lProps.end()) - throw css::beans::UnknownPropertyException(); - - css::beans::Property aPropInfo = pIt->second; - - sal_Bool bLocked = sal_True; - if (m_bReleaseLockOnCall) - { - aReadLock.unlock(); - bLocked = sal_False; - // <- SAFE - } - - return impl_getPropertyValue(aPropInfo.Name, aPropInfo.Handle); -} - -//----------------------------------------------------------------------------- -void SAL_CALL PropertySetHelper::addPropertyChangeListener(const ::rtl::OUString& sProperty, - const css::uno::Reference< css::beans::XPropertyChangeListener >& xListener) - throw(css::beans::UnknownPropertyException, - css::lang::WrappedTargetException , - css::uno::RuntimeException ) -{ - TransactionGuard aTransaction(m_rTransactionManager, E_HARDEXCEPTIONS); - - // SAFE -> - ReadGuard aReadLock(m_rLock); - - PropertySetHelper::TPropInfoHash::const_iterator pIt = m_lProps.find(sProperty); - if (pIt == m_lProps.end()) - throw css::beans::UnknownPropertyException(); - - aReadLock.unlock(); - // <- SAFE - - m_lSimpleChangeListener.addInterface(sProperty, xListener); -} - -//----------------------------------------------------------------------------- -void SAL_CALL PropertySetHelper::removePropertyChangeListener(const ::rtl::OUString& sProperty, - const css::uno::Reference< css::beans::XPropertyChangeListener >& xListener) - throw(css::beans::UnknownPropertyException, - css::lang::WrappedTargetException , - css::uno::RuntimeException ) -{ - TransactionGuard aTransaction(m_rTransactionManager, E_SOFTEXCEPTIONS); - - // SAFE -> - ReadGuard aReadLock(m_rLock); - - PropertySetHelper::TPropInfoHash::const_iterator pIt = m_lProps.find(sProperty); - if (pIt == m_lProps.end()) - throw css::beans::UnknownPropertyException(); - - aReadLock.unlock(); - // <- SAFE - - m_lSimpleChangeListener.removeInterface(sProperty, xListener); -} - -//----------------------------------------------------------------------------- -void SAL_CALL PropertySetHelper::addVetoableChangeListener(const ::rtl::OUString& sProperty, - const css::uno::Reference< css::beans::XVetoableChangeListener >& xListener) - throw(css::beans::UnknownPropertyException, - css::lang::WrappedTargetException , - css::uno::RuntimeException ) -{ - TransactionGuard aTransaction(m_rTransactionManager, E_HARDEXCEPTIONS); - - // SAFE -> - ReadGuard aReadLock(m_rLock); - - PropertySetHelper::TPropInfoHash::const_iterator pIt = m_lProps.find(sProperty); - if (pIt == m_lProps.end()) - throw css::beans::UnknownPropertyException(); - - aReadLock.unlock(); - // <- SAFE - - m_lVetoChangeListener.addInterface(sProperty, xListener); -} - -//----------------------------------------------------------------------------- -void SAL_CALL PropertySetHelper::removeVetoableChangeListener(const ::rtl::OUString& sProperty, - const css::uno::Reference< css::beans::XVetoableChangeListener >& xListener) - throw(css::beans::UnknownPropertyException, - css::lang::WrappedTargetException , - css::uno::RuntimeException ) -{ - TransactionGuard aTransaction(m_rTransactionManager, E_SOFTEXCEPTIONS); - - // SAFE -> - ReadGuard aReadLock(m_rLock); - - PropertySetHelper::TPropInfoHash::const_iterator pIt = m_lProps.find(sProperty); - if (pIt == m_lProps.end()) - throw css::beans::UnknownPropertyException(); - - aReadLock.unlock(); - // <- SAFE - - m_lVetoChangeListener.removeInterface(sProperty, xListener); -} - -//----------------------------------------------------------------------------- -css::uno::Sequence< css::beans::Property > SAL_CALL PropertySetHelper::getProperties() - throw(css::uno::RuntimeException) -{ - TransactionGuard aTransaction(m_rTransactionManager, E_HARDEXCEPTIONS); - - // SAFE -> - ReadGuard aReadLock(m_rLock); - - sal_Int32 c = (sal_Int32)m_lProps.size(); - css::uno::Sequence< css::beans::Property > lProps(c); - PropertySetHelper::TPropInfoHash::const_iterator pIt ; - - for ( pIt = m_lProps.begin(); - pIt != m_lProps.end() ; - ++pIt ) - { - lProps[--c] = pIt->second; - } - - return lProps; - // <- SAFE -} - -//----------------------------------------------------------------------------- -css::beans::Property SAL_CALL PropertySetHelper::getPropertyByName(const ::rtl::OUString& sName) - throw(css::beans::UnknownPropertyException, - css::uno::RuntimeException ) -{ - TransactionGuard aTransaction(m_rTransactionManager, E_HARDEXCEPTIONS); - - // SAFE -> - ReadGuard aReadLock(m_rLock); - - PropertySetHelper::TPropInfoHash::const_iterator pIt = m_lProps.find(sName); - if (pIt == m_lProps.end()) - throw css::beans::UnknownPropertyException(); - - return pIt->second; - // <- SAFE -} - -//----------------------------------------------------------------------------- -sal_Bool SAL_CALL PropertySetHelper::hasPropertyByName(const ::rtl::OUString& sName) - throw(css::uno::RuntimeException) -{ - TransactionGuard aTransaction(m_rTransactionManager, E_HARDEXCEPTIONS); - - // SAFE -> - ReadGuard aReadLock(m_rLock); - - PropertySetHelper::TPropInfoHash::iterator pIt = m_lProps.find(sName); - sal_Bool bExist = (pIt != m_lProps.end()); - - return bExist; - // <- SAFE -} - -} // namespace framework diff --git a/framework/source/classes/protocolhandlercache.cxx b/framework/source/classes/protocolhandlercache.cxx deleted file mode 100644 index 266100ce4f43..000000000000 --- a/framework/source/classes/protocolhandlercache.cxx +++ /dev/null @@ -1,361 +0,0 @@ -/************************************************************************* - * - * 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_framework.hxx" - -/*TODO - - change "singleton" behaviour by using new helper ::comhelper::SingletonRef - - rename method exist() to existHandlerForURL() or similar one - - may its a good idea to replace struct ProtocolHandler by css::beans::NamedValue type?! -*/ - -//_________________________________________________________________________________________________________________ -// my own includes -//_________________________________________________________________________________________________________________ - -#include <classes/protocolhandlercache.hxx> -#include <classes/converter.hxx> -#include <threadhelp/readguard.hxx> -#include <threadhelp/writeguard.hxx> -#include <threadhelp/lockhelper.hxx> - -//_________________________________________________________________________________________________________________ -// interface includes -//_________________________________________________________________________________________________________________ - -//_________________________________________________________________________________________________________________ -// other includes -//_________________________________________________________________________________________________________________ -#include <tools/wldcrd.hxx> -#include <unotools/configpathes.hxx> -#include <rtl/ustrbuf.hxx> - -//_________________________________________________________________________________________________________________ -// namespace -//_________________________________________________________________________________________________________________ - -namespace framework{ - -//_________________________________________________________________________________________________________________ -// non exported const -//_________________________________________________________________________________________________________________ - -//_________________________________________________________________________________________________________________ -// non exported definitions -//_________________________________________________________________________________________________________________ - -/** - @short overloaded index operator of hash map to support pattern key search - @descr All keys inside this hash map are URL pattern which points to an uno - implementation name of a protocol handler service which is registered - for this pattern. This operator makes it easy to find such registered - handler by using a full qualified URL and compare it with all pattern - keys. - - @param sURL - the full qualified URL which should match to a registered pattern - - @return An iterator which points to the found item inside the hash or PatternHash::end() - if no pattern match this given <var>sURL</var>. - - @modified 30.04.2002 09:52, as96863 - */ -PatternHash::iterator PatternHash::findPatternKey( const ::rtl::OUString& sURL ) -{ - PatternHash::iterator pItem = this->begin(); - while( pItem!=this->end() ) - { - WildCard aPattern(pItem->first); - if (aPattern.Matches(sURL)) - break; - ++pItem; - } - return pItem; -} - -//_________________________________________________________________________________________________________________ - -/** - @short initialize static member of class HandlerCache - @descr We use a singleton pattern to implement this handler cache. - That means it use two static member list to hold all neccessary informations - and a ref count mechanism to create/destroy it on demand. - - @modified 30.04.2002 11:13, as96863 - */ -HandlerHash* HandlerCache::m_pHandler = NULL; -PatternHash* HandlerCache::m_pPattern = NULL; -sal_Int32 HandlerCache::m_nRefCount = 0 ; -HandlerCFGAccess* HandlerCache::m_pConfig = NULL; - -//_________________________________________________________________________________________________________________ - -/** - @short ctor of the cache of all registered protoco handler - @descr It tries to open the right configuration package automaticly - and fill the internal structures. After that the cache can be - used for read access on this data and perform some search - operations on it. - - @modified 30.04.2002 10:02, as96863 - */ -HandlerCache::HandlerCache() -{ - /* SAFE */{ - WriteGuard aGlobalLock( LockHelper::getGlobalLock() ); - - if (m_nRefCount==0) - { - m_pHandler = new HandlerHash(); - m_pPattern = new PatternHash(); - m_pConfig = new HandlerCFGAccess(PACKAGENAME_PROTOCOLHANDLER); - m_pConfig->read(&m_pHandler,&m_pPattern); - m_pConfig->setCache(this); - } - - ++m_nRefCount; - /* SAFE */} -} - -//_________________________________________________________________________________________________________________ - -/** - @short dtor of the cache - @descr It frees all used memory. In further implementations (may if we support write access too) - it's a good place to flush changes back to the configuration - but not needed yet. - - @modified 30.04.2002 09:54, as96863 - */ -HandlerCache::~HandlerCache() -{ - /* SAFE */{ - WriteGuard aGlobalLock( LockHelper::getGlobalLock() ); - - if( m_nRefCount==1) - { - m_pConfig->setCache(NULL); - m_pHandler->free(); - m_pPattern->free(); - - delete m_pConfig; - delete m_pHandler; - delete m_pPattern; - m_pConfig = NULL; - m_pHandler= NULL; - m_pPattern= NULL; - } - - --m_nRefCount; - /* SAFE */} -} - -//_________________________________________________________________________________________________________________ - -/** - @short dtor of the cache - @descr It frees all used memory. In further implementations (may if we support write access too) - it's a good place to flush changes back to the configuration - but not needed yet. - - @modified 30.04.2002 09:54, as96863 - */ -sal_Bool HandlerCache::search( const ::rtl::OUString& sURL, ProtocolHandler* pReturn ) const -{ - sal_Bool bFound = sal_False; - /* SAFE */{ - ReadGuard aReadLock( LockHelper::getGlobalLock() ); - PatternHash::const_iterator pItem = m_pPattern->findPatternKey(sURL); - if (pItem!=m_pPattern->end()) - { - *pReturn = (*m_pHandler)[pItem->second]; - bFound = sal_True; - } - /* SAFE */} - return bFound; -} - -//_________________________________________________________________________________________________________________ - -/** - @short search for a registered handler by using an URL struct - @descr We combine neccessary parts of this struct to a valid URL string - and call our other search method ... - It's a helper for outside code. - - @modified 30.04.2002 09:54, as96863 - */ -sal_Bool HandlerCache::search( const css::util::URL& aURL, ProtocolHandler* pReturn ) const -{ - return search( aURL.Complete, pReturn ); -} - -//_________________________________________________________________________________________________________________ - -sal_Bool HandlerCache::exists( const ::rtl::OUString& sURL ) const -{ - sal_Bool bFound = sal_False; - /* SAFE */{ - ReadGuard aReadLock( LockHelper::getGlobalLock() ); - PatternHash::const_iterator pItem = m_pPattern->findPatternKey(sURL); - bFound = pItem!=m_pPattern->end(); - /* SAFE */} - return bFound; -} - -//_________________________________________________________________________________________________________________ -void HandlerCache::takeOver(HandlerHash* pHandler, PatternHash* pPattern) -{ - // SAFE -> - WriteGuard aWriteLock( LockHelper::getGlobalLock() ); - - HandlerHash* pOldHandler = m_pHandler; - PatternHash* pOldPattern = m_pPattern; - - m_pHandler = pHandler; - m_pPattern = pPattern; - - pOldHandler->free(); - pOldPattern->free(); - delete pOldHandler; - delete pOldPattern; - - aWriteLock.unlock(); - // <- SAFE -} - -//_________________________________________________________________________________________________________________ - -/** - @short dtor of the config access class - @descr It opens the configuration package automaticly by using base class mechanism. - After that "read()" method of this class should be called to use it. - - @param sPackage - specifies the package name of the configuration data which should be used - - @modified 30.04.2002 10:06, as96863 - */ -HandlerCFGAccess::HandlerCFGAccess( const ::rtl::OUString& sPackage ) - : ConfigItem( sPackage ) -{ - css::uno::Sequence< ::rtl::OUString > lListenPathes(1); - lListenPathes[0] = SETNAME_HANDLER; - EnableNotification(lListenPathes); -} - -//_________________________________________________________________________________________________________________ - -/** - @short use base class mechanism to fill given structures - @descr User use us as a wrapper between configuration api and his internal structures. - He give us some pointer to his member and we fill it. - - @param pHandler - pointer to a list of protocol handler infos - - @param pPattern - reverse map of handler pattern to her uno names - - @modified 30.04.2002 09:54, as96863 - */ -void HandlerCFGAccess::read( HandlerHash** ppHandler , - PatternHash** ppPattern ) -{ - // list of all uno implementation names without encoding - css::uno::Sequence< ::rtl::OUString > lNames = GetNodeNames( SETNAME_HANDLER, ::utl::CONFIG_NAME_LOCAL_PATH ); - sal_Int32 nSourceCount = lNames.getLength(); - sal_Int32 nTargetCount = nSourceCount; - // list of all full qualified path names of configuration entries - css::uno::Sequence< ::rtl::OUString > lFullNames ( nTargetCount ); - - // expand names to full path names - sal_Int32 nSource=0; - sal_Int32 nTarget=0; - for( nSource=0; nSource<nSourceCount; ++nSource ) - { - ::rtl::OUStringBuffer sPath( SETNAME_HANDLER ); - sPath.append(CFG_PATH_SEPERATOR); - sPath.append(lNames[nSource]); - sPath.append(CFG_PATH_SEPERATOR); - sPath.append(PROPERTY_PROTOCOLS); - - lFullNames[nTarget] = sPath.makeStringAndClear(); - ++nTarget; - } - - // get values at all - css::uno::Sequence< css::uno::Any > lValues = GetProperties( lFullNames ); - LOG_ASSERT2( lFullNames.getLength()!=lValues.getLength(), "HandlerCFGAccess::read()", "Miss some configuration values of handler set!" ) - - // fill structures - nSource = 0; - for( nTarget=0; nTarget<nTargetCount; ++nTarget ) - { - // create it new for every loop to guarantee a real empty object! - ProtocolHandler aHandler; - aHandler.m_sUNOName = ::utl::extractFirstFromConfigurationPath(lNames[nSource]); - - // unpack all values of this handler - css::uno::Sequence< ::rtl::OUString > lTemp; - lValues[nTarget] >>= lTemp; - aHandler.m_lProtocols = Converter::convert_seqOUString2OUStringList(lTemp); - - // register his pattern into the performance search hash - for (OUStringList::iterator pItem =aHandler.m_lProtocols.begin(); - pItem!=aHandler.m_lProtocols.end() ; - ++pItem ) - { - (**ppPattern)[*pItem] = lNames[nSource]; - } - - // �nsert the handler info into the normal handler cache - (**ppHandler)[lNames[nSource]] = aHandler; - ++nSource; - } -} - -//_________________________________________________________________________________________________________________ -void HandlerCFGAccess::Notify(const css::uno::Sequence< rtl::OUString >& /*lPropertyNames*/) -{ - HandlerHash* pHandler = new HandlerHash; - PatternHash* pPattern = new PatternHash; - - read(&pHandler, &pPattern); - if (m_pCache) - m_pCache->takeOver(pHandler, pPattern); - else - { - delete pHandler; - delete pPattern; - } -} - -void HandlerCFGAccess::Commit() -{ -} - -} // namespace framework diff --git a/framework/source/classes/rootactiontriggercontainer.cxx b/framework/source/classes/rootactiontriggercontainer.cxx deleted file mode 100644 index c78d398b39a7..000000000000 --- a/framework/source/classes/rootactiontriggercontainer.cxx +++ /dev/null @@ -1,379 +0,0 @@ -/************************************************************************* - * - * 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_framework.hxx" - -#include <classes/rootactiontriggercontainer.hxx> -#include <classes/actiontriggercontainer.hxx> -#include <classes/actiontriggerpropertyset.hxx> -#include <classes/actiontriggerseparatorpropertyset.hxx> -#include <helper/actiontriggerhelper.hxx> -#include <threadhelp/resetableguard.hxx> -#include <osl/mutex.hxx> -#include <vcl/svapp.hxx> -#include <cppuhelper/typeprovider.hxx> - - -using namespace cppu; -using namespace com::sun::star::uno; -using namespace com::sun::star::lang; -using namespace com::sun::star::container; -using namespace com::sun::star::beans; - - -namespace framework -{ - -static Sequence< sal_Int8 > impl_getStaticIdentifier() -{ - static sal_uInt8 pGUID[16] = { 0x17, 0x0F, 0xA2, 0xC9, 0xCA, 0x50, 0x4A, 0xD3, 0xA6, 0x3B, 0x39, 0x99, 0xC5, 0x96, 0x43, 0x27 }; - static ::com::sun::star::uno::Sequence< sal_Int8 > seqID((sal_Int8*)pGUID,16) ; - return seqID ; -} - - -RootActionTriggerContainer::RootActionTriggerContainer( const Menu* pMenu, const ::rtl::OUString* pMenuIdentifier, const Reference< XMultiServiceFactory >& rServiceManager ) : - PropertySetContainer( rServiceManager ) - , m_bContainerCreated( sal_False ) - , m_bContainerChanged( sal_False ) - , m_bInContainerCreation( sal_False ) - , m_pMenu( pMenu ) - , m_pMenuIdentifier( pMenuIdentifier ) -{ -} - -RootActionTriggerContainer::~RootActionTriggerContainer() -{ -} - -Sequence< sal_Int8 > RootActionTriggerContainer::GetUnoTunnelId() const -{ - return impl_getStaticIdentifier(); -} - -const Menu* RootActionTriggerContainer::GetMenu() -{ - if ( !m_bContainerChanged ) - return m_pMenu; - else - { - ResetableGuard aGuard( m_aLock ); - - Menu* pNewMenu = new PopupMenu; - - ActionTriggerHelper::CreateMenuFromActionTriggerContainer( pNewMenu, this ); - m_pMenu = pNewMenu; - m_bContainerChanged = sal_False; - - return m_pMenu; - } -} - - -// XInterface -Any SAL_CALL RootActionTriggerContainer::queryInterface( const Type& aType ) -throw ( RuntimeException ) -{ - Any a = ::cppu::queryInterface( - aType , - SAL_STATIC_CAST( XMultiServiceFactory* , this ), - SAL_STATIC_CAST( XServiceInfo* , this ), - SAL_STATIC_CAST( XUnoTunnel* , this ), - SAL_STATIC_CAST( XTypeProvider* , this ), - SAL_STATIC_CAST( XNamed* , this )); - - if( a.hasValue() ) - { - return a; - } - - return PropertySetContainer::queryInterface( aType ); -} - -void SAL_CALL RootActionTriggerContainer::acquire() throw () -{ - PropertySetContainer::acquire(); -} - -void SAL_CALL RootActionTriggerContainer::release() throw () -{ - PropertySetContainer::release(); -} - -// XMultiServiceFactory -Reference< XInterface > SAL_CALL RootActionTriggerContainer::createInstance( const ::rtl::OUString& aServiceSpecifier ) -throw ( Exception, RuntimeException ) -{ - if ( aServiceSpecifier.equalsAscii( SERVICENAME_ACTIONTRIGGER )) - return (OWeakObject *)( new ActionTriggerPropertySet( m_xServiceManager )); - else if ( aServiceSpecifier.equalsAscii( SERVICENAME_ACTIONTRIGGERCONTAINER )) - return (OWeakObject *)( new ActionTriggerContainer( m_xServiceManager )); - else if ( aServiceSpecifier.equalsAscii( SERVICENAME_ACTIONTRIGGERSEPARATOR )) - return (OWeakObject *)( new ActionTriggerSeparatorPropertySet( m_xServiceManager )); - else - throw com::sun::star::uno::RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unknown service specifier!" )), (OWeakObject *)this ); -} - -Reference< XInterface > SAL_CALL RootActionTriggerContainer::createInstanceWithArguments( const ::rtl::OUString& ServiceSpecifier, const Sequence< Any >& /*Arguments*/ ) -throw ( Exception, RuntimeException ) -{ - return createInstance( ServiceSpecifier ); -} - -Sequence< ::rtl::OUString > SAL_CALL RootActionTriggerContainer::getAvailableServiceNames() -throw ( RuntimeException ) -{ - Sequence< ::rtl::OUString > aSeq( 3 ); - - aSeq[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SERVICENAME_ACTIONTRIGGER )); - aSeq[1] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SERVICENAME_ACTIONTRIGGERCONTAINER )); - aSeq[2] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SERVICENAME_ACTIONTRIGGERSEPARATOR )); - - return aSeq; -} - - -// XIndexContainer -void SAL_CALL RootActionTriggerContainer::insertByIndex( sal_Int32 Index, const Any& Element ) -throw ( IllegalArgumentException, IndexOutOfBoundsException, WrappedTargetException, RuntimeException ) -{ - ResetableGuard aGuard( m_aLock ); - - if ( !m_bContainerCreated ) - FillContainer(); - - if ( !m_bInContainerCreation ) - m_bContainerChanged = sal_True; - PropertySetContainer::insertByIndex( Index, Element ); -} - -void SAL_CALL RootActionTriggerContainer::removeByIndex( sal_Int32 Index ) -throw ( IndexOutOfBoundsException, WrappedTargetException, RuntimeException ) -{ - ResetableGuard aGuard( m_aLock ); - - if ( !m_bContainerCreated ) - FillContainer(); - - if ( !m_bInContainerCreation ) - m_bContainerChanged = sal_True; - PropertySetContainer::removeByIndex( Index ); -} - - -// XIndexReplace -void SAL_CALL RootActionTriggerContainer::replaceByIndex( sal_Int32 Index, const Any& Element ) -throw ( IllegalArgumentException, IndexOutOfBoundsException, WrappedTargetException, RuntimeException ) -{ - ResetableGuard aGuard( m_aLock ); - - if ( !m_bContainerCreated ) - FillContainer(); - - if ( !m_bInContainerCreation ) - m_bContainerChanged = sal_True; - PropertySetContainer::replaceByIndex( Index, Element ); -} - - -// XIndexAccess -sal_Int32 SAL_CALL RootActionTriggerContainer::getCount() -throw ( RuntimeException ) -{ - ResetableGuard aGuard( m_aLock ); - - if ( !m_bContainerCreated ) - { - if ( m_pMenu ) - { - vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() ); - return m_pMenu->GetItemCount(); - } - else - return 0; - } - else - { - return PropertySetContainer::getCount(); - } -} - -Any SAL_CALL RootActionTriggerContainer::getByIndex( sal_Int32 Index ) -throw ( IndexOutOfBoundsException, WrappedTargetException, RuntimeException ) -{ - ResetableGuard aGuard( m_aLock ); - - if ( !m_bContainerCreated ) - FillContainer(); - - return PropertySetContainer::getByIndex( Index ); -} - - -// XElementAccess -Type SAL_CALL RootActionTriggerContainer::getElementType() - throw (::com::sun::star::uno::RuntimeException) -{ - return ::getCppuType(( Reference< XPropertySet >*)0); -} - -sal_Bool SAL_CALL RootActionTriggerContainer::hasElements() -throw (::com::sun::star::uno::RuntimeException) -{ - if ( m_pMenu ) - { - vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() ); - return ( m_pMenu->GetItemCount() > 0 ); - } - - return sal_False; -} - - -// XServiceInfo -::rtl::OUString SAL_CALL RootActionTriggerContainer::getImplementationName() -throw ( RuntimeException ) -{ - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( IMPLEMENTATIONNAME_ROOTACTIONTRIGGERCONTAINER )); -} - -sal_Bool SAL_CALL RootActionTriggerContainer::supportsService( const ::rtl::OUString& ServiceName ) -throw ( RuntimeException ) -{ - if ( ServiceName.equalsAscii( SERVICENAME_ACTIONTRIGGERCONTAINER )) - return sal_True; - - return sal_False; -} - -Sequence< ::rtl::OUString > SAL_CALL RootActionTriggerContainer::getSupportedServiceNames() -throw ( RuntimeException ) -{ - Sequence< ::rtl::OUString > seqServiceNames( 1 ); - - seqServiceNames[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SERVICENAME_ACTIONTRIGGERCONTAINER )); - return seqServiceNames; -} - -// XUnoTunnel -sal_Int64 SAL_CALL RootActionTriggerContainer::getSomething( const Sequence< sal_Int8 >& aIdentifier ) throw ( RuntimeException ) -{ - if ( aIdentifier == impl_getStaticIdentifier() ) - return reinterpret_cast< sal_Int64 >( this ); - else - return 0; -} - -// XTypeProvider -Sequence< Type > SAL_CALL RootActionTriggerContainer::getTypes() throw ( RuntimeException ) -{ - // Optimize this method ! - // We initialize a static variable only one time. And we don't must use a mutex at every call! - // For the first call; pTypeCollection is NULL - for the second call pTypeCollection is different from NULL! - static ::cppu::OTypeCollection* pTypeCollection = NULL ; - - if ( pTypeCollection == NULL ) - { - // Ready for multithreading; get global mutex for first call of this method only! see before - osl::MutexGuard aGuard( osl::Mutex::getGlobalMutex() ) ; - - // Control these pointer again ... it can be, that another instance will be faster then these! - if ( pTypeCollection == NULL ) - { - // Create a static typecollection ... - static ::cppu::OTypeCollection aTypeCollection( - ::getCppuType(( const Reference< XMultiServiceFactory >*)NULL ) , - ::getCppuType(( const Reference< XIndexContainer >*)NULL ) , - ::getCppuType(( const Reference< XIndexAccess >*)NULL ) , - ::getCppuType(( const Reference< XIndexReplace >*)NULL ) , - ::getCppuType(( const Reference< XServiceInfo >*)NULL ) , - ::getCppuType(( const Reference< XTypeProvider >*)NULL ) , - ::getCppuType(( const Reference< XUnoTunnel >*)NULL ) , - ::getCppuType(( const Reference< XNamed >*)NULL )) ; - - // ... and set his address to static pointer! - pTypeCollection = &aTypeCollection ; - } - } - - return pTypeCollection->getTypes() ; -} - -Sequence< sal_Int8 > SAL_CALL RootActionTriggerContainer::getImplementationId() throw ( RuntimeException ) -{ - // Create one Id for all instances of this class. - // Use ethernet address to do this! (sal_True) - - // Optimize this method - // We initialize a static variable only one time. And we don't must use a mutex at every call! - // For the first call; pID is NULL - for the second call pID is different from NULL! - static ::cppu::OImplementationId* pID = NULL ; - - if ( pID == NULL ) - { - // Ready for multithreading; get global mutex for first call of this method only! see before - osl::MutexGuard aGuard( osl::Mutex::getGlobalMutex() ) ; - - // Control these pointer again ... it can be, that another instance will be faster then these! - if ( pID == NULL ) - { - // Create a new static ID ... - static ::cppu::OImplementationId aID( sal_False ) ; - // ... and set his address to static pointer! - pID = &aID ; - } - } - - return pID->getImplementationId() ; -} - -// private implementation helper -void RootActionTriggerContainer::FillContainer() -{ - m_bContainerCreated = sal_True; - m_bInContainerCreation = sal_True; - Reference<XIndexContainer> xXIndexContainer( (OWeakObject *)this, UNO_QUERY ); - ActionTriggerHelper::FillActionTriggerContainerFromMenu( - xXIndexContainer, - m_pMenu ); - m_bInContainerCreation = sal_False; -} -::rtl::OUString RootActionTriggerContainer::getName() throw ( RuntimeException ) -{ - ::rtl::OUString sRet; - if( m_pMenuIdentifier ) - sRet = *m_pMenuIdentifier; - return sRet; -} - -void RootActionTriggerContainer::setName( const ::rtl::OUString& ) throw ( RuntimeException) -{ - throw RuntimeException(); -} -} - diff --git a/framework/source/classes/sfxhelperfunctions.cxx b/framework/source/classes/sfxhelperfunctions.cxx deleted file mode 100644 index c6953b1ea2b9..000000000000 --- a/framework/source/classes/sfxhelperfunctions.cxx +++ /dev/null @@ -1,181 +0,0 @@ -/************************************************************************* - * - * 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_framework.hxx" - -#ifndef __FRAMEWORK_CLASSES_SFXHELPERFUNCTIONS_CXX_ -#include <classes/sfxhelperfunctions.hxx> -#endif - -#include <tools/diagnose_ex.h> - -static pfunc_setToolBoxControllerCreator pToolBoxControllerCreator = NULL; -static pfunc_setStatusBarControllerCreator pStatusBarControllerCreator = NULL; -static pfunc_getRefreshToolbars pRefreshToolbars = NULL; -static pfunc_createDockingWindow pCreateDockingWindow = NULL; -static pfunc_isDockingWindowVisible pIsDockingWindowVisible = NULL; -static pfunc_activateToolPanel pActivateToolPanel = NULL; - - - -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::frame; - -namespace framework -{ - -pfunc_setToolBoxControllerCreator SAL_CALL SetToolBoxControllerCreator( pfunc_setToolBoxControllerCreator pSetToolBoxControllerCreator ) -{ - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); - pfunc_setToolBoxControllerCreator pOldSetToolBoxControllerCreator = pToolBoxControllerCreator; - pToolBoxControllerCreator = pSetToolBoxControllerCreator; - return pOldSetToolBoxControllerCreator; -} - -svt::ToolboxController* SAL_CALL CreateToolBoxController( const Reference< XFrame >& rFrame, ToolBox* pToolbox, unsigned short nID, const ::rtl::OUString& aCommandURL ) -{ - pfunc_setToolBoxControllerCreator pFactory = NULL; - { - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); - pFactory = pToolBoxControllerCreator; - } - - if ( pFactory ) - return (*pFactory)( rFrame, pToolbox, nID, aCommandURL ); - else - return NULL; -} - -pfunc_setStatusBarControllerCreator SAL_CALL SetStatusBarControllerCreator( pfunc_setStatusBarControllerCreator pSetStatusBarControllerCreator ) -{ - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); - pfunc_setStatusBarControllerCreator pOldSetStatusBarControllerCreator = pSetStatusBarControllerCreator; - pStatusBarControllerCreator = pSetStatusBarControllerCreator; - return pOldSetStatusBarControllerCreator; -} - -svt::StatusbarController* SAL_CALL CreateStatusBarController( const Reference< XFrame >& rFrame, StatusBar* pStatusBar, unsigned short nID, const ::rtl::OUString& aCommandURL ) -{ - pfunc_setStatusBarControllerCreator pFactory = NULL; - { - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); - pFactory = pStatusBarControllerCreator; - } - - if ( pFactory ) - return (*pFactory)( rFrame, pStatusBar, nID, aCommandURL ); - else - return NULL; -} - -pfunc_getRefreshToolbars SAL_CALL SetRefreshToolbars( pfunc_getRefreshToolbars pNewRefreshToolbarsFunc ) -{ - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); - pfunc_getRefreshToolbars pOldFunc = pRefreshToolbars; - pRefreshToolbars = pNewRefreshToolbarsFunc; - - return pOldFunc; -} - -void SAL_CALL RefreshToolbars( ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame ) -{ - pfunc_getRefreshToolbars pCallback = NULL; - { - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); - pCallback = pRefreshToolbars; - } - - if ( pCallback ) - (*pCallback)( rFrame ); -} - -pfunc_createDockingWindow SAL_CALL SetDockingWindowCreator( pfunc_createDockingWindow pNewCreateDockingWindow ) -{ - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); - pfunc_createDockingWindow pOldFunc = pCreateDockingWindow; - pCreateDockingWindow = pNewCreateDockingWindow; - - return pOldFunc; -} - -void SAL_CALL CreateDockingWindow( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame, const ::rtl::OUString& rResourceURL ) -{ - pfunc_createDockingWindow pFactory = NULL; - { - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); - pFactory = pCreateDockingWindow; - } - - if ( pFactory ) - (*pFactory)( rFrame, rResourceURL ); -} - -pfunc_isDockingWindowVisible SAL_CALL SetIsDockingWindowVisible( pfunc_isDockingWindowVisible pNewIsDockingWindowVisible) -{ - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); - pfunc_isDockingWindowVisible pOldFunc = pIsDockingWindowVisible; - pIsDockingWindowVisible = pNewIsDockingWindowVisible; - - return pOldFunc; -} - -bool SAL_CALL IsDockingWindowVisible( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame, const ::rtl::OUString& rResourceURL ) -{ - pfunc_isDockingWindowVisible pCall = NULL; - { - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); - pCall = pIsDockingWindowVisible; - } - - if ( pIsDockingWindowVisible ) - return (*pIsDockingWindowVisible)( rFrame, rResourceURL ); - else - return false; -} - -pfunc_activateToolPanel SAL_CALL SetActivateToolPanel( pfunc_activateToolPanel i_pActivator ) -{ - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); - pfunc_activateToolPanel pOldFunc = pActivateToolPanel; - pActivateToolPanel = i_pActivator; - return pOldFunc; -} - -void SAL_CALL ActivateToolPanel( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& i_rFrame, const ::rtl::OUString& i_rPanelURL ) -{ - pfunc_activateToolPanel pActivator = NULL; - { - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); - pActivator = pActivateToolPanel; - } - - ENSURE_OR_RETURN_VOID( pActivator, "framework::ActivateToolPanel: no activator function!" ); - (*pActivator)( i_rFrame, i_rPanelURL ); -} - -} |