diff options
Diffstat (limited to 'embedserv/source/embed')
-rw-r--r-- | embedserv/source/embed/docholder.cxx | 1533 | ||||
-rw-r--r-- | embedserv/source/embed/ed_idataobj.cxx | 327 | ||||
-rw-r--r-- | embedserv/source/embed/ed_iinplace.cxx | 103 | ||||
-rw-r--r-- | embedserv/source/embed/ed_ioleobject.cxx | 506 | ||||
-rw-r--r-- | embedserv/source/embed/ed_ipersiststr.cxx | 1020 | ||||
-rw-r--r-- | embedserv/source/embed/esdll.cxx | 94 | ||||
-rw-r--r-- | embedserv/source/embed/guid.cxx | 216 | ||||
-rw-r--r-- | embedserv/source/embed/iipaobj.cxx | 133 | ||||
-rw-r--r-- | embedserv/source/embed/intercept.cxx | 592 | ||||
-rwxr-xr-x | embedserv/source/embed/makefile.mk | 79 | ||||
-rw-r--r-- | embedserv/source/embed/register.cxx | 102 | ||||
-rw-r--r-- | embedserv/source/embed/servprov.cxx | 308 | ||||
-rw-r--r-- | embedserv/source/embed/stdafx.cpp | 16 | ||||
-rw-r--r-- | embedserv/source/embed/syswinwrapper.cxx | 480 | ||||
-rw-r--r-- | embedserv/source/embed/tracker.cxx | 841 | ||||
-rw-r--r-- | embedserv/source/embed/xwin.cxx | 349 |
16 files changed, 0 insertions, 6699 deletions
diff --git a/embedserv/source/embed/docholder.cxx b/embedserv/source/embed/docholder.cxx deleted file mode 100644 index f18f43c7e..000000000 --- a/embedserv/source/embed/docholder.cxx +++ /dev/null @@ -1,1533 +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. - * - ************************************************************************/ -#if defined(_MSC_VER) && (_MSC_VER > 1310) -#pragma warning(disable : 4917 4555) -#endif - - -#include "xwin.hxx" -#include "docholder.hxx" -#include "embeddoc.hxx" -#include "intercept.hxx" -#include "syswinwrapper.hxx" -#include "iipaobj.hxx" - -#include "common.h" -#include <Windows.h> -#include <com/sun/star/lang/SystemDependent.hpp> -#include <com/sun/star/awt/XSystemChildFactory.hpp> -#include <com/sun/star/awt/XSystemDependentWindowPeer.hpp> -#include <com/sun/star/awt/XSystemDependentMenuPeer.hpp> -#include <com/sun/star/ui/XUIElement.hpp> -#include <com/sun/star/awt/WindowAttribute.hpp> -#include <com/sun/star/awt/XWindow.hpp> -#include <com/sun/star/frame/XComponentLoader.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/util/XCloseBroadcaster.hpp> -#include <com/sun/star/util/XCloseAble.hpp> -#include <com/sun/star/container/XNameAccess.hpp> -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/frame/XModel.hpp> -#include <com/sun/star/frame/XDesktop.hpp> -#include <com/sun/star/frame/XFramesSupplier.hpp> -#include <com/sun/star/frame/FrameSearchFlag.hpp> -#include <com/sun/star/frame/XStatusListener.hpp> -#include <com/sun/star/util/XModifyBroadcaster.hpp> -#include <com/sun/star/frame/XDispatchProviderInterception.hpp> -#include <com/sun/star/awt/XTopWindow.hpp> -#include <com/sun/star/awt/PosSize.hpp> -#include <com/sun/star/awt/XView.hpp> -#include <com/sun/star/bridge/XBridgeSupplier2.hpp> -#include <com/sun/star/bridge/ModelDependent.hpp> -#include <com/sun/star/embed/EmbedMapUnits.hpp> -#include <com/sun/star/embed/XVisualObject.hpp> -#include <com/sun/star/document/MacroExecMode.hpp> -#include <com/sun/star/task/XInteractionHandler.hpp> -#include <osl/diagnose.h> -#include <rtl/process.h> - -using namespace ::com::sun::star; - -extern ::rtl::OUString getFilterNameFromGUID_Impl( GUID* ); - -// add mutex locking ??? - -DocumentHolder::DocumentHolder( - const uno::Reference<lang::XMultiServiceFactory >& xFactory, - const ::rtl::Reference< EmbeddedDocumentInstanceAccess_Impl >& xOleAccess ) - : - m_bAllowInPlace(true), - m_pIOleIPSite(0), - m_pIOleIPFrame(0), - m_pIOleIPUIWindow(0), - m_pCHatchWin(0), - m_xOleAccess( xOleAccess ), - m_pInterceptor(0), - m_xFactory( xFactory ), - m_bOnDeactivate(false), - m_hWndxWinParent(NULL), - m_hWndxWinCont(NULL), - m_nMenuHandle(NULL), - m_nMenuShared(NULL), - m_nOLEMenu(NULL), - m_nMacroExecMode( document::MacroExecMode::USE_CONFIG ), - m_bLink( sal_False ) -{ - static const ::rtl::OUString aServiceName ( - RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.frame.Desktop" ) ); - uno::Reference< frame::XDesktop > xDesktop( - m_xFactory->createInstance( aServiceName ), - uno::UNO_QUERY ); - if ( xDesktop.is() ) - xDesktop->addTerminateListener( (frame::XTerminateListener*)this ); -} - - -DocumentHolder::~DocumentHolder() -{ - delete m_pCHatchWin; - - ClearInterceptorInternally(); -} - - -void DocumentHolder::LoadDocInFrame( sal_Bool bPluginMode ) -{ - uno::Reference<frame::XComponentLoader> xComponentLoader( - m_xFrame,uno::UNO_QUERY); - if( xComponentLoader.is() && m_xDocument.is() ) - { - uno::Reference< task::XInteractionHandler > xHandler( - m_xFactory->createInstance( - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.task.InteractionHandler" ) ) ), - uno::UNO_QUERY ); - - uno::Any aAny; - sal_Int32 nLen = 3; - uno::Sequence<beans::PropertyValue> aSeq( nLen ); - - aAny <<= uno::Reference<uno::XInterface>( - m_xDocument, uno::UNO_QUERY); - aSeq[0] = beans::PropertyValue( - rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM("Model")), - -1, - aAny, - beans::PropertyState_DIRECT_VALUE); - - aAny <<= sal_False; - aSeq[1] = beans::PropertyValue( - rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM("ReadOnly")), - -1, - aAny, - beans::PropertyState_DIRECT_VALUE); - - aAny <<= (sal_Bool) sal_True; - aSeq[2] = beans::PropertyValue( - rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM("NoAutoSave")), - -1, - aAny, - beans::PropertyState_DIRECT_VALUE); - - if ( bPluginMode ) - { - aSeq.realloc( ++nLen ); - aAny <<= (sal_Int16) 3; - aSeq[nLen-1] = beans::PropertyValue( - rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM("PluginMode")), - -1, - aAny, - beans::PropertyState_DIRECT_VALUE); - } - - if ( xHandler.is() ) - { - aSeq.realloc( nLen+=2 ); - aAny <<= xHandler; - aSeq[nLen-2] = beans::PropertyValue( - rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM("InteractionHandler")), - -1, - aAny, - beans::PropertyState_DIRECT_VALUE); - - aAny <<= m_nMacroExecMode; - aSeq[nLen-1] = beans::PropertyValue( - rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM("MacroExecutionMode")), - -1, - aAny, - beans::PropertyState_DIRECT_VALUE); - } - - xComponentLoader->loadComponentFromURL( - rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM("private:object")), - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_self")), - 0, - aSeq); - - uno::Sequence< beans::PropertyValue > aResArgs = m_xDocument->getArgs(); - for ( int nInd = 0; nInd < aResArgs.getLength(); nInd++ ) - if ( aResArgs[nInd].Name.equals( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "MacroExecutionMode" ) ) ) ) - { - aResArgs[nInd].Value >>= m_nMacroExecMode; - break; - } - } -} - -void DocumentHolder::OnPosRectChanged(LPRECT lpRect) const -{ - lpRect->left += m_aBorder.left; - lpRect->right -= m_aBorder.right; - lpRect->top += m_aBorder.top; - lpRect->bottom -= m_aBorder.bottom; - if(m_pIOleIPSite) - m_pIOleIPSite->OnPosRectChange(lpRect); -} - - - -void DocumentHolder::DisableInplaceActivation(BOOL b) -{ - m_bAllowInPlace = ! b; -} - -BOOL DocumentHolder::isActive() const -{ - return m_pIOleIPSite != 0; -} - -HRESULT DocumentHolder::InPlaceActivate( - LPOLECLIENTSITE pActiveSite, - BOOL fIncludeUI) -{ - m_bOnDeactivate = false; - - if(!m_bAllowInPlace) - return ERROR; - - HRESULT hr; - HWND hWndSite; - RECT rcPos; - RECT rcClip; - OLEINPLACEFRAMEINFO frameInfo; - - if (NULL==pActiveSite) - return ResultFromScode(E_INVALIDARG); - - if (NULL!=m_pIOleIPSite) - { - if (fIncludeUI) - UIActivate(); - - return NOERROR; - } - - if ( !m_xDocument.is() ) - return ERROR; - - //1. Initialization, obtaining interfaces, OnInPlaceActivate. - hr=pActiveSite->QueryInterface( - IID_IOleInPlaceSite, - (void**) &m_pIOleIPSite); - - if (FAILED(hr)) - return hr; - - hr=m_pIOleIPSite->CanInPlaceActivate(); - - if (NOERROR!=hr) - { - m_pIOleIPSite->Release(), m_pIOleIPSite=NULL; - return ResultFromScode(E_FAIL); - } - - m_pIOleIPSite->OnInPlaceActivate(); - - //2. Get the site window - //3. and determine container frame and - // document window for tools and menus, as well - // as frameInfo for accelerators - m_pIOleIPSite->GetWindow(&hWndSite); - - frameInfo.cb=sizeof(OLEINPLACEFRAMEINFO); - m_pIOleIPSite->GetWindowContext( - &m_pIOleIPFrame,&m_pIOleIPUIWindow,&rcPos,&rcClip,&frameInfo); - - // initialize the office as, with hwnd as parentwindow - uno::Any aAny; - uno::Sequence<sal_Int8> aProcessIdent(16); - rtl_getGlobalProcessId((sal_uInt8*)aProcessIdent.getArray()); - - try - { - if(!m_xEditWindow.is()) - { // determine XWindow and window handle of parent - HWND hWndxWinParent(0); - uno::Reference<awt::XWindow> xWin; - - static const ::rtl::OUString aToolkitServiceName( - RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.awt.Toolkit" ) ); - uno::Reference<awt::XSystemChildFactory> xToolkit( - m_xFactory->createInstance(aToolkitServiceName ),uno::UNO_QUERY); - - if(xToolkit.is()) { - // create system window wrapper for hwnd - if( !m_pCHatchWin ) - m_pCHatchWin = new winwrap::CHatchWin( - m_hInstance,this); - - if(m_pCHatchWin->Init(hWndSite,/*ID_HATCHWINDOW*/2000, NULL)) { - m_pCHatchWin->RectsSet(&rcPos,&rcClip); //set visible area - hWndxWinParent = m_pCHatchWin->Window(); - ShowWindow(hWndxWinParent,SW_SHOW); //Make visible. - } - else { - // no success initializing hatch window - delete m_pCHatchWin, m_pCHatchWin = 0; - hWndxWinParent = hWndSite; - } - - aAny <<= sal_Int32(hWndxWinParent); - xWin = uno::Reference<awt::XWindow>( - xToolkit->createSystemChild( - aAny, - aProcessIdent, - lang::SystemDependent::SYSTEM_WIN32), - uno::UNO_QUERY); - } - - if(xWin.is()) { - xWin->setPosSize( - m_pCHatchWin ? HATCHWIN_BORDERWIDTHDEFAULT : 0, - m_pCHatchWin ? HATCHWIN_BORDERWIDTHDEFAULT : 0, - rcPos.right-rcPos.left, - rcPos.bottom - rcPos.top, - awt::PosSize::POSSIZE); - xWin->setVisible(sal_True); - - m_xEditWindow = xWin; - m_hWndxWinParent = hWndxWinParent; - } - else - return ERROR; - } - else { - if(m_hWndxWinParent) { - SetParent(m_hWndxWinParent,hWndSite); - ShowWindow(m_hWndxWinParent,SW_SHOW); //Make visible. - } - - if ( !m_xFrame.is() ) - // initially set size to "empty", this guarantees that the final resize - // is always executed (will be done by "SetObjectRects" after getting internal border) - m_xEditWindow->setPosSize( - 0, - 0, - 0, - 0, - awt::PosSize::POSSIZE); - m_xEditWindow->setVisible(sal_True); - } - - if(m_xContainerWindow.is()) { - if(m_hWndxWinCont) { - if(m_pIOleIPFrame) { - HWND hWndCont; - m_pIOleIPFrame->GetWindow(&hWndCont); - SetParent(m_hWndxWinCont,hWndCont); - ShowWindow(m_hWndxWinCont,SW_SHOW); - } - } - m_xContainerWindow->setVisible(true); - } - - if(m_xFrame.is()) - m_xFrame->activate(); - else { - // create frame and initialize it with with the created window - static const ::rtl::OUString aFrameServiceName( - RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.frame.Frame" ) ); - m_xFrame = uno::Reference<frame::XFrame>( - m_xFactory->createInstance(aFrameServiceName), - uno::UNO_QUERY); - - if(!m_xFrame.is()) - return ERROR; - - m_xFrame->initialize(m_xEditWindow); - - uno::Reference<frame::XDispatchProviderInterception> - xDPI(m_xFrame,uno::UNO_QUERY); - if(xDPI.is()) - xDPI->registerDispatchProviderInterceptor( CreateNewInterceptor() ); - - uno::Reference<beans::XPropertySet> xPS(m_xFrame,uno::UNO_QUERY); - if( xPS.is() ) - { - aAny = xPS->getPropertyValue( - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LayoutManager"))); - aAny >>= m_xLayoutManager; - } - - if(m_xLayoutManager.is()) - m_xLayoutManager->setDockingAreaAcceptor(this); - - // load the model into the frame - LoadDocInFrame( sal_True ); - - static const ::rtl::OUString aDesktopServiceName ( - RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.frame.Desktop" ) ); - uno::Reference< frame::XFramesSupplier > xDesktop( - m_xFactory->createInstance( aDesktopServiceName ), - uno::UNO_QUERY ); - if(xDesktop.is()) - xDesktop->getFrames()->append(m_xFrame); - - // determine the menuhandle to get menutitems. - if(m_xLayoutManager.is()) { - uno::Reference< ::com::sun::star::ui::XUIElement > xUIEl( - m_xLayoutManager->getElement( - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( - "private:resource/menubar/menubar")))); - OSL_ENSURE(xUIEl.is(),"no menubar"); - uno::Reference<awt::XSystemDependentMenuPeer> xSDMP( - xUIEl->getRealInterface(), - uno::UNO_QUERY); - aAny = xSDMP->getMenuHandle( - aProcessIdent,lang::SystemDependent::SYSTEM_WIN32); - sal_Int32 tmp; - if( aAny >>= tmp ) - m_nMenuHandle = HMENU(tmp); - m_xLayoutManager->hideElement( - rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM( - "private:resource/menubar/menubar" ))); - } - } - - // TODO/cd: Workaround for status indicator bug. It always makes the - // document window visible, when someone tries to use the status - // indicator. As we save our document when we get the deactivation - // from OLE this conflict to hide floating windows. - if(m_xLayoutManager.is()) - m_xLayoutManager->setVisible(true); - - // get document border and resize rects according to border - GetDocumentBorder( &m_aBorder ); - SetObjectRects( &rcPos, &rcClip ); - - if ( m_xOleAccess.is() ) - { - LockedEmbedDocument_Impl aDocLock = m_xOleAccess->GetEmbedDocument(); - if ( aDocLock.GetEmbedDocument() ) - aDocLock.GetEmbedDocument()->ShowObject(); - } - - // setTitle(m_aDocumentNamePart); - if (fIncludeUI) - hr=UIActivate(); - - m_pIOleIPSite->DiscardUndoState(); - } - catch( uno::Exception& ) - { - hr = ERROR; - } - - return hr; -} - - -void DocumentHolder::InPlaceDeactivate(void) -{ - m_bOnDeactivate = true; - - UIDeactivate(); - if(m_xFrame.is()) m_xFrame->deactivate(); - - if(m_xEditWindow.is()) { - m_xEditWindow->setVisible(false); - ShowWindow(m_hWndxWinParent,SW_HIDE); - SetParent(m_hWndxWinParent,0); - } - - if(m_xContainerWindow.is()) { - m_xContainerWindow->setVisible(false); - ShowWindow(m_hWndxWinCont,SW_HIDE); - SetParent(m_hWndxWinCont,0); - } - - // TODO/cd: Workaround for status indicator bug. It always makes the - // document window visible, when someone tries to use the status - // indicator. As we save our document when we get the deactivation - // from OLE this conflict to hide floating windows. - if (m_xLayoutManager.is()) - m_xLayoutManager->setVisible(false); - - if (NULL!=m_pIOleIPSite) - m_pIOleIPSite->OnInPlaceDeactivate(); - - if(m_pIOleIPFrame) m_pIOleIPFrame->Release(); m_pIOleIPFrame = 0; - if(m_pIOleIPUIWindow) m_pIOleIPUIWindow->Release(); m_pIOleIPUIWindow = 0; - if(m_pIOleIPSite) m_pIOleIPSite->Release(); m_pIOleIPSite = 0; - - if ( m_xOleAccess.is() ) - { - LockedEmbedDocument_Impl aDocLock = m_xOleAccess->GetEmbedDocument(); - if ( aDocLock.GetEmbedDocument() ) - { - aDocLock.GetEmbedDocument()->SaveObject(); - } - } - - return; -} - - -HRESULT DocumentHolder::UIActivate() -{ - // 1. Call IOleInPlaceSite::UIActivate - if (NULL!=m_pIOleIPSite) - m_pIOleIPSite->OnUIActivate(); - - //2. Critical for accelerators to work initially. - SetFocus(m_pCHatchWin->Window()); - // if(m_xEditWindow.is()) m_xEditWindow->setFocus(); - - //3. Set the active object - - OLECHAR starOffice[] = {'S','t','a','r','O','f','f','i','c','e',0}; - CComPtr< IOleInPlaceActiveObject > pObj = new CIIAObj( this ); - - if (NULL!=m_pIOleIPFrame) - m_pIOleIPFrame->SetActiveObject( - pObj, starOffice ); - - if (NULL!=m_pIOleIPUIWindow) - m_pIOleIPUIWindow->SetActiveObject( - pObj, starOffice ); - - //4. Create the shared menu. - InPlaceMenuCreate(); - - return NOERROR; -} - -void DocumentHolder::UIDeactivate() -{ - //1. Remove the shared menu. - InPlaceMenuDestroy(); - - if (NULL!=m_pIOleIPFrame) - m_pIOleIPFrame->SetActiveObject(NULL, NULL); - - if (NULL!=m_pIOleIPUIWindow) - m_pIOleIPUIWindow->SetActiveObject(NULL, NULL); - - //3. Call IOleInPlaceSite::OnUIDeactivate - if (NULL!=m_pIOleIPSite) - m_pIOleIPSite->OnUIDeactivate(FALSE); - - return; -} - -void CopyToOLEMenu(HMENU hOrig,WORD origPos,HMENU hDest,WORD destPos) -{ - HMENU subMenu(NULL); - UINT uTemp = MF_BYPOSITION | MF_POPUP; - char buffer[256]; - - subMenu = GetSubMenu(hOrig,origPos); - GetMenuString(hOrig,origPos,buffer,256,MF_BYPOSITION); - InsertMenu(hDest,destPos,uTemp, - (UINT)subMenu,LPCTSTR(buffer)); - - MENUITEMINFOW mi; - memset(&mi,0,sizeof(mi)); - mi.cbSize = sizeof(mi); - mi.fMask = MIIM_DATA; - if(GetMenuItemInfoW(hOrig,origPos,TRUE,&mi)) - SetMenuItemInfoW(hDest,(WORD)destPos,TRUE,&mi); -} - -BOOL DocumentHolder::InPlaceMenuCreate(void) -{ - HMENU hMenu; - UINT i; - OLEMENUGROUPWIDTHS mgw; - - for (i=0; i<6; i++) - mgw.width[i]=0; - - //We already have popup menu handles in m_pFR->m_phMenu[] - - //Create the new shared menu and let container do its thing - hMenu=CreateMenu(); - m_pIOleIPFrame->InsertMenus(hMenu,&mgw); - - int count = GetMenuItemCount(m_nMenuHandle); - int help = count-1; - - // start with 1, because we don't include "File" - WORD pos = (WORD)mgw.width[0]; - CopyToOLEMenu(m_nMenuHandle,1,hMenu,pos); - mgw.width[1] = 1; - - // insert object menu here - pos = ((WORD)(mgw.width[0] + mgw.width[1] + mgw.width[2])); - for(WORD i = 2; i < help-1; ++i,++pos) - CopyToOLEMenu(m_nMenuHandle,i,hMenu,pos); - mgw.width[3] = help - 3; - - // insert help menu - pos = (WORD)(mgw.width[0] + mgw.width[1] + mgw.width[2] + - mgw.width[3] + mgw.width[4]); - CopyToOLEMenu(m_nMenuHandle,WORD(help),hMenu,pos); - mgw.width[5] = 1; - - m_nMenuShared = hMenu; - m_nOLEMenu = OleCreateMenuDescriptor(m_nMenuShared,&mgw); - - uno::Reference<awt::XSystemDependentWindowPeer> xSysDepWin(m_xContainerWindow,uno::UNO_QUERY); - if(xSysDepWin.is()) { - uno::Sequence<sal_Int8> aProcessIdent(16); - rtl_getGlobalProcessId((sal_uInt8*)aProcessIdent.getArray()); - uno::Any aAny = xSysDepWin->getWindowHandle(aProcessIdent,lang::SystemDependent::SYSTEM_WIN32); - sal_Int32 tmp; - aAny >>= tmp; - HWND aHwnd = (HWND) tmp; - m_pIOleIPFrame->SetMenu( - m_nMenuShared,m_nOLEMenu,aHwnd); - } - else - m_pIOleIPFrame->SetMenu( - m_nMenuShared,m_nOLEMenu,::GetWindow(m_hWndxWinParent,GW_CHILD)); - return TRUE; -} - -BOOL DocumentHolder::InPlaceMenuDestroy(void) -{ - if( NULL == m_nMenuShared ) - return TRUE; - - m_pIOleIPFrame->SetMenu(NULL,NULL,NULL); - - OleDestroyMenuDescriptor(m_nOLEMenu),m_nOLEMenu = NULL; - return TRUE; -} - -void DocumentHolder::OpenIntoWindow(void) -{ - // not implemented -} - -BOOL DocumentHolder::Undo(void) -{ - // not implemented - return false; -} - - -void DocumentHolder::FreeOffice() -{ - const ::rtl::OUString aServiceName( - RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.frame.Desktop" ) ); - uno::Reference< frame::XDesktop > xDesktop( - m_xFactory->createInstance( aServiceName ), uno::UNO_QUERY ); - if ( xDesktop.is() ) - { - xDesktop->removeTerminateListener( - (frame::XTerminateListener*)this ); - } -} - -void DocumentHolder::DisconnectFrameDocument( sal_Bool bComplete ) -{ - try - { - uno::Reference< util::XModifyBroadcaster > xModifiable( m_xDocument, uno::UNO_QUERY_THROW ); - xModifiable->removeModifyListener( (util::XModifyListener*)this ); - } - catch( uno::Exception& ) - {} - - try - { - uno::Reference< util::XCloseBroadcaster > xBroadcaster( - m_xDocument, uno::UNO_QUERY_THROW ); - xBroadcaster->removeCloseListener( (util::XCloseListener*)this ); - } - catch( uno::Exception& ) - {} - - try - { - uno::Reference< util::XCloseBroadcaster > xBroadcaster( - m_xFrame, uno::UNO_QUERY_THROW ); - xBroadcaster->removeCloseListener( (util::XCloseListener*)this ); - } - catch( uno::Exception& ) - {} - - if ( bComplete ) - { - m_xFrame = uno::Reference< frame::XFrame>(); - m_pIDispatch = NULL; - m_xDocument = uno::Reference< frame::XModel >(); - } -} - -void DocumentHolder::CloseDocument() -{ - DisconnectFrameDocument(); - - uno::Reference< util::XCloseable > xCloseable( - m_xDocument, uno::UNO_QUERY ); - - if ( xCloseable.is() ) - { - try - { - xCloseable->close( sal_True ); - } - catch( uno::Exception& ) - {} - } - - m_pIDispatch = NULL; - m_xDocument = uno::Reference< frame::XModel >(); -} - - -void DocumentHolder::CloseFrame() -{ - try - { - uno::Reference< util::XCloseBroadcaster > xBroadcaster( - m_xFrame, uno::UNO_QUERY_THROW ); - xBroadcaster->removeCloseListener( (util::XCloseListener*)this ); - } - catch( uno::Exception& ) - {} - - uno::Reference<util::XCloseable> xCloseable( - m_xFrame,uno::UNO_QUERY); - if(xCloseable.is()) - try { - xCloseable->close(sal_True); - } - catch( const uno::Exception& ) { - } - else { - uno::Reference<lang::XComponent> xComp(m_xFrame,uno::UNO_QUERY); - if(xComp.is()) - xComp->dispose(); - } - - m_xFrame = uno::Reference< frame::XFrame >(); -} - -void DocumentHolder::SetDocument( const uno::Reference< frame::XModel >& xDoc, sal_Bool bLink ) -{ - if ( m_xDocument.is() ) - CloseDocument(); - - m_xDocument = xDoc; - m_bLink = bLink; - - uno::Reference< util::XCloseBroadcaster > xBroadcaster( - m_xDocument, uno::UNO_QUERY ); - - if ( xBroadcaster.is() ) - xBroadcaster->addCloseListener( (util::XCloseListener*)this ); - - if ( m_xDocument.is() && !m_bLink ) - { - // set the document mode to embedded - uno::Sequence< beans::PropertyValue > aSeq(1); - aSeq[0].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "SetEmbedded" )); - aSeq[0].Value <<= sal_True; - m_xDocument->attachResource(::rtl::OUString(),aSeq); - } -} - -sal_Bool DocumentHolder::ExecuteSuspendCloseFrame() -{ - if ( m_xFrame.is() && m_xFactory.is() ) - { - try - { - uno::Reference< frame::XController > xController = m_xFrame->getController(); - if ( xController.is() ) - { - if ( !xController->suspend( sal_True ) ) - return sal_False; - - FreeOffice(); - try - { - uno::Reference<util::XCloseable> xCloseable( m_xFrame, uno::UNO_QUERY ); - if ( xCloseable.is() ) - xCloseable->close(sal_True); - else - { - uno::Reference<lang::XComponent> xComp( m_xFrame, uno::UNO_QUERY_THROW ); - if( xComp.is() ) - xComp->dispose(); - } - } - catch( const util::CloseVetoException& ) - { - // should be called if the frame could not be closed - xController->suspend( sal_False ); - } - } - } - catch( uno::Exception& ) - { - } - - m_xFrame = uno::Reference< frame::XFrame >(); - } - - return sal_True; -} - -uno::Reference< frame::XFrame > DocumentHolder::DocumentFrame() -{ - if(! m_xFrame.is() ) - { - rtl::OUString aDesktopSrvNm( - RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.Desktop")); - - uno::Reference<frame::XDesktop> xDesktop( - m_xFactory->createInstance(aDesktopSrvNm), - uno::UNO_QUERY); - - uno::Reference<frame::XFrame> xFrame( - xDesktop,uno::UNO_QUERY); - - // the frame will be registered on desktop here, later when the document - // is loaded into the frame in ::show() method the terminate listener will be removed - // this is so only for outplace activation - if( xFrame.is() ) - m_xFrame = xFrame->findFrame( - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_blank")),0); - - uno::Reference< util::XCloseBroadcaster > xBroadcaster( - m_xFrame, uno::UNO_QUERY ); - - if ( xBroadcaster.is() ) - { - xBroadcaster->addCloseListener( (util::XCloseListener*)this ); - FreeOffice(); // the frame is part of the desktop - } - } - - if( m_xFrame.is() ) - { - // intercept - uno::Reference<frame::XDispatchProviderInterception> - xDPI(m_xFrame,uno::UNO_QUERY); - if(xDPI.is()) - xDPI->registerDispatchProviderInterceptor( CreateNewInterceptor() ); - } - - return m_xFrame; -} - - -uno::Reference< frame::XDispatchProviderInterceptor > DocumentHolder::CreateNewInterceptor() -{ - ::osl::MutexGuard aGuard( m_aMutex ); - - ClearInterceptorInternally(); - - uno::Reference< frame::XDispatchProviderInterceptor > xInterceptor( m_pInterceptor = new Interceptor( m_xOleAccess, this, m_bLink ) ); - m_xInterceptorLocker = xInterceptor; - return xInterceptor; -} - -void DocumentHolder::ClearInterceptorInternally() -{ - ::osl::MutexGuard aGuard( m_aMutex ); - uno::Reference< frame::XDispatchProviderInterceptor > xInterceptor( m_xInterceptorLocker ); - if ( xInterceptor.is() && m_pInterceptor ) - m_pInterceptor->DisconnectDocHolder(); - - m_xInterceptorLocker = uno::Reference< frame::XDispatchProviderInterceptor >(); - m_pInterceptor = 0; -} - -void DocumentHolder::ClearInterceptor() -{ - ::osl::MutexGuard aGuard( m_aMutex ); - m_xInterceptorLocker = uno::Reference< frame::XDispatchProviderInterceptor >(); - m_pInterceptor = 0; -} - - -void DocumentHolder::show() -{ - try - { - if(m_xFrame.is()) - { - m_xFrame->activate(); - uno::Reference<awt::XTopWindow> xTopWindow( - m_xFrame->getContainerWindow(),uno::UNO_QUERY); - if(xTopWindow.is()) - xTopWindow->toFront(); - } - else if( DocumentFrame().is() ) - { - LoadDocInFrame( sal_False ); - - // get rid of second closer if it is there - uno::Reference< beans::XPropertySet > xProps( m_xFrame, uno::UNO_QUERY ); - if ( xProps.is() ) - { - uno::Reference< frame::XLayoutManager > xLayoutManager; - xProps->getPropertyValue( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "LayoutManager" )) ) >>= xLayoutManager; - uno::Reference< beans::XPropertySet > xLMProps( xLayoutManager, uno::UNO_QUERY ); - if ( xLMProps.is() ) - { - xLMProps->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "MenuBarCloser" )), - uno::makeAny( uno::Reference< frame::XStatusListener >() ) ); - } - } - - if ( !m_bLink ) - { - try - { - uno::Reference< util::XModifyBroadcaster > xModifiable( m_xDocument, uno::UNO_QUERY_THROW ); - xModifiable->addModifyListener( (util::XModifyListener*)this ); - } - catch( uno::Exception& ) - {} - } - - if ( !m_bLink ) - setTitle(m_aDocumentNamePart); - } - } - catch( uno::Exception& ) - { - OSL_FAIL( "Can not show the frame!\n" ); - } - -} - -void DocumentHolder::resizeWin( const SIZEL& rNewSize ) -{ - LockedEmbedDocument_Impl aDocLock; - - if ( m_xOleAccess.is() ) - aDocLock = m_xOleAccess->GetEmbedDocument(); - - if ( m_xFrame.is() && aDocLock.GetEmbedDocument() ) - { - uno::Reference< awt::XWindow > xWindow( - m_xFrame->getContainerWindow(), uno::UNO_QUERY ); - uno::Reference< awt::XView > xView( xWindow, uno::UNO_QUERY ); - - if ( xWindow.is() && xView.is() ) - { - float fScale = 1; - xView->setZoom( fScale, fScale ); - - SIZEL aOldSize; - GetExtent( &aOldSize ); - - if ( aOldSize.cx != rNewSize.cx || aOldSize.cy != rNewSize.cy ) - { - HDC hdc = GetDC( NULL ); - SetMapMode( hdc, MM_HIMETRIC ); - - POINT aOldOffset; - aOldOffset.x = aOldSize.cx; - aOldOffset.y = aOldSize.cy; - BOOL bIsOk = LPtoDP( hdc, &aOldOffset, 1 ); - - POINT aNewOffset; - aNewOffset.x = rNewSize.cx; - aNewOffset.y = rNewSize.cy; - bIsOk = LPtoDP( hdc, &aNewOffset, 1 ); - - ReleaseDC( NULL, hdc ); - - awt::Rectangle aWinRect = xWindow->getPosSize(); - - sal_Int32 aWidthDelta = aWinRect.Width - aOldOffset.x; - sal_Int32 aHeightDelta = aWinRect.Height - aOldOffset.y; - - if ( aWidthDelta > 0 && aHeightDelta > 0 ) - xWindow->setPosSize(0, - 0, - aNewOffset.x + aWidthDelta, - aNewOffset.y + aHeightDelta, - awt::PosSize::SIZE ); - } - } - } -} - -void DocumentHolder::setTitle(const rtl::OUString& aDocumentName) -{ - if(m_xFrame.is()) - { - if(m_aFilterName.getLength() == 0) - { - rtl::OUString aFilterName; - uno::Sequence<beans::PropertyValue> aSeq; - if(m_xDocument.is()) - { - aSeq = - m_xDocument->getArgs(); - for(sal_Int32 j = 0; j < aSeq.getLength(); ++j) - { - if(aSeq[j].Name == - rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM("FilterName"))) - { - aSeq[j].Value >>= aFilterName; - break; - } - } - } - - if(aFilterName.getLength()) - { - uno::Reference<container::XNameAccess> xNameAccess( - m_xFactory->createInstance( - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( - "com.sun.star.document.FilterFactory"))), - uno::UNO_QUERY); - try { - if(xNameAccess.is() && - (xNameAccess->getByName(aFilterName) >>= aSeq)) - { - for(sal_Int32 j = 0; j < aSeq.getLength(); ++j) - if(aSeq[j].Name == - rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM("UIName"))) - { - aSeq[j].Value >>= m_aFilterName; - break; - } - } - } - catch(const uno::Exception& ) { - // nothing better to do here - m_aFilterName = aFilterName; - } - } - } - // set the title - uno::Reference<beans::XPropertySet> xPropSet( - m_xFrame,uno::UNO_QUERY); - if(xPropSet.is()) { - uno::Any aAny; - static const sal_Unicode u[] = { ' ','(',0 }; - static const sal_Unicode c[] = { ')',0 }; - rtl::OUString aTotalName(m_aFilterName); - aTotalName += rtl::OUString(u); - aTotalName += aDocumentName; - aTotalName += rtl::OUString(c); - aAny <<= aTotalName; - try { - xPropSet->setPropertyValue( - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Title")), - aAny); - } - catch( const uno::Exception& ) { - } - } - } - - m_aDocumentNamePart = aDocumentName; - - if(m_pInterceptor) - { - ::osl::ClearableMutexGuard aGuard( m_aMutex ); - - Interceptor* pTmpInter = NULL; - uno::Reference< frame::XDispatchProviderInterceptor > xLock( m_xInterceptorLocker ); - if ( xLock.is() && m_pInterceptor ) - pTmpInter = m_pInterceptor; - - aGuard.clear(); - - if ( pTmpInter ) - pTmpInter->generateFeatureStateEvent(); - } -} - - -void DocumentHolder::setContainerName(const rtl::OUString& aContainerName) -{ - m_aContainerName = aContainerName; -} - - -void DocumentHolder::hide() -{ - if(m_xFrame.is()) m_xFrame->deactivate(); - - //todo: sendadvise - // after hiding the window it is always allowed to InPlaceActivate it - m_bAllowInPlace = true; -} - -IDispatch* DocumentHolder::GetIDispatch() -{ - if ( !m_pIDispatch && m_xDocument.is() ) - { - const ::rtl::OUString aServiceName ( - RTL_CONSTASCII_USTRINGPARAM ( - "com.sun.star.bridge.OleBridgeSupplier2" ) ); - uno::Reference< bridge::XBridgeSupplier2 > xSupplier( - m_xFactory->createInstance( aServiceName ), uno::UNO_QUERY ); - - if ( xSupplier.is() ) - { - uno::Sequence< sal_Int8 > aProcId( 16 ); - rtl_getGlobalProcessId( (sal_uInt8*)aProcId.getArray() ); - - try { - uno::Any anyResult = xSupplier->createBridge( - uno::makeAny( m_xDocument ), - aProcId, - bridge::ModelDependent::UNO, - bridge::ModelDependent::OLE ); - - if ( anyResult.getValueTypeClass() == - getCppuType((sal_uInt32*) 0).getTypeClass() ) - { - VARIANT* pVariant = *(VARIANT**)anyResult.getValue(); - if ( pVariant->vt == VT_DISPATCH ) - m_pIDispatch = pVariant->pdispVal; - - VariantClear( pVariant ); - CoTaskMemFree( pVariant ); - } - } - catch ( uno::Exception& ) - {} - } - } - - return m_pIDispatch; -} - -HRESULT DocumentHolder::GetDocumentBorder( RECT *pRect ) -{ - if ( pRect && m_xDocument.is() ) - { - uno::Sequence< beans::PropertyValue > aArgs = m_xDocument->getArgs(); - for ( sal_Int32 nInd = 0; nInd < aArgs.getLength(); nInd++ ) - if ( aArgs[nInd].Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "DocumentBorder" ) ) ) - { - uno::Sequence< sal_Int32 > aRect; - if ( ( aArgs[nInd].Value >>= aRect ) && aRect.getLength() == 4 ) - { - pRect->left = aRect[0]; - pRect->top = aRect[1]; - pRect->right = aRect[2]; - pRect->bottom = aRect[3]; - - return S_OK; - } - - break; - } - } - - return E_FAIL; -} - -HRESULT DocumentHolder::SetExtent( const SIZEL *pSize ) -{ - if ( pSize ) - { - uno::Reference< embed::XVisualObject > xVisObj( m_xDocument, uno::UNO_QUERY ); - if ( xVisObj.is() ) - { - try - { - awt::Size aNewSize( pSize->cx, pSize->cy ); - - sal_Int32 aMapMode = xVisObj->getMapUnit( DVASPECT_CONTENT ); - - // TODO/LATER: in future UNO API should be used for the conversion, currently there is no - if ( aMapMode == embed::EmbedMapUnits::TWIP ) - { - // convertion from ONE_100TH_MM - aNewSize.Width = aNewSize.Width * 144 / 254; - aNewSize.Height = aNewSize.Height * 144 / 254; - } - - - xVisObj->setVisualAreaSize( DVASPECT_CONTENT, aNewSize ); - - return S_OK; - } - catch( uno::Exception& ) - {} - } - } - - return E_FAIL; -} - -HRESULT DocumentHolder::GetExtent( SIZEL *pSize ) -{ - if ( pSize ) - { - uno::Reference< embed::XVisualObject > xVisObj( m_xDocument, uno::UNO_QUERY ); - if ( xVisObj.is() ) - { - try - { - awt::Size aDocSize = xVisObj->getVisualAreaSize( DVASPECT_CONTENT ); - - sal_Int32 aMapMode = xVisObj->getMapUnit( DVASPECT_CONTENT ); - - // TODO/LATER: in future UNO API should be used for the conversion, currently there is no - if ( aMapMode == embed::EmbedMapUnits::TWIP ) - { - // convertion to ONE_100TH_MM - aDocSize.Width = aDocSize.Width * 254 / 144; - aDocSize.Height = aDocSize.Height * 254 / 144; - } - - pSize->cx = aDocSize.Width; - pSize->cy = aDocSize.Height; - - return S_OK; - } - catch( uno::Exception& ) - {} - } - } - - return E_FAIL; -} - - -HRESULT DocumentHolder::SetContRects(LPCRECT aRect) -{ - if(m_xContainerWindow.is()) { - RECT wi; - memset(&wi,0,sizeof(wi)); - if(m_pIOleIPFrame) { - m_pIOleIPFrame->GetBorder((LPRECT)&wi); - m_xContainerWindow->setPosSize( - 0,0, - wi.right - wi.left, - wi.bottom - wi.top, - awt::PosSize::POSSIZE); - } - else - m_xContainerWindow->setPosSize( - 0,0, - aRect->right - aRect->left, - aRect->bottom - aRect->top, - awt::PosSize::POSSIZE); - return NOERROR; - } - else { - return ERROR; - } -} - - -HRESULT DocumentHolder::SetObjectRects(LPCRECT aRect, LPCRECT aClip) -{ - ((LPRECT)aRect)->left -= m_aBorder.left; - ((LPRECT)aRect)->right += m_aBorder.right; - ((LPRECT)aRect)->top -= m_aBorder.top; - ((LPRECT)aRect)->bottom += m_aBorder.bottom; - ((LPRECT)aClip)->left -= m_aBorder.left; - ((LPRECT)aClip)->right += m_aBorder.right; - ((LPRECT)aClip)->top -= m_aBorder.top; - ((LPRECT)aClip)->bottom += m_aBorder.bottom; - - if(m_pCHatchWin) - m_pCHatchWin->RectsSet((LPRECT)aRect, (LPRECT)aClip); - if(m_xEditWindow.is()) { - m_xEditWindow->setVisible(false); - m_xEditWindow->setPosSize( - m_pCHatchWin ? HATCHWIN_BORDERWIDTHDEFAULT : 0, - m_pCHatchWin ? HATCHWIN_BORDERWIDTHDEFAULT : 0, - aRect->right - aRect->left, - aRect->bottom - aRect->top, - awt::PosSize::POSSIZE); - m_xEditWindow->setVisible(true); - } - return NOERROR; -} - - -::com::sun::star::uno::Reference< - ::com::sun::star::awt::XWindow> SAL_CALL -DocumentHolder::getContainerWindow( -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - if(m_xContainerWindow.is()) - return m_xContainerWindow; - - uno::Reference<awt::XWindow> xWin(0); - - static const ::rtl::OUString aToolkitServiceName( - RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.awt.Toolkit" ) ); - uno::Reference<awt::XSystemChildFactory> xToolkit( - m_xFactory->createInstance(aToolkitServiceName ),uno::UNO_QUERY); - - if(xToolkit.is() && m_pIOleIPFrame) { - HWND hWnd; - m_pIOleIPFrame->GetWindow(&hWnd); - - uno::Sequence<sal_Int8> aProcessIdent(16); - rtl_getGlobalProcessId((sal_uInt8*)aProcessIdent.getArray()); - - uno::Any aAny; - aAny <<= sal_Int32(hWnd); - xWin = uno::Reference<awt::XWindow>( - xToolkit->createSystemChild( - aAny, - aProcessIdent, - lang::SystemDependent::SYSTEM_WIN32), - uno::UNO_QUERY); - - RECT wi; - memset(&wi,0,sizeof(wi)); - if(xWin.is() && m_pIOleIPFrame->GetBorder((LPRECT)&wi) == NOERROR) { - xWin->setVisible(true); - xWin->setPosSize( - 0,0, - wi.right-wi.left, - wi.bottom - wi.top, - awt::PosSize::POSSIZE); - - uno::Reference<awt::XSystemDependentWindowPeer> xSysWin( - xWin,uno::UNO_QUERY); - if(xSysWin.is()) { - aAny = xSysWin->getWindowHandle( - aProcessIdent,lang::SystemDependent::SYSTEM_WIN32); - sal_Int32 tmp; - if( aAny >>= tmp ) - SetContainerWindowHandle((HWND) tmp); - } - } - } - - m_xContainerWindow= xWin; - return xWin; -} - - - -sal_Bool SAL_CALL -DocumentHolder::requestDockingAreaSpace( - const ::com::sun::star::awt::Rectangle& RequestedSpace -) - throw( - ::com::sun::star::uno::RuntimeException - ) -{ - if(m_bOnDeactivate) - return sal_True; - - BORDERWIDTHS bw; - SetRect((LPRECT)&bw, - RequestedSpace.X,RequestedSpace.Y, - RequestedSpace.Width,RequestedSpace.Height); - if( m_pIOleIPFrame ) - return m_pIOleIPFrame->RequestBorderSpace(&bw) == NOERROR ; - else - return sal_Bool(false); -} - - -void SAL_CALL -DocumentHolder::setDockingAreaSpace( - const ::com::sun::star::awt::Rectangle& BorderSpace -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - if(m_bOnDeactivate) - return; - - BORDERWIDTHS bw; - SetRect((LPRECT)&bw, - BorderSpace.X,BorderSpace.Y, - BorderSpace.Width,BorderSpace.Height); - if( m_pIOleIPFrame ) { - RECT aRect; - GetClientRect(m_hWndxWinCont,&aRect); - HRGN hrgn1 = CreateRectRgn( - 0,0, - aRect.right,BorderSpace.Y); - HRGN hrgn2 = CreateRectRgn(aRect.right-BorderSpace.Width,0,aRect.right,aRect.bottom); - CombineRgn(hrgn1,hrgn1,hrgn2,RGN_OR); - DeleteObject(hrgn2); - hrgn2 = CreateRectRgn(0,aRect.bottom-BorderSpace.Height,aRect.right,aRect.bottom); - CombineRgn(hrgn1,hrgn1,hrgn2,RGN_OR); - DeleteObject(hrgn2); - hrgn2 = CreateRectRgn(0,0,BorderSpace.X,aRect.bottom); - CombineRgn(hrgn1,hrgn1,hrgn2,RGN_OR); - DeleteObject(hrgn2); - - SetWindowRgn(m_hWndxWinCont,hrgn1,true); - // not:: DeleteObject(hrgn1); - m_pIOleIPFrame->SetBorderSpace(&bw); - } -} - - -void SAL_CALL -DocumentHolder::disposing( - const com::sun::star::lang::EventObject& aSource -) - throw( uno::RuntimeException ) -{ - if ( m_xDocument.is() && m_xDocument == aSource.Source ) - { - m_pIDispatch = NULL; - m_xDocument = uno::Reference< frame::XModel >(); - } - - if( m_xFrame.is() && m_xFrame == aSource.Source ) - m_xFrame = uno::Reference< frame::XFrame >(); -} - - -void SAL_CALL -DocumentHolder::queryClosing( - const lang::EventObject& aSource, - sal_Bool /*bGetsOwnership*/ -) - throw( - util::CloseVetoException - ) -{ - if ( !m_bLink - && ( m_xDocument.is() && m_xDocument == aSource.Source || m_xFrame.is() && m_xFrame == aSource.Source ) ) - throw util::CloseVetoException(); -} - - -void SAL_CALL -DocumentHolder::notifyClosing( - const lang::EventObject& aSource ) - throw( uno::RuntimeException ) -{ - try - { - uno::Reference< util::XCloseBroadcaster > xEventBroadcaster( - aSource.Source, uno::UNO_QUERY_THROW ); - xEventBroadcaster->removeCloseListener( (util::XCloseListener*)this ); - } - catch( uno::Exception& ) - {} - - if ( m_xDocument.is() && m_xDocument == aSource.Source ) - { - // can happen only in case of links - m_pIDispatch = NULL; - m_xDocument = uno::Reference< frame::XModel >(); - m_xFrame = uno::Reference< frame::XFrame >(); - - LockedEmbedDocument_Impl aDocLock = m_xOleAccess->GetEmbedDocument(); - if ( aDocLock.GetEmbedDocument() ) - aDocLock.GetEmbedDocument()->OLENotifyClosing(); - } - else if( m_xFrame.is() && m_xFrame == aSource.Source ) - m_xFrame = uno::Reference< frame::XFrame >(); -} - -void SAL_CALL -DocumentHolder::queryTermination( - const lang::EventObject& /*aSource*/ -) - throw( - frame::TerminationVetoException - ) -{ - if ( m_xDocument.is() ) - throw frame::TerminationVetoException(); -} - -void SAL_CALL -DocumentHolder::notifyTermination( - const lang::EventObject& aSource -) - throw( uno::RuntimeException ) -{ - OSL_ENSURE( !m_xDocument.is(), "Just a disaster..." ); - uno::Reference< frame::XDesktop > xDesktop( - aSource.Source, uno::UNO_QUERY ); - - if ( xDesktop.is() ) - xDesktop->removeTerminateListener( (frame::XTerminateListener*)this ); -} - - - -void SAL_CALL DocumentHolder::modified( const lang::EventObject& /*aEvent*/ ) - throw (uno::RuntimeException) -{ - if ( m_xOleAccess.is() ) - { - LockedEmbedDocument_Impl aDocLock = m_xOleAccess->GetEmbedDocument(); - if ( aDocLock.GetEmbedDocument() ) - aDocLock.GetEmbedDocument()->notify(); - } -} - -// 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: */ diff --git a/embedserv/source/embed/ed_idataobj.cxx b/embedserv/source/embed/ed_idataobj.cxx deleted file mode 100644 index 73e1ed629..000000000 --- a/embedserv/source/embed/ed_idataobj.cxx +++ /dev/null @@ -1,327 +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. - * - ************************************************************************/ -#if defined(_MSC_VER) && (_MSC_VER > 1310) -#pragma warning(disable : 4917 4555) -#endif - -// actually this workaround should be in presys.h! -//#define UINT64 USE_WIN_UINT64 -//#define INT64 USE_WIN_INT64 -//#define UINT32 USE_WIN_UINT32 -//#define INT32 USE_WIN_INT32 - -#include "embeddoc.hxx" - -//#undef UINT64 -//#undef INT64 -//#undef UINT32 -//#undef INT32 - - -#include <com/sun/star/uno/Any.h> -#include <com/sun/star/uno/Exception.hpp> -#include <com/sun/star/datatransfer/XTransferable.hpp> - - -#include <osl/thread.h> - -using namespace ::com::sun::star; - -//=============================================================================== -// EmbedDocument_Impl -//=============================================================================== - -sal_uInt64 EmbedDocument_Impl::getMetaFileHandle_Impl( sal_Bool isEnhMeta ) -{ - sal_uInt64 pResult = NULL; - - uno::Reference< datatransfer::XTransferable > xTransferable( m_pDocHolder->GetDocument(), uno::UNO_QUERY ); - if ( xTransferable.is() ) - { - uno::Sequence< sal_Int8 > aMetaBuffer; - datatransfer::DataFlavor aFlavor; - - if ( isEnhMeta ) - { - aFlavor.MimeType = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( - "application/x-openoffice-emf;windows_formatname=\"Image EMF\"" ) ); - aFlavor.HumanPresentableName = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Enhanced Windows MetaFile" ) ); - } - else - { - aFlavor.MimeType = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( - "application/x-openoffice-wmf;windows_formatname=\"Image WMF\"" ) ); - aFlavor.HumanPresentableName = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Windows GDIMetaFile" ) ); - } - - aFlavor.DataType = getCppuType( (const sal_uInt64*) 0 ); - - uno::Any aAny = xTransferable->getTransferData( aFlavor ); - aAny >>= pResult; - } - - return pResult; -} - -//------------------------------------------------------------------------------- -// IDataObject - -STDMETHODIMP EmbedDocument_Impl::GetData( FORMATETC * pFormatetc, STGMEDIUM * pMedium ) -{ - if ( !pFormatetc ) - return DV_E_FORMATETC; - - if ( !pMedium ) - return STG_E_MEDIUMFULL; - - if ( pFormatetc->dwAspect == DVASPECT_THUMBNAIL - || pFormatetc->dwAspect == DVASPECT_ICON - || pFormatetc->dwAspect == DVASPECT_DOCPRINT ) - return DV_E_DVASPECT; - - if ( pFormatetc->cfFormat == CF_ENHMETAFILE ) - { - if ( !( pFormatetc->tymed & TYMED_ENHMF ) ) - return DV_E_TYMED; - - HENHMETAFILE hMeta = reinterpret_cast<HENHMETAFILE>( getMetaFileHandle_Impl( sal_True ) ); - - if ( hMeta ) - { - pMedium->tymed = TYMED_ENHMF; - pMedium->hEnhMetaFile = hMeta; - pMedium->pUnkForRelease = NULL; - - return S_OK; - } - - return STG_E_MEDIUMFULL; - } - else if ( pFormatetc->cfFormat == CF_METAFILEPICT ) - { - if ( !( pFormatetc->tymed & TYMED_MFPICT ) ) - return DV_E_TYMED; - - HGLOBAL hMeta = reinterpret_cast<HGLOBAL>( getMetaFileHandle_Impl( sal_False ) ); - - if ( hMeta ) - { - pMedium->tymed = TYMED_MFPICT; - pMedium->hMetaFilePict = hMeta; - pMedium->pUnkForRelease = NULL; - - return S_OK; - } - - return STG_E_MEDIUMFULL; - } - else - { - CLIPFORMAT cf_embSource = (CLIPFORMAT)RegisterClipboardFormatA( "Embed Source" ); - CLIPFORMAT cf_embObj = (CLIPFORMAT)RegisterClipboardFormatA( "Embedded Object" ); - if ( pFormatetc->cfFormat == cf_embSource || pFormatetc->cfFormat == cf_embObj ) - { - if ( !( pFormatetc->tymed & TYMED_ISTORAGE ) ) - return DV_E_TYMED; - - CComPtr< IStorage > pNewStg; - HRESULT hr = StgCreateDocfile( NULL, STGM_CREATE | STGM_READWRITE | STGM_DELETEONRELEASE, 0, &pNewStg ); - if ( FAILED( hr ) || !pNewStg ) return STG_E_MEDIUMFULL; - - hr = SaveTo_Impl( pNewStg ); - if ( FAILED( hr ) ) return STG_E_MEDIUMFULL; - - pMedium->tymed = TYMED_ISTORAGE; - pMedium->pstg = pNewStg; - pMedium->pstg->AddRef(); - pMedium->pUnkForRelease = ( IUnknown* )pNewStg; - - return S_OK; - } - } - - return DV_E_FORMATETC; -} - -STDMETHODIMP EmbedDocument_Impl::GetDataHere( FORMATETC * pFormatetc, STGMEDIUM * pMedium ) -{ - if ( !pFormatetc ) - return DV_E_FORMATETC; - - if ( !pMedium ) - return STG_E_MEDIUMFULL; - - if ( pFormatetc->dwAspect == DVASPECT_THUMBNAIL - || pFormatetc->dwAspect == DVASPECT_ICON - || pFormatetc->dwAspect == DVASPECT_DOCPRINT ) - return DV_E_DVASPECT; - - CLIPFORMAT cf_embSource = (CLIPFORMAT)RegisterClipboardFormatA( "Embed Source" ); - CLIPFORMAT cf_embObj = (CLIPFORMAT)RegisterClipboardFormatA( "Embedded Object" ); - - if ( pFormatetc->cfFormat == cf_embSource || pFormatetc->cfFormat == cf_embObj ) - { - if ( !( pFormatetc->tymed & TYMED_ISTORAGE ) ) - return DV_E_TYMED; - - if ( !pMedium->pstg ) return STG_E_MEDIUMFULL; - - HRESULT hr = SaveTo_Impl( pMedium->pstg ); - if ( FAILED( hr ) ) return STG_E_MEDIUMFULL; - - pMedium->tymed = TYMED_ISTORAGE; - pMedium->pUnkForRelease = NULL; - - return S_OK; - } - - return DV_E_FORMATETC; -} - -STDMETHODIMP EmbedDocument_Impl::QueryGetData( FORMATETC * pFormatetc ) -{ - if ( pFormatetc ) - { - if ( pFormatetc->dwAspect == DVASPECT_THUMBNAIL - || pFormatetc->dwAspect == DVASPECT_ICON - || pFormatetc->dwAspect == DVASPECT_DOCPRINT ) - return DV_E_DVASPECT; - - if ( pFormatetc->cfFormat == CF_ENHMETAFILE ) - { - if ( !( pFormatetc->tymed & TYMED_ENHMF ) ) - return DV_E_TYMED; - - return S_OK; - } - else if ( pFormatetc->cfFormat == CF_METAFILEPICT ) - { - if ( !( pFormatetc->tymed & TYMED_MFPICT ) ) - return DV_E_TYMED; - - return S_OK; - } - else - { - CLIPFORMAT cf_embSource = (CLIPFORMAT)RegisterClipboardFormatA( "Embed Source" ); - CLIPFORMAT cf_embObj = (CLIPFORMAT)RegisterClipboardFormatA( "Embedded Object" ); - if ( pFormatetc->cfFormat == cf_embSource || pFormatetc->cfFormat == cf_embObj ) - { - if ( !( pFormatetc->tymed & TYMED_ISTORAGE ) ) - return DV_E_TYMED; - - return S_OK; - } - } - } - - return DV_E_FORMATETC; - -} - -STDMETHODIMP EmbedDocument_Impl::GetCanonicalFormatEtc( FORMATETC * pFormatetcIn, FORMATETC * pFormatetcOut ) -{ - if ( !pFormatetcIn || !pFormatetcOut ) - return DV_E_FORMATETC; - - pFormatetcOut->ptd = NULL; - pFormatetcOut->cfFormat = pFormatetcIn->cfFormat; - pFormatetcOut->dwAspect = DVASPECT_CONTENT; - - if ( pFormatetcIn->cfFormat == CF_ENHMETAFILE ) - { - pFormatetcOut->tymed = TYMED_ENHMF; - return S_OK; - } - else if ( pFormatetcIn->cfFormat == CF_METAFILEPICT ) - { - pFormatetcOut->tymed = TYMED_MFPICT; - return S_OK; - } - else - { - CLIPFORMAT cf_embSource = (CLIPFORMAT)RegisterClipboardFormatA( "Embed Source" ); - CLIPFORMAT cf_embObj = (CLIPFORMAT)RegisterClipboardFormatA( "Embedded Object" ); - if ( pFormatetcIn->cfFormat == cf_embSource || pFormatetcIn->cfFormat == cf_embObj ) - { - pFormatetcOut->tymed = TYMED_ISTORAGE; - return S_OK; - } - } - - return DV_E_FORMATETC; -} - -STDMETHODIMP EmbedDocument_Impl::SetData( FORMATETC * /*pFormatetc*/, STGMEDIUM * /*pMedium*/, BOOL /*fRelease*/ ) -{ - return E_NOTIMPL; -} - -STDMETHODIMP EmbedDocument_Impl::EnumFormatEtc( DWORD dwDirection, IEnumFORMATETC ** /*ppFormatetc*/ ) -{ - if ( dwDirection == DATADIR_GET ) - return OLE_S_USEREG; - - return E_NOTIMPL; -} - -STDMETHODIMP EmbedDocument_Impl::DAdvise( FORMATETC * pFormatetc, DWORD advf, IAdviseSink * pAdvSink, DWORD * pdwConnection ) -{ - if ( !m_pDAdviseHolder ) - if ( !SUCCEEDED( CreateDataAdviseHolder( &m_pDAdviseHolder ) ) || !m_pDAdviseHolder ) - return E_OUTOFMEMORY; - - return m_pDAdviseHolder->Advise( (IDataObject*)this, pFormatetc, advf, pAdvSink, pdwConnection ); -} - -STDMETHODIMP EmbedDocument_Impl::DUnadvise( DWORD dwConnection ) -{ - if ( !m_pDAdviseHolder ) - if ( !SUCCEEDED( CreateDataAdviseHolder( &m_pDAdviseHolder ) ) || !m_pDAdviseHolder ) - return E_OUTOFMEMORY; - - return m_pDAdviseHolder->Unadvise( dwConnection ); -} - -STDMETHODIMP EmbedDocument_Impl::EnumDAdvise( IEnumSTATDATA ** ppenumAdvise ) -{ - if ( !m_pDAdviseHolder ) - if ( !SUCCEEDED( CreateDataAdviseHolder( &m_pDAdviseHolder ) ) || !m_pDAdviseHolder ) - return E_OUTOFMEMORY; - - return m_pDAdviseHolder->EnumAdvise( ppenumAdvise ); -} - -// 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: */ diff --git a/embedserv/source/embed/ed_iinplace.cxx b/embedserv/source/embed/ed_iinplace.cxx deleted file mode 100644 index 7e696463f..000000000 --- a/embedserv/source/embed/ed_iinplace.cxx +++ /dev/null @@ -1,103 +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 "embeddoc.hxx" -#include <osl/diagnose.h> - - -STDMETHODIMP EmbedDocument_Impl::GetWindow(HWND *hWnd) -{ - OSL_ENSURE(m_pDocHolder,"no document for inplace activation"); - - *hWnd = m_pDocHolder->GetTopMostWinHandle(); - if(*hWnd != NULL) - return NOERROR; - else - return ERROR; -} - -STDMETHODIMP EmbedDocument_Impl::ContextSensitiveHelp(BOOL) -{ - return NOERROR; -} - -STDMETHODIMP EmbedDocument_Impl::InPlaceDeactivate(void) -{ - // no locking is used since the OLE must use the same thread always - if ( m_bIsInVerbHandling ) - return E_UNEXPECTED; - - BooleanGuard_Impl aGuard( m_bIsInVerbHandling ); - - m_pDocHolder->InPlaceDeactivate(); - - // the inplace object needs the notification after the storing ( on deactivating ) - // if it happens before the storing the replacement might not be updated - notify(); - - return NOERROR; -} - -STDMETHODIMP EmbedDocument_Impl::UIDeactivate(void) -{ - // no locking is used since the OLE must use the same thread always - if ( m_bIsInVerbHandling ) - return E_UNEXPECTED; - - BooleanGuard_Impl aGuard( m_bIsInVerbHandling ); - - - m_pDocHolder->UIDeactivate(); - - // the inplace object needs the notification after the storing ( on deactivating ) - // if it happens before the storing the replacement might not be updated - notify(); - - return NOERROR; -} - -STDMETHODIMP EmbedDocument_Impl::SetObjectRects(LPCRECT aRect, LPCRECT aClip) -{ - OSL_ENSURE(m_pDocHolder,"no document for inplace activation"); - - return m_pDocHolder->SetObjectRects(aRect,aClip); -} - -STDMETHODIMP EmbedDocument_Impl::ReactivateAndUndo(void) -{ - return E_NOTIMPL; -} - -// 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: */ diff --git a/embedserv/source/embed/ed_ioleobject.cxx b/embedserv/source/embed/ed_ioleobject.cxx deleted file mode 100644 index 4910dca3d..000000000 --- a/embedserv/source/embed/ed_ioleobject.cxx +++ /dev/null @@ -1,506 +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 "embeddoc.hxx" -#include <osl/diagnose.h> -#include <com/sun/star/frame/XController.hpp> -#include <com/sun/star/beans/PropertyValue.hpp> - - -using namespace ::com::sun::star; - - -extern ::rtl::OUString getFilterNameFromGUID_Impl( GUID* ); - -//------------------------------------------------------------------------------- -// IOleObject - - -STDMETHODIMP EmbedDocument_Impl::SetClientSite( IOleClientSite* pSite ) -{ - m_pClientSite = pSite; - return S_OK; -} - -STDMETHODIMP EmbedDocument_Impl::GetClientSite( IOleClientSite** pSite ) -{ - *pSite = m_pClientSite; - return S_OK; -} - -STDMETHODIMP EmbedDocument_Impl::SetHostNames( LPCOLESTR szContainerApp, LPCOLESTR szContainerObj ) -{ - // the code should be ignored for links - if ( !m_aFileName.getLength() ) - { - m_pDocHolder->setTitle( - rtl::OUString( - (sal_Unicode*)szContainerObj)); - m_pDocHolder->setContainerName( - rtl::OUString( - (sal_Unicode*)szContainerApp)); - } - - return S_OK; -} - -STDMETHODIMP EmbedDocument_Impl::Close( DWORD dwSaveOption ) -{ - HRESULT hr = S_OK; - - if ( m_pDocHolder->HasFrame() ) - { - if ( dwSaveOption == 2 && m_aFileName.getLength() ) - { - // ask the user about saving - if ( m_pDocHolder->ExecuteSuspendCloseFrame() ) - { - m_pDocHolder->CloseDocument(); - return S_OK; - } - else - return OLE_E_PROMPTSAVECANCELLED; - } - - if ( dwSaveOption != 1 ) - hr = SaveObject(); // ADVF_DATAONSTOP); - - m_pDocHolder->CloseFrame(); - OLENotifyDeactivation(); - } - - m_pDocHolder->FreeOffice(); - m_pDocHolder->CloseDocument(); - - OLENotifyClosing(); - - return hr; -} - - -HRESULT EmbedDocument_Impl::OLENotifyClosing() -{ - HRESULT hr = S_OK; - - AdviseSinkHashMap aAHM(m_aAdviseHashMap); - - for ( AdviseSinkHashMapIterator iAdvise = aAHM.begin(); - iAdvise != aAHM.end(); iAdvise++ ) - { - if ( iAdvise->second ) - iAdvise->second->OnClose(); - } - - return hr; - -} - -STDMETHODIMP EmbedDocument_Impl::SetMoniker( DWORD /*dwWhichMoniker*/, IMoniker * /*pmk*/ ) -{ - return E_NOTIMPL; -} - -STDMETHODIMP EmbedDocument_Impl::GetMoniker( DWORD /*dwAssign*/, DWORD /*dwWhichMoniker*/, IMoniker ** /*ppmk*/ ) -{ - return E_NOTIMPL; -} - -STDMETHODIMP EmbedDocument_Impl::InitFromData( IDataObject * /*pDataObject*/, BOOL /*fCreation*/, DWORD /*dwReserved*/ ) -{ - return E_NOTIMPL; -} - -STDMETHODIMP EmbedDocument_Impl::GetClipboardData( DWORD /*dwReserved*/, IDataObject ** /*ppDataObject*/ ) -{ - return E_NOTIMPL; -} - -/** - * Well, this is a not so very inefficient way to deliver - * - */ - -STDMETHODIMP EmbedDocument_Impl::DoVerb( - LONG iVerb, - LPMSG, - IOleClientSite *pActiveSite, - LONG, - HWND, - LPCRECT ) -{ - // no locking is used since the OLE must use the same thread always - if ( m_bIsInVerbHandling ) - return OLEOBJ_S_CANNOT_DOVERB_NOW; - - // an object can not handle any Verbs in Hands off mode - if ( m_pMasterStorage == NULL || m_pOwnStream == NULL ) - return OLE_E_CANT_BINDTOSOURCE; - - - BooleanGuard_Impl aGuard( m_bIsInVerbHandling ); - - if ( iVerb == OLEIVERB_PRIMARY ) - { - if ( m_aFileName.getLength() ) - { - // that should be a link - iVerb = OLEIVERB_OPEN; - } - else - iVerb = OLEIVERB_SHOW; - } - - try - { - switch(iVerb) { - case OLEIVERB_DISCARDUNDOSTATE: - // free any undostate? - break; - case OLEIVERB_INPLACEACTIVATE: - OSL_ENSURE(m_pDocHolder,"no document for inplace activation"); - - return m_pDocHolder->InPlaceActivate(pActiveSite,FALSE); - break; - case OLEIVERB_UIACTIVATE: - OSL_ENSURE(m_pDocHolder,"no document for inplace activation"); - - return m_pDocHolder->InPlaceActivate(pActiveSite,TRUE); - break; - case OLEIVERB_PRIMARY: - case OLEIVERB_SHOW: - OSL_ENSURE(m_pDocHolder,"no document for inplace activation"); - - if(m_pDocHolder->isActive()) - return NOERROR; //Already active - - if(SUCCEEDED( - m_pDocHolder->InPlaceActivate( - pActiveSite,TRUE))) - return NOERROR; - - // intended fall trough - case OLEIVERB_OPEN: - OSL_ENSURE(m_pDocHolder,"no document to open"); - - // the commented code could be usefull in case - // outer window would be resized depending from inner one - // RECTL aEmbArea; - // m_pDocHolder->GetVisArea( &aEmbArea ); - // m_pDocHolder->show(); - // m_pDocHolder->SetVisArea( &aEmbArea ); - - if(m_pDocHolder->isActive()) - { - m_pDocHolder->InPlaceDeactivate(); - m_pDocHolder->DisableInplaceActivation(true); - } - - SIZEL aEmbSize; - m_pDocHolder->GetExtent( &aEmbSize ); - m_pDocHolder->show(); - m_pDocHolder->resizeWin( aEmbSize ); - - if ( m_pClientSite ) - m_pClientSite->OnShowWindow( TRUE ); - - notify(); - break; - case OLEIVERB_HIDE: - OSL_ENSURE(m_pDocHolder,"no document to hide"); - - if(m_pDocHolder->isActive()) - m_pDocHolder->InPlaceDeactivate(); - else { - m_pDocHolder->hide(); - - if( m_pClientSite ) - m_pClientSite->OnShowWindow(FALSE); - } - break; - default: - break; - } - } - catch( uno::Exception& ) - { - return OLEOBJ_S_CANNOT_DOVERB_NOW; - } - - return NOERROR; -} - - - -STDMETHODIMP EmbedDocument_Impl::EnumVerbs( IEnumOLEVERB ** /*ppEnumOleVerb*/ ) -{ - return OLE_S_USEREG; -} - -STDMETHODIMP EmbedDocument_Impl::Update() -{ - return S_OK; -// HRESULT hr = CACHE_E_NOCACHE_UPDATED; -// return hr; -} - -STDMETHODIMP EmbedDocument_Impl::IsUpToDate() -{ - return S_OK; -} - -STDMETHODIMP EmbedDocument_Impl::GetUserClassID( CLSID *pClsid ) -{ - return GetClassID( pClsid ); -} - -STDMETHODIMP EmbedDocument_Impl::GetUserType( DWORD /*dwFormOfTypeUe*/, LPOLESTR * /*pszUserType*/ ) -{ - return OLE_S_USEREG; -} - -STDMETHODIMP EmbedDocument_Impl::SetExtent( DWORD /*dwDrawAspect*/, SIZEL *psizel ) -{ - if ( !psizel ) - return E_FAIL; - - m_pDocHolder->SetExtent( psizel ); - - return S_OK; -} - -STDMETHODIMP EmbedDocument_Impl::GetExtent( DWORD /*dwDrawAspect*/, SIZEL * psizel ) -{ - if ( !psizel ) - return E_INVALIDARG; - - if ( FAILED( m_pDocHolder->GetExtent( psizel ) ) ) - { - // return default values - psizel->cx = 500; - psizel->cy = 500; - } - - return S_OK; -} - -STDMETHODIMP EmbedDocument_Impl::Advise( IAdviseSink *pAdvSink, DWORD *pdwConnection ) -{ - if ( m_nAdviseNum == 0xFFFFFFFF ) - return E_OUTOFMEMORY; - - pAdvSink->AddRef(); - m_aAdviseHashMap.insert( ::std::pair< DWORD, IAdviseSink* >( m_nAdviseNum, pAdvSink ) ); - *pdwConnection = m_nAdviseNum++; - - return S_OK; -} - -STDMETHODIMP EmbedDocument_Impl::Unadvise( DWORD dwConnection ) -{ - AdviseSinkHashMapIterator iAdvise = m_aAdviseHashMap.find( dwConnection ); - if ( iAdvise != m_aAdviseHashMap.end() ) - { - iAdvise->second->Release(); - m_aAdviseHashMap.erase( iAdvise ); - } - else - return OLE_E_NOCONNECTION; - - return S_OK; -} - -STDMETHODIMP EmbedDocument_Impl::EnumAdvise( IEnumSTATDATA ** /*ppenumAdvise*/ ) -{ - return E_NOTIMPL; -} - -STDMETHODIMP EmbedDocument_Impl::GetMiscStatus( DWORD /*dwAspect*/, DWORD * /*pdwStatus*/ ) -{ - return OLE_S_USEREG; -} - -STDMETHODIMP EmbedDocument_Impl::SetColorScheme( LOGPALETTE * /*pLogpal*/ ) -{ - return E_NOTIMPL; -} - -//------------------------------------------------------------------------------- -// IDispatch - -STDMETHODIMP EmbedDocument_Impl::GetTypeInfoCount( unsigned int FAR* pctinfo ) -{ - if ( m_pDocHolder->GetIDispatch() ) - return m_pDocHolder->GetIDispatch()->GetTypeInfoCount( pctinfo ); - - return E_NOTIMPL; -} - -STDMETHODIMP EmbedDocument_Impl::GetTypeInfo( unsigned int iTInfo, LCID lcid, ITypeInfo FAR* FAR* ppTInfo ) -{ - if ( m_pDocHolder->GetIDispatch() ) - return m_pDocHolder->GetIDispatch()->GetTypeInfo( iTInfo, lcid, ppTInfo ); - - return DISP_E_BADINDEX; // the only error that can be returned -} - -STDMETHODIMP EmbedDocument_Impl::GetIDsOfNames( REFIID riid, - OLECHAR FAR* FAR* rgszNames, - unsigned int cNames, - LCID lcid, - DISPID FAR* rgDispId ) -{ - if ( m_pDocHolder->GetIDispatch() ) - return m_pDocHolder->GetIDispatch()->GetIDsOfNames( riid, rgszNames, cNames, lcid, rgDispId ); - - for ( unsigned int ind = 0; ind < cNames; ind++ ) - rgDispId[ind] = DISPID_UNKNOWN; - - return DISP_E_UNKNOWNNAME; -} - -STDMETHODIMP EmbedDocument_Impl::Invoke( DISPID dispIdMember, - REFIID riid, - LCID lcid, - WORD wFlags, - DISPPARAMS FAR* pDispParams, - VARIANT FAR* pVarResult, - EXCEPINFO FAR* pExcepInfo, - unsigned int FAR* puArgErr ) -{ - if ( m_pDocHolder->GetIDispatch() ) - return m_pDocHolder->GetIDispatch()->Invoke( dispIdMember, - riid, - lcid, - wFlags, - pDispParams, - pVarResult, - pExcepInfo, - puArgErr ); - - return DISP_E_MEMBERNOTFOUND; -} - -//------------------------------------------------------------------------------- -// IExternalConnection - -DWORD STDMETHODCALLTYPE EmbedDocument_Impl::AddConnection( DWORD , DWORD ) -{ - return AddRef(); -} - -DWORD STDMETHODCALLTYPE EmbedDocument_Impl::ReleaseConnection( DWORD , DWORD , BOOL ) -{ - return Release(); -} - -// C++ - methods - -HRESULT EmbedDocument_Impl::SaveObject() -{ - HRESULT hr = S_OK; - - if(m_pClientSite) { - hr = m_pClientSite->SaveObject(); - - for ( AdviseSinkHashMapIterator iAdvise = - m_aAdviseHashMap.begin(); - iAdvise != m_aAdviseHashMap.end(); - iAdvise++ ) - if ( iAdvise->second ) - iAdvise->second->OnSave( ); - } - else if ( m_aFileName.getLength() && IsDirty() == S_OK ) - { - ::rtl::OUString aPreservFileName = m_aFileName; - - // in case of links the containers does not provide client site sometimes - hr = Save( (LPCOLESTR)NULL, FALSE ); // triggers saving to the link location - SaveCompleted( (LPCOLESTR)aPreservFileName.getStr() ); - } - - notify( false ); - - return hr; -} - - -HRESULT EmbedDocument_Impl::ShowObject() -{ - HRESULT hr = S_OK; - - if(m_pClientSite) - hr = m_pClientSite->ShowObject(); - - return hr; -} - - -void EmbedDocument_Impl::notify( bool bDataChanged ) -{ - for ( AdviseSinkHashMapIterator iAdvise = - m_aAdviseHashMap.begin(); - iAdvise != m_aAdviseHashMap.end(); - iAdvise++ ) - if ( iAdvise->second ) - iAdvise->second->OnViewChange( DVASPECT_CONTENT, -1 ); - - if ( m_pDAdviseHolder && bDataChanged ) - m_pDAdviseHolder->SendOnDataChange( (IDataObject*)this, 0, 0 ); -} - -void EmbedDocument_Impl::Deactivate() -{ - HRESULT hr = S_OK; - - if ( m_pDocHolder->HasFrame() ) - { - hr = SaveObject(); - m_pDocHolder->CloseFrame(); - OLENotifyDeactivation(); - } -} - -HRESULT EmbedDocument_Impl::OLENotifyDeactivation() -{ - HRESULT hr = S_OK; - - if ( m_pClientSite ) - hr = m_pClientSite->OnShowWindow( FALSE ); - - return hr; - -} - -// 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: */ diff --git a/embedserv/source/embed/ed_ipersiststr.cxx b/embedserv/source/embed/ed_ipersiststr.cxx deleted file mode 100644 index 7a762f0ed..000000000 --- a/embedserv/source/embed/ed_ipersiststr.cxx +++ /dev/null @@ -1,1020 +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. - * - ************************************************************************/ -#if defined(_MSC_VER) && (_MSC_VER > 1310) -#pragma warning(disable : 4917 4555) -#endif - -#include "embeddoc.hxx" -#include <com/sun/star/uno/Any.h> -#include <com/sun/star/uno/Exception.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/lang/XComponent.hpp> -#include <com/sun/star/io/XInputStream.hpp> -#include <com/sun/star/io/XOutputStream.hpp> -#include <com/sun/star/io/XSeekable.hpp> -#include <com/sun/star/frame/XModel.hpp> -#include <com/sun/star/frame/XLoadable.hpp> -#include <com/sun/star/util/XModifiable.hpp> -#include <com/sun/star/frame/XStorable.hpp> -#include <com/sun/star/frame/XComponentLoader.hpp> -#include <com/sun/star/util/XUrlTransformer.hpp> - - -#include <osl/mutex.hxx> -#include <osl/diagnose.h> - -#include <string.h> - -#define EXT_STREAM_LENGTH 16 - -using namespace ::com::sun::star; - -extern ::rtl::OUString getStorageTypeFromGUID_Impl( GUID* guid ); -extern ::rtl::OUString getServiceNameFromGUID_Impl( GUID* ); -extern ::rtl::OUString getFilterNameFromGUID_Impl( GUID* ); -// extern CLIPFORMAT getClipFormatFromGUID_Impl( GUID* ); -::rtl::OUString getTestFileURLFromGUID_Impl( GUID* guid ); - -const ::rtl::OUString aOfficeEmbedStreamName( RTL_CONSTASCII_USTRINGPARAM ( "package_stream" ) ); -const ::rtl::OUString aExtentStreamName( RTL_CONSTASCII_USTRINGPARAM ( "properties_stream" ) ); - -uno::Reference< io::XInputStream > createTempXInStreamFromIStream( - uno::Reference< lang::XMultiServiceFactory > xFactory, - IStream *pStream ) -{ - uno::Reference< io::XInputStream > xResult; - - if ( !pStream ) - return xResult; - - const ::rtl::OUString aServiceName ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.io.TempFile" ) ); - uno::Reference < io::XOutputStream > xTempOut = uno::Reference < io::XOutputStream > ( - xFactory->createInstance ( aServiceName ), - uno::UNO_QUERY ); - if ( xTempOut.is() ) - { - ULARGE_INTEGER nNewPos; - LARGE_INTEGER aZero = { 0L, 0L }; - HRESULT hr = pStream->Seek( aZero, STREAM_SEEK_SET, &nNewPos ); - if ( FAILED( hr ) ) return xResult; - - STATSTG aStat; - hr = pStream->Stat( &aStat, STATFLAG_NONAME ); - if ( FAILED( hr ) ) return xResult; - - sal_uInt32 nSize = (sal_uInt32)aStat.cbSize.QuadPart; - sal_uInt32 nCopied = 0; - uno::Sequence< sal_Int8 > aBuffer( nConstBufferSize ); - try - { - sal_uInt32 nRead = 0; - do - { - pStream->Read( (void*)aBuffer.getArray(), nConstBufferSize, &nRead ); - - if ( nRead < nConstBufferSize ) - aBuffer.realloc( nRead ); - - xTempOut->writeBytes( aBuffer ); - nCopied += nRead; - } while( nRead == nConstBufferSize ); - - if ( nCopied == nSize ) - { - uno::Reference < io::XSeekable > xTempSeek ( xTempOut, uno::UNO_QUERY ); - if ( xTempSeek.is() ) - { - xTempSeek->seek ( 0 ); - xResult = uno::Reference< io::XInputStream >( xTempOut, uno::UNO_QUERY ); - } - } - } - catch( uno::Exception& ) - { - } - } - - return xResult; -} - -HRESULT copyXTempOutToIStream( uno::Reference< io::XOutputStream > xTempOut, IStream* pStream ) -{ - if ( !xTempOut.is() || !pStream ) - return E_FAIL; - - uno::Reference < io::XSeekable > xTempSeek ( xTempOut, uno::UNO_QUERY ); - if ( !xTempSeek.is() ) - return E_FAIL; - - xTempSeek->seek ( 0 ); - - uno::Reference< io::XInputStream > xTempIn ( xTempOut, uno::UNO_QUERY ); - if ( !xTempSeek.is() ) - return E_FAIL; - - // Seek to zero and truncate the stream - ULARGE_INTEGER nNewPos; - LARGE_INTEGER aZero = { 0L, 0L }; - HRESULT hr = pStream->Seek( aZero, STREAM_SEEK_SET, &nNewPos ); - if ( FAILED( hr ) ) return E_FAIL; - ULARGE_INTEGER aUZero = { 0L, 0L }; - hr = pStream->SetSize( aUZero ); - if ( FAILED( hr ) ) return E_FAIL; - - uno::Sequence< sal_Int8 > aBuffer( nConstBufferSize ); - sal_uInt32 nReadBytes = 0; - - do - { - try { - nReadBytes = xTempIn->readBytes( aBuffer, nConstBufferSize ); - } - catch( uno::Exception& ) - { - return E_FAIL; - } - - sal_uInt32 nWritten = 0; - HRESULT hr = pStream->Write( (void*)aBuffer.getArray(), nReadBytes, &nWritten ); - if ( !SUCCEEDED( hr ) || nWritten != nReadBytes ) - return E_FAIL; - - } while( nReadBytes == nConstBufferSize ); - - return S_OK; -} - - -//=============================================================================== -// EmbedDocument_Impl -//=============================================================================== - -EmbedDocument_Impl::EmbedDocument_Impl( const uno::Reference< lang::XMultiServiceFactory >& xFactory, const GUID* guid ) -: m_refCount( 0L ) -, m_xFactory( xFactory ) -, m_guid( *guid ) -, m_bIsDirty( sal_False ) -, m_nAdviseNum( 0 ) -, m_bIsInVerbHandling( sal_False ) -//, m_bLoadedFromFile( sal_False ) -{ - m_xOwnAccess = new EmbeddedDocumentInstanceAccess_Impl( this ); - m_pDocHolder = new DocumentHolder( xFactory, m_xOwnAccess ); - m_pDocHolder->acquire(); -} - -EmbedDocument_Impl::~EmbedDocument_Impl() -{ - m_pDocHolder->FreeOffice(); - - if ( m_pDocHolder->HasFrame() && m_pDocHolder->IsLink() ) - { - // a link with frame should be only disconnected, not closed - m_pDocHolder->DisconnectFrameDocument( sal_True ); - } - else - { - m_pDocHolder->CloseDocument(); - m_pDocHolder->CloseFrame(); - } - - m_pDocHolder->release(); -} - -uno::Sequence< beans::PropertyValue > EmbedDocument_Impl::fillArgsForLoading_Impl( uno::Reference< io::XInputStream > xStream, DWORD /*nStreamMode*/, LPCOLESTR pFilePath ) -{ - uno::Sequence< beans::PropertyValue > aArgs( 3 ); - - sal_Int32 nInd = 0; // must not be bigger than the preset size - aArgs[nInd].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "FilterName" ) ); - aArgs[nInd++].Value <<= getFilterNameFromGUID_Impl( &m_guid ); - - if ( xStream.is() ) - { - aArgs[nInd].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "InputStream" ) ); - aArgs[nInd++].Value <<= xStream; - aArgs[nInd].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "URL" ) ); - aArgs[nInd++].Value <<= ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "private:stream" ) ); - } - else - { - aArgs[nInd].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "URL" ) ); - - rtl::OUString sDocUrl; - if ( pFilePath ) - { - ::rtl::OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.util.URLTransformer" ) ); - uno::Reference< util::XURLTransformer > aTransformer( m_xFactory->createInstance( aServiceName ), - uno::UNO_QUERY ); - if ( aTransformer.is() ) - { - util::URL aURL; - - aURL.Complete = ::rtl::OUString( reinterpret_cast<const sal_Unicode*>(pFilePath) ); - - if ( aTransformer->parseSmart( aURL, ::rtl::OUString() ) ) - sDocUrl = aURL.Complete; - } - } - - aArgs[nInd++].Value <<= sDocUrl; - } - - aArgs.realloc( nInd ); - - // aArgs[].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "ReadOnly" ) ); - // aArgs[].Value <<= sal_False; //( ( nStreamMode & ( STGM_READWRITE | STGM_WRITE ) ) ? sal_True : sal_False ); - - return aArgs; -} - -uno::Sequence< beans::PropertyValue > EmbedDocument_Impl::fillArgsForStoring_Impl( uno::Reference< io::XOutputStream > xStream) -{ - uno::Sequence< beans::PropertyValue > aArgs( xStream.is() ? 2 : 1 ); - - aArgs[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "FilterName" ) ); - aArgs[0].Value <<= getFilterNameFromGUID_Impl( &m_guid ); - - if ( xStream.is() ) - { - aArgs[1].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "OutputStream" ) ); - aArgs[1].Value <<= xStream; - } - - return aArgs; -} - -HRESULT EmbedDocument_Impl::SaveTo_Impl( IStorage* pStg ) -{ - if ( !pStg || pStg == m_pMasterStorage ) - return E_FAIL; - - // for saveto operation the master storage - // should not enter NoScribble mode - CComPtr< IStream > pOrigOwn = m_pOwnStream; - CComPtr< IStream > pOrigExt = m_pExtStream; - HRESULT hr = Save( pStg, sal_False ); - pStg->Commit( STGC_ONLYIFCURRENT ); - m_pOwnStream = pOrigOwn; - m_pExtStream = pOrigExt; - - return hr; -} - -//------------------------------------------------------------------------------- -// IUnknown - -STDMETHODIMP EmbedDocument_Impl::QueryInterface( REFIID riid, void FAR* FAR* ppv ) -{ - if(IsEqualIID(riid, IID_IUnknown)) - { - AddRef(); - *ppv = (IUnknown*) (IPersistStorage*) this; - return S_OK; - } - else if (IsEqualIID(riid, IID_IPersist)) - { - AddRef(); - *ppv = (IPersist*) (IPersistStorage*) this; - return S_OK; - } - else if (IsEqualIID(riid, IID_IExternalConnection)) - { - AddRef(); - *ppv = (IExternalConnection*) this; - return S_OK; - } - else if (IsEqualIID(riid, IID_IPersistStorage)) - { - AddRef(); - *ppv = (IPersistStorage*) this; - return S_OK; - } - else if (IsEqualIID(riid, IID_IDataObject)) - { - AddRef(); - *ppv = (IDataObject*) this; - return S_OK; - } - else if (IsEqualIID(riid, IID_IOleObject)) - { - AddRef(); - *ppv = (IOleObject*) this; - return S_OK; - } - else if (IsEqualIID(riid, IID_IOleWindow)) - { - AddRef(); - *ppv = (IOleWindow*) this; - return S_OK; - } - else if (IsEqualIID(riid, IID_IOleInPlaceObject)) - { - AddRef(); - *ppv = (IOleInPlaceObject*) this; - return S_OK; - } - else if (IsEqualIID(riid, IID_IPersistFile)) - { - AddRef(); - *ppv = (IPersistFile*) this; - return S_OK; - } - else if (IsEqualIID(riid, IID_IDispatch)) - { - AddRef(); - *ppv = (IDispatch*) this; - return S_OK; - } - - *ppv = NULL; - return ResultFromScode(E_NOINTERFACE); -} - -STDMETHODIMP_(ULONG) EmbedDocument_Impl::AddRef() -{ - return osl_incrementInterlockedCount( &m_refCount); -} - -STDMETHODIMP_(ULONG) EmbedDocument_Impl::Release() -{ - // if there is a time when the last reference is destructed, that means that only internal pointers are alive - // after the following call either the refcount is increased or the pointers are empty - if ( m_refCount == 1 ) - m_xOwnAccess->ClearEmbedDocument(); - - sal_Int32 nCount = osl_decrementInterlockedCount( &m_refCount ); - if ( nCount == 0 ) - delete this; - return nCount; -} - -//------------------------------------------------------------------------------- -// IPersist - -STDMETHODIMP EmbedDocument_Impl::GetClassID( CLSID* pClassId ) -{ - *pClassId = *&m_guid; - return S_OK; -} - -//------------------------------------------------------------------------------- -// IPersistStorage - -STDMETHODIMP EmbedDocument_Impl::IsDirty() -{ - // the link modified state is controlled by the document - if ( m_bIsDirty && !m_aFileName.getLength() ) - return S_OK; - - uno::Reference< util::XModifiable > xMod( m_pDocHolder->GetDocument(), uno::UNO_QUERY ); - if ( xMod.is() ) - return xMod->isModified() ? S_OK : S_FALSE; - return S_FALSE; -} - -STDMETHODIMP EmbedDocument_Impl::InitNew( IStorage *pStg ) -{ - HRESULT hr = CO_E_ALREADYINITIALIZED; - - if ( !m_pDocHolder->GetDocument().is() ) - { - - STATSTG aStat; - hr = pStg->Stat( &aStat, STATFLAG_NONAME ); - if ( FAILED( hr ) ) return E_FAIL; - - DWORD nStreamMode = aStat.grfMode; - - hr = E_FAIL; - if ( m_xFactory.is() && pStg ) - { - uno::Reference< frame::XModel > aDocument( - m_xFactory->createInstance( getServiceNameFromGUID_Impl( &m_guid ) ), - uno::UNO_QUERY ); - if ( aDocument.is() ) - { - m_pDocHolder->SetDocument( aDocument ); - - uno::Reference< frame::XLoadable > xLoadable( m_pDocHolder->GetDocument(), uno::UNO_QUERY ); - if( xLoadable.is() ) - { - try - { - xLoadable->initNew(); - // xLoadable->load( fillArgsForLoading_Impl( uno::Reference< io::XInputStream >(), nStreamMode ) ); - hr = S_OK; - } - catch( uno::Exception& ) - { - } - } - - if ( hr == S_OK ) - { - ::rtl::OUString aCurType = getStorageTypeFromGUID_Impl( &m_guid ); // ??? - CLIPFORMAT cf = (CLIPFORMAT)RegisterClipboardFormatA( "Embedded Object" ); - hr = WriteFmtUserTypeStg( pStg, - cf, // ??? - reinterpret_cast<LPWSTR>(( sal_Unicode* )aCurType.getStr()) ); - - if ( hr == S_OK ) - { - hr = pStg->CreateStream( reinterpret_cast<LPCWSTR>(aOfficeEmbedStreamName.getStr()), - STGM_CREATE | ( nStreamMode & 0x73 ), - 0, - 0, - &m_pOwnStream ); - - if ( hr == S_OK && m_pOwnStream ) - { - hr = pStg->CreateStream( reinterpret_cast<LPCWSTR>(aExtentStreamName.getStr()), - STGM_CREATE | ( nStreamMode & 0x73 ), - 0, - 0, - &m_pExtStream ); - - if ( hr == S_OK && m_pExtStream ) - { - - m_pMasterStorage = pStg; - m_bIsDirty = sal_True; - } - else - hr = E_FAIL; - } - else - hr = E_FAIL; - } - else - hr = E_FAIL; - } - - if ( hr != S_OK ) - m_pDocHolder->CloseDocument(); - } - } - } - - return hr; -} - -STDMETHODIMP EmbedDocument_Impl::Load( IStorage *pStg ) -{ - if ( m_pDocHolder->GetDocument().is() ) - return CO_E_ALREADYINITIALIZED; - - if ( !m_xFactory.is() || !pStg ) - return E_FAIL; - - HRESULT hr = E_FAIL; - - STATSTG aStat; - hr = pStg->Stat( &aStat, STATFLAG_NONAME ); - if ( FAILED( hr ) ) return E_FAIL; - - DWORD nStreamMode = aStat.grfMode; - hr = pStg->OpenStream( reinterpret_cast<LPCWSTR>(aOfficeEmbedStreamName.getStr()), - 0, - nStreamMode & 0x73, - 0, - &m_pOwnStream ); - if ( !m_pOwnStream ) hr = E_FAIL; - - if ( SUCCEEDED( hr ) ) - { - hr = pStg->OpenStream( reinterpret_cast<LPCWSTR>(aExtentStreamName.getStr()), - 0, - nStreamMode & 0x73, - 0, - &m_pExtStream ); - if ( !m_pExtStream ) hr = E_FAIL; - } - - // RECTL aRectToSet; - SIZEL aSizeToSet; - if ( SUCCEEDED( hr ) ) - { - ULARGE_INTEGER nNewPos; - LARGE_INTEGER aZero = { 0L, 0L }; - hr = m_pExtStream->Seek( aZero, STREAM_SEEK_SET, &nNewPos ); - if ( SUCCEEDED( hr ) ) - { - sal_uInt32 nRead; - sal_Int8 aInf[EXT_STREAM_LENGTH]; - hr = m_pExtStream->Read( (void*)aInf, EXT_STREAM_LENGTH, &nRead ); - if ( nRead != EXT_STREAM_LENGTH ) hr = E_FAIL; - - if ( SUCCEEDED( hr ) ) - { - // aRectToSet.left = *((sal_Int32*)aInf); - // aRectToSet.top = *((sal_Int32*)&aInf[4]); - // aRectToSet.right = *((sal_Int32*)&aInf[8]); - // aRectToSet.bottom = *((sal_Int32*)&aInf[12]); - aSizeToSet.cx = *((sal_Int32*)&aInf[8]) - *((sal_Int32*)aInf); - aSizeToSet.cy = *((sal_Int32*)&aInf[12]) - *((sal_Int32*)&aInf[4]); - } - } - } - - if ( SUCCEEDED( hr ) ) - { - hr = E_FAIL; - - uno::Reference < io::XInputStream > xTempIn = createTempXInStreamFromIStream( m_xFactory, m_pOwnStream ); - if ( xTempIn.is() ) - { - uno::Reference< frame::XModel > aDocument( - m_xFactory->createInstance( getServiceNameFromGUID_Impl( &m_guid ) ), - uno::UNO_QUERY ); - if ( aDocument.is() ) - { - m_pDocHolder->SetDocument( aDocument ); - - uno::Reference< frame::XLoadable > xLoadable( m_pDocHolder->GetDocument(), uno::UNO_QUERY ); - if( xLoadable.is() ) - { - try - { - xLoadable->load( fillArgsForLoading_Impl( xTempIn, nStreamMode ) ); - m_pMasterStorage = pStg; - hr = m_pDocHolder->SetExtent( &aSizeToSet ); - // hr = m_pDocHolder->SetVisArea( &aRectToSet ); - } - catch( uno::Exception& ) - { - } - } - - if ( FAILED( hr ) ) - m_pDocHolder->CloseDocument(); - } - } - } - - if ( FAILED( hr ) ) - { - m_pOwnStream = CComPtr< IStream >(); - m_pExtStream = CComPtr< IStream >(); - hr = pStg->DestroyElement( reinterpret_cast<LPCWSTR>(aOfficeEmbedStreamName.getStr()) ); - hr = pStg->DestroyElement( reinterpret_cast<LPCWSTR>(aExtentStreamName.getStr()) ); - - OSL_ENSURE( SUCCEEDED( hr ), "Can not destroy created stream!\n" ); - if ( FAILED( hr ) ) - hr = E_FAIL; - } - - return hr; -} - -STDMETHODIMP EmbedDocument_Impl::Save( IStorage *pStgSave, BOOL fSameAsLoad ) -{ - if ( !m_pDocHolder->GetDocument().is() || !m_xFactory.is() || !pStgSave || !m_pOwnStream || !m_pExtStream ) - return E_FAIL; - - CComPtr< IStream > pTargetStream; - CComPtr< IStream > pNewExtStream; - - if ( !fSameAsLoad && pStgSave != m_pMasterStorage ) - { - OSL_ENSURE( m_pMasterStorage, "How could the document be initialized without storage!??\n" ); - HRESULT hr = m_pMasterStorage->CopyTo( NULL, NULL, NULL, pStgSave ); - if ( FAILED( hr ) ) return E_FAIL; - - STATSTG aStat; - hr = pStgSave->Stat( &aStat, STATFLAG_NONAME ); - if ( FAILED( hr ) ) return E_FAIL; - - DWORD nStreamMode = aStat.grfMode; - hr = pStgSave->CreateStream( reinterpret_cast<LPCWSTR>(aOfficeEmbedStreamName.getStr()), - STGM_CREATE | ( nStreamMode & 0x73 ), - 0, - 0, - &pTargetStream ); - if ( FAILED( hr ) || !pTargetStream ) return E_FAIL; - - hr = pStgSave->CreateStream( reinterpret_cast<LPCWSTR>(aExtentStreamName.getStr()), - STGM_CREATE | ( nStreamMode & 0x73 ), - 0, - 0, - &pNewExtStream ); - if ( FAILED( hr ) || !pNewExtStream ) return E_FAIL; - } - else - { - pTargetStream = m_pOwnStream; - pNewExtStream = m_pExtStream; - } - - HRESULT hr = E_FAIL; - - const ::rtl::OUString aServiceName ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.io.TempFile" ) ); - uno::Reference < io::XOutputStream > xTempOut = uno::Reference < io::XOutputStream > ( - m_xFactory->createInstance ( aServiceName ), - uno::UNO_QUERY ); - - if ( xTempOut.is() ) - { - uno::Reference< frame::XStorable > xStorable( m_pDocHolder->GetDocument(), uno::UNO_QUERY ); - if( xStorable.is() ) - { - try - { - xStorable->storeToURL( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "private:stream" ) ), - fillArgsForStoring_Impl( xTempOut ) ); - hr = copyXTempOutToIStream( xTempOut, pTargetStream ); - if ( SUCCEEDED( hr ) ) - { - // no need to truncate the stream, the size of the stream is always the same - ULARGE_INTEGER nNewPos; - LARGE_INTEGER aZero = { 0L, 0L }; - hr = pNewExtStream->Seek( aZero, STREAM_SEEK_SET, &nNewPos ); - if ( SUCCEEDED( hr ) ) - { - SIZEL aSize; - hr = m_pDocHolder->GetExtent( &aSize ); - - if ( SUCCEEDED( hr ) ) - { - sal_uInt32 nWritten; - sal_Int8 aInf[EXT_STREAM_LENGTH]; - *((sal_Int32*)aInf) = 0; - *((sal_Int32*)&aInf[4]) = 0; - *((sal_Int32*)&aInf[8]) = aSize.cx; - *((sal_Int32*)&aInf[12]) = aSize.cy; - - hr = pNewExtStream->Write( (void*)aInf, EXT_STREAM_LENGTH, &nWritten ); - if ( nWritten != EXT_STREAM_LENGTH ) hr = E_FAIL; - - if ( SUCCEEDED( hr ) ) - { - m_pOwnStream = CComPtr< IStream >(); - m_pExtStream = CComPtr< IStream >(); - if ( fSameAsLoad || pStgSave == m_pMasterStorage ) - { - uno::Reference< util::XModifiable > xMod( m_pDocHolder->GetDocument(), uno::UNO_QUERY ); - if ( xMod.is() ) - xMod->setModified( sal_False ); - m_bIsDirty = sal_False; - } - } - } - } - } - } - catch( uno::Exception& ) - { - } - } - } - - return hr; -} - -STDMETHODIMP EmbedDocument_Impl::SaveCompleted( IStorage *pStgNew ) -{ - // m_pOwnStream == NULL && m_pMasterStorage != NULL means the object is in NoScribble mode - // m_pOwnStream == NULL && m_pMasterStorage == NULL means the object is in HandsOff mode - - if ( m_pOwnStream || m_pExtStream ) - return E_UNEXPECTED; - - if ( !m_pMasterStorage && !pStgNew ) - return E_INVALIDARG; - - if ( pStgNew ) - m_pMasterStorage = pStgNew; - - STATSTG aStat; - HRESULT hr = m_pMasterStorage->Stat( &aStat, STATFLAG_NONAME ); - if ( FAILED( hr ) ) return E_OUTOFMEMORY; - - DWORD nStreamMode = aStat.grfMode; - hr = m_pMasterStorage->OpenStream( reinterpret_cast<LPCWSTR>(aOfficeEmbedStreamName.getStr()), - 0, - nStreamMode & 0x73, - 0, - &m_pOwnStream ); - if ( FAILED( hr ) || !m_pOwnStream ) return E_OUTOFMEMORY; - - hr = m_pMasterStorage->OpenStream( reinterpret_cast<LPCWSTR>(aExtentStreamName.getStr()), - 0, - nStreamMode & 0x73, - 0, - &m_pExtStream ); - if ( FAILED( hr ) || !m_pExtStream ) return E_OUTOFMEMORY; - - sal_Bool bModified = sal_False; - uno::Reference< util::XModifiable > xMod( m_pDocHolder->GetDocument(), uno::UNO_QUERY ); - if ( xMod.is() ) - bModified = xMod->isModified(); - - for ( AdviseSinkHashMapIterator iAdvise = m_aAdviseHashMap.begin(); iAdvise != m_aAdviseHashMap.end(); iAdvise++ ) - { - if ( iAdvise->second ) - iAdvise->second->OnSave(); - } - - if ( xMod.is() ) - bModified = xMod->isModified(); - - return S_OK; -} - -STDMETHODIMP EmbedDocument_Impl::HandsOffStorage() -{ - m_pMasterStorage = CComPtr< IStorage >(); - m_pOwnStream = CComPtr< IStream >(); - m_pExtStream = CComPtr< IStream >(); - - return S_OK; -} - -//------------------------------------------------------------------------------- -// IPersistFile - -STDMETHODIMP EmbedDocument_Impl::Load( LPCOLESTR pszFileName, DWORD /*dwMode*/ ) -{ - if ( m_pDocHolder->GetDocument().is() ) - return CO_E_ALREADYINITIALIZED; - - if ( !m_xFactory.is() ) - return E_FAIL; - - DWORD nStreamMode = STGM_CREATE | STGM_READWRITE | STGM_DELETEONRELEASE | STGM_SHARE_EXCLUSIVE; - HRESULT hr = StgCreateDocfile( NULL, - nStreamMode , - 0, - &m_pMasterStorage ); - - if ( FAILED( hr ) || !m_pMasterStorage ) return E_FAIL; - - ::rtl::OUString aCurType = getServiceNameFromGUID_Impl( &m_guid ); // ??? - CLIPFORMAT cf = (CLIPFORMAT)RegisterClipboardFormatA( "Embedded Object" ); - hr = WriteFmtUserTypeStg( m_pMasterStorage, - cf, // ??? - reinterpret_cast<LPWSTR>(( sal_Unicode* )aCurType.getStr()) ); - if ( FAILED( hr ) ) return E_FAIL; - - hr = m_pMasterStorage->SetClass( m_guid ); - if ( FAILED( hr ) ) return E_FAIL; - - hr = m_pMasterStorage->CreateStream( reinterpret_cast<LPCWSTR>(aOfficeEmbedStreamName.getStr()), - STGM_CREATE | ( nStreamMode & 0x73 ), - 0, - 0, - &m_pOwnStream ); - if ( FAILED( hr ) || !m_pOwnStream ) return E_FAIL; - - hr = m_pMasterStorage->CreateStream( reinterpret_cast<LPCWSTR>(aExtentStreamName.getStr()), - STGM_CREATE | ( nStreamMode & 0x73 ), - 0, - 0, - &m_pExtStream ); - if ( FAILED( hr ) || !m_pExtStream ) return E_FAIL; - - - uno::Reference< frame::XModel > aDocument( - m_xFactory->createInstance( getServiceNameFromGUID_Impl( &m_guid ) ), - uno::UNO_QUERY ); - if ( aDocument.is() ) - { - m_pDocHolder->SetDocument( aDocument, sal_True ); - - uno::Reference< frame::XLoadable > xLoadable( m_pDocHolder->GetDocument(), uno::UNO_QUERY ); - if( xLoadable.is() ) - { - try - { - xLoadable->load( fillArgsForLoading_Impl( uno::Reference< io::XInputStream >(), - STGM_READWRITE, - pszFileName ) ); - hr = S_OK; - - m_aFileName = ::rtl::OUString( reinterpret_cast<const sal_Unicode*>(pszFileName) ); - } - catch( uno::Exception& ) - { - } - } - - if ( hr == S_OK ) - { - ::rtl::OUString aCurType = getServiceNameFromGUID_Impl( &m_guid ); // ??? - CLIPFORMAT cf = (CLIPFORMAT)RegisterClipboardFormatA( "Embedded Object" ); - hr = WriteFmtUserTypeStg( m_pMasterStorage, - cf, // ??? - reinterpret_cast<LPWSTR>(( sal_Unicode* )aCurType.getStr()) ); - - if ( SUCCEEDED( hr ) ) - { - // no need to truncate the stream, the size of the stream is always the same - ULARGE_INTEGER nNewPos; - LARGE_INTEGER aZero = { 0L, 0L }; - hr = m_pExtStream->Seek( aZero, STREAM_SEEK_SET, &nNewPos ); - if ( SUCCEEDED( hr ) ) - { - SIZEL aSize; - hr = m_pDocHolder->GetExtent( &aSize ); - - if ( SUCCEEDED( hr ) ) - { - sal_uInt32 nWritten; - sal_Int8 aInf[EXT_STREAM_LENGTH]; - *((sal_Int32*)aInf) = 0; - *((sal_Int32*)&aInf[4]) = 0; - *((sal_Int32*)&aInf[8]) = aSize.cx; - *((sal_Int32*)&aInf[12]) = aSize.cy; - - hr = m_pExtStream->Write( (void*)aInf, EXT_STREAM_LENGTH, &nWritten ); - if ( nWritten != EXT_STREAM_LENGTH ) hr = E_FAIL; - } - } - } - - if ( SUCCEEDED( hr ) ) - m_bIsDirty = sal_True; - else - hr = E_FAIL; - } - - if ( FAILED( hr ) ) - { - m_pDocHolder->CloseDocument(); - m_pOwnStream = NULL; - m_pExtStream = NULL; - m_pMasterStorage = NULL; - } - } - - return hr; -} - -STDMETHODIMP EmbedDocument_Impl::Save( LPCOLESTR pszFileName, BOOL fRemember ) -{ - if ( !m_pDocHolder->GetDocument().is() || !m_xFactory.is() ) - return E_FAIL; - - HRESULT hr = E_FAIL; - - // TODO/LATER: currently there is no hands off state implemented - try - { - uno::Reference< frame::XStorable > xStorable( m_pDocHolder->GetDocument(), uno::UNO_QUERY_THROW ); - - if ( !pszFileName ) - xStorable->store(); - else - { - util::URL aURL; - aURL.Complete = ::rtl::OUString( reinterpret_cast<const sal_Unicode*>( pszFileName ) ); - - ::rtl::OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.util.URLTransformer" ) ); - uno::Reference< util::XURLTransformer > aTransformer( m_xFactory->createInstance( aServiceName ), - uno::UNO_QUERY_THROW ); - - if ( aTransformer->parseSmart( aURL, ::rtl::OUString() ) && aURL.Complete.getLength() ) - { - if ( fRemember ) - { - xStorable->storeAsURL( aURL.Complete, fillArgsForStoring_Impl( uno::Reference< io::XOutputStream >() ) ); - m_aFileName = aURL.Complete; - } - else - xStorable->storeToURL( aURL.Complete, fillArgsForStoring_Impl( uno::Reference< io::XOutputStream >() ) ); - } - } - - hr = S_OK; - } - catch( uno::Exception& ) - { - } - - return hr; -} - -STDMETHODIMP EmbedDocument_Impl::SaveCompleted( LPCOLESTR pszFileName ) -{ - // the different file name would mean error here - m_aFileName = ::rtl::OUString( reinterpret_cast<const sal_Unicode*>(pszFileName) ); - return S_OK; -} - -STDMETHODIMP EmbedDocument_Impl::GetCurFile( LPOLESTR *ppszFileName ) -{ - CComPtr<IMalloc> pMalloc; - - HRESULT hr = CoGetMalloc( 1, &pMalloc ); - if ( FAILED( hr ) || !pMalloc ) return E_FAIL; - - *ppszFileName = (LPOLESTR)( pMalloc->Alloc( sizeof( sal_Unicode ) * ( m_aFileName.getLength() + 1 ) ) ); - wcsncpy( *ppszFileName, reinterpret_cast<LPCWSTR>(m_aFileName.getStr()), m_aFileName.getLength() + 1 ); - - return m_aFileName.getLength() ? S_OK : S_FALSE; -} - -// =============================================== - -LockedEmbedDocument_Impl EmbeddedDocumentInstanceAccess_Impl::GetEmbedDocument() -{ - ::osl::MutexGuard aGuard( m_aMutex ); - return LockedEmbedDocument_Impl( m_pEmbedDocument ); -} - -void EmbeddedDocumentInstanceAccess_Impl::ClearEmbedDocument() -{ - ::osl::MutexGuard aGuard( m_aMutex ); - m_pEmbedDocument = NULL; -} - -// =============================================== - -LockedEmbedDocument_Impl::LockedEmbedDocument_Impl() -: m_pEmbedDocument( NULL ) -{} - -LockedEmbedDocument_Impl::LockedEmbedDocument_Impl( EmbedDocument_Impl* pEmbedDocument ) -: m_pEmbedDocument( pEmbedDocument ) -{ - if ( m_pEmbedDocument ) - m_pEmbedDocument->AddRef(); -} - -LockedEmbedDocument_Impl::LockedEmbedDocument_Impl( const LockedEmbedDocument_Impl& aDocLock ) -: m_pEmbedDocument( aDocLock.m_pEmbedDocument ) -{ - if ( m_pEmbedDocument ) - m_pEmbedDocument->AddRef(); -} - -LockedEmbedDocument_Impl& LockedEmbedDocument_Impl::operator=( const LockedEmbedDocument_Impl& aDocLock ) -{ - if ( m_pEmbedDocument ) - m_pEmbedDocument->Release(); - - m_pEmbedDocument = aDocLock.m_pEmbedDocument; - if ( m_pEmbedDocument ) - m_pEmbedDocument->AddRef(); - - return *this; -} - -LockedEmbedDocument_Impl::~LockedEmbedDocument_Impl() -{ - if ( m_pEmbedDocument ) - m_pEmbedDocument->Release(); -} - -void LockedEmbedDocument_Impl::ExecuteMethod( sal_Int16 nId ) -{ - if ( m_pEmbedDocument ) - { - if ( nId == OLESERV_SAVEOBJECT ) - m_pEmbedDocument->SaveObject(); - else if ( nId == OLESERV_CLOSE ) - m_pEmbedDocument->Close( 0 ); - else if ( nId == OLESERV_NOTIFY ) - m_pEmbedDocument->notify(); - else if ( nId == OLESERV_NOTIFYCLOSING ) - m_pEmbedDocument->OLENotifyClosing(); - else if ( nId == OLESERV_SHOWOBJECT ) - m_pEmbedDocument->ShowObject(); - else if ( nId == OLESERV_DEACTIVATE ) - m_pEmbedDocument->Deactivate(); - } -} - -// 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: */ diff --git a/embedserv/source/embed/esdll.cxx b/embedserv/source/embed/esdll.cxx deleted file mode 100644 index 582a3dcba..000000000 --- a/embedserv/source/embed/esdll.cxx +++ /dev/null @@ -1,94 +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. - * - ************************************************************************/ - -#define STRICT -#define _WIN32_WINNT 0x0400 -#define _WIN32_DCOM -#if defined(_MSC_VER) && (_MSC_VER >= 1300) -#undef _DEBUG -#endif -#if defined(_MSC_VER) && (_MSC_VER > 1310) -#pragma warning(disable : 4917 4555) -#endif - -#ifdef __MINGW32__ -#define _INIT_ATL_COMMON_VARS -#endif - -#include "stdafx.h" - -#include <atlbase.h> -#ifdef _MSC_VER -#pragma warning( push ) -#pragma warning( disable: 4710 ) -#endif -CComModule _Module; -#ifdef _MSC_VER -#pragma warning( pop ) -#endif -#include <atlcom.h> - -BEGIN_OBJECT_MAP(ObjectMap) -END_OBJECT_MAP() - -///////////////////////////////////////////////////////////////////////////// -// DLL Entry Point - - -#include "syswinwrapper.hxx" -#include "docholder.hxx" - - -HINSTANCE DocumentHolder::m_hInstance; - -extern "C" -BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/) -{ - DocumentHolder::m_hInstance = hInstance; - if (!winwrap::HatchWindowRegister(hInstance)) - return FALSE; - - if (dwReason == DLL_PROCESS_ATTACH) - { - _Module.Init(ObjectMap, hInstance, NULL); - DisableThreadLibraryCalls(hInstance); - } - else if (dwReason == DLL_PROCESS_DETACH) - { - _Module.Term(); - } - return TRUE; // ok -} - -// 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: */ diff --git a/embedserv/source/embed/guid.cxx b/embedserv/source/embed/guid.cxx deleted file mode 100644 index 2737eec04..000000000 --- a/embedserv/source/embed/guid.cxx +++ /dev/null @@ -1,216 +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. - * - ************************************************************************/ -#if defined(_MSC_VER) && (_MSC_VER > 1310) -#pragma warning(disable : 4917 4555) -#endif - -#include "common.h" -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/container/XNameAccess.hpp> - -::rtl::OUString getStorageTypeFromGUID_Impl( GUID* guid ) -{ - if ( *guid == OID_WriterTextServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "soffice.StarWriterDocument.6" ) ); - - if ( *guid == OID_WriterOASISTextServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "opendocument.WriterDocument.1" ) ); - - if ( *guid == OID_CalcServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "soffice.StarCalcDocument.6" ) ); - - if ( *guid == OID_CalcOASISServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "opendocument.CalcDocument.1" ) ); - - if ( *guid == OID_DrawingServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "soffice.StarDrawDocument.6" ) ); - - if ( *guid == OID_DrawingOASISServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "opendocument.DrawDocument.1" ) ); - - if ( *guid == OID_PresentationServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "soffice.StarImpressDocument.6" ) ); - - if ( *guid == OID_PresentationOASISServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "opendocument.ImpressDocument.1" ) ); - - if ( *guid == OID_MathServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "soffice.StarMathDocument.6" ) ); - - if ( *guid == OID_MathOASISServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "opendocument.MathDocument.1" ) ); - - return ::rtl::OUString(); -} - -::rtl::OUString getServiceNameFromGUID_Impl( GUID* guid ) -{ - if ( *guid == OID_WriterTextServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Writer.TextDocument" ) ); - - if ( *guid == OID_WriterOASISTextServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Writer.TextDocument" ) ); - - if ( *guid == OID_CalcServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Calc.SpreadsheetDocument" ) ); - - if ( *guid == OID_CalcOASISServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Calc.SpreadsheetDocument" ) ); - - if ( *guid == OID_DrawingServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Draw.DrawingDocument" ) ); - - if ( *guid == OID_DrawingOASISServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Draw.DrawingDocument" ) ); - - if ( *guid == OID_PresentationServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Draw.PresentationDocument" ) ); - - if ( *guid == OID_PresentationOASISServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Draw.PresentationDocument" ) ); - - if ( *guid == OID_MathServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Math.FormulaDocument" ) ); - - if ( *guid == OID_MathOASISServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Math.FormulaDocument" ) ); - - return ::rtl::OUString(); -} - -::rtl::OUString getFilterNameFromGUID_Impl( GUID* guid ) -{ - if ( *guid == OID_WriterTextServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "StarOffice XML (Writer)" ) ); - - if ( *guid == OID_WriterOASISTextServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "writer8" ) ); - - if ( *guid == OID_CalcServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "StarOffice XML (Calc)" ) ); - - if ( *guid == OID_CalcOASISServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "calc8" ) ); - - if ( *guid == OID_DrawingServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "StarOffice XML (Draw)" ) ); - - if ( *guid == OID_DrawingOASISServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "draw8" ) ); - - if ( *guid == OID_PresentationServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "StarOffice XML (Impress)" ) ); - - if ( *guid == OID_PresentationOASISServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "impress8" ) ); - - if ( *guid == OID_MathServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "StarOffice XML (Math)" ) ); - - if ( *guid == OID_MathOASISServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "math8" ) ); - - return ::rtl::OUString(); -} - -::rtl::OUString getTestFileURLFromGUID_Impl( GUID* guid ) -{ - if ( *guid == OID_WriterTextServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "file:///d:/OLE_TEST/test.sxw" ) ); - - if ( *guid == OID_WriterOASISTextServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "file:///d:/OLE_TEST/test.odt" ) ); - - if ( *guid == OID_CalcServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "file:///d:/OLE_TEST/test.sxc" ) ); - - if ( *guid == OID_CalcOASISServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "file:///d:/OLE_TEST/test.ods" ) ); - - if ( *guid == OID_DrawingServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "file:///d:/OLE_TEST/test.sxd" ) ); - - if ( *guid == OID_DrawingOASISServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "file:///d:/OLE_TEST/test.odg" ) ); - - if ( *guid == OID_PresentationServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "file:///d:/OLE_TEST/test.sxi" ) ); - - if ( *guid == OID_PresentationOASISServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "file:///d:/OLE_TEST/test.odp" ) ); - - if ( *guid == OID_MathServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "file:///d:/OLE_TEST/test.sxm" ) ); - - if ( *guid == OID_MathOASISServer ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "file:///d:/OLE_TEST/test.odf" ) ); - - return ::rtl::OUString(); -} - -/* -::rtl::OUString getCurTypeNameFromGUID_Impl( const uno::Reference< lang::XMultiServiceFactory > xFactory, GUID* guid ) -{ - ::rtl::OUString aResult; - - const ::rtl::OUString aServiceName ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.document.FilterFactory" ) ); - uno::Reference < container::XNameAccess > xFilters = uno::Reference < io::XOutputStream > ( - xFactory->createInstance ( aServiceName ), - uno::UNO_QUERY ); - - if ( xFilters.is() ) - { - ::rtl::OUString aFilterName = getFilterNameFromGUID_Impl( guid ); - if ( aFilterName.getLength() ) - { - uno::Any aAnyProp = xFilters->getByName( aFilterName ); - uno::Sequence< beans::PropertyValue > aProperties; - if ( aAnyProp >>= aProperties ) ) - { - for ( sal_Int32 nInd = 0; nInd < aProperties.getLength; nInd++ ) - if ( aProperties[nInd].Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "UIName" ) ) - { - aProperties[nInd].Value >>= aResult; - break; - } - } - } - } - - return aResult; -} -*/ - -// 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: */ diff --git a/embedserv/source/embed/iipaobj.cxx b/embedserv/source/embed/iipaobj.cxx deleted file mode 100644 index d3d5ea77f..000000000 --- a/embedserv/source/embed/iipaobj.cxx +++ /dev/null @@ -1,133 +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 "iipaobj.hxx" -#include "embeddoc.hxx" - - - -CIIAObj::CIIAObj(DocumentHolder* pDocHolder) - : m_refCount( 0L ), - m_rDocHolder( pDocHolder ) -{ -} - - -CIIAObj::~CIIAObj() -{ - return; -} - -/* IUnknown methods */ - -STDMETHODIMP CIIAObj::QueryInterface(REFIID riid, LPVOID FAR *ppv) -{ - *ppv=NULL; - - if(IID_IUnknown==riid || - IID_IOleWindow==riid || - IID_IOleInPlaceActiveObject==riid) - *ppv=this; - - //AddRef any interface we'll return. - if (NULL!=*ppv) - { - ((LPUNKNOWN)*ppv)->AddRef(); - return NOERROR; - } - - return ResultFromScode(E_NOINTERFACE); -} - - -STDMETHODIMP_(ULONG) CIIAObj::AddRef(void) -{ - return osl_incrementInterlockedCount( &m_refCount); -} - -STDMETHODIMP_(ULONG) CIIAObj::Release(void) -{ - sal_Int32 nCount = osl_decrementInterlockedCount( &m_refCount); - if ( nCount == 0 ) - delete this; - - return nCount; -} - -/* IOleInPlaceActiveObject methods*/ - -STDMETHODIMP CIIAObj::GetWindow(HWND *) -{ - return NOERROR; -} - -STDMETHODIMP CIIAObj::ContextSensitiveHelp(BOOL) -{ - return NOERROR; -} - -STDMETHODIMP CIIAObj::TranslateAccelerator(LPMSG) -{ - return NOERROR; -} - -STDMETHODIMP CIIAObj::OnFrameWindowActivate(BOOL) -{ - return NOERROR; -} - -STDMETHODIMP CIIAObj::OnDocWindowActivate(BOOL) -{ - return NOERROR; -} - -STDMETHODIMP CIIAObj::ResizeBorder( - LPCRECT pRect,LPOLEINPLACEUIWINDOW,BOOL bFrame) -{ - if(!bFrame) return NOERROR; - - if ( !m_rDocHolder.is() ) - return E_FAIL; - - return m_rDocHolder->SetContRects(pRect); -} - - -STDMETHODIMP CIIAObj::EnableModeless(BOOL) -{ - return NOERROR; -} - -// 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: */ 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: */ diff --git a/embedserv/source/embed/makefile.mk b/embedserv/source/embed/makefile.mk deleted file mode 100755 index a531858bc..000000000 --- a/embedserv/source/embed/makefile.mk +++ /dev/null @@ -1,79 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -PRJ=..$/.. - -PRJNAME=embedserv -TARGET=emser - - -# --- Settings ----------------------------------------------------- - -.INCLUDE : settings.mk - -.IF "$(DISABLE_ATL)"=="" - -LIBTARGET=NO -USE_DEFFILE=NO - -INCPRE+= $(ATL_INCLUDE) - -# --- Files -------------------------------------------------------- - -SLOFILES = \ - $(SLO)$/register.obj \ - $(SLO)$/servprov.obj \ - $(SLO)$/docholder.obj \ - $(SLO)$/ed_ipersiststr.obj \ - $(SLO)$/ed_idataobj.obj \ - $(SLO)$/ed_ioleobject.obj \ - $(SLO)$/ed_iinplace.obj \ - $(SLO)$/iipaobj.obj \ - $(SLO)$/guid.obj \ - $(SLO)$/esdll.obj \ - $(SLO)$/intercept.obj \ - $(SLO)$/syswinwrapper.obj \ - $(SLO)$/tracker.obj - -EXCEPTIONSFILES= \ - $(SLO)$/register.obj \ - $(SLO)$/docholder.obj \ - $(SLO)$/ed_ipersiststr.obj \ - $(SLO)$/ed_idataobj.obj \ - $(SLO)$/ed_iinplace.obj \ - $(SLO)$/ed_ioleobject.obj \ - $(SLO)$/iipaobj.obj \ - $(SLO)$/intercept.obj \ - $(SLO)$/syswinwrapper.obj \ - $(SLO)$/tracker.obj - -.ENDIF - -# --- Targets ------------------------------------------------------- - -.INCLUDE : target.mk - diff --git a/embedserv/source/embed/register.cxx b/embedserv/source/embed/register.cxx deleted file mode 100644 index 841c9966f..000000000 --- a/embedserv/source/embed/register.cxx +++ /dev/null @@ -1,102 +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. - * - ************************************************************************/ -#if defined(_MSC_VER) && (_MSC_VER > 1310) -#pragma warning(disable : 4917 4555) -#endif - -#ifdef __MINGW32__ -#define INITGUID -#endif -#include "servprov.hxx" -#include <com/sun/star/lang/XSingleServiceFactory.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/registry/XRegistryKey.hpp> -#include <com/sun/star/registry/InvalidRegistryException.hpp> -#include <rtl/ustring.h> -#include <cppuhelper/factory.hxx> - - -using namespace ::com::sun::star; - - -uno::Reference<uno::XInterface> SAL_CALL EmbedServer_createInstance( - const uno::Reference<lang::XMultiServiceFactory> & xSMgr) -throw (uno::Exception) -{ - uno::Reference<uno::XInterface > xService = *new EmbedServer_Impl( xSMgr ); - return xService; -} - -::rtl::OUString SAL_CALL EmbedServer_getImplementationName() throw() -{ - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.ole.EmbedServer") ); - -} - -uno::Sequence< ::rtl::OUString > SAL_CALL EmbedServer_getSupportedServiceNames() throw() -{ - uno::Sequence< ::rtl::OUString > aServiceNames( 1 ); - aServiceNames[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.document.OleEmbeddedServerRegistration" ) ); - return aServiceNames; -} - -extern "C" { - -SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory( const sal_Char * pImplName, void * pServiceManager, void * /*pRegistryKey*/ ) -{ - void * pRet = 0; - - ::rtl::OUString aImplName( ::rtl::OUString::createFromAscii( pImplName ) ); - uno::Reference< lang::XSingleServiceFactory > xFactory; - - if(pServiceManager && aImplName.equals( EmbedServer_getImplementationName() ) ) - { - xFactory= ::cppu::createOneInstanceFactory( reinterpret_cast< lang::XMultiServiceFactory*>(pServiceManager), - EmbedServer_getImplementationName(), - EmbedServer_createInstance, - EmbedServer_getSupportedServiceNames() ); - } - - if (xFactory.is()) - { - xFactory->acquire(); - pRet = xFactory.get(); - } - - return pRet; -} - -} // extern "C" - -// 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: */ diff --git a/embedserv/source/embed/servprov.cxx b/embedserv/source/embed/servprov.cxx deleted file mode 100644 index e21780903..000000000 --- a/embedserv/source/embed/servprov.cxx +++ /dev/null @@ -1,308 +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. - * - ************************************************************************/ -#if defined(_MSC_VER) && (_MSC_VER > 1310) -#pragma warning(disable : 4917 4555) -#endif - -#include "stdafx.h" -#include "servprov.hxx" -#include "embeddoc.hxx" -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <cppuhelper/typeprovider.hxx> -#include <osl/mutex.hxx> -#include <osl/thread.h> - -using namespace com::sun::star; - -const GUID* guidList[ SUPPORTED_FACTORIES_NUM ] = { - &OID_WriterTextServer, - &OID_WriterOASISTextServer, - &OID_CalcServer, - &OID_CalcOASISServer, - &OID_DrawingServer, - &OID_DrawingOASISServer, - &OID_PresentationServer, - &OID_PresentationOASISServer, - &OID_MathServer, - &OID_MathOASISServer -}; - -class CurThreadData -{ - public: - CurThreadData(); - virtual ~CurThreadData(); - - sal_Bool SAL_CALL setData(void *pData); - - void* SAL_CALL getData(); - - protected: - oslThreadKey m_hKey; -}; - -CurThreadData::CurThreadData() -{ - m_hKey = osl_createThreadKey( (oslThreadKeyCallbackFunction)NULL ); -} - -CurThreadData::~CurThreadData() -{ - osl_destroyThreadKey(m_hKey); -} - -sal_Bool CurThreadData::setData(void *pData) -{ - OSL_ENSURE( m_hKey, "No thread key!\n" ); - return (osl_setThreadKeyData(m_hKey, pData)); -} - -void *CurThreadData::getData() -{ - OSL_ENSURE( m_hKey, "No thread key!\n" ); - return (osl_getThreadKeyData(m_hKey)); -} - - -// CoInitializeEx * -typedef DECLSPEC_IMPORT HRESULT (STDAPICALLTYPE *ptrCoInitEx)( LPVOID, DWORD); -// CoInitialize * -typedef DECLSPEC_IMPORT HRESULT (STDAPICALLTYPE *ptrCoInit)( LPVOID); - -void o2u_attachCurrentThread() -{ - static CurThreadData oleThreadData; - - if ( oleThreadData.getData() != 0 ) - { - HINSTANCE inst= LoadLibrary( _T("ole32.dll")); - if( inst ) - { - HRESULT hr; - ptrCoInitEx initFuncEx= (ptrCoInitEx)GetProcAddress( inst, _T("CoInitializeEx")); - if( initFuncEx) - hr= initFuncEx( NULL, COINIT_MULTITHREADED); - else - { - ptrCoInit initFunc= (ptrCoInit)GetProcAddress( inst,_T("CoInitialize")); - if( initFunc) - hr= initFunc( NULL); - } - } - oleThreadData.setData((void*)sal_True); - } -} - - -//=============================================================================== -// EmbedServer_Impl - -EmbedServer_Impl::EmbedServer_Impl( const uno::Reference<lang::XMultiServiceFactory>& xFactory): - m_xFactory( xFactory) -{ - for( int nInd = 0; nInd < SUPPORTED_FACTORIES_NUM; nInd++ ) - { - m_pOLEFactories[nInd] = new EmbedProviderFactory_Impl( m_xFactory, guidList[nInd] ); - m_pOLEFactories[nInd]->registerClass(); - } -} - -EmbedServer_Impl::~EmbedServer_Impl() -{ - for( int nInd = 0; nInd < SUPPORTED_FACTORIES_NUM; nInd++ ) - { - if ( m_pOLEFactories[nInd] ) - m_pOLEFactories[nInd]->deregisterClass(); - } -} - -// XInterface -------------------------------------------------- -uno::Any SAL_CALL -EmbedServer_Impl::queryInterface( - const uno::Type& aType ) - throw( - uno::RuntimeException - ) -{ - uno::Any a= - ::cppu::queryInterface( - aType, static_cast<lang::XTypeProvider*>(this)); - if( a == uno::Any()) - return OWeakObject::queryInterface( aType); - else - return a; -} - -void SAL_CALL EmbedServer_Impl::acquire( ) throw(uno::RuntimeException) -{ - OWeakObject::acquire(); -} - -void SAL_CALL EmbedServer_Impl::release( ) throw (uno::RuntimeException) -{ - OWeakObject::release(); -} - - -// XTypeProvider -------------------------------------------------- -uno::Sequence< uno::Type > SAL_CALL -EmbedServer_Impl::getTypes( ) - throw( - uno::RuntimeException - ) -{ - static ::cppu::OTypeCollection *pCollection = 0; - if( ! pCollection ) - { - ::osl::MutexGuard guard( ::osl::Mutex::getGlobalMutex() ); - if( ! pCollection ) - { - static ::cppu::OTypeCollection collection( - getCppuType( - reinterpret_cast<uno::Reference< uno::XWeak>*>(0)), - getCppuType( - reinterpret_cast< - uno::Reference< lang::XTypeProvider>*>(0))); - pCollection = &collection; - } - } - return (*pCollection).getTypes(); -} - -uno::Sequence< sal_Int8 > SAL_CALL EmbedServer_Impl::getImplementationId() throw(uno::RuntimeException) -{ - static ::cppu::OImplementationId *pId = 0; - if( ! pId ) - { - ::osl::MutexGuard guard( ::osl::Mutex::getGlobalMutex() ); - if( ! pId ) - { - static ::cppu::OImplementationId id( sal_False ); - pId = &id; - } - } - return (*pId).getImplementationId(); -} - -//=============================================================================== -// EmbedProviderFactory_Impl - -EmbedProviderFactory_Impl::EmbedProviderFactory_Impl(const uno::Reference<lang::XMultiServiceFactory>& xFactory, const GUID* pGuid) - : m_refCount( 0L ) - , m_xFactory( xFactory ) - , m_guid( *pGuid ) -{ -} - -EmbedProviderFactory_Impl::~EmbedProviderFactory_Impl() -{ -} - -sal_Bool EmbedProviderFactory_Impl::registerClass() -{ - HRESULT hresult; - - o2u_attachCurrentThread(); - - hresult = CoRegisterClassObject( - m_guid, - this, - CLSCTX_LOCAL_SERVER, - REGCLS_MULTIPLEUSE, - &m_factoryHandle); - - return (hresult == NOERROR); -} - -sal_Bool EmbedProviderFactory_Impl::deregisterClass() -{ - HRESULT hresult = CoRevokeClassObject( m_factoryHandle ); - - return (hresult == NOERROR); -} - -STDMETHODIMP EmbedProviderFactory_Impl::QueryInterface(REFIID riid, void FAR* FAR* ppv) -{ - if(IsEqualIID(riid, IID_IUnknown)) - { - AddRef(); - *ppv = (IUnknown*) (IClassFactory*) this; - return NOERROR; - } - else if (IsEqualIID(riid, IID_IClassFactory)) - { - AddRef(); - *ppv = (IClassFactory*) this; - return NOERROR; - } - - *ppv = NULL; - return ResultFromScode(E_NOINTERFACE); -} - -STDMETHODIMP_(ULONG) EmbedProviderFactory_Impl::AddRef() -{ - return osl_incrementInterlockedCount( &m_refCount); -} - -STDMETHODIMP_(ULONG) EmbedProviderFactory_Impl::Release() -{ - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex()); - sal_Int32 nCount = --m_refCount; - if ( nCount == 0 ) - { - delete this; - } - - return nCount; -} - -STDMETHODIMP EmbedProviderFactory_Impl::CreateInstance(IUnknown FAR* punkOuter, - REFIID riid, - void FAR* FAR* ppv) -{ - punkOuter = NULL; - - IUnknown* pEmbedDocument = (IUnknown*)(IPersistStorage*)( new EmbedDocument_Impl( m_xFactory, &m_guid ) ); - - return pEmbedDocument->QueryInterface( riid, ppv ); -} - -STDMETHODIMP EmbedProviderFactory_Impl::LockServer( int /*fLock*/ ) -{ - return NOERROR; -} - -// 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: */ diff --git a/embedserv/source/embed/stdafx.cpp b/embedserv/source/embed/stdafx.cpp deleted file mode 100644 index efb58b5d7..000000000 --- a/embedserv/source/embed/stdafx.cpp +++ /dev/null @@ -1,16 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -// stdafx1.cpp : source file that includes just the standard includes -// stdafx1.pch will be the pre-compiled header -// stdafx1.obj will contain the pre-compiled type information - - -#include "stdafx2.h" - -#ifdef _ATL_STATIC_REGISTRY -#include <statreg.h> -#include <statreg.cpp> -#endif - -#include <atlimpl.cpp> - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/embedserv/source/embed/syswinwrapper.cxx b/embedserv/source/embed/syswinwrapper.cxx deleted file mode 100644 index c247617d9..000000000 --- a/embedserv/source/embed/syswinwrapper.cxx +++ /dev/null @@ -1,480 +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. - * - ************************************************************************/ -#if defined(_MSC_VER) && (_MSC_VER > 1310) -#pragma warning(disable : 4917 4555) -#endif - -#include "docholder.hxx" -#include "syswinwrapper.hxx" - -/* - * CWindow::CWindow - * CWindow::~CWindow - * - * Constructor Parameters: - * hInst HINSTANCE of the task owning us. - */ - - -using namespace winwrap; - - -#define HWWL_STRUCTURE 0 - -//Notification codes for WM_COMMAND messages -#define HWN_BORDERDOUBLECLICKED 1 -#define CBHATCHWNDEXTRA (sizeof(LONG)) -#define SZCLASSHATCHWIN TEXT("hatchwin") -#define SendCommand(hWnd, wID, wCode, hControl) \ - SendMessage(hWnd, WM_COMMAND, MAKEWPARAM(wID, wCode) \ - , (LPARAM)hControl) - - -typedef CHatchWin *PCHatchWin; - - -void DrawShading(LPRECT prc, HDC hDC, UINT cWidth); - - - -winwrap::CWindow::CWindow(HINSTANCE hInst) -{ - m_hInst=hInst; - m_hWnd=NULL; - return; -} - -winwrap::CWindow::~CWindow(void) -{ - if (IsWindow(m_hWnd)) - DestroyWindow(m_hWnd); - - return; -} - - - -/* - * CWindow::Window - * - * Purpose: - * Returns the window handle associated with this object. - * - * Return Value: - * HWND Window handle for this object - */ - -HWND winwrap::CWindow::Window(void) -{ - return m_hWnd; -} - - - -/* - * CWindow::Instance - * - * Purpose: - * Returns the instance handle associated with this object. - * - * Return Value: - * HINSTANCE Instance handle of the module stored here. - */ - -HINSTANCE winwrap::CWindow::Instance(void) -{ - return m_hInst; -} - - - - - -//Hatch pattern brush bits -static WORD g_wHatchBmp[]={0x11, 0x22, 0x44, 0x88, 0x11, 0x22, 0x44, 0x88}; - -// void DrawShading(LPRECT, HDC, UINT); - - -/* - * HatchWindowRegister - * - * Purpose: - * Registers the hatch window class for use with CHatchWin. - * - * Parameters: - * hInst HINSTANCE under which to register. - * - * Return Value: - * BOOL TRUE if successful, FALSE otherwise. - */ - -BOOL winwrap::HatchWindowRegister(HINSTANCE hInst) -{ - WNDCLASS wc; - - //Must have CS_DBLCLKS for border! - wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; - wc.hInstance = hInst; - wc.cbClsExtra = 0; - wc.lpfnWndProc = HatchWndProc; - wc.cbWndExtra = CBHATCHWNDEXTRA; - wc.hIcon = NULL; - wc.hCursor = LoadCursor(NULL, IDC_ARROW); - wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); - wc.lpszMenuName = NULL; - wc.lpszClassName = SZCLASSHATCHWIN; - - return RegisterClass(&wc); - return FALSE; -} - - - - -/* - * CHatchWin:CHatchWin - * CHatchWin::~CHatchWin - * - * Constructor Parameters: - * hInst HINSTANCE of the application we're in. - */ - -CHatchWin::CHatchWin(HINSTANCE hInst,const DocumentHolder* pDocHolder) - : CWindow(hInst), - m_aTracker() -{ - m_hWnd=NULL; - m_hWndKid=NULL; - m_hWndAssociate=NULL; - m_uID=0; - - m_dBorderOrg=GetProfileInt(TEXT("windows") - , TEXT("OleInPlaceBorderWidth") - , HATCHWIN_BORDERWIDTHDEFAULT); - - m_dBorder=m_dBorderOrg; - SetRect(&m_rcPos, 0, 0, 0, 0); - SetRect(&m_rcClip, 0, 0, 0, 0); - - m_pDocHolder = pDocHolder; - return; -} - - -CHatchWin::~CHatchWin(void) -{ - /* - * Chances are this was already destroyed when a document - * was destroyed. - */ - if (NULL!=m_hWnd && IsWindow(m_hWnd)) - DestroyWindow(m_hWnd); - - return; -} - - - -/* - * CHatchWin::Init - * - * Purpose: - * Instantiates a hatch window within a given parent with a - * default rectangle. This is not initially visible. - * - * Parameters: - * hWndParent HWND of the parent of this window - * uID UINT identifier for this window (send in - * notifications to associate window). - * hWndAssoc HWND of the initial associate. - * - * Return Value: - * BOOL TRUE if the function succeeded, FALSE otherwise. - */ - -BOOL CHatchWin::Init(HWND hWndParent, UINT uID, HWND hWndAssoc) -{ - m_hWndParent = hWndParent; - m_hWnd=CreateWindowEx( - WS_EX_NOPARENTNOTIFY, SZCLASSHATCHWIN - , SZCLASSHATCHWIN, WS_CHILD | WS_CLIPSIBLINGS - | WS_CLIPCHILDREN, 0, 0, 100, 100, hWndParent, (HMENU)uID - , m_hInst, this); - - m_uID=uID; - m_hWndAssociate=hWndAssoc; - - return (NULL!=m_hWnd); -} - - -void CHatchWin::SetTrans() -{ - HRGN hrgn = CreateRectRgn(0,0,0,0); - SetWindowRgn(m_hWnd,hrgn,true); -} - -/* - * CHatchWin::HwndAssociateSet - * CHatchWin::HwndAssociateGet - * - * Purpose: - * Sets (Set) or retrieves (Get) the associate window of the - * hatch window. - * - * Parameters: (Set only) - * hWndAssoc HWND to set as the associate. - * - * Return Value: - * HWND Previous (Set) or current (Get) associate - * window. - */ - -HWND CHatchWin::HwndAssociateSet(HWND hWndAssoc) -{ - HWND hWndT=m_hWndAssociate; - - m_hWndAssociate=hWndAssoc; - return hWndT; -} - - -HWND CHatchWin::HwndAssociateGet(void) -{ - return m_hWndAssociate; -} - - -/* - * CHatchWin::RectsSet - * - * Purpose: - * Changes the size and position of the hatch window and the child - * window within it using a position rectangle for the child and - * a clipping rectangle for the hatch window and child. The hatch - * window occupies prcPos expanded by the hatch border and clipped - * by prcClip. The child window is fit to prcPos to give the - * proper scaling, but it clipped to the hatch window which - * therefore clips it to prcClip without affecting the scaling. - * - * Parameters: - * prcPos LPRECT providing the position rectangle. - * prcClip LPRECT providing the clipping rectangle. - * - * Return Value: - * None - */ - -void CHatchWin::RectsSet(LPRECT prcPos, LPRECT prcClip) -{ - RECT rc; - RECT rcPos; - - m_rcPos=*prcPos; - m_rcClip=*prcClip; - - //Calculate the rectangle for the hatch window, then clip it. - rcPos=*prcPos; - InflateRect(&rcPos, m_dBorder, m_dBorder); - IntersectRect(&rc, &rcPos, prcClip); - - SetWindowPos(m_hWnd, NULL, rc.left, rc.top, rc.right-rc.left - , rc.bottom-rc.top, SWP_NOZORDER | SWP_NOACTIVATE); - - /* - * Set the rectangle of the child window to be at m_dBorder - * from the top and left but with the same size as prcPos - * contains. The hatch window will clip it. - */ -// SetWindowPos(m_hWndKid, NULL, rcPos.left-rc.left+m_dBorder -// , rcPos.top-rc.top+m_dBorder, prcPos->right-prcPos->left -// , prcPos->bottom-prcPos->top, SWP_NOZORDER | SWP_NOACTIVATE); - - RECT newRC; - GetClientRect(m_hWnd,&newRC); - m_aTracker = Tracker( - &newRC, - Tracker::hatchInside | - Tracker::hatchedBorder | - Tracker::resizeInside - ); - - return; -} - - - -/* - * CHatchWin::ChildSet - * - * Purpose: - * Assigns a child window to this hatch window. - * - * Parameters: - * hWndKid HWND of the child window. - * - * Return Value: - * None - */ - -void CHatchWin::ChildSet(HWND hWndKid) -{ - m_hWndKid=hWndKid; - - if (NULL!=hWndKid) - { - SetParent(hWndKid, m_hWnd); - - //Insure this is visible when the hatch window becomes visible. - ShowWindow(hWndKid, SW_SHOW); - } - - return; -} - - - -/* - * CHatchWin::ShowHatch - * - * Purpose: - * Turns hatching on and off; turning the hatching off changes - * the size of the window to be exactly that of the child, leaving - * everything else the same. The result is that we don't have - * to turn off drawing because our own WM_PAINT will never be - * called. - * - * Parameters: - * fHatch BOOL indicating to show (TRUE) or hide (FALSE) - the hatching. - * - * Return Value: - * None - */ - -void CHatchWin::ShowHatch(BOOL fHatch) -{ - /* - * All we have to do is set the border to zero and - * call SetRects again with the last rectangles the - * child sent to us. - */ - m_dBorder=fHatch ? m_dBorderOrg : 0; - RectsSet(&m_rcPos, &m_rcClip); - return; -} - - - -/* - * HatchWndProc - * - * Purpose: - * Standard window procedure for the Hatch Window - */ - -LRESULT APIENTRY winwrap::HatchWndProc( - HWND hWnd, UINT iMsg - , WPARAM wParam, LPARAM lParam) -{ - PCHatchWin phw; - HDC hDC; - PAINTSTRUCT ps; - - phw=(PCHatchWin)GetWindowLong(hWnd, HWWL_STRUCTURE); - POINT ptMouse; - - switch (iMsg) - { - case WM_CREATE: - phw=(PCHatchWin)((LPCREATESTRUCT)lParam)->lpCreateParams; - SetWindowLong(hWnd, HWWL_STRUCTURE, (LONG)phw); - break; - case WM_PAINT: - hDC=BeginPaint(hWnd,&ps); - //Always draw the hatching. - phw->m_aTracker.Draw(hDC); - EndPaint(hWnd,&ps); - break; - case WM_LBUTTONDOWN: - GetCursorPos(&ptMouse); - ScreenToClient(hWnd,&ptMouse); - - // track in case we have to - if(phw->m_aTracker.Track(hWnd,ptMouse,FALSE,GetParent(hWnd))) - { - RECT aRect = phw->m_aTracker.m_rect; - TransformRect(&aRect,hWnd,GetParent(hWnd)); - phw->m_pDocHolder->OnPosRectChanged(&aRect); - } - break; - case WM_LBUTTONUP: - case WM_MOUSEMOVE: - GetCursorPos(&ptMouse); - ScreenToClient(hWnd,&ptMouse); - phw->m_aTracker.SetCursor(hWnd,HTCLIENT); - break; - case WM_SETFOCUS: - //We need this since the container will SetFocus to us. - if (NULL!=phw->m_hWndKid) - SetFocus(phw->m_hWndKid); - - break; - case WM_LBUTTONDBLCLK: - /* - * If the double click was within m_dBorder of an - * edge, send the HWN_BORDERDOUBLECLICKED notification. - * - * Because we're always sized just larger than our child - * window by the border width, we can only *get* this - * message when the mouse is on the border. So we can - * just send the notification. - */ - if (NULL!=phw->m_hWndAssociate) - { - SendCommand(phw->m_hWndAssociate, phw->m_uID - , HWN_BORDERDOUBLECLICKED, hWnd); - } - - break; - default: - return DefWindowProc(hWnd, iMsg, wParam, lParam); - } - - return 0L; -} - -// 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: */ diff --git a/embedserv/source/embed/tracker.cxx b/embedserv/source/embed/tracker.cxx deleted file mode 100644 index 4d7e7408a..000000000 --- a/embedserv/source/embed/tracker.cxx +++ /dev/null @@ -1,841 +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. - * - ************************************************************************/ -#if defined(_MSC_VER) && (_MSC_VER > 1310) -#pragma warning(disable : 4917 4555) -#endif - -#include "stdafx.h" -#include <stddef.h> -#include "syswinwrapper.hxx" - - -HCURSOR _afxCursors[10] = { 0, }; -HBRUSH _afxHalftoneBrush = 0; - - -// the struct below is used to determine the qualities of a particular handle -struct AFX_HANDLEINFO -{ - size_t nOffsetX; // offset within RECT for X coordinate - size_t nOffsetY; // offset within RECT for Y coordinate - int nCenterX; // adjust X by Width()/2 * this number - int nCenterY; // adjust Y by Height()/2 * this number - int nHandleX; // adjust X by handle size * this number - int nHandleY; // adjust Y by handle size * this number - int nInvertX; // handle converts to this when X inverted - int nInvertY; // handle converts to this when Y inverted -}; - -// this array describes all 8 handles (clock-wise) -const AFX_HANDLEINFO _afxHandleInfo[] = -{ - // corner handles (top-left, top-right, bottom-right, bottom-left - { offsetof(RECT, left), offsetof(RECT, top), 0, 0, 0, 0, 1, 3 }, - { offsetof(RECT, right), offsetof(RECT, top), 0, 0, -1, 0, 0, 2 }, - { offsetof(RECT, right), offsetof(RECT, bottom), 0, 0, -1, -1, 3, 1 }, - { offsetof(RECT, left), offsetof(RECT, bottom), 0, 0, 0, -1, 2, 0 }, - - // side handles (top, right, bottom, left) - { offsetof(RECT, left), offsetof(RECT, top), 1, 0, 0, 0, 4, 6 }, - { offsetof(RECT, right), offsetof(RECT, top), 0, 1, -1, 0, 7, 5 }, - { offsetof(RECT, left), offsetof(RECT, bottom), 1, 0, 0, -1, 6, 4 }, - { offsetof(RECT, left), offsetof(RECT, top), 0, 1, 0, 0, 5, 7 } -}; - -// the struct below gives us information on the layout of a RECT struct and -// the relationship between its members -struct AFX_RECTINFO -{ - size_t nOffsetAcross; // offset of opposite point (ie. left->right) - int nSignAcross; // sign relative to that point (ie. add/subtract) -}; - -// this array is indexed by the offset of the RECT member / sizeof(int) -const AFX_RECTINFO _afxRectInfo[] = -{ - { offsetof(RECT, right), +1 }, - { offsetof(RECT, bottom), +1 }, - { offsetof(RECT, left), -1 }, - { offsetof(RECT, top), -1 }, -}; - - -HBRUSH HalftoneBrush() -{ - if (_afxHalftoneBrush == NULL) - { - WORD grayPattern[8]; - for (int i = 0; i < 8; i++) - grayPattern[i] = (WORD)(0x5555 << (i & 1)); - HBITMAP grayBitmap = CreateBitmap(8, 8, 1, 1, &grayPattern); - if (grayBitmap != NULL) - { - _afxHalftoneBrush = CreatePatternBrush(grayBitmap); - DeleteObject(grayBitmap); - } - } - return _afxHalftoneBrush; -} - - - -void DrawDragRect( - HDC hDC,LPRECT lpRect,SIZE size, - LPRECT lpRectLast,SIZE sizeLast, - HBRUSH hBrush = NULL,HBRUSH hBrushLast = NULL) -{ - // first, determine the update region and select it - HRGN rgnNew; - HRGN rgnOutside,rgnInside; - rgnOutside = CreateRectRgnIndirect(lpRect); - RECT rect = *lpRect; - InflateRect(&rect,-size.cx, -size.cy); - IntersectRect(&rect,&rect,lpRect); - rgnInside = CreateRectRgnIndirect(&rect); - rgnNew = CreateRectRgn(0, 0, 0, 0); - CombineRgn(rgnNew,rgnOutside,rgnInside,RGN_XOR); - - HBRUSH hBrushOld = NULL; - if (hBrush == NULL) - hBrush = HalftoneBrush(); - if (hBrushLast == NULL) - hBrushLast = hBrush; - - HRGN rgnLast(NULL); - HRGN rgnUpdate(NULL); - if (lpRectLast != NULL) - { - // find difference between new region and old region - rgnLast = CreateRectRgn(0, 0, 0, 0); - SetRectRgn( - rgnOutside, - lpRectLast->left, - lpRectLast->top, - lpRectLast->right, - lpRectLast->bottom); - rect = *lpRectLast; - InflateRect(&rect,-sizeLast.cx, -sizeLast.cy); - IntersectRect(&rect,&rect, lpRectLast); - SetRectRgn(rgnInside,rect.left,rect.top,rect.right,rect.bottom); - CombineRgn(rgnLast,rgnOutside,rgnInside, RGN_XOR); - -// // only diff them if brushes are the same - if (hBrush == hBrushLast) - { - rgnUpdate = CreateRectRgn(0, 0, 0, 0); - CombineRgn(rgnUpdate,rgnLast,rgnNew, RGN_XOR); - } - } - if (hBrush != hBrushLast && lpRectLast != NULL) - { - // brushes are different -- erase old region first - SelectClipRgn(hDC,rgnLast); - GetClipBox(hDC,&rect); - hBrushOld = (HBRUSH)SelectObject(hDC,(HGDIOBJ)hBrushLast); - PatBlt(hDC,rect.left,rect.top,(rect.right-rect.left),(rect.bottom-rect.top),PATINVERT); - - SelectObject(hDC,(HGDIOBJ)hBrushOld); - hBrushOld = NULL; - } - - // draw into the update/new region - SelectClipRgn(hDC,rgnUpdate); - - GetClipBox(hDC,&rect); - hBrushOld = (HBRUSH) SelectObject(hDC,(HGDIOBJ) hBrush); - PatBlt(hDC,rect.left, rect.top,(rect.right-rect.left),(rect.bottom-rect.top), PATINVERT); - - // cleanup DC - if (hBrushOld != NULL) - SelectObject(hDC,(HGDIOBJ)hBrushOld); - SelectClipRgn(hDC,NULL); -} - - -void winwrap::TransformRect(LPRECT rect,HWND pWnd,HWND pWndClipTo) -{ - POINT pt; - pt.x = rect->left;pt.y = rect->top; - ClientToScreen(pWnd,&pt); - ScreenToClient(pWndClipTo,&pt); - rect->left = pt.x; rect->top = pt.y; - - pt.x = rect->right;pt.y = rect->bottom; - ClientToScreen(pWnd,&pt); - ScreenToClient(pWndClipTo,&pt); - rect->right = pt.x; rect->bottom = pt.y; -} - - -void NormalizeRect(LPRECT rp) -{ - if(rp->left > rp->right) { - UINT tmp = rp->left; - rp->left = rp->right; - rp->right = tmp; - } - - if(rp->top > rp->bottom) { - UINT tmp = rp->top; - rp->top = rp->bottom; - rp->bottom = tmp; - } -} - - -using namespace winwrap; - - -Tracker::Tracker() -{ -} - - -Tracker::Tracker(LPCRECT lpSrcRect, UINT nStyle) -{ - Construct(); - CopyRect(&m_rect,lpSrcRect); - m_nStyle = nStyle; -} - -HBRUSH _afxHatchBrush = 0; -HPEN _afxBlackDottedPen = 0; -int _afxHandleSize = 0; - - -void Tracker::Construct() -{ - static BOOL bInitialized = false; - if (!bInitialized) - { - if (_afxHatchBrush == NULL) - { - // create the hatch pattern + bitmap - WORD hatchPattern[8]; - WORD wPattern = 0x1111; - for (int i = 0; i < 4; i++) - { - hatchPattern[i] = wPattern; - hatchPattern[i+4] = wPattern; - wPattern <<= 1; - } - HBITMAP hatchBitmap = CreateBitmap(8, 8, 1, 1,&hatchPattern); - - // create black hatched brush - _afxHatchBrush = CreatePatternBrush(hatchBitmap); - DeleteObject(hatchBitmap); - } - - if (_afxBlackDottedPen == NULL) - { - // create black dotted pen - _afxBlackDottedPen = CreatePen(PS_DOT, 0, RGB(0, 0, 0)); - } - - // get default handle size from Windows profile setting - static const TCHAR szWindows[] = TEXT("windows"); - static const TCHAR szInplaceBorderWidth[] = - TEXT("oleinplaceborderwidth"); - _afxHandleSize = GetProfileInt(szWindows, szInplaceBorderWidth, 4); - bInitialized = TRUE; - - _afxCursors[0] = _afxCursors[2] = LoadCursor(0,IDC_SIZENWSE); - _afxCursors[4] = _afxCursors[6] = LoadCursor(0,IDC_SIZENS); - _afxCursors[1] = _afxCursors[3] = LoadCursor(0,IDC_SIZENESW); - _afxCursors[5] = _afxCursors[7] = LoadCursor(0,IDC_SIZEWE); - _afxCursors[8] = LoadCursor(0,IDC_SIZEALL); - } - - m_nStyle = 0; - m_nHandleSize = _afxHandleSize; - m_sizeMin.cy = m_sizeMin.cx = m_nHandleSize*2; - - SetRectEmpty(&m_rectLast); - m_sizeLast.cx = m_sizeLast.cy = 0; - m_bErase = FALSE; - m_bFinalErase = FALSE; -} - -Tracker::~Tracker() -{ -} - - -int Tracker::HitTest(POINT point) const -{ - TrackerHit hitResult = hitNothing; - - RECT rectTrue; - GetTrueRect(&rectTrue); - NormalizeRect(&rectTrue); - if (PtInRect(&rectTrue,point)) - { - if ((m_nStyle & (resizeInside|resizeOutside)) != 0) - hitResult = (TrackerHit)HitTestHandles(point); - else - hitResult = hitMiddle; - } - return hitResult; -} - - -BOOL Tracker::SetCursor(HWND pWnd, UINT nHitTest) const -{ - // trackers should only be in client area - if (nHitTest != HTCLIENT) - return FALSE; - - // convert cursor position to client co-ordinates - POINT point; - GetCursorPos(&point); - ScreenToClient(pWnd,&point); - - // do hittest and normalize hit - int nHandle = HitTestHandles(point); - if (nHandle < 0) - return FALSE; - - // need to normalize the hittest such that we get proper cursors - nHandle = NormalizeHit(nHandle); - - // handle special case of hitting area between handles - // (logically the same -- handled as a move -- but different cursor) - if (nHandle == hitMiddle && !PtInRect(&m_rect,point)) - { - // only for trackers with hatchedBorder (ie. in-place resizing) - if (m_nStyle & hatchedBorder) - nHandle = (TrackerHit)9; - } - - ::SetCursor(_afxCursors[nHandle]); - return TRUE; -} - - - -BOOL Tracker::Track(HWND hWnd,POINT point,BOOL bAllowInvert, - HWND hWndClipTo) -{ - // perform hit testing on the handles - int nHandle = HitTestHandles(point); - if (nHandle < 0) - { - // didn't hit a handle, so just return FALSE - return FALSE; - } - - // otherwise, call helper function to do the tracking - m_bAllowInvert = bAllowInvert; - SetCursor(hWnd,nHandle); - return TrackHandle(nHandle, hWnd, point, hWndClipTo); -} - - -BOOL Tracker::TrackHandle(int nHandle,HWND hWnd,POINT point,HWND hWndClipTo) -{ - // don't handle if capture already set - if (GetCapture() != NULL) - return FALSE; - - // save original width & height in pixels - int nWidth = m_rect.right - m_rect.left; - int nHeight = m_rect.bottom - m_rect.top; - - // set capture to the window which received this message - SetCapture(hWnd); - UpdateWindow(hWnd); - if (hWndClipTo != NULL) - UpdateWindow(hWndClipTo); - RECT rectSave = m_rect; - - // find out what x/y coords we are supposed to modify - int *px, *py; - int xDiff, yDiff; - GetModifyPointers(nHandle, &px, &py, &xDiff, &yDiff); - xDiff = point.x - xDiff; - yDiff = point.y - yDiff; - - // get DC for drawing - HDC hDrawDC; - if (hWndClipTo != NULL) - { - // clip to arbitrary window by using adjusted Window DC - hDrawDC = GetDCEx(hWndClipTo,NULL, DCX_CACHE); - } - else - { - // otherwise, just use normal DC - hDrawDC = GetDC(hWnd); - } - - RECT rectOld; - BOOL bMoved = FALSE; - - // get messages until capture lost or cancelled/accepted - for (;;) - { - MSG msg; - GetMessage(&msg, NULL, 0, 0); - - if (GetCapture() != hWnd) - break; - - switch (msg.message) - { - // handle movement/accept messages - case WM_LBUTTONUP: - case WM_MOUSEMOVE: - rectOld = m_rect; - // handle resize cases (and part of move) - if (px != NULL) - *px = (int)(short)LOWORD(msg.lParam) - xDiff; - if (py != NULL) - *py = (int)(short)HIWORD(msg.lParam) - yDiff; - - // handle move case - if (nHandle == hitMiddle) - { - m_rect.right = m_rect.left + nWidth; - m_rect.bottom = m_rect.top + nHeight; - } - // allow caller to adjust the rectangle if necessary - AdjustRect(nHandle,&m_rect); - - // only redraw and callback if the rect actually changed! - m_bFinalErase = (msg.message == WM_LBUTTONUP); - if (!EqualRect(&rectOld,&m_rect) || m_bFinalErase) - { - if (bMoved) - { - m_bErase = TRUE; - DrawTrackerRect(&rectOld,hWndClipTo,hDrawDC,hWnd); - } - OnChangedRect(rectOld); - if (msg.message != WM_LBUTTONUP) - bMoved = TRUE; - } - if (m_bFinalErase) - goto ExitLoop; - - if (!EqualRect(&rectOld,&m_rect)) - { - m_bErase = FALSE; - DrawTrackerRect(&m_rect,hWndClipTo,hDrawDC,hWnd); - } - break; - - // handle cancel messages - case WM_KEYDOWN: - if (msg.wParam != VK_ESCAPE) - break; - case WM_RBUTTONDOWN: - if (bMoved) - { - m_bErase = m_bFinalErase = TRUE; - DrawTrackerRect(&m_rect, hWndClipTo, hDrawDC, hWnd); - } - m_rect = rectSave; - goto ExitLoop; - - // just dispatch rest of the messages - default: - DispatchMessage(&msg); - break; - } - } - - ExitLoop: - if (hWndClipTo != NULL) - ReleaseDC(hWndClipTo,hDrawDC); - else - ReleaseDC(hWnd,hDrawDC); - ReleaseCapture(); - - // restore rect in case bMoved is still FALSE - if (!bMoved) - m_rect = rectSave; - m_bFinalErase = FALSE; - m_bErase = FALSE; - - // return TRUE only if rect has changed - return !EqualRect(&rectSave,&m_rect); -} - - -void Tracker::OnChangedRect(const RECT& /*rectOld*/) -{ -} - - -void Tracker::AdjustRect(int nHandle, LPRECT) -{ - if(nHandle == hitMiddle) - return; - - // convert the handle into locations within m_rect - int *px, *py; - GetModifyPointers(nHandle, &px, &py, NULL, NULL); - - // enforce minimum width - int nNewWidth = m_rect.right - m_rect.left; - int nAbsWidth = m_bAllowInvert ? abs(nNewWidth) : nNewWidth; - if (px != NULL && nAbsWidth < m_sizeMin.cx) - { - nNewWidth = nAbsWidth != 0 ? nNewWidth / nAbsWidth : 1; - const AFX_RECTINFO* pRectInfo = - &_afxRectInfo[(int*)px - (int*)&m_rect]; - *px = *(int*)((BYTE*)&m_rect + pRectInfo->nOffsetAcross) + - nNewWidth * m_sizeMin.cx * -pRectInfo->nSignAcross; - } - - // enforce minimum height - int nNewHeight = m_rect.bottom - m_rect.top; - int nAbsHeight = m_bAllowInvert ? abs(nNewHeight) : nNewHeight; - if (py != NULL && nAbsHeight < m_sizeMin.cy) - { - nNewHeight = nAbsHeight != 0 ? nNewHeight / nAbsHeight : 1; - const AFX_RECTINFO* pRectInfo = - &_afxRectInfo[(int*)py - (int*)&m_rect]; - *py = *(int*)((BYTE*)&m_rect + pRectInfo->nOffsetAcross) + - nNewHeight * m_sizeMin.cy * -pRectInfo->nSignAcross; - } -} - - -void Tracker::DrawTrackerRect( - LPRECT lpRect,HWND pWndClipTo,HDC pDC,HWND pWnd) -{ - // first, normalize the rectangle for drawing - RECT rect = *lpRect; - NormalizeRect(&rect); - - // convert to client coordinates - if (pWndClipTo != NULL) - TransformRect(&rect,pWnd,pWndClipTo); - - SIZE size; - size.cx = 0; size.cy = 0; - if (!m_bFinalErase) - { - // otherwise, size depends on the style - if (m_nStyle & hatchedBorder) - { - size.cx = size.cy = max(1,GetHandleSize(&rect)-1); - InflateRect(&rect,size.cx,size.cy); - } - else - { - size.cx = 1; // CX_BORDER; - size.cy = 1; // CY_BORDER; - } - } - - // and draw it - if (m_bFinalErase || !m_bErase) - DrawDragRect(pDC,&rect,size,&m_rectLast,m_sizeLast); - - // remember last rectangles - m_rectLast = rect; - m_sizeLast = size; -} - - -void Tracker::Draw(HDC hDC) const -{ - // set initial DC state - SetMapMode(hDC,MM_TEXT); - SetViewportOrgEx(hDC,0, 0,NULL); - SetWindowOrgEx(hDC,0, 0,NULL); - - // get normalized rectangle - RECT rect = m_rect; - NormalizeRect(&rect); - - HPEN pOldPen = NULL; - HBRUSH pOldBrush = NULL; - HGDIOBJ pTemp; - int nOldROP; - - // draw lines - if ((m_nStyle & (dottedLine|solidLine)) != 0) - { - if (m_nStyle & dottedLine) - pOldPen = (HPEN)SelectObject(hDC,_afxBlackDottedPen); - else - pOldPen = (HPEN)SelectObject(hDC,(HGDIOBJ)BLACK_PEN); - pOldBrush = (HBRUSH)SelectObject(hDC,(HGDIOBJ)NULL_BRUSH); - nOldROP = SetROP2(hDC,R2_COPYPEN); - InflateRect(&rect,+1, +1); // borders are one pixel outside - Rectangle(hDC,rect.left, rect.top, rect.right, rect.bottom); - SetROP2(hDC,nOldROP); - } - - // if hatchBrush is going to be used, need to unrealize it - if ((m_nStyle & (hatchInside|hatchedBorder)) != 0) - UnrealizeObject((HGDIOBJ)_afxHatchBrush); - - // hatch inside - if ((m_nStyle & hatchInside) != 0) - { - pTemp = SelectObject(hDC,(HGDIOBJ)NULL_PEN); - if (pOldPen == NULL) - pOldPen = (HPEN)pTemp; - pTemp = SelectObject(hDC,(HGDIOBJ)_afxHatchBrush); - if (pOldBrush == NULL) - pOldBrush = (HBRUSH)pTemp; - SetBkMode(hDC,TRANSPARENT); - nOldROP = SetROP2(hDC,R2_MASKNOTPEN); - Rectangle(hDC,rect.left+1, rect.top+1, rect.right, rect.bottom); - SetROP2(hDC,nOldROP); - } - - // draw hatched border - if ((m_nStyle & hatchedBorder) != 0) - { - pTemp = SelectObject(hDC,(HGDIOBJ)_afxHatchBrush); - if (pOldBrush == NULL) - pOldBrush = (HBRUSH)pTemp; - SetBkMode(hDC,OPAQUE); - RECT rectTrue; - GetTrueRect(&rectTrue); - PatBlt(hDC,rectTrue.left, rectTrue.top, rectTrue.right-rectTrue.left, - rect.top-rectTrue.top, 0x000F0001 /* Pn */); - PatBlt(hDC,rectTrue.left, rect.bottom, - rectTrue.right-rectTrue.left, - rectTrue.bottom-rect.bottom, 0x000F0001 /* Pn */); - PatBlt(hDC,rectTrue.left, rect.top, rect.left-rectTrue.left, - rect.bottom-rect.top, 0x000F0001 /* Pn */); - PatBlt(hDC,rect.right, rect.top, rectTrue.right-rect.right, - rect.bottom-rect.top, 0x000F0001 /* Pn */); - } - - // draw resize handles - if ((m_nStyle & (resizeInside|resizeOutside)) != 0) - { - UINT mask = GetHandleMask(); - HBRUSH hbrush = CreateSolidBrush(RGB(0,0,0)); - for (int i = 0; i < 8; ++i) - { - if (mask & (1<<i)) - { - GetHandleRect((TrackerHit)i, &rect); - // FillSolidRect(hDC,rect, RGB(0, 0, 0)); - FillRect(hDC,&rect,hbrush); - } - } - DeleteObject(hbrush); - } - - // cleanup pDC state - if (pOldPen != NULL) - SelectObject(hDC,pOldPen); - if (pOldBrush != NULL) - SelectObject(hDC,pOldBrush); - RestoreDC(hDC,-1); -} - - -void Tracker::GetHandleRect(int nHandle,RECT* pHandleRect) const -{ - // get normalized rectangle of the tracker - RECT rectT = m_rect; - NormalizeRect(&rectT); - if ((m_nStyle & (solidLine|dottedLine)) != 0) - InflateRect(&rectT,+1, +1); - - // since the rectangle itself was normalized, we also have to invert the - // resize handles. - nHandle = NormalizeHit(nHandle); - - // handle case of resize handles outside the tracker - int size = GetHandleSize(); - if (m_nStyle & resizeOutside) - InflateRect(&rectT,size-1, size-1); - - // calculate position of the resize handle - int nWidth = rectT.right - rectT.left; - int nHeight = rectT.bottom - rectT.top; - RECT rect; - const AFX_HANDLEINFO* pHandleInfo = &_afxHandleInfo[nHandle]; - rect.left = *(int*)((BYTE*)&rectT + pHandleInfo->nOffsetX); - rect.top = *(int*)((BYTE*)&rectT + pHandleInfo->nOffsetY); - rect.left += size * pHandleInfo->nHandleX; - rect.top += size * pHandleInfo->nHandleY; - rect.left += pHandleInfo->nCenterX * (nWidth - size) / 2; - rect.top += pHandleInfo->nCenterY * (nHeight - size) / 2; - rect.right = rect.left + size; - rect.bottom = rect.top + size; - - *pHandleRect = rect; -} - - -int Tracker::GetHandleSize(LPRECT lpRect) const -{ - if (lpRect == NULL) - lpRect = (LPRECT)&m_rect; - - int size = m_nHandleSize; - if (!(m_nStyle & resizeOutside)) - { - // make sure size is small enough for the size of the rect - int sizeMax = min(abs(lpRect->right - lpRect->left), - abs(lpRect->bottom - lpRect->top)); - if (size * 2 > sizeMax) - size = sizeMax / 2; - } - return size; -} - - -UINT Tracker::GetHandleMask() const -{ - UINT mask = 0x0F; // always have 4 corner handles - int size = m_nHandleSize*3; - if (abs(m_rect.right - m_rect.left) - size > 4) - mask |= 0x50; - if (abs(m_rect.bottom - m_rect.top) - size > 4) - mask |= 0xA0; - return mask; -} - - -void Tracker::GetTrueRect(LPRECT lpTrueRect) const -{ - RECT rect = m_rect; - NormalizeRect(&rect); - int nInflateBy = 0; - if ((m_nStyle & (resizeOutside|hatchedBorder)) != 0) - nInflateBy += GetHandleSize() - 1; - if ((m_nStyle & (solidLine|dottedLine)) != 0) - ++nInflateBy; - InflateRect(&rect,nInflateBy, nInflateBy); - *lpTrueRect = rect; -} - - -int Tracker::NormalizeHit(int nHandle) const -{ - if (nHandle == hitMiddle || nHandle == hitNothing) - return nHandle; - const AFX_HANDLEINFO* pHandleInfo = &_afxHandleInfo[nHandle]; - if (m_rect.right - m_rect.left < 0) - { - nHandle = (TrackerHit)pHandleInfo->nInvertX; - pHandleInfo = &_afxHandleInfo[nHandle]; - } - if (m_rect.bottom - m_rect.top < 0) - nHandle = (TrackerHit)pHandleInfo->nInvertY; - return nHandle; -} - - -int Tracker::HitTestHandles(POINT point) const -{ - RECT rect; - UINT mask = GetHandleMask(); - - // see if hit anywhere inside the tracker - GetTrueRect(&rect); - if (!PtInRect(&rect,point)) - return hitNothing; // totally missed - - // see if we hit a handle - for (int i = 0; i < 8; ++i) - { - if (mask & (1<<i)) - { - GetHandleRect((TrackerHit)i, &rect); - if (PtInRect(&rect,point)) - return (TrackerHit)i; - } - } - - // last of all, check for non-hit outside of object, between resize handles - if ((m_nStyle & hatchedBorder) == 0) - { - RECT rect = m_rect; - NormalizeRect(&rect); - if ((m_nStyle & dottedLine|solidLine) != 0) - InflateRect(&rect,+1, +1); - if (!PtInRect(&rect,point)) - return hitNothing; // must have been between resize handles - } - return hitMiddle; // no handle hit, but hit object (or object border) -} - - - -void Tracker::GetModifyPointers( - int nHandle, int** ppx, int** ppy, int* px, int* py) -{ - if (nHandle == hitMiddle) - nHandle = hitTopLeft; // same as hitting top-left - - *ppx = NULL; - *ppy = NULL; - - // fill in the part of the rect that this handle modifies - // (Note: handles that map to themselves along a given axis when that - // axis is inverted don't modify the value on that axis) - - const AFX_HANDLEINFO* pHandleInfo = &_afxHandleInfo[nHandle]; - if (pHandleInfo->nInvertX != nHandle) - { - *ppx = (int*)((BYTE*)&m_rect + pHandleInfo->nOffsetX); - if (px != NULL) - *px = **ppx; - } - else - { - // middle handle on X axis - if (px != NULL) - *px = m_rect.left + (m_rect.left-m_rect.right) / 2; - } - if (pHandleInfo->nInvertY != nHandle) - { - *ppy = (int*)((BYTE*)&m_rect + pHandleInfo->nOffsetY); - if (py != NULL) - *py = **ppy; - } - else - { - // middle handle on Y axis - if (py != NULL) - *py = m_rect.top + (m_rect.top-m_rect.bottom) / 2; - } -} - -// 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: */ diff --git a/embedserv/source/embed/xwin.cxx b/embedserv/source/embed/xwin.cxx deleted file mode 100644 index 38840a7d7..000000000 --- a/embedserv/source/embed/xwin.cxx +++ /dev/null @@ -1,349 +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 "xwin.hxx" -#include <com/sun/star/lang/SystemDependent.hpp> - - -using namespace ::com::sun::star; - - -ContainerWindowWrapper::ContainerWindowWrapper(HWND aHwnd) - : m_aHwnd(aHwnd), - m_pDisposeEventListeners(0) -{ -} - -ContainerWindowWrapper::~ContainerWindowWrapper() -{ - delete m_pDisposeEventListeners; -} - - -void SAL_CALL -ContainerWindowWrapper::dispose( -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - cppu::OInterfaceContainerHelper *pDisposeEventListeners(0); - - { - osl::MutexGuard aGuard(m_aMutex); - pDisposeEventListeners = m_pDisposeEventListeners; - } - - if(pDisposeEventListeners) { - lang::EventObject aEvt; - aEvt.Source = static_cast< awt::XWindow* >(this); - - pDisposeEventListeners->disposeAndClear(aEvt); - } -} - - -void SAL_CALL -ContainerWindowWrapper::addEventListener( - const ::com::sun::star::uno::Reference< - ::com::sun::star::lang::XEventListener >& Listener -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - cppu::OInterfaceContainerHelper *pDisposeEventListeners(0); - { - osl::MutexGuard aGuard(m_aMutex); - pDisposeEventListeners = m_pDisposeEventListeners; - } - - if(! pDisposeEventListeners) - { - osl::MutexGuard aGuard(m_aMutex); - pDisposeEventListeners = m_pDisposeEventListeners = - new cppu::OInterfaceContainerHelper(m_aMutex); - } - - pDisposeEventListeners->addInterface( Listener ); -} - - -void SAL_CALL -ContainerWindowWrapper::removeEventListener( - const ::com::sun::star::uno::Reference< - ::com::sun::star::lang::XEventListener >& Listener -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - cppu::OInterfaceContainerHelper *pDisposeEventListeners(0); - { - osl::MutexGuard aGuard(m_aMutex); - pDisposeEventListeners = m_pDisposeEventListeners; - } - if( pDisposeEventListeners ) - pDisposeEventListeners->removeInterface( Listener ); -} - - - -// XSystemDependentWindowPeer - -::com::sun::star::uno::Any SAL_CALL -ContainerWindowWrapper::getWindowHandle( - const ::com::sun::star::uno::Sequence< sal_Int8 >& ProcessId, - sal_Int16 SystemType -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - if(SystemType == lang::SystemDependent::SYSTEM_WIN32 || - SystemType == lang::SystemDependent::SYSTEM_WIN16) - { - uno::Any aAny; - sal_Int32 nHwnd = sal_Int32(m_aHwnd); - aAny <<= nHwnd; - return aAny; - } - else - return uno::Any(); -} - - - -void SAL_CALL -ContainerWindowWrapper::setPosSize( - sal_Int32 X, - sal_Int32 Y, - sal_Int32 Width, - sal_Int32 Height, - sal_Int16 Flags -) - throw ( - ::com::sun::star::uno::RuntimeException) -{ - -} - -::com::sun::star::awt::Rectangle SAL_CALL -ContainerWindowWrapper::getPosSize( -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - return awt::Rectangle(); -} - - -void SAL_CALL -ContainerWindowWrapper::setVisible( - sal_Bool Visible -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - -} - - -void SAL_CALL -ContainerWindowWrapper::setEnable( - sal_Bool Enable -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - -} - -void SAL_CALL -ContainerWindowWrapper::setFocus( -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - -} - -void SAL_CALL -ContainerWindowWrapper::addWindowListener( - const ::com::sun::star::uno::Reference< - ::com::sun::star::awt::XWindowListener >& xListener -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - -} - -void SAL_CALL -ContainerWindowWrapper::removeWindowListener( - const ::com::sun::star::uno::Reference< - ::com::sun::star::awt::XWindowListener >& xListener -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - -} - - -void SAL_CALL -ContainerWindowWrapper::addFocusListener( - const ::com::sun::star::uno::Reference< - ::com::sun::star::awt::XFocusListener >& xListener -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - -} - - -void SAL_CALL -ContainerWindowWrapper::removeFocusListener( - const ::com::sun::star::uno::Reference< - ::com::sun::star::awt::XFocusListener >& xListener -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - -} - -void SAL_CALL -ContainerWindowWrapper::addKeyListener( - const ::com::sun::star::uno::Reference< - ::com::sun::star::awt::XKeyListener >& xListener -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - -} - -void SAL_CALL -ContainerWindowWrapper::removeKeyListener( - const ::com::sun::star::uno::Reference< - ::com::sun::star::awt::XKeyListener >& xListener -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - -} - - -void SAL_CALL -ContainerWindowWrapper::addMouseListener( - const ::com::sun::star::uno::Reference< - ::com::sun::star::awt::XMouseListener >& xListener -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - -} - - -void SAL_CALL -ContainerWindowWrapper::removeMouseListener( - const ::com::sun::star::uno::Reference< - ::com::sun::star::awt::XMouseListener >& xListener -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - -} - - -void SAL_CALL -ContainerWindowWrapper::addMouseMotionListener( - const ::com::sun::star::uno::Reference< - ::com::sun::star::awt::XMouseMotionListener >& xListener -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - -} - -void SAL_CALL -ContainerWindowWrapper::removeMouseMotionListener( - const ::com::sun::star::uno::Reference< - ::com::sun::star::awt::XMouseMotionListener >& xListener -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - -} - -void SAL_CALL -ContainerWindowWrapper::addPaintListener( - const ::com::sun::star::uno::Reference< - ::com::sun::star::awt::XPaintListener >& xListener -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - -} - -void SAL_CALL -ContainerWindowWrapper::removePaintListener( - const ::com::sun::star::uno::Reference< - ::com::sun::star::awt::XPaintListener >& xListener -) - throw ( - ::com::sun::star::uno::RuntimeException - ) -{ - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |