diff options
Diffstat (limited to 'svtools/source/uno/toolboxcontroller.cxx')
-rw-r--r-- | svtools/source/uno/toolboxcontroller.cxx | 870 |
1 files changed, 0 insertions, 870 deletions
diff --git a/svtools/source/uno/toolboxcontroller.cxx b/svtools/source/uno/toolboxcontroller.cxx deleted file mode 100644 index 7c500ce5b9..0000000000 --- a/svtools/source/uno/toolboxcontroller.cxx +++ /dev/null @@ -1,870 +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_svtools.hxx" -#include <svtools/toolboxcontroller.hxx> -#include <com/sun/star/beans/PropertyValue.hpp> -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/frame/XDispatchProvider.hpp> -#include <com/sun/star/lang/DisposedException.hpp> -#include <com/sun/star/frame/XLayoutManager.hpp> -#include <osl/mutex.hxx> -#include <vcl/svapp.hxx> -#include <svtools/imgdef.hxx> -#include <svtools/miscopt.hxx> -#include <toolkit/unohlp.hxx> -#include <vcl/toolbox.hxx> -//shizhobo -#include <com/sun/star/beans/PropertyAttribute.hpp> -const int TOOLBARCONTROLLER_PROPHANDLE_SUPPORTSVISIABLE = 1; -const int TOOLBARCONTROLLER_PROPCOUNT = 1; -const rtl::OUString TOOLBARCONTROLLER_PROPNAME_SUPPORTSVISIABLE( RTL_CONSTASCII_USTRINGPARAM( "SupportsVisiable" )); -//end - -using ::rtl::OUString; - -using namespace ::cppu; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::util; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::frame; -using namespace ::com::sun::star::frame; - -namespace svt -{ - -struct DispatchInfo -{ - Reference< XDispatch > mxDispatch; - const URL maURL; - const Sequence< PropertyValue > maArgs; - - DispatchInfo( const Reference< XDispatch >& xDispatch, const URL& rURL, const Sequence< PropertyValue >& rArgs ) - : mxDispatch( xDispatch ), maURL( rURL ), maArgs( rArgs ) {} -}; - -struct ToolboxController_Impl -{ - ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > m_xParentWindow; - ::com::sun::star::uno::Reference< ::com::sun::star::util::XURLTransformer > m_xUrlTransformer; - rtl::OUString m_sModuleName; - sal_uInt16 m_nToolBoxId; - - DECL_STATIC_LINK( ToolboxController_Impl, ExecuteHdl_Impl, DispatchInfo* ); - - ToolboxController_Impl() - : m_nToolBoxId( SAL_MAX_UINT16 ) - {} -}; - -ToolboxController::ToolboxController( - - const Reference< XMultiServiceFactory >& rServiceManager, - const Reference< XFrame >& xFrame, - const ::rtl::OUString& aCommandURL ) : - OPropertyContainer(GetBroadcastHelper()) - , OWeakObject() - , m_bInitialized( sal_False ) - , m_bDisposed( sal_False ) - , m_xFrame(xFrame) - , m_xServiceManager( rServiceManager ) - , m_aCommandURL( aCommandURL ) - , m_aListenerContainer( m_aMutex ) -{ - //registger Propertyh by shizhoubo - registerProperty(TOOLBARCONTROLLER_PROPNAME_SUPPORTSVISIABLE, TOOLBARCONTROLLER_PROPHANDLE_SUPPORTSVISIABLE, com::sun::star::beans::PropertyAttribute::TRANSIENT | com::sun::star::beans::PropertyAttribute::READONLY, - &m_bSupportVisiable, getCppuType(&m_bSupportVisiable)); - - m_pImpl = new ToolboxController_Impl; - - try - { - m_pImpl->m_xUrlTransformer.set( m_xServiceManager->createInstance( - rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.util.URLTransformer" ))), - UNO_QUERY ); - } - catch(const Exception&) - { - } -} - -ToolboxController::ToolboxController() : - OPropertyContainer(GetBroadcastHelper()) - , OWeakObject() - , m_bInitialized( sal_False ) - , m_bDisposed( sal_False ) - , m_aListenerContainer( m_aMutex ) -{ - //registger Propertyh by shizhoubo - registerProperty(TOOLBARCONTROLLER_PROPNAME_SUPPORTSVISIABLE, TOOLBARCONTROLLER_PROPHANDLE_SUPPORTSVISIABLE, com::sun::star::beans::PropertyAttribute::TRANSIENT | com::sun::star::beans::PropertyAttribute::READONLY, - &m_bSupportVisiable, getCppuType(&m_bSupportVisiable)); - - m_pImpl = new ToolboxController_Impl; -} - -ToolboxController::~ToolboxController() -{ - delete m_pImpl; -} - -Reference< XFrame > ToolboxController::getFrameInterface() const -{ - SolarMutexGuard aSolarMutexGuard; - return m_xFrame; -} - -Reference< XMultiServiceFactory > ToolboxController::getServiceManager() const -{ - SolarMutexGuard aSolarMutexGuard; - return m_xServiceManager; -} - -Reference< XLayoutManager > ToolboxController::getLayoutManager() const -{ - Reference< XLayoutManager > xLayoutManager; - Reference< XPropertySet > xPropSet; - { - SolarMutexGuard aSolarMutexGuard; - xPropSet = Reference< XPropertySet >( m_xFrame, UNO_QUERY ); - } - - if ( xPropSet.is() ) - { - try - { - xLayoutManager.set(xPropSet->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "LayoutManager" ))),UNO_QUERY); - } - catch ( Exception& ) - { - } - } - - return xLayoutManager; -} - -// XInterface -Any SAL_CALL ToolboxController::queryInterface( const Type& rType ) -throw ( RuntimeException ) -{ - Any a = ::cppu::queryInterface( - rType , - static_cast< XToolbarController* >( this ), - static_cast< XStatusListener* >( this ), - static_cast< XEventListener* >( this ), - static_cast< XInitialization* >( this ), - static_cast< XComponent* >( this ), - static_cast< XUpdatable* >( this )); - if ( !a.hasValue()) - { - a = ::cppu::queryInterface(rType - ,static_cast<XPropertySet*>(this) - ,static_cast<XMultiPropertySet*>(this) - ,static_cast<XFastPropertySet*>(this)); - if (!a.hasValue()) - return OWeakObject::queryInterface( rType ); - } - return a; -} - -void SAL_CALL ToolboxController::acquire() throw () -{ - OWeakObject::acquire(); -} - -void SAL_CALL ToolboxController::release() throw () -{ - OWeakObject::release(); -} - -void SAL_CALL ToolboxController::initialize( const Sequence< Any >& aArguments ) -throw ( Exception, RuntimeException ) -{ - bool bInitialized( true ); - - { - SolarMutexGuard aSolarMutexGuard; - - if ( m_bDisposed ) - throw DisposedException(); - - bInitialized = m_bInitialized; - } - - if ( !bInitialized ) - { - SolarMutexGuard aSolarMutexGuard; - m_bInitialized = sal_True; - //shizhoubo add - m_bSupportVisiable = sal_False; - PropertyValue aPropValue; - for ( int i = 0; i < aArguments.getLength(); i++ ) - { - if ( aArguments[i] >>= aPropValue ) - { - if ( aPropValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("Frame") )) - m_xFrame.set(aPropValue.Value,UNO_QUERY); - else if ( aPropValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("CommandURL") )) - aPropValue.Value >>= m_aCommandURL; - else if ( aPropValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("ServiceManager") )) - m_xServiceManager.set(aPropValue.Value,UNO_QUERY); - else if ( aPropValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("ParentWindow") )) - m_pImpl->m_xParentWindow.set(aPropValue.Value,UNO_QUERY); - else if ( aPropValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("ModuleName" ) ) ) - aPropValue.Value >>= m_pImpl->m_sModuleName; - } - } - - try - { - if ( !m_pImpl->m_xUrlTransformer.is() && m_xServiceManager.is() ) - m_pImpl->m_xUrlTransformer.set( m_xServiceManager->createInstance( - rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.util.URLTransformer" ))), - UNO_QUERY ); - } - catch(const Exception&) - { - } - - if ( m_aCommandURL.getLength() ) - m_aListenerMap.insert( URLToDispatchMap::value_type( m_aCommandURL, Reference< XDispatch >() )); - } -} - -void SAL_CALL ToolboxController::update() -throw ( RuntimeException ) -{ - { - SolarMutexGuard aSolarMutexGuard; - if ( m_bDisposed ) - throw DisposedException(); - } - - // Bind all registered listeners to their dispatch objects - bindListener(); -} - -// XComponent -void SAL_CALL ToolboxController::dispose() -throw (::com::sun::star::uno::RuntimeException) -{ - Reference< XComponent > xThis( static_cast< OWeakObject* >(this), UNO_QUERY ); - - { - SolarMutexGuard aSolarMutexGuard; - if ( m_bDisposed ) - throw DisposedException(); - } - - com::sun::star::lang::EventObject aEvent( xThis ); - m_aListenerContainer.disposeAndClear( aEvent ); - - SolarMutexGuard aSolarMutexGuard; - Reference< XStatusListener > xStatusListener( static_cast< OWeakObject* >( this ), UNO_QUERY ); - URLToDispatchMap::iterator pIter = m_aListenerMap.begin(); - while ( pIter != m_aListenerMap.end() ) - { - try - { - Reference< XDispatch > xDispatch( pIter->second ); - - com::sun::star::util::URL aTargetURL; - aTargetURL.Complete = pIter->first; - if ( m_pImpl->m_xUrlTransformer.is() ) - m_pImpl->m_xUrlTransformer->parseStrict( aTargetURL ); - - if ( xDispatch.is() && xStatusListener.is() ) - xDispatch->removeStatusListener( xStatusListener, aTargetURL ); - } - catch ( Exception& ) - { - } - - ++pIter; - } - - m_bDisposed = sal_True; -} - -void SAL_CALL ToolboxController::addEventListener( const Reference< XEventListener >& xListener ) -throw ( RuntimeException ) -{ - m_aListenerContainer.addInterface( ::getCppuType( ( const Reference< XEventListener >* ) NULL ), xListener ); -} - -void SAL_CALL ToolboxController::removeEventListener( const Reference< XEventListener >& aListener ) -throw ( RuntimeException ) -{ - m_aListenerContainer.removeInterface( ::getCppuType( ( const Reference< XEventListener >* ) NULL ), aListener ); -} - -// XEventListener -void SAL_CALL ToolboxController::disposing( const EventObject& Source ) -throw ( RuntimeException ) -{ - Reference< XInterface > xSource( Source.Source ); - - SolarMutexGuard aSolarMutexGuard; - - if ( m_bDisposed ) - return; - - URLToDispatchMap::iterator pIter = m_aListenerMap.begin(); - while ( pIter != m_aListenerMap.end() ) - { - // Compare references and release dispatch references if they are equal. - Reference< XInterface > xIfac( pIter->second, UNO_QUERY ); - if ( xSource == xIfac ) - pIter->second.clear(); - ++pIter; - } - - Reference< XInterface > xIfac( m_xFrame, UNO_QUERY ); - if ( xIfac == xSource ) - m_xFrame.clear(); -} - -// XStatusListener -void SAL_CALL ToolboxController::statusChanged( const FeatureStateEvent& ) -throw ( RuntimeException ) -{ - // must be implemented by sub class -} - -// XToolbarController -void SAL_CALL ToolboxController::execute( sal_Int16 KeyModifier ) -throw (::com::sun::star::uno::RuntimeException) -{ - Reference< XDispatch > xDispatch; - ::rtl::OUString aCommandURL; - - { - SolarMutexGuard aSolarMutexGuard; - - if ( m_bDisposed ) - throw DisposedException(); - - if ( m_bInitialized && - m_xFrame.is() && - m_xServiceManager.is() && - m_aCommandURL.getLength() ) - { - - aCommandURL = m_aCommandURL; - URLToDispatchMap::iterator pIter = m_aListenerMap.find( m_aCommandURL ); - if ( pIter != m_aListenerMap.end() ) - xDispatch = pIter->second; - } - } - - if ( xDispatch.is() ) - { - try - { - com::sun::star::util::URL aTargetURL; - Sequence<PropertyValue> aArgs( 1 ); - - // Provide key modifier information to dispatch function - aArgs[0].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "KeyModifier" )); - aArgs[0].Value = makeAny( KeyModifier ); - - aTargetURL.Complete = aCommandURL; - if ( m_pImpl->m_xUrlTransformer.is() ) - m_pImpl->m_xUrlTransformer->parseStrict( aTargetURL ); - xDispatch->dispatch( aTargetURL, aArgs ); - } - catch ( DisposedException& ) - { - } - } -} - -void SAL_CALL ToolboxController::click() -throw (::com::sun::star::uno::RuntimeException) -{ -} - -void SAL_CALL ToolboxController::doubleClick() -throw (::com::sun::star::uno::RuntimeException) -{ -} - -Reference< XWindow > SAL_CALL ToolboxController::createPopupWindow() -throw (::com::sun::star::uno::RuntimeException) -{ - return Reference< XWindow >(); -} - -Reference< XWindow > SAL_CALL ToolboxController::createItemWindow( const Reference< XWindow >& ) -throw (::com::sun::star::uno::RuntimeException) -{ - return Reference< XWindow >(); -} - -void ToolboxController::addStatusListener( const rtl::OUString& aCommandURL ) -{ - Reference< XDispatch > xDispatch; - Reference< XStatusListener > xStatusListener; - com::sun::star::util::URL aTargetURL; - - { - SolarMutexGuard aSolarMutexGuard; - URLToDispatchMap::iterator pIter = m_aListenerMap.find( aCommandURL ); - - // Already in the list of status listener. Do nothing. - if ( pIter != m_aListenerMap.end() ) - return; - - // Check if we are already initialized. Implementation starts adding itself as status listener when - // intialize is called. - if ( !m_bInitialized ) - { - // Put into the boost::unordered_map of status listener. Will be activated when initialized is called - m_aListenerMap.insert( URLToDispatchMap::value_type( aCommandURL, Reference< XDispatch >() )); - return; - } - else - { - // Add status listener directly as intialize has already been called. - Reference< XDispatchProvider > xDispatchProvider( m_xFrame, UNO_QUERY ); - if ( m_xServiceManager.is() && xDispatchProvider.is() ) - { - aTargetURL.Complete = aCommandURL; - if ( m_pImpl->m_xUrlTransformer.is() ) - m_pImpl->m_xUrlTransformer->parseStrict( aTargetURL ); - xDispatch = xDispatchProvider->queryDispatch( aTargetURL, ::rtl::OUString(), 0 ); - - xStatusListener = Reference< XStatusListener >( static_cast< OWeakObject* >( this ), UNO_QUERY ); - URLToDispatchMap::iterator aIter = m_aListenerMap.find( aCommandURL ); - if ( aIter != m_aListenerMap.end() ) - { - Reference< XDispatch > xOldDispatch( aIter->second ); - aIter->second = xDispatch; - - try - { - if ( xOldDispatch.is() ) - xOldDispatch->removeStatusListener( xStatusListener, aTargetURL ); - } - catch ( Exception& ) - { - } - } - else - m_aListenerMap.insert( URLToDispatchMap::value_type( aCommandURL, xDispatch )); - } - } - } - - // Call without locked mutex as we are called back from dispatch implementation - try - { - if ( xDispatch.is() ) - xDispatch->addStatusListener( xStatusListener, aTargetURL ); - } - catch ( Exception& ) - { - } -} - -void ToolboxController::removeStatusListener( const rtl::OUString& aCommandURL ) -{ - SolarMutexGuard aSolarMutexGuard; - - URLToDispatchMap::iterator pIter = m_aListenerMap.find( aCommandURL ); - if ( pIter != m_aListenerMap.end() ) - { - Reference< XDispatch > xDispatch( pIter->second ); - Reference< XStatusListener > xStatusListener( static_cast< OWeakObject* >( this ), UNO_QUERY ); - m_aListenerMap.erase( pIter ); - - try - { - com::sun::star::util::URL aTargetURL; - aTargetURL.Complete = aCommandURL; - if ( m_pImpl->m_xUrlTransformer.is() ) - m_pImpl->m_xUrlTransformer->parseStrict( aTargetURL ); - - if ( xDispatch.is() && xStatusListener.is() ) - xDispatch->removeStatusListener( xStatusListener, aTargetURL ); - } - catch ( Exception& ) - { - } - } -} - -void ToolboxController::bindListener() -{ - std::vector< Listener > aDispatchVector; - Reference< XStatusListener > xStatusListener; - - { - SolarMutexGuard aSolarMutexGuard; - - if ( !m_bInitialized ) - return; - - // Collect all registered command URL's and store them temporary - Reference< XDispatchProvider > xDispatchProvider( m_xFrame, UNO_QUERY ); - if ( m_xServiceManager.is() && xDispatchProvider.is() ) - { - xStatusListener = Reference< XStatusListener >( static_cast< OWeakObject* >( this ), UNO_QUERY ); - URLToDispatchMap::iterator pIter = m_aListenerMap.begin(); - while ( pIter != m_aListenerMap.end() ) - { - com::sun::star::util::URL aTargetURL; - aTargetURL.Complete = pIter->first; - if ( m_pImpl->m_xUrlTransformer.is() ) - m_pImpl->m_xUrlTransformer->parseStrict( aTargetURL ); - - Reference< XDispatch > xDispatch( pIter->second ); - if ( xDispatch.is() ) - { - // We already have a dispatch object => we have to requery. - // Release old dispatch object and remove it as listener - try - { - xDispatch->removeStatusListener( xStatusListener, aTargetURL ); - } - catch ( Exception& ) - { - } - } - - pIter->second.clear(); - xDispatch.clear(); - - // Query for dispatch object. Old dispatch will be released with this, too. - try - { - xDispatch = xDispatchProvider->queryDispatch( aTargetURL, ::rtl::OUString(), 0 ); - } - catch ( Exception& ) - { - } - pIter->second = xDispatch; - - Listener aListener( aTargetURL, xDispatch ); - aDispatchVector.push_back( aListener ); - ++pIter; - } - } - } - - // Call without locked mutex as we are called back from dispatch implementation - if ( xStatusListener.is() ) - { - try - { - for ( sal_uInt32 i = 0; i < aDispatchVector.size(); i++ ) - { - Listener& rListener = aDispatchVector[i]; - if ( rListener.xDispatch.is() ) - rListener.xDispatch->addStatusListener( xStatusListener, rListener.aURL ); - else if ( rListener.aURL.Complete == m_aCommandURL ) - { - try - { - // Send status changed for the main URL, if we cannot get a valid dispatch object. - // UI disables the button. Catch exception as we release our mutex, it is possible - // that someone else already disposed this instance! - FeatureStateEvent aFeatureStateEvent; - aFeatureStateEvent.IsEnabled = sal_False; - aFeatureStateEvent.FeatureURL = rListener.aURL; - aFeatureStateEvent.State = Any(); - xStatusListener->statusChanged( aFeatureStateEvent ); - } - catch ( Exception& ) - { - } - } - } - } - catch ( Exception& ) - { - } - } -} - -void ToolboxController::unbindListener() -{ - SolarMutexGuard aSolarMutexGuard; - - if ( !m_bInitialized ) - return; - - // Collect all registered command URL's and store them temporary - Reference< XDispatchProvider > xDispatchProvider( m_xFrame, UNO_QUERY ); - if ( m_xServiceManager.is() && xDispatchProvider.is() ) - { - Reference< XStatusListener > xStatusListener( static_cast< OWeakObject* >( this ), UNO_QUERY ); - URLToDispatchMap::iterator pIter = m_aListenerMap.begin(); - while ( pIter != m_aListenerMap.end() ) - { - com::sun::star::util::URL aTargetURL; - aTargetURL.Complete = pIter->first; - if ( m_pImpl->m_xUrlTransformer.is() ) - m_pImpl->m_xUrlTransformer->parseStrict( aTargetURL ); - - Reference< XDispatch > xDispatch( pIter->second ); - if ( xDispatch.is() ) - { - // We already have a dispatch object => we have to requery. - // Release old dispatch object and remove it as listener - try - { - xDispatch->removeStatusListener( xStatusListener, aTargetURL ); - } - catch ( Exception& ) - { - } - } - pIter->second.clear(); - ++pIter; - } - } -} - -sal_Bool ToolboxController::isBound() const -{ - SolarMutexGuard aSolarMutexGuard; - - if ( !m_bInitialized ) - return sal_False; - - URLToDispatchMap::const_iterator pIter = m_aListenerMap.find( m_aCommandURL ); - if ( pIter != m_aListenerMap.end() ) - return ( pIter->second.is() ); - - return sal_False; -} - -sal_Bool ToolboxController::hasBigImages() const -{ - return SvtMiscOptions().AreCurrentSymbolsLarge(); -} - -void ToolboxController::updateStatus() -{ - bindListener(); -} - -void ToolboxController::updateStatus( const rtl::OUString aCommandURL ) -{ - Reference< XDispatch > xDispatch; - Reference< XStatusListener > xStatusListener; - com::sun::star::util::URL aTargetURL; - - { - SolarMutexGuard aSolarMutexGuard; - - if ( !m_bInitialized ) - return; - - // Try to find a dispatch object for the requested command URL - Reference< XDispatchProvider > xDispatchProvider( m_xFrame, UNO_QUERY ); - xStatusListener = Reference< XStatusListener >( static_cast< OWeakObject* >( this ), UNO_QUERY ); - if ( m_xServiceManager.is() && xDispatchProvider.is() ) - { - aTargetURL.Complete = aCommandURL; - if ( m_pImpl->m_xUrlTransformer.is() ) - m_pImpl->m_xUrlTransformer->parseStrict( aTargetURL ); - xDispatch = xDispatchProvider->queryDispatch( aTargetURL, rtl::OUString(), 0 ); - } - } - - if ( xDispatch.is() && xStatusListener.is() ) - { - // Catch exception as we release our mutex, it is possible that someone else - // has already disposed this instance! - // Add/remove status listener to get a update status information from the - // requested command. - try - { - xDispatch->addStatusListener( xStatusListener, aTargetURL ); - xDispatch->removeStatusListener( xStatusListener, aTargetURL ); - } - catch ( Exception& ) - { - } - } -} - -Reference< XURLTransformer > ToolboxController::getURLTransformer() const -{ - return m_pImpl->m_xUrlTransformer; -} - -Reference< ::com::sun::star::awt::XWindow > ToolboxController::getParent() const -{ - return m_pImpl->m_xParentWindow; -} - -const rtl::OUString& ToolboxController::getModuleName() const -{ - return m_pImpl->m_sModuleName; -} - -void ToolboxController::dispatchCommand( const OUString& sCommandURL, const Sequence< PropertyValue >& rArgs ) -{ - try - { - Reference< XDispatchProvider > xDispatchProvider( m_xFrame, UNO_QUERY_THROW ); - URL aURL; - aURL.Complete = sCommandURL; - getURLTransformer()->parseStrict( aURL ); - - Reference< XDispatch > xDispatch( xDispatchProvider->queryDispatch( aURL, OUString(), 0 ), UNO_QUERY_THROW ); - - Application::PostUserEvent( STATIC_LINK(0, ToolboxController_Impl, ExecuteHdl_Impl), new DispatchInfo( xDispatch, aURL, rArgs ) ); - - } - catch( Exception& ) - { - } -} - -// -//------------------------------------------------------------------------- -// XPropertySet by shizhoubo -com::sun::star::uno::Reference< com::sun::star::beans::XPropertySetInfo > SAL_CALL ToolboxController::getPropertySetInfo() throw(::com::sun::star::uno::RuntimeException) -{ - Reference<XPropertySetInfo> xInfo( createPropertySetInfo( getInfoHelper() ) ); - return xInfo; -} -//------------------------------------------------------------------------- -::cppu::IPropertyArrayHelper& ToolboxController::getInfoHelper() -{ - return *const_cast<ToolboxController*>(this)->getArrayHelper(); -} -//OPropertyArrayUsageHelper by shizhoubo -//------------------------------------------------------------------------------ -::cppu::IPropertyArrayHelper* ToolboxController::createArrayHelper( ) const -{ - com::sun::star::uno::Sequence< Property > aProps; - describeProperties(aProps); - return new ::cppu::OPropertyArrayHelper(aProps); -} -//shizhoubo for supportsvisiable -void ToolboxController::setSupportVisiableProperty(sal_Bool bValue) -{ - m_bSupportVisiable = bValue; -} -//OPropertySetHelper by shizhoubo -sal_Bool SAL_CALL ToolboxController::convertFastPropertyValue( com::sun::star::uno::Any& aConvertedValue , - com::sun::star::uno::Any& aOldValue , - sal_Int32 nHandle , - const com::sun::star::uno::Any& aValue ) throw( com::sun::star::lang::IllegalArgumentException ) -{ - switch (nHandle) - { - case TOOLBARCONTROLLER_PROPHANDLE_SUPPORTSVISIABLE: - { - sal_Bool aNewValue(sal_False); - aValue >>= aNewValue; - if (aNewValue != m_bSupportVisiable) - { - aConvertedValue <<= aNewValue; - aOldValue <<= m_bSupportVisiable; - return sal_True; - } - return sal_False; - } - } - return OPropertyContainer::convertFastPropertyValue(aConvertedValue, aOldValue, nHandle, aValue); -} - -void SAL_CALL ToolboxController::setFastPropertyValue_NoBroadcast( - sal_Int32 nHandle, - const com::sun::star::uno::Any& aValue ) -throw( com::sun::star::uno::Exception) -{ - OPropertyContainer::setFastPropertyValue_NoBroadcast(nHandle, aValue); - if (TOOLBARCONTROLLER_PROPHANDLE_SUPPORTSVISIABLE == nHandle) - { - sal_Bool rValue(sal_False); - if (( aValue >>= rValue ) && m_bInitialized) - this->setSupportVisiableProperty( rValue ); - } -} - -//-------------------------------------------------------------------- - -IMPL_STATIC_LINK_NOINSTANCE( ToolboxController_Impl, ExecuteHdl_Impl, DispatchInfo*, pDispatchInfo ) -{ - pDispatchInfo->mxDispatch->dispatch( pDispatchInfo->maURL, pDispatchInfo->maArgs ); - delete pDispatchInfo; - return 0; -} - -void ToolboxController::enable( bool bEnable ) -{ - ToolBox* pToolBox = 0; - sal_uInt16 nItemId = 0; - if( getToolboxId( nItemId, &pToolBox ) ) - { - pToolBox->EnableItem( nItemId, bEnable ? sal_True : sal_False ); - } -} - -bool ToolboxController::getToolboxId( sal_uInt16& rItemId, ToolBox** ppToolBox ) -{ - if( (m_pImpl->m_nToolBoxId != SAL_MAX_UINT16) && (ppToolBox == 0) ) - return m_pImpl->m_nToolBoxId; - - ToolBox* pToolBox = static_cast< ToolBox* >( VCLUnoHelper::GetWindow( getParent() ) ); - - if( (m_pImpl->m_nToolBoxId == SAL_MAX_UINT16) && pToolBox ) - { - const sal_uInt16 nCount = pToolBox->GetItemCount(); - for ( sal_uInt16 nPos = 0; nPos < nCount; ++nPos ) - { - const sal_uInt16 nItemId = pToolBox->GetItemId( nPos ); - if ( pToolBox->GetItemCommand( nItemId ) == String( m_aCommandURL ) ) - { - m_pImpl->m_nToolBoxId = nItemId; - break; - } - } - } - - if( ppToolBox ) - *ppToolBox = pToolBox; - - rItemId = m_pImpl->m_nToolBoxId; - - return (rItemId != SAL_MAX_UINT16) && (( ppToolBox == 0) || (*ppToolBox != 0) ); -} -//end - -} // svt - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |