xref: /trunk/main/sfx2/source/appl/helpinterceptor.hxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
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 #ifndef INCLUDED_SFX_HELPINTERCEPTOR_HXX
28 #define INCLUDED_SFX_HELPINTERCEPTOR_HXX
29 
30 #ifndef _CPPUHELPER_IMPLBASE2_HXX_
31 #include <cppuhelper/implbase3.hxx>
32 #endif
33 #include <com/sun/star/frame/XDispatchProviderInterceptor.hpp>
34 #include <com/sun/star/frame/XInterceptorInfo.hpp>
35 #include <com/sun/star/frame/XDispatch.hpp>
36 #include <com/sun/star/frame/XDispatchProviderInterception.hpp>
37 #include <com/sun/star/frame/XFrame.hpp>
38 #include <cppuhelper/implbase1.hxx>
39 #include <com/sun/star/frame/XStatusListener.hpp>
40 #include <tools/string.hxx>
41 #include <tools/list.hxx>
42 #include <tools/link.hxx>
43 
44 struct HelpHistoryEntry_Impl
45 {
46     String  aURL;
47     com::sun::star::uno::Any    aViewData;
48 
49     HelpHistoryEntry_Impl( const String& rURL, const com::sun::star::uno::Any& rViewData ) :
50         aURL( rURL ), aViewData(rViewData) {}
51 };
52 
53 DECLARE_LIST(HelpHistoryList_Impl,HelpHistoryEntry_Impl*)
54 
55 class SfxHelpWindow_Impl;
56 class HelpInterceptor_Impl : public ::cppu::WeakImplHelper3<
57 
58         ::com::sun::star::frame::XDispatchProviderInterceptor,
59         ::com::sun::star::frame::XInterceptorInfo,
60         ::com::sun::star::frame::XDispatch >
61 
62 {
63 private:
64 friend class HelpDispatch_Impl;
65 friend class SfxHelpWindow_Impl;
66 
67     // the component which's dispatches we're intercepting
68     ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterception > m_xIntercepted;
69 
70     // chaining
71     ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > m_xSlaveDispatcher;
72     ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > m_xMasterDispatcher;
73 
74     ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener > m_xListener;
75 
76     HelpHistoryList_Impl*       m_pHistory;
77     SfxHelpWindow_Impl*         m_pWindow;
78     sal_uIntPtr                     m_nCurPos;
79     String                      m_aCurrentURL;
80     com::sun::star::uno::Any    m_aViewData;
81 
82     void                        addURL( const String& rURL );
83 
84 public:
85     HelpInterceptor_Impl();
86     ~HelpInterceptor_Impl();
87 
88     void                    setInterception( ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > xFrame );
89     void                    SetStartURL( const String& rURL );
90     String                  GetCurrentURL() const { return m_aCurrentURL; }
91 
92 
93 
94     const com::sun::star::uno::Any&     GetViewData()const {return m_aViewData;}
95 
96     sal_Bool                HasHistoryPred() const;     // is there a predecessor for the current in the history
97     sal_Bool                HasHistorySucc() const;     // is there a successor for the current in the history
98 
99     // XDispatchProvider
100     virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > SAL_CALL
101                             queryDispatch( const ::com::sun::star::util::URL& aURL, const ::rtl::OUString& aTargetFrameName, sal_Int32 nSearchFlags ) throw(::com::sun::star::uno::RuntimeException);
102     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > > SAL_CALL
103                             queryDispatches( const ::com::sun::star::uno::Sequence< ::com::sun::star::frame::DispatchDescriptor >& aDescripts ) throw(::com::sun::star::uno::RuntimeException);
104 
105     // XDispatchProviderInterceptor
106     virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > SAL_CALL
107                             getSlaveDispatchProvider(  ) throw(::com::sun::star::uno::RuntimeException);
108     virtual void SAL_CALL   setSlaveDispatchProvider( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider >& xNewSlave ) throw(::com::sun::star::uno::RuntimeException);
109     virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > SAL_CALL
110                             getMasterDispatchProvider(  ) throw(::com::sun::star::uno::RuntimeException);
111     virtual void SAL_CALL   setMasterDispatchProvider( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider >& xNewMaster ) throw(::com::sun::star::uno::RuntimeException);
112 
113     // XInterceptorInfo
114     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL
115                             getInterceptedURLs(  ) throw(::com::sun::star::uno::RuntimeException);
116 
117     // XDispatch
118     virtual void SAL_CALL   dispatch( const ::com::sun::star::util::URL& aURL, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aArgs ) throw(::com::sun::star::uno::RuntimeException);
119     virtual void SAL_CALL   addStatusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >& xControl, const ::com::sun::star::util::URL& aURL ) throw(::com::sun::star::uno::RuntimeException);
120     virtual void SAL_CALL   removeStatusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >& xControl, const ::com::sun::star::util::URL& aURL ) throw(::com::sun::star::uno::RuntimeException);
121 
122     // extras
123     void                    InitWaiter( SfxHelpWindow_Impl* pWindow )
124                                 { m_pWindow = pWindow; }
125     SfxHelpWindow_Impl*     GetHelpWindow() const { return m_pWindow; }
126 };
127 
128 // HelpListener_Impl -----------------------------------------------------
129 
130 class HelpListener_Impl : public ::cppu::WeakImplHelper1< ::com::sun::star::frame::XStatusListener >
131 {
132 private:
133     HelpInterceptor_Impl*   pInterceptor;
134     Link                    aChangeLink;
135     String                  aFactory;
136 
137 public:
138     HelpListener_Impl( HelpInterceptor_Impl* pInter );
139 
140     virtual void SAL_CALL   statusChanged( const ::com::sun::star::frame::FeatureStateEvent& Event )
141                                 throw( ::com::sun::star::uno::RuntimeException );
142     virtual void SAL_CALL   disposing( const ::com::sun::star::lang::EventObject& obj )
143                                 throw( ::com::sun::star::uno::RuntimeException );
144 
145     void                    SetChangeHdl( const Link& rLink ) { aChangeLink = rLink; }
146     String                  GetFactory() const { return aFactory; }
147 };
148 // HelpStatusListener_Impl -----------------------------------------------------
149 
150 class HelpStatusListener_Impl : public
151 ::cppu::WeakImplHelper1< ::com::sun::star::frame::XStatusListener >
152 {
153 private:
154     ::com::sun::star::uno::Reference < ::com::sun::star::frame::XDispatch > xDispatch;
155     ::com::sun::star::frame::FeatureStateEvent                              aStateEvent;
156 
157 public:
158     HelpStatusListener_Impl(
159         ::com::sun::star::uno::Reference < ::com::sun::star::frame::XDispatch > xDispatch,
160         com::sun::star::util::URL& rURL);
161     ~HelpStatusListener_Impl();
162 
163     virtual void SAL_CALL   statusChanged( const ::com::sun::star::frame::FeatureStateEvent& Event )
164                                 throw( ::com::sun::star::uno::RuntimeException );
165     virtual void SAL_CALL   disposing( const ::com::sun::star::lang::EventObject& obj )
166                                 throw( ::com::sun::star::uno::RuntimeException );
167     const ::com::sun::star::frame::FeatureStateEvent&
168                             GetStateEvent() const {return aStateEvent;}
169 };
170 
171 
172 #endif // #ifndef INCLUDED_SFX_HELPINTERCEPTOR_HXX
173 
174