xref: /trunk/main/odk/examples/cpp/complextoolbarcontrols/MyProtocolHandler.h (revision 91144cd0085a7583d2099b982122deb2184ab956)
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 #ifndef _MyProtocolHandler_HXX
23 #define _MyProtocolHandler_HXX
24 
25 #include <com/sun/star/uno/XComponentContext.hpp>
26 #include <com/sun/star/awt/XToolkit.hpp>
27 #include <com/sun/star/beans/NamedValue.hpp>
28 #include <com/sun/star/lang/XInitialization.hpp>
29 #include <com/sun/star/lang/XServiceInfo.hpp>
30 #include <com/sun/star/frame/XDispatchProvider.hpp>
31 #include <com/sun/star/frame/XControlNotificationListener.hpp>
32 #include <cppuhelper/implbase2.hxx>
33 #include <cppuhelper/implbase3.hxx>
34 
35 #define MYPROTOCOLHANDLER_IMPLEMENTATIONNAME   "vnd.demo.Impl.ProtocolHandler"
36 #define MYPROTOCOLHANDLER_SERVICENAME          "vnd.demo.ProtocolHandler"
37 
38 namespace com
39 {
40     namespace sun
41     {
42         namespace star
43         {
44             namespace frame
45             {
46                 class XModel;
47                 class XFrame;
48             }
49         }
50     }
51 }
52 
53 
54 class MyProtocolHandler : public cppu::WeakImplHelper3
55 <
56     com::sun::star::frame::XDispatchProvider,
57     com::sun::star::lang::XInitialization,
58     com::sun::star::lang::XServiceInfo
59 >
60 {
61 private:
62     ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > mxContext;
63     ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > mxFrame;
64 
65 public:
MyProtocolHandler(const::com::sun::star::uno::Reference<::com::sun::star::uno::XComponentContext> & rxContext)66     MyProtocolHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > &rxContext)
67         : mxContext( rxContext ) {}
68 
69     // XDispatchProvider
70     virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch >
71             SAL_CALL queryDispatch( const ::com::sun::star::util::URL& aURL,
72                 const ::rtl::OUString& sTargetFrameName, sal_Int32 nSearchFlags );
73     virtual ::com::sun::star::uno::Sequence < ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > >
74         SAL_CALL queryDispatches(
75             const ::com::sun::star::uno::Sequence < ::com::sun::star::frame::DispatchDescriptor >& seqDescriptor );
76 
77     // XInitialization
78     virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments );
79 
80     // XServiceInfo
81     virtual ::rtl::OUString SAL_CALL getImplementationName(  );
82     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName );
83     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(  );
84 };
85 
86 ::rtl::OUString MyProtocolHandler_getImplementationName();
87 
88 sal_Bool SAL_CALL MyProtocolHandler_supportsService( const ::rtl::OUString& ServiceName );
89 
90 ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL MyProtocolHandler_getSupportedServiceNames(  );
91 
92 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >
93 SAL_CALL MyProtocolHandler_createInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > & rContext);
94 
95 class BaseDispatch : public cppu::WeakImplHelper2
96 <
97     ::com::sun::star::frame::XDispatch,
98     ::com::sun::star::frame::XControlNotificationListener
99 >
100 {
101 protected:
102     ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > mxFrame;
103     ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > mxContext;
104     ::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit > mxToolkit;
105     ::rtl::OUString msDocService;
106     ::rtl::OUString maComboBoxText;
107     sal_Bool        mbButtonEnabled;
108 
109 public:
110     BaseDispatch( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > &rxContext,
111         const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& xFrame, const ::rtl::OUString& rServiceName );
112 
113     virtual ~BaseDispatch();
114 
115     void ShowMessageBox( const com::sun::star::uno::Reference< com::sun::star::frame::XFrame >& rFrame, const ::rtl::OUString& aTitle, const ::rtl::OUString& aMsgText );
116     void SendCommand( const com::sun::star::util::URL& aURL, const ::rtl::OUString& rCommand, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& rArgs, sal_Bool bEnabled );
117     void SendCommandTo( const com::sun::star::uno::Reference< com::sun::star::frame::XStatusListener >& xControl, const com::sun::star::util::URL& aURL, const ::rtl::OUString& rCommand, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& rArgs, sal_Bool bEnabled );
118 
119     // XDispatch
120     virtual void SAL_CALL dispatch( const ::com::sun::star::util::URL& aURL,
121         const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& lArgs );
122     virtual void SAL_CALL addStatusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >& xControl,
123         const ::com::sun::star::util::URL& aURL );
124     virtual void SAL_CALL removeStatusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >& xControl,
125         const ::com::sun::star::util::URL& aURL );
126 
127     // XControlNotificationListener
128     virtual void SAL_CALL controlEvent( const ::com::sun::star::frame::ControlEvent& Event );
129 };
130 
131 class WriterDispatch : public BaseDispatch
132 {
133 public:
WriterDispatch(const::com::sun::star::uno::Reference<::com::sun::star::uno::XComponentContext> & rxContext,const::com::sun::star::uno::Reference<::com::sun::star::frame::XFrame> & xFrame)134     WriterDispatch( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > &rxContext,
135         const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& xFrame )
136         : BaseDispatch( rxContext, xFrame, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextDocument" ) ) )
137     {}
138 };
139 
140 class CalcDispatch : public BaseDispatch
141 {
142 public:
CalcDispatch(const::com::sun::star::uno::Reference<::com::sun::star::uno::XComponentContext> & rxContext,const::com::sun::star::uno::Reference<::com::sun::star::frame::XFrame> & xFrame)143     CalcDispatch( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > &rxContext,
144         const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& xFrame )
145         : BaseDispatch( rxContext, xFrame, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.SpreadSheetDocument" ) ) )
146     {}
147 };
148 
149 #endif
150