diff options
Diffstat (limited to 'framework/source/fwe/classes')
-rw-r--r-- | framework/source/fwe/classes/actiontriggercontainer.cxx | 205 | ||||
-rw-r--r-- | framework/source/fwe/classes/actiontriggerpropertyset.cxx | 482 | ||||
-rw-r--r-- | framework/source/fwe/classes/actiontriggerseparatorpropertyset.cxx | 351 | ||||
-rw-r--r-- | framework/source/fwe/classes/addonmenu.cxx | 435 | ||||
-rw-r--r-- | framework/source/fwe/classes/addonsoptions.cxx | 1804 | ||||
-rw-r--r-- | framework/source/fwe/classes/bmkmenu.cxx | 250 | ||||
-rw-r--r-- | framework/source/fwe/classes/framelistanalyzer.cxx | 307 | ||||
-rw-r--r-- | framework/source/fwe/classes/fwkresid.cxx | 64 | ||||
-rw-r--r-- | framework/source/fwe/classes/imagewrapper.cxx | 122 | ||||
-rw-r--r-- | framework/source/fwe/classes/menuextensionsupplier.cxx | 67 | ||||
-rw-r--r-- | framework/source/fwe/classes/rootactiontriggercontainer.cxx | 381 | ||||
-rw-r--r-- | framework/source/fwe/classes/sfxhelperfunctions.cxx | 182 |
12 files changed, 0 insertions, 4650 deletions
diff --git a/framework/source/fwe/classes/actiontriggercontainer.cxx b/framework/source/fwe/classes/actiontriggercontainer.cxx deleted file mode 100644 index b4e054105e..0000000000 --- a/framework/source/fwe/classes/actiontriggercontainer.cxx +++ /dev/null @@ -1,205 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_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() ; -} - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/framework/source/fwe/classes/actiontriggerpropertyset.cxx b/framework/source/fwe/classes/actiontriggerpropertyset.cxx deleted file mode 100644 index c7cc9d450b..0000000000 --- a/framework/source/fwe/classes/actiontriggerpropertyset.cxx +++ /dev/null @@ -1,482 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_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; - -//struct SAL_DLLPUBLIC_IMPORT ::cppu::OBroadcastHelperVar< OMultiTypeInterfaceContainerHelper, OMultiTypeInterfaceContainerHelper::keyType >; - -// 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 sal_True, if changed - else return sal_False. - // Attention: Method "impl_tryToChangeProperty()" can throw the IllegalArgumentException !!! - // Initialize return value with sal_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() -{ - 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! - const Sequence< Property > seqActionTriggerPropertyDescriptor( pActionTriggerPropertys, PROPERTYCOUNT ); - - // Return "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; -} - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/framework/source/fwe/classes/actiontriggerseparatorpropertyset.cxx b/framework/source/fwe/classes/actiontriggerseparatorpropertyset.cxx deleted file mode 100644 index e26b76b0e7..0000000000 --- a/framework/source/fwe/classes/actiontriggerseparatorpropertyset.cxx +++ /dev/null @@ -1,351 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_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 sal_True, if changed - else return sal_False. - // Attention: Method "impl_tryToChangeProperty()" can throw the IllegalArgumentException !!! - // Initialize return value with sal_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() -{ - const Property pActionTriggerPropertys[] = - { - Property( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "SeparatorType" )), HANDLE_TYPE, ::getCppuType((sal_Int16*)0), PropertyAttribute::TRANSIENT ) - }; - - // Use it to initialize sequence! - const Sequence< Property > seqActionTriggerPropertyDescriptor( pActionTriggerPropertys, PROPERTYCOUNT ); - - // Return "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; -} - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/framework/source/fwe/classes/addonmenu.cxx b/framework/source/fwe/classes/addonmenu.cxx deleted file mode 100644 index d55f2faac1..0000000000 --- a/framework/source/fwe/classes/addonmenu.cxx +++ /dev/null @@ -1,435 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_framework.hxx" - -//_________________________________________________________________________________________________________________ -// my own includes -//_________________________________________________________________________________________________________________ -#include "framework/addonmenu.hxx" -#include "framework/addonsoptions.hxx" -#include <general.h> -#include <macros/debug/assertion.hxx> -#include <framework/imageproducer.hxx> -#include <framework/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 sal_uInt16 SID_HELPMENU = (SID_SFX_START + 410); - -namespace framework -{ - -AddonMenu::AddonMenu( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame ) : - m_xFrame( rFrame ) -{ -} - -AddonMenu::~AddonMenu() -{ - for ( sal_uInt16 i = 0; i < GetItemCount(); i++ ) - { - if ( GetItemType( i ) != MENUITEM_SEPARATOR ) - { - // delete user attributes created with new! - sal_uInt16 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; - sal_uInt16 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. -sal_uInt16 AddonMenuManager::GetNextPos( sal_uInt16 nPos ) -{ - return ( nPos == MENU_APPEND ) ? MENU_APPEND : ( nPos+1 ); -} - - -static sal_uInt16 FindMenuId( Menu* pMenu, const String aCommand ) -{ - sal_uInt16 nPos = 0; - String aCmd; - for ( nPos = 0; nPos < pMenu->GetItemCount(); nPos++ ) - { - sal_uInt16 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 ) - { - sal_uInt16 nId = FindMenuId( pMergeMenuBar, String::CreateFromAscii( ".uno:HelpMenu" )); - if ( nId != USHRT_MAX ) - pHelpMenu = pMergeMenuBar->GetPopupMenu( nId ); - } - - if ( pHelpMenu ) - { - static const char REFERENCECOMMAND_BEFORE[] = ".uno:About"; - - // Add-Ons help menu items should be inserted after the "registration" menu item - sal_uInt16 nItemCount = pHelpMenu->GetItemCount(); - sal_uInt16 nInsSepAfterPos = MENU_APPEND; - sal_uInt16 nUniqueMenuId = ADDONMENU_ITEMID_START; - AddonsOptions aOptions; - - // try to detect the about menu item with the command URL - sal_uInt16 nId = FindMenuId( pHelpMenu, String::CreateFromAscii( REFERENCECOMMAND_BEFORE )); - sal_uInt16 nInsPos = pHelpMenu->GetItemPos( nId ); - - Sequence< Sequence< PropertyValue > > aAddonSubMenu; - const Sequence< Sequence< PropertyValue > >& rAddonHelpMenuEntries = aOptions.GetAddonsHelpMenu(); - - 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 ); - } - 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, - sal_uInt16 nMergeAtPos, - MenuBar* pMergeMenuBar ) -{ - if ( pMergeMenuBar ) - { - AddonsOptions aAddonsOptions; - sal_uInt16 nInsertPos = nMergeAtPos; - - ::rtl::OUString aTitle; - ::rtl::OUString aURL; - ::rtl::OUString aTarget; - ::rtl::OUString aImageId; - ::rtl::OUString aContext; - Sequence< Sequence< PropertyValue > > aAddonSubMenu; - sal_uInt16 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 )) - { - sal_uInt16 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, - sal_uInt16 nInsPos, - sal_uInt16& nUniqueMenuId, - Sequence< Sequence< PropertyValue > > aAddonMenuDefinition, - const Reference< XFrame >& rFrame, - const Reference< XModel >& rModel ) -{ - Sequence< Sequence< PropertyValue > > aAddonSubMenu; - sal_Bool bInsertSeparator = sal_False; - sal_uInt32 i = 0; - sal_uInt32 nElements = 0; - sal_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 = sal_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 = sal_False; - pCurrentMenu->InsertSeparator( nInsPos ); - nInsPos = AddonMenuManager::GetNextPos( nInsPos ); - } - - sal_uInt16 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, sal_uIntPtr( 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 ); -} - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/framework/source/fwe/classes/addonsoptions.cxx b/framework/source/fwe/classes/addonsoptions.cxx deleted file mode 100644 index ad4b685f24..0000000000 --- a/framework/source/fwe/classes/addonsoptions.cxx +++ /dev/null @@ -1,1804 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_framework.hxx" - -//_________________________________________________________________________________________________________________ -// includes -//_________________________________________________________________________________________________________________ -#include <framework/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 <boost/unordered_map.hpp> -#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 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 aImageSmallNoScale; - Image aImageBigNoScale; - }; - - typedef boost::unordered_map< ::rtl::OUString, ImageEntry, OUStringHashCode, ::std::equal_to< ::rtl::OUString > > ImageManager; - typedef boost::unordered_map< ::rtl::OUString, sal_uInt32, OUStringHashCode, ::std::equal_to< ::rtl::OUString > > StringToIndexMap; - typedef std::vector< Sequence< Sequence< PropertyValue > > > AddonToolBars; - typedef ::boost::unordered_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 > 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() -{ - OSL_FAIL( "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 bNoScale ) const -{ - Image aImage; - - ImageManager::const_iterator pIter = m_aImageManager.find( aURL ); - if ( pIter != m_aImageManager.end() ) - { - if ( bNoScale ) - aImage = ( bBig ? pIter->second.aImageBigNoScale : pIter->second.aImageSmallNoScale ); - if ( !aImage ) - aImage = ( bBig ? pIter->second.aImageBig : pIter->second.aImageSmall ); - } - - 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& rGF = GraphicFilter::GetGraphicFilter(); - rGF.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 = 2; - const char* aExtArray[MAX_NUM_IMAGES] = { "_16", "_26" }; - 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; - } - } - } - - 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 ), - aImageDataSeq )) ) - { - if ( !pEntry ) - pEntry = new ImageEntry; - - if ( i == OFFSET_IMAGES_SMALL ) - pEntry->aImageSmall = aImage; - else if ( i == OFFSET_IMAGES_BIG ) - pEntry->aImageBig = 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 ( !pEntry->aImageBig ) - { - pEntry->aImageBig = aImage; - pEntry->aImageBigNoScale = 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; -} - -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 bNoScale ) const -{ - MutexGuard aGuard( GetOwnStaticMutex() ); - return m_pDataContainer->GetImageFromURL( aURL, bBig, bNoScale ); -} - -//***************************************************************************************************************** -// public method -//***************************************************************************************************************** -Image AddonsOptions::GetImageFromURL( const rtl::OUString& aURL, sal_Bool bBig ) const -{ - return GetImageFromURL( aURL, bBig, 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; -} - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/framework/source/fwe/classes/bmkmenu.cxx b/framework/source/fwe/classes/bmkmenu.cxx deleted file mode 100644 index 4d3ffd44ec..0000000000 --- a/framework/source/fwe/classes/bmkmenu.cxx +++ /dev/null @@ -1,250 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_framework.hxx" - -//_________________________________________________________________________________________________________________ -// my own includes -//_________________________________________________________________________________________________________________ - -#include <limits.h> - -#include "framework/bmkmenu.hxx" -#include <general.h> -#include <macros/debug/assertion.hxx> -#include <framework/imageproducer.hxx> -#include <framework/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> -#include <comphelper/processfactory.hxx> -#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 sal_uInt16 m_nMID; - - public: - BmkMenu* m_pRoot; - sal_Bool m_bInitialized; - - BmkMenu_Impl( BmkMenu* pRoot ); - BmkMenu_Impl(); - ~BmkMenu_Impl(); - - static sal_uInt16 GetMID(); -}; - -sal_uInt16 BmkMenu_Impl::m_nMID = BMKMENU_ITEMID_START; - -BmkMenu_Impl::BmkMenu_Impl( BmkMenu* pRoot ) : - m_pRoot(pRoot), - m_bInitialized(sal_False) -{ -} - -BmkMenu_Impl::BmkMenu_Impl() : - m_pRoot(0), - m_bInitialized(sal_False) -{ -} - -BmkMenu_Impl::~BmkMenu_Impl() -{ -} - -sal_uInt16 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 = sal_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(); - sal_Bool bShowMenuImages = rSettings.GetUseImagesInMenus(); - - ::rtl::OUString aTitle; - ::rtl::OUString aURL; - ::rtl::OUString aTargetFrame; - ::rtl::OUString aImageId; - - sal_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; - sal_uInt16 nId = CreateMenuId(); - - if ( bShowMenuImages ) - { - if ( aImageId.getLength() > 0 ) - { - Image aImage = GetImageFromURL( m_xFrame, aImageId, false ); - if ( !!aImage ) - { - bImageSet = sal_True; - InsertItem( nId, aTitle, aImage ); - } - } - - if ( !bImageSet ) - { - Image aImage = GetImageFromURL( m_xFrame, aURL, false ); - if ( !aImage ) - InsertItem( nId, aTitle ); - else - InsertItem( nId, aTitle, aImage ); - } - } - else - InsertItem( nId, aTitle ); - - MenuConfiguration::Attributes* pUserAttributes = new MenuConfiguration::Attributes( aTargetFrame, aImageId ); - SetUserValue( nId, (sal_uIntPtr)pUserAttributes ); - - SetItemCommand( nId, aURL ); - } - } -} - -sal_uInt16 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; - } -} - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/framework/source/fwe/classes/framelistanalyzer.cxx b/framework/source/fwe/classes/framelistanalyzer.cxx deleted file mode 100644 index 32fb2ab1c2..0000000000 --- a/framework/source/fwe/classes/framelistanalyzer.cxx +++ /dev/null @@ -1,307 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_framework.hxx" - -#include "framework/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 (const 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 - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/framework/source/fwe/classes/fwkresid.cxx b/framework/source/fwe/classes/fwkresid.cxx deleted file mode 100644 index 521ce38fb8..0000000000 --- a/framework/source/fwe/classes/fwkresid.cxx +++ /dev/null @@ -1,64 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_framework.hxx" - -#include "classes/fwkresid.hxx" -#include <tools/string.hxx> -#include <osl/mutex.hxx> -#include <vcl/svapp.hxx> - -#include <rtl/strbuf.hxx> - -namespace framework -{ - -ResMgr* FwkResId::GetResManager() -{ - static ResMgr* pResMgr = NULL; - - if ( !pResMgr ) - { - SolarMutexGuard aSolarGuard; - pResMgr = ResMgr::CreateResMgr("fwe"); - } - - return pResMgr; -} - -// ----------------------------------------------------------------------- - -FwkResId::FwkResId( sal_uInt16 nId ) : - ResId( nId, *FwkResId::GetResManager() ) -{ -} - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/framework/source/fwe/classes/imagewrapper.cxx b/framework/source/fwe/classes/imagewrapper.cxx deleted file mode 100644 index ce9a7fbcec..0000000000 --- a/framework/source/fwe/classes/imagewrapper.cxx +++ /dev/null @@ -1,122 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_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 ) -{ - SolarMutexGuard aGuard; - - 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 ) -{ - SolarMutexGuard aGuard; - - 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 ) -{ - SolarMutexGuard aGuard; - 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; -} - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/framework/source/fwe/classes/menuextensionsupplier.cxx b/framework/source/fwe/classes/menuextensionsupplier.cxx deleted file mode 100644 index 5abb009c40..0000000000 --- a/framework/source/fwe/classes/menuextensionsupplier.cxx +++ /dev/null @@ -1,67 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_framework.hxx" -#include <framework/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; -} - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/framework/source/fwe/classes/rootactiontriggercontainer.cxx b/framework/source/fwe/classes/rootactiontriggercontainer.cxx deleted file mode 100644 index dfc39f1bca..0000000000 --- a/framework/source/fwe/classes/rootactiontriggercontainer.cxx +++ /dev/null @@ -1,381 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_framework.hxx" - -#include <classes/rootactiontriggercontainer.hxx> -#include <classes/actiontriggercontainer.hxx> -#include <classes/actiontriggerpropertyset.hxx> -#include <classes/actiontriggerseparatorpropertyset.hxx> -#include <framework/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 ) - { - SolarMutexGuard aSolarMutexGuard; - 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 ) - { - SolarMutexGuard aSolarMutexGuard; - 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(); -} -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/framework/source/fwe/classes/sfxhelperfunctions.cxx b/framework/source/fwe/classes/sfxhelperfunctions.cxx deleted file mode 100644 index c0cda74fce..0000000000 --- a/framework/source/fwe/classes/sfxhelperfunctions.cxx +++ /dev/null @@ -1,182 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_framework.hxx" - -#include <framework/sfxhelperfunctions.hxx> - -#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 ( pCall ) - return (*pCall)( 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 ); -} - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |