| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #ifndef _DOCHOLDER_HXX_ |
| #define _DOCHOLDER_HXX_ |
| |
| #include "common.h" |
| #include <com/sun/star/frame/XLayoutManager.hpp> |
| #include <com/sun/star/util/XCloseListener.hpp> |
| #include <com/sun/star/frame/XTerminateListener.hpp> |
| #include <com/sun/star/util/XModifyListener.hpp> |
| #include <com/sun/star/frame/XFrame.hpp> |
| #include <com/sun/star/frame/XDispatchProviderInterceptor.hpp> |
| #include <cppuhelper/implbase4.hxx> |
| |
| #include <rtl/ref.hxx> |
| |
| #include "embeddocaccess.hxx" |
| |
| class EmbedDocument_Impl; |
| class Interceptor; |
| class CIIAObj; |
| |
| namespace winwrap { |
| class CHatchWin; |
| } |
| |
| |
| class DocumentHolder : |
| public ::cppu::WeakImplHelper4< |
| ::com::sun::star::util::XCloseListener, |
| ::com::sun::star::frame::XTerminateListener, |
| ::com::sun::star::util::XModifyListener, |
| ::com::sun::star::ui::XDockingAreaAcceptor> |
| { |
| private: |
| ::osl::Mutex m_aMutex; |
| |
| BOOL m_bAllowInPlace; |
| LPOLEINPLACESITE m_pIOleIPSite; |
| LPOLEINPLACEFRAME m_pIOleIPFrame; |
| LPOLEINPLACEUIWINDOW m_pIOleIPUIWindow; |
| winwrap::CHatchWin* m_pCHatchWin; |
| |
| ::rtl::Reference< EmbeddedDocumentInstanceAccess_Impl > m_xOleAccess; |
| |
| ::com::sun::star::uno::WeakReference< ::com::sun::star::frame::XDispatchProviderInterceptor > m_xInterceptorLocker; |
| Interceptor* m_pInterceptor; |
| |
| ::com::sun::star::uno::Reference< |
| ::com::sun::star::lang::XMultiServiceFactory > m_xFactory; |
| |
| RECT m_aBorder; |
| |
| // contains top level system window data |
| bool m_bOnDeactivate; |
| HWND m_hWndxWinParent; |
| HWND m_hWndxWinCont; |
| HMENU m_nMenuHandle; |
| HMENU m_nMenuShared; |
| HOLEMENU m_nOLEMenu; |
| com::sun::star::uno::Reference< |
| com::sun::star::awt::XWindow> m_xEditWindow; |
| |
| com::sun::star::uno::Reference< |
| com::sun::star::awt::XWindow> m_xContainerWindow; |
| |
| ::com::sun::star::uno::Reference< |
| ::com::sun::star::frame::XModel > m_xDocument; |
| sal_Int16 m_nMacroExecMode; |
| |
| ::com::sun::star::uno::Reference< |
| ::com::sun::star::frame::XLayoutManager> m_xLayoutManager; |
| |
| |
| ::com::sun::star::uno::Reference< |
| ::com::sun::star::frame::XFrame > m_xFrame; |
| |
| ::rtl::OUString m_aContainerName,m_aDocumentNamePart,m_aFilterName; |
| |
| CComPtr< IDispatch > m_pIDispatch; |
| |
| sal_Bool m_bLink; |
| |
| |
| ::com::sun::star::uno::Reference< |
| ::com::sun::star::frame::XFrame > DocumentFrame(); |
| |
| |
| ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor > |
| CreateNewInterceptor(); |
| |
| void ClearInterceptorInternally(); |
| |
| void LoadDocInFrame( sal_Bool bPluginMode ); |
| public: |
| |
| |
| // the instance to which we belong |
| static HINSTANCE m_hInstance; |
| |
| HWND GetEditWindowParentHandle() const |
| { |
| return m_hWndxWinParent; |
| } |
| |
| void SetContainerWindowHandle(HWND hWndxWinCont) |
| { |
| m_hWndxWinCont = hWndxWinCont; |
| } |
| |
| DocumentHolder( |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::lang::XMultiServiceFactory >& xFactory, |
| const ::rtl::Reference< EmbeddedDocumentInstanceAccess_Impl >& xOleAccess ); |
| |
| ~DocumentHolder(); |
| |
| // Methods for inplace activation |
| |
| |
| BOOL isActive() const; |
| void DisableInplaceActivation(BOOL); |
| HRESULT InPlaceActivate(LPOLECLIENTSITE,BOOL); |
| void InPlaceDeactivate(void); |
| HRESULT UIActivate(); |
| void UIDeactivate(); |
| BOOL InPlaceMenuCreate(void); |
| BOOL InPlaceMenuDestroy(void); |
| |
| void OpenIntoWindow(void); |
| BOOL Undo(void); |
| |
| // further methods |
| |
| void SetDocument( |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::frame::XModel >& xDoc, |
| sal_Bool bLink = sal_False |
| ); |
| |
| sal_Bool ExecuteSuspendCloseFrame(); |
| |
| void DisconnectFrameDocument( sal_Bool bComplete = sal_False ); |
| void CloseDocument(); |
| void CloseFrame(); |
| void ClearInterceptor(); |
| void FreeOffice(); |
| |
| void resizeWin( const SIZEL& rNewSize ); |
| |
| void setTitle(const rtl::OUString& aDocumentName); |
| rtl::OUString getTitle() const { return m_aDocumentNamePart; } |
| |
| void setContainerName(const rtl::OUString& aContainerName); |
| rtl::OUString getContainerName() const { return m_aContainerName; } |
| void OnPosRectChanged(LPRECT lpRect) const; |
| void show(); |
| |
| sal_Bool HasFrame() { return m_xFrame.is(); } |
| sal_Bool IsLink() { return m_bLink; } |
| |
| /** hides the document window, even in case of an external container |
| * side managed window. |
| */ |
| |
| void hide(); |
| |
| IDispatch* GetIDispatch(); |
| |
| HRESULT GetDocumentBorder( RECT *pRect ); |
| // HRESULT SetVisArea( const RECTL *pRect ); |
| // HRESULT GetVisArea( RECTL *pRect ); |
| HRESULT SetExtent( const SIZEL *pSize ); |
| HRESULT GetExtent( SIZEL *pSize ); |
| // sets extension on the hatchwindow |
| HRESULT SetContRects(LPCRECT pRect); |
| HRESULT SetObjectRects(LPCRECT aRect, LPCRECT aClip); |
| |
| HWND GetTopMostWinHandle() const |
| { |
| return m_hWndxWinParent; |
| } |
| |
| ::com::sun::star::uno::Reference< |
| ::com::sun::star::frame::XModel > |
| GetDocument() const |
| { |
| return m_xDocument; |
| } |
| |
| // XEventListener |
| virtual void SAL_CALL |
| disposing( const com::sun::star::lang::EventObject& aSource ) |
| throw( ::com::sun::star::uno::RuntimeException ); |
| |
| // XCloseListener |
| virtual void SAL_CALL |
| queryClosing( |
| const com::sun::star::lang::EventObject& aSource, |
| sal_Bool bGetsOwnership |
| ) |
| throw( |
| ::com::sun::star::util::CloseVetoException |
| ); |
| |
| virtual void SAL_CALL |
| notifyClosing( |
| const com::sun::star::lang::EventObject& aSource |
| ) |
| throw( ::com::sun::star::uno::RuntimeException ); |
| |
| // XTerminateListener |
| virtual void SAL_CALL |
| queryTermination( |
| const com::sun::star::lang::EventObject& aSource |
| ) |
| throw( |
| ::com::sun::star::frame::TerminationVetoException |
| ); |
| |
| virtual void SAL_CALL |
| notifyTermination( |
| const com::sun::star::lang::EventObject& aSource |
| ) |
| throw( ::com::sun::star::uno::RuntimeException ); |
| |
| |
| // XModifyListener |
| virtual void SAL_CALL |
| modified( |
| const ::com::sun::star::lang::EventObject& aEvent |
| ) |
| throw ( |
| ::com::sun::star::uno::RuntimeException |
| ); |
| |
| // XDockingAreaAcceptor |
| |
| virtual ::com::sun::star::uno::Reference< |
| ::com::sun::star::awt::XWindow> SAL_CALL |
| getContainerWindow( |
| ) |
| throw ( |
| ::com::sun::star::uno::RuntimeException |
| ); |
| |
| virtual sal_Bool SAL_CALL |
| requestDockingAreaSpace( |
| const ::com::sun::star::awt::Rectangle& RequestedSpace |
| ) |
| throw( |
| ::com::sun::star::uno::RuntimeException |
| ); |
| |
| virtual void SAL_CALL |
| setDockingAreaSpace( |
| const ::com::sun::star::awt::Rectangle& BorderSpace |
| ) |
| throw ( |
| ::com::sun::star::uno::RuntimeException |
| ); |
| }; |
| |
| #endif |
| |