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