1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 #ifndef _DOCHOLDER_HXX_ 29 #define _DOCHOLDER_HXX_ 30 31 #include "common.h" 32 #include <com/sun/star/frame/XLayoutManager.hpp> 33 #include <com/sun/star/util/XCloseListener.hpp> 34 #include <com/sun/star/frame/XTerminateListener.hpp> 35 #include <com/sun/star/util/XModifyListener.hpp> 36 #include <com/sun/star/frame/XFrame.hpp> 37 #include <com/sun/star/frame/XDispatchProviderInterceptor.hpp> 38 #include <cppuhelper/implbase4.hxx> 39 40 #include <rtl/ref.hxx> 41 42 #include "embeddocaccess.hxx" 43 44 class EmbedDocument_Impl; 45 class Interceptor; 46 class CIIAObj; 47 48 namespace winwrap { 49 class CHatchWin; 50 } 51 52 53 class DocumentHolder : 54 public ::cppu::WeakImplHelper4< 55 ::com::sun::star::util::XCloseListener, 56 ::com::sun::star::frame::XTerminateListener, 57 ::com::sun::star::util::XModifyListener, 58 ::com::sun::star::ui::XDockingAreaAcceptor> 59 { 60 private: 61 ::osl::Mutex m_aMutex; 62 63 BOOL m_bAllowInPlace; 64 LPOLEINPLACESITE m_pIOleIPSite; 65 LPOLEINPLACEFRAME m_pIOleIPFrame; 66 LPOLEINPLACEUIWINDOW m_pIOleIPUIWindow; 67 winwrap::CHatchWin* m_pCHatchWin; 68 69 ::rtl::Reference< EmbeddedDocumentInstanceAccess_Impl > m_xOleAccess; 70 71 ::com::sun::star::uno::WeakReference< ::com::sun::star::frame::XDispatchProviderInterceptor > m_xInterceptorLocker; 72 Interceptor* m_pInterceptor; 73 74 ::com::sun::star::uno::Reference< 75 ::com::sun::star::lang::XMultiServiceFactory > m_xFactory; 76 77 RECT m_aBorder; 78 79 // contains top level system window data 80 bool m_bOnDeactivate; 81 HWND m_hWndxWinParent; 82 HWND m_hWndxWinCont; 83 HMENU m_nMenuHandle; 84 HMENU m_nMenuShared; 85 HOLEMENU m_nOLEMenu; 86 com::sun::star::uno::Reference< 87 com::sun::star::awt::XWindow> m_xEditWindow; 88 89 com::sun::star::uno::Reference< 90 com::sun::star::awt::XWindow> m_xContainerWindow; 91 92 ::com::sun::star::uno::Reference< 93 ::com::sun::star::frame::XModel > m_xDocument; 94 sal_Int16 m_nMacroExecMode; 95 96 ::com::sun::star::uno::Reference< 97 ::com::sun::star::frame::XLayoutManager> m_xLayoutManager; 98 99 100 ::com::sun::star::uno::Reference< 101 ::com::sun::star::frame::XFrame > m_xFrame; 102 103 ::rtl::OUString m_aContainerName,m_aDocumentNamePart,m_aFilterName; 104 105 CComPtr< IDispatch > m_pIDispatch; 106 107 sal_Bool m_bLink; 108 109 110 ::com::sun::star::uno::Reference< 111 ::com::sun::star::frame::XFrame > DocumentFrame(); 112 113 114 ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor > 115 CreateNewInterceptor(); 116 117 void ClearInterceptorInternally(); 118 119 void LoadDocInFrame( sal_Bool bPluginMode ); 120 public: 121 122 123 // the instance to which we belong 124 static HINSTANCE m_hInstance; 125 126 HWND GetEditWindowParentHandle() const 127 { 128 return m_hWndxWinParent; 129 } 130 131 void SetContainerWindowHandle(HWND hWndxWinCont) 132 { 133 m_hWndxWinCont = hWndxWinCont; 134 } 135 136 DocumentHolder( 137 const ::com::sun::star::uno::Reference< 138 ::com::sun::star::lang::XMultiServiceFactory >& xFactory, 139 const ::rtl::Reference< EmbeddedDocumentInstanceAccess_Impl >& xOleAccess ); 140 141 ~DocumentHolder(); 142 143 // Methods for inplace activation 144 145 146 BOOL isActive() const; 147 void DisableInplaceActivation(BOOL); 148 HRESULT InPlaceActivate(LPOLECLIENTSITE,BOOL); 149 void InPlaceDeactivate(void); 150 HRESULT UIActivate(); 151 void UIDeactivate(); 152 BOOL InPlaceMenuCreate(void); 153 BOOL InPlaceMenuDestroy(void); 154 155 void OpenIntoWindow(void); 156 BOOL Undo(void); 157 158 // further methods 159 160 void SetDocument( 161 const ::com::sun::star::uno::Reference< 162 ::com::sun::star::frame::XModel >& xDoc, 163 sal_Bool bLink = sal_False 164 ); 165 166 sal_Bool ExecuteSuspendCloseFrame(); 167 168 void DisconnectFrameDocument( sal_Bool bComplete = sal_False ); 169 void CloseDocument(); 170 void CloseFrame(); 171 void ClearInterceptor(); 172 void FreeOffice(); 173 174 void resizeWin( const SIZEL& rNewSize ); 175 176 void setTitle(const rtl::OUString& aDocumentName); 177 rtl::OUString getTitle() const { return m_aDocumentNamePart; } 178 179 void setContainerName(const rtl::OUString& aContainerName); 180 rtl::OUString getContainerName() const { return m_aContainerName; } 181 void OnPosRectChanged(LPRECT lpRect) const; 182 void show(); 183 184 sal_Bool HasFrame() { return m_xFrame.is(); } 185 sal_Bool IsLink() { return m_bLink; } 186 187 /** hides the document window, even in case of an external container 188 * side managed window. 189 */ 190 191 void hide(); 192 193 IDispatch* GetIDispatch(); 194 195 HRESULT GetDocumentBorder( RECT *pRect ); 196 // HRESULT SetVisArea( const RECTL *pRect ); 197 // HRESULT GetVisArea( RECTL *pRect ); 198 HRESULT SetExtent( const SIZEL *pSize ); 199 HRESULT GetExtent( SIZEL *pSize ); 200 // sets extension on the hatchwindow 201 HRESULT SetContRects(LPCRECT pRect); 202 HRESULT SetObjectRects(LPCRECT aRect, LPCRECT aClip); 203 204 HWND GetTopMostWinHandle() const 205 { 206 return m_hWndxWinParent; 207 } 208 209 ::com::sun::star::uno::Reference< 210 ::com::sun::star::frame::XModel > 211 GetDocument() const 212 { 213 return m_xDocument; 214 } 215 216 // XEventListener 217 virtual void SAL_CALL 218 disposing( const com::sun::star::lang::EventObject& aSource ) 219 throw( ::com::sun::star::uno::RuntimeException ); 220 221 // XCloseListener 222 virtual void SAL_CALL 223 queryClosing( 224 const com::sun::star::lang::EventObject& aSource, 225 sal_Bool bGetsOwnership 226 ) 227 throw( 228 ::com::sun::star::util::CloseVetoException 229 ); 230 231 virtual void SAL_CALL 232 notifyClosing( 233 const com::sun::star::lang::EventObject& aSource 234 ) 235 throw( ::com::sun::star::uno::RuntimeException ); 236 237 // XTerminateListener 238 virtual void SAL_CALL 239 queryTermination( 240 const com::sun::star::lang::EventObject& aSource 241 ) 242 throw( 243 ::com::sun::star::frame::TerminationVetoException 244 ); 245 246 virtual void SAL_CALL 247 notifyTermination( 248 const com::sun::star::lang::EventObject& aSource 249 ) 250 throw( ::com::sun::star::uno::RuntimeException ); 251 252 253 // XModifyListener 254 virtual void SAL_CALL 255 modified( 256 const ::com::sun::star::lang::EventObject& aEvent 257 ) 258 throw ( 259 ::com::sun::star::uno::RuntimeException 260 ); 261 262 // XDockingAreaAcceptor 263 264 virtual ::com::sun::star::uno::Reference< 265 ::com::sun::star::awt::XWindow> SAL_CALL 266 getContainerWindow( 267 ) 268 throw ( 269 ::com::sun::star::uno::RuntimeException 270 ); 271 272 virtual sal_Bool SAL_CALL 273 requestDockingAreaSpace( 274 const ::com::sun::star::awt::Rectangle& RequestedSpace 275 ) 276 throw( 277 ::com::sun::star::uno::RuntimeException 278 ); 279 280 virtual void SAL_CALL 281 setDockingAreaSpace( 282 const ::com::sun::star::awt::Rectangle& BorderSpace 283 ) 284 throw ( 285 ::com::sun::star::uno::RuntimeException 286 ); 287 }; 288 289 #endif 290 291