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 __FRAMEWORK_HANDLER_SOUNDHANDLER_HXX_ 25 #define __FRAMEWORK_HANDLER_SOUNDHANDLER_HXX_ 26 27 //_________________________________________________________________________________________________________________ 28 // interface includes 29 //_________________________________________________________________________________________________________________ 30 31 #include <com/sun/star/lang/XTypeProvider.hpp> 32 #include <com/sun/star/lang/XMultiServiceFactory.hpp> 33 #include <com/sun/star/frame/XNotifyingDispatch.hpp> 34 #include <com/sun/star/frame/XStatusListener.hpp> 35 #include <com/sun/star/frame/XFrame.hpp> 36 #include <com/sun/star/document/XExtendedFilterDetection.hpp> 37 #include <com/sun/star/media/XPlayer.hpp> 38 #include <com/sun/star/beans/PropertyValue.hpp> 39 #include <com/sun/star/util/URL.hpp> 40 41 #include <com/sun/star/lang/XServiceInfo.hpp> 42 #include <com/sun/star/lang/XSingleServiceFactory.hpp> 43 44 //_________________________________________________________________________________________________________________ 45 // other includes 46 //_________________________________________________________________________________________________________________ 47 #include <cppuhelper/weak.hxx> 48 49 #include <vcl/timer.hxx> 50 #include <tools/link.hxx> 51 #include <avmedia/mediawindow.hxx> 52 #include <vos/mutex.hxx> 53 54 namespace css = ::com::sun::star; 55 56 //_________________________________________________________________________________________________________________ 57 // namespace 58 //_________________________________________________________________________________________________________________ 59 60 namespace avmedia{ 61 62 //_________________________________________________________________________________________________________________ 63 // exported const 64 //_________________________________________________________________________________________________________________ 65 66 //_________________________________________________________________________________________________________________ 67 // exported definitions 68 //_________________________________________________________________________________________________________________ 69 70 struct ThreadHelpBase 71 { 72 public: 73 mutable ::vos::OMutex m_aLock; 74 }; 75 76 /*-************************************************************************************************************//** 77 @short handler to detect and play sounds ("wav" and "au" only!) 78 @descr Register this implementation as a content handler to detect and/or play wav- and au-sounds. 79 It doesn't depend from the target platform. But one instance of this class 80 can play one sound at the same time only. Means every new dispatch request will stop the 81 might still running one. So we support one operation/one URL/one listener at the same time 82 only. 83 84 @devstatus ready 85 @threadsafe yes 86 *//*-*************************************************************************************************************/ 87 class SoundHandler : // interfaces 88 public css::lang::XTypeProvider 89 , public css::lang::XServiceInfo 90 , public css::frame::XNotifyingDispatch // => XDispatch 91 , public css::document::XExtendedFilterDetection 92 // baseclasses 93 // Order is neccessary for right initialization! 94 , private ThreadHelpBase 95 , public ::cppu::OWeakObject 96 { 97 //------------------------------------------------------------------------------------------------------------- 98 // public methods 99 //------------------------------------------------------------------------------------------------------------- 100 public: 101 102 //--------------------------------------------------------------------------------------------------------- 103 // constructor / destructor 104 //--------------------------------------------------------------------------------------------------------- 105 SoundHandler( const css::uno::Reference< css::lang::XMultiServiceFactory >& xFactory ); 106 virtual ~SoundHandler( ); 107 108 //--------------------------------------------------------------------------------------------------------- 109 // XInterface, XTypeProvider, XServiceInfo 110 //--------------------------------------------------------------------------------------------------------- 111 virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type& aType ) throw( css::uno::RuntimeException ); 112 virtual void SAL_CALL acquire() throw(); 113 virtual void SAL_CALL release() throw(); 114 virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes () throw( css::uno::RuntimeException ); 115 virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw( css::uno::RuntimeException ); 116 117 118 /* interface XServiceInfo */ 119 virtual ::rtl::OUString SAL_CALL getImplementationName ( ) throw( css::uno::RuntimeException ); 120 virtual sal_Bool SAL_CALL supportsService ( const ::rtl::OUString& sServiceName ) throw( css::uno::RuntimeException ); 121 virtual css::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames ( ) throw( css::uno::RuntimeException ); 122 /* Helper for XServiceInfo */ 123 static css::uno::Sequence< ::rtl::OUString > SAL_CALL impl_getStaticSupportedServiceNames( ); 124 static ::rtl::OUString SAL_CALL impl_getStaticImplementationName ( ); 125 /* Helper for registry */ 126 static css::uno::Reference< css::uno::XInterface > SAL_CALL impl_createInstance ( const css::uno::Reference< css::lang::XMultiServiceFactory >& xServiceManager ) throw( css::uno::Exception ); 127 static css::uno::Reference< css::lang::XSingleServiceFactory > SAL_CALL impl_createFactory ( const css::uno::Reference< css::lang::XMultiServiceFactory >& xServiceManager ); 128 /* Helper for initialization of service by using own reference! */ 129 virtual void SAL_CALL impl_initService ( ); 130 131 //--------------------------------------------------------------------------------------------------------- 132 // XNotifyingDispatch 133 //--------------------------------------------------------------------------------------------------------- 134 virtual void SAL_CALL dispatchWithNotification(const css::util::URL& aURL , 135 const css::uno::Sequence< css::beans::PropertyValue >& lArguments, 136 const css::uno::Reference< css::frame::XDispatchResultListener >& xListener ) throw(css::uno::RuntimeException); 137 138 //--------------------------------------------------------------------------------------------------------- 139 // XDispatch 140 //--------------------------------------------------------------------------------------------------------- 141 virtual void SAL_CALL dispatch ( const css::util::URL& aURL , 142 const css::uno::Sequence< css::beans::PropertyValue >& lArguments ) throw( css::uno::RuntimeException ); 143 // not supported ! 144 virtual void SAL_CALL addStatusListener ( const css::uno::Reference< css::frame::XStatusListener >& /*xListener*/ , 145 const css::util::URL& /*aURL*/ ) throw( css::uno::RuntimeException ) {}; 146 virtual void SAL_CALL removeStatusListener ( const css::uno::Reference< css::frame::XStatusListener >& /*xListener*/ , 147 const css::util::URL& /*aURL*/ ) throw( css::uno::RuntimeException ) {}; 148 149 //--------------------------------------------------------------------------------------------------------- 150 // XExtendedFilterDetection 151 //--------------------------------------------------------------------------------------------------------- 152 virtual ::rtl::OUString SAL_CALL detect ( css::uno::Sequence< css::beans::PropertyValue >& lDescriptor ) throw( css::uno::RuntimeException ); 153 154 //------------------------------------------------------------------------------------------------------------- 155 // protected methods 156 //------------------------------------------------------------------------------------------------------------- 157 protected: 158 159 //------------------------------------------------------------------------------------------------------------- 160 // private methods 161 //------------------------------------------------------------------------------------------------------------- 162 private: 163 DECL_LINK( implts_PlayerNotify, void* ); 164 165 //------------------------------------------------------------------------------------------------------------- 166 // variables 167 // (should be private everyway!) 168 //------------------------------------------------------------------------------------------------------------- 169 private: 170 171 bool m_bError; 172 css::uno::Reference< css::lang::XMultiServiceFactory > m_xFactory ; /// global uno service factory to create new services 173 css::uno::Reference< css::uno::XInterface > m_xSelfHold ; /// we must protect us against dieing during async(!) dispatch() call! 174 css::uno::Reference< css::media::XPlayer > m_xPlayer ; /// uses avmedia player to play sounds ... 175 176 css::uno::Reference< css::frame::XDispatchResultListener > m_xListener ; 177 Timer m_aUpdateTimer; 178 179 }; // class SoundHandler 180 181 } // namespace avmedia 182 183 #endif // #ifndef __FRAMEWORK_HANDLER_SOUNDHANDLER_HXX_ 184