/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_ucbhelper.hxx" /************************************************************************** TODO ************************************************************************** *************************************************************************/ #include #include #include #include #include #include #include using namespace com::sun::star::lang; using namespace com::sun::star::task; using namespace com::sun::star::ucb; using namespace com::sun::star::uno; using namespace rtl; namespace ucbhelper { //========================================================================= //========================================================================= // // struct CommandEnvironmentProxy_Impl. // //========================================================================= //========================================================================= struct CommandEnvironmentProxy_Impl { osl::Mutex m_aMutex; Reference< XCommandEnvironment > m_xEnv; Reference< XInteractionHandler > m_xInteractionHandler; Reference< XProgressHandler > m_xProgressHandler; sal_Bool m_bGotInteractionHandler; sal_Bool m_bGotProgressHandler; CommandEnvironmentProxy_Impl( const Reference< XCommandEnvironment >& rxEnv ) : m_xEnv( rxEnv ), m_bGotInteractionHandler( sal_False ), m_bGotProgressHandler( sal_False ) {} }; //========================================================================= //========================================================================= // // CommandEnvironmentProxy Implementation. // //========================================================================= //========================================================================= CommandEnvironmentProxy::CommandEnvironmentProxy( const Reference< XCommandEnvironment >& rxEnv ) { m_pImpl = new CommandEnvironmentProxy_Impl( rxEnv ); } //========================================================================= // virtual CommandEnvironmentProxy::~CommandEnvironmentProxy() { delete m_pImpl; } //========================================================================= // // XInterface methods // //========================================================================= XINTERFACE_IMPL_2( CommandEnvironmentProxy, XTypeProvider, XCommandEnvironment ); //========================================================================= // // XTypeProvider methods // //========================================================================= XTYPEPROVIDER_IMPL_2( CommandEnvironmentProxy, XTypeProvider, XCommandEnvironment ); //========================================================================= // // XCommandEnvironemnt methods. // //========================================================================= // virtual Reference< XInteractionHandler > SAL_CALL CommandEnvironmentProxy::getInteractionHandler() throw ( RuntimeException ) { if ( m_pImpl->m_xEnv.is() ) { if ( !m_pImpl->m_bGotInteractionHandler ) { osl::MutexGuard aGuard( m_pImpl->m_aMutex ); if ( !m_pImpl->m_bGotInteractionHandler ) { m_pImpl->m_xInteractionHandler = m_pImpl->m_xEnv->getInteractionHandler(); m_pImpl->m_bGotInteractionHandler = sal_True; } } } return m_pImpl->m_xInteractionHandler; } //========================================================================= // virtual Reference< XProgressHandler > SAL_CALL CommandEnvironmentProxy::getProgressHandler() throw ( RuntimeException ) { if ( m_pImpl->m_xEnv.is() ) { if ( !m_pImpl->m_bGotProgressHandler ) { osl::MutexGuard aGuard( m_pImpl->m_aMutex ); if ( !m_pImpl->m_bGotProgressHandler ) { m_pImpl->m_xProgressHandler = m_pImpl->m_xEnv->getProgressHandler(); m_pImpl->m_bGotProgressHandler = sal_True; } } } return m_pImpl->m_xProgressHandler; } } /* namespace ucbhelper */