summaryrefslogtreecommitdiff
path: root/embedserv/source/embed/intercept.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'embedserv/source/embed/intercept.cxx')
-rw-r--r--embedserv/source/embed/intercept.cxx592
1 files changed, 0 insertions, 592 deletions
diff --git a/embedserv/source/embed/intercept.cxx b/embedserv/source/embed/intercept.cxx
deleted file mode 100644
index 02f575166..000000000
--- a/embedserv/source/embed/intercept.cxx
+++ /dev/null
@@ -1,592 +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.
- *
- ************************************************************************/
-#include <cppuhelper/weak.hxx>
-
-#include <embeddoc.hxx>
-#include <docholder.hxx>
-#include <intercept.hxx>
-
-using namespace ::com::sun::star;
-
-
-
-#define IUL 6
-
-
-
-uno::Sequence< ::rtl::OUString > Interceptor::m_aInterceptedURL(IUL);
-
-
-
-
-struct equalOUString
-{
- bool operator()(
- const rtl::OUString& rKey1,
- const rtl::OUString& rKey2 ) const
- {
- return !!( rKey1 == rKey2 );
- }
-};
-
-
-struct hashOUString
-{
- size_t operator()( const rtl::OUString& rName ) const
- {
- return rName.hashCode();
- }
-};
-
-
-
-class StatusChangeListenerContainer
- : public ::cppu::OMultiTypeInterfaceContainerHelperVar<
-rtl::OUString,hashOUString,equalOUString>
-{
-public:
- StatusChangeListenerContainer( ::osl::Mutex& aMutex )
- : cppu::OMultiTypeInterfaceContainerHelperVar<
- rtl::OUString,hashOUString,equalOUString>(aMutex)
- {
- }
-};
-
-
-void SAL_CALL
-Interceptor::addEventListener(
- const uno::Reference<lang::XEventListener >& Listener )
- throw( uno::RuntimeException )
-{
- osl::MutexGuard aGuard( m_aMutex );
-
- if ( ! m_pDisposeEventListeners )
- m_pDisposeEventListeners =
- new cppu::OInterfaceContainerHelper( m_aMutex );
-
- m_pDisposeEventListeners->addInterface( Listener );
-}
-
-
-void SAL_CALL
-Interceptor::removeEventListener(
- const uno::Reference< lang::XEventListener >& Listener )
- throw( uno::RuntimeException )
-{
- osl::MutexGuard aGuard( m_aMutex );
-
- if ( m_pDisposeEventListeners )
- m_pDisposeEventListeners->removeInterface( Listener );
-}
-
-
-void SAL_CALL Interceptor::dispose()
- throw(::com::sun::star::uno::RuntimeException)
-{
- lang::EventObject aEvt;
- aEvt.Source = static_cast< frame::XDispatch* >( this );
-
- osl::MutexGuard aGuard(m_aMutex);
-
- if ( m_pDisposeEventListeners && m_pDisposeEventListeners->getLength() )
- m_pDisposeEventListeners->disposeAndClear( aEvt );
-
- if(m_pStatCL)
- m_pStatCL->disposeAndClear( aEvt );
-
- m_xSlaveDispatchProvider = 0;
- m_xMasterDispatchProvider = 0;
-}
-
-
-
-Interceptor::Interceptor(
- const ::rtl::Reference< EmbeddedDocumentInstanceAccess_Impl >& xOleAccess,
- DocumentHolder* pDocH,
- sal_Bool bLink )
- : m_xOleAccess( xOleAccess ),
- m_xDocHLocker( static_cast< ::cppu::OWeakObject* >( pDocH ) ),
- m_pDocH(pDocH),
- m_pStatCL(0),
- m_pDisposeEventListeners(0),
- m_bLink( bLink )
-{
- m_aInterceptedURL[0] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(".uno:Save"));
- m_aInterceptedURL[1] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(".uno:SaveAll"));
- m_aInterceptedURL[2] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(".uno:CloseDoc"));
- m_aInterceptedURL[3] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(".uno:CloseWin"));
- m_aInterceptedURL[4] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(".uno:CloseFrame"));
- m_aInterceptedURL[5] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(".uno:SaveAs"));
-}
-
-
-Interceptor::~Interceptor()
-{
- if( m_pDisposeEventListeners )
- delete m_pDisposeEventListeners;
-
- if(m_pStatCL)
- delete m_pStatCL;
-
- DocumentHolder* pTmpDocH = NULL;
- uno::Reference< uno::XInterface > xLock;
- {
- osl::MutexGuard aGuard(m_aMutex);
- xLock = m_xDocHLocker.get();
- if ( xLock.is() )
- pTmpDocH = m_pDocH;
- }
-
- if ( pTmpDocH )
- pTmpDocH->ClearInterceptor();
-}
-
-void Interceptor::DisconnectDocHolder()
-{
- osl::MutexGuard aGuard(m_aMutex);
- m_xDocHLocker.clear();
- m_pDocH = NULL;
- m_xOleAccess = NULL;
-}
-
-//XDispatch
-void SAL_CALL
-Interceptor::dispatch(
- const util::URL& URL,
- const uno::Sequence<
- beans::PropertyValue >& Arguments )
- throw (uno::RuntimeException)
-{
- ::rtl::Reference< EmbeddedDocumentInstanceAccess_Impl > xOleAccess;
- {
- osl::MutexGuard aGuard(m_aMutex);
- xOleAccess = m_xOleAccess;
- }
-
- if ( xOleAccess.is() )
- {
- LockedEmbedDocument_Impl aDocLock = xOleAccess->GetEmbedDocument();
- if ( aDocLock.GetEmbedDocument() )
- {
- if( !m_bLink && URL.Complete == m_aInterceptedURL[0])
- aDocLock.GetEmbedDocument()->SaveObject();
- else if(!m_bLink
- && ( URL.Complete == m_aInterceptedURL[2] ||
- URL.Complete == m_aInterceptedURL[3] ||
- URL.Complete == m_aInterceptedURL[4] ) )
- aDocLock.GetEmbedDocument()->Close( 0 );
- else if ( URL.Complete == m_aInterceptedURL[5] )
- {
- uno::Sequence< beans::PropertyValue > aNewArgs = Arguments;
- sal_Int32 nInd = 0;
-
- while( nInd < aNewArgs.getLength() )
- {
- if ( aNewArgs[nInd].Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "SaveTo" ) ) )
- {
- aNewArgs[nInd].Value <<= sal_True;
- break;
- }
- nInd++;
- }
-
- if ( nInd == aNewArgs.getLength() )
- {
- aNewArgs.realloc( nInd + 1 );
- aNewArgs[nInd].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "SaveTo" ));
- aNewArgs[nInd].Value <<= sal_True;
- }
-
- uno::Reference< frame::XDispatch > xDispatch = m_xSlaveDispatchProvider->queryDispatch(
- URL, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "_self" )), 0 );
- if ( xDispatch.is() )
- xDispatch->dispatch( URL, aNewArgs );
- }
- }
- }
-}
-
-
-void Interceptor::generateFeatureStateEvent()
-{
- if( m_pStatCL )
- {
- DocumentHolder* pTmpDocH = NULL;
- uno::Reference< uno::XInterface > xLock;
- {
- osl::MutexGuard aGuard(m_aMutex);
- xLock = m_xDocHLocker.get();
- if ( xLock.is() )
- pTmpDocH = m_pDocH;
- }
-
- ::rtl::OUString aTitle;
- if ( pTmpDocH )
- aTitle = pTmpDocH->getTitle();
-
- for(int i = 0; i < IUL; ++i)
- {
- if( i == 1 || m_bLink && i != 5 )
- continue;
-
- cppu::OInterfaceContainerHelper* pICH =
- m_pStatCL->getContainer(m_aInterceptedURL[i]);
- uno::Sequence<uno::Reference<uno::XInterface> > aSeq;
- if(pICH)
- aSeq = pICH->getElements();
- if(!aSeq.getLength())
- continue;
-
- frame::FeatureStateEvent aStateEvent;
- aStateEvent.IsEnabled = sal_True;
- aStateEvent.Requery = sal_False;
- if(i == 0)
- {
-
- aStateEvent.FeatureURL.Complete = m_aInterceptedURL[0];
- aStateEvent.FeatureDescriptor = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("Update"));
- aStateEvent.State <<= (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("($1) ")) +
- aTitle);
-
- }
- else if ( i == 5 )
- {
- aStateEvent.FeatureURL.Complete = m_aInterceptedURL[5];
- aStateEvent.FeatureDescriptor = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("SaveCopyTo"));
- aStateEvent.State <<= (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("($3)")));
- }
- else
- {
- aStateEvent.FeatureURL.Complete = m_aInterceptedURL[i];
- aStateEvent.FeatureDescriptor = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("Close and Return"));
- aStateEvent.State <<= (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("($2) ")) +
- aTitle);
-
- }
-
- for(sal_Int32 k = 0; k < aSeq.getLength(); ++k)
- {
- uno::Reference<frame::XStatusListener>
- Control(aSeq[k],uno::UNO_QUERY);
- if(Control.is())
- Control->statusChanged(aStateEvent);
-
- }
- }
- }
-}
-
-
-void SAL_CALL
-Interceptor::addStatusListener(
- const uno::Reference<
- frame::XStatusListener >& Control,
- const util::URL& URL )
- throw (
- uno::RuntimeException
- )
-{
- if(!Control.is())
- return;
-
- if( !m_bLink && URL.Complete == m_aInterceptedURL[0] )
- { // Save
- DocumentHolder* pTmpDocH = NULL;
- uno::Reference< uno::XInterface > xLock;
- {
- osl::MutexGuard aGuard(m_aMutex);
- xLock = m_xDocHLocker.get();
- if ( xLock.is() )
- pTmpDocH = m_pDocH;
- }
-
- ::rtl::OUString aTitle;
- if ( pTmpDocH )
- aTitle = pTmpDocH->getTitle();
-
- frame::FeatureStateEvent aStateEvent;
- aStateEvent.FeatureURL.Complete = m_aInterceptedURL[0];
- aStateEvent.FeatureDescriptor = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("Update"));
- aStateEvent.IsEnabled = sal_True;
- aStateEvent.Requery = sal_False;
- aStateEvent.State <<= (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("($1) ")) +
- aTitle );
- Control->statusChanged(aStateEvent);
-
- {
- osl::MutexGuard aGuard(m_aMutex);
- if(!m_pStatCL)
- m_pStatCL =
- new StatusChangeListenerContainer(m_aMutex);
- }
-
- m_pStatCL->addInterface(URL.Complete,Control);
- return;
- }
-
- sal_Int32 i = 2;
- if ( !m_bLink
- && ( URL.Complete == m_aInterceptedURL[i] ||
- URL.Complete == m_aInterceptedURL[++i] ||
- URL.Complete == m_aInterceptedURL[++i] ) )
- { // Close and return
- DocumentHolder* pTmpDocH = NULL;
- uno::Reference< uno::XInterface > xLock;
- {
- osl::MutexGuard aGuard(m_aMutex);
- xLock = m_xDocHLocker.get();
- if ( xLock.is() )
- pTmpDocH = m_pDocH;
- }
-
- ::rtl::OUString aTitle;
- if ( pTmpDocH )
- aTitle = pTmpDocH->getTitle();
-
- frame::FeatureStateEvent aStateEvent;
- aStateEvent.FeatureURL.Complete = m_aInterceptedURL[i];
- aStateEvent.FeatureDescriptor = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("Close and Return"));
- aStateEvent.IsEnabled = sal_True;
- aStateEvent.Requery = sal_False;
- aStateEvent.State <<= (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("($2) ")) +
- aTitle );
- Control->statusChanged(aStateEvent);
-
-
- {
- osl::MutexGuard aGuard(m_aMutex);
- if(!m_pStatCL)
- m_pStatCL =
- new StatusChangeListenerContainer(m_aMutex);
- }
-
- m_pStatCL->addInterface(URL.Complete,Control);
- return;
- }
-
- if(URL.Complete == m_aInterceptedURL[5])
- { // SaveAs
- frame::FeatureStateEvent aStateEvent;
- aStateEvent.FeatureURL.Complete = m_aInterceptedURL[5];
- aStateEvent.FeatureDescriptor = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("SaveCopyTo"));
- aStateEvent.IsEnabled = sal_True;
- aStateEvent.Requery = sal_False;
- aStateEvent.State <<= (rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("($3)")));
- Control->statusChanged(aStateEvent);
-
- {
- osl::MutexGuard aGuard(m_aMutex);
- if(!m_pStatCL)
- m_pStatCL =
- new StatusChangeListenerContainer(m_aMutex);
- }
-
- m_pStatCL->addInterface(URL.Complete,Control);
- return;
- }
-
-}
-
-
-void SAL_CALL
-Interceptor::removeStatusListener(
- const uno::Reference<
- frame::XStatusListener >& Control,
- const util::URL& URL )
- throw (
- uno::RuntimeException
- )
-{
- if(!(Control.is() && m_pStatCL))
- return;
- else {
- m_pStatCL->removeInterface(URL.Complete,Control);
- return;
- }
-}
-
-
-//XInterceptorInfo
-uno::Sequence< ::rtl::OUString >
-SAL_CALL
-Interceptor::getInterceptedURLs( )
- throw (
- uno::RuntimeException
- )
-{
- // now implemented as update
- if ( m_bLink )
- {
- uno::Sequence< ::rtl::OUString > aResult( 2 );
- aResult[0] = m_aInterceptedURL[1];
- aResult[1] = m_aInterceptedURL[5];
-
- return aResult;
- }
-
- return m_aInterceptedURL;
-}
-
-
-// XDispatchProvider
-
-uno::Reference< frame::XDispatch > SAL_CALL
-Interceptor::queryDispatch(
- const util::URL& URL,
- const ::rtl::OUString& TargetFrameName,
- sal_Int32 SearchFlags )
- throw (
- uno::RuntimeException
- )
-{
- osl::MutexGuard aGuard(m_aMutex);
- if( !m_bLink && URL.Complete == m_aInterceptedURL[0] )
- return (frame::XDispatch*)this;
- else if(URL.Complete == m_aInterceptedURL[1])
- return (frame::XDispatch*)0 ;
- else if( !m_bLink && URL.Complete == m_aInterceptedURL[2] )
- return (frame::XDispatch*)this;
- else if( !m_bLink && URL.Complete == m_aInterceptedURL[3] )
- return (frame::XDispatch*)this;
- else if( !m_bLink && URL.Complete == m_aInterceptedURL[4] )
- return (frame::XDispatch*)this;
- else if(URL.Complete == m_aInterceptedURL[5])
- return (frame::XDispatch*)this;
- else {
- if(m_xSlaveDispatchProvider.is())
- return m_xSlaveDispatchProvider->queryDispatch(
- URL,TargetFrameName,SearchFlags);
- else
- return uno::Reference<frame::XDispatch>(0);
- }
-}
-
-uno::Sequence< uno::Reference< frame::XDispatch > > SAL_CALL
-Interceptor::queryDispatches(
- const uno::Sequence<frame::DispatchDescriptor >& Requests )
- throw (
- uno::RuntimeException
- )
-{
- uno::Sequence< uno::Reference< frame::XDispatch > > aRet;
- osl::MutexGuard aGuard(m_aMutex);
- if(m_xSlaveDispatchProvider.is())
- aRet = m_xSlaveDispatchProvider->queryDispatches(Requests);
- else
- aRet.realloc(Requests.getLength());
-
- for(sal_Int32 i = 0; i < Requests.getLength(); ++i)
- if ( !m_bLink && m_aInterceptedURL[0] == Requests[i].FeatureURL.Complete )
- aRet[i] = (frame::XDispatch*) this;
- else if(m_aInterceptedURL[1] == Requests[i].FeatureURL.Complete)
- aRet[i] = (frame::XDispatch*) 0;
- else if( !m_bLink && m_aInterceptedURL[2] == Requests[i].FeatureURL.Complete )
- aRet[i] = (frame::XDispatch*) this;
- else if( !m_bLink && m_aInterceptedURL[3] == Requests[i].FeatureURL.Complete )
- aRet[i] = (frame::XDispatch*) this;
- else if( !m_bLink && m_aInterceptedURL[4] == Requests[i].FeatureURL.Complete )
- aRet[i] = (frame::XDispatch*) this;
- else if(m_aInterceptedURL[5] == Requests[i].FeatureURL.Complete)
- aRet[i] = (frame::XDispatch*) this;
-
- return aRet;
-}
-
-
-
-//XDispatchProviderInterceptor
-
-uno::Reference< frame::XDispatchProvider > SAL_CALL
-Interceptor::getSlaveDispatchProvider( )
- throw (
- uno::RuntimeException
- )
-{
- osl::MutexGuard aGuard(m_aMutex);
- return m_xSlaveDispatchProvider;
-}
-
-void SAL_CALL
-Interceptor::setSlaveDispatchProvider(
- const uno::Reference< frame::XDispatchProvider >& NewDispatchProvider )
- throw (
- uno::RuntimeException
- )
-{
- osl::MutexGuard aGuard(m_aMutex);
- m_xSlaveDispatchProvider = NewDispatchProvider;
-}
-
-
-uno::Reference< frame::XDispatchProvider > SAL_CALL
-Interceptor::getMasterDispatchProvider( )
- throw (
- uno::RuntimeException
- )
-{
- osl::MutexGuard aGuard(m_aMutex);
- return m_xMasterDispatchProvider;
-}
-
-
-void SAL_CALL
-Interceptor::setMasterDispatchProvider(
- const uno::Reference< frame::XDispatchProvider >& NewSupplier )
- throw (
- uno::RuntimeException
- )
-{
- osl::MutexGuard aGuard(m_aMutex);
- m_xMasterDispatchProvider = NewSupplier;
-}
-
-// Fix strange warnings about some
-// ATL::CAxHostWindow::QueryInterface|AddRef|Releae functions.
-// warning C4505: 'xxx' : unreferenced local function has been removed
-#if defined(_MSC_VER)
-#pragma warning(disable: 4505)
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */