xref: /AOO41X/main/embedserv/source/inc/docholder.hxx (revision a20fd0235fcbf78445e601ac6722c1cb957ac17f)
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