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 _LINGUISTIC_LNGSVCMGR_HXX_ 25 #define _LINGUISTIC_LNGSVCMGR_HXX_ 26 27 #include <uno/lbnames.h> // CPPU_CURRENT_LANGUAGE_BINDING_NAME macro, which specify the environment type 28 #include <cppuhelper/implbase4.hxx> // helper for implementations 29 #include <cppuhelper/interfacecontainer.h> //OMultiTypeInterfaceContainerHelper 30 31 32 #include <com/sun/star/uno/Reference.h> 33 #include <com/sun/star/lang/XServiceInfo.hpp> 34 #include <com/sun/star/lang/XComponent.hpp> 35 #include <com/sun/star/linguistic2/XLinguServiceManager.hpp> 36 #include <com/sun/star/linguistic2/XAvailableLocales.hpp> 37 #include <unotools/configitem.hxx> 38 39 //#include <vcl/timer.hxx> 40 41 #include "linguistic/misc.hxx" 42 #include "defs.hxx" 43 44 class SpellCheckerDispatcher; 45 class HyphenatorDispatcher; 46 class ThesaurusDispatcher; 47 class GrammarCheckingIterator; 48 class LngSvcMgrListenerHelper; 49 struct SvcInfo; 50 51 namespace com { namespace sun { namespace star { namespace linguistic2 { 52 class XLinguServiceEventBroadcaster; 53 class XSpellChecker; 54 class XProofreader; 55 class XProofreadingIterator; 56 class XHyphenator; 57 class XThesaurus; 58 } } } } 59 60 /////////////////////////////////////////////////////////////////////////// 61 62 63 class LngSvcMgr : 64 public cppu::WeakImplHelper4 65 < 66 com::sun::star::linguistic2::XLinguServiceManager, 67 com::sun::star::linguistic2::XAvailableLocales, 68 com::sun::star::lang::XComponent, 69 com::sun::star::lang::XServiceInfo 70 >, 71 private utl::ConfigItem 72 { 73 friend class LngSvcMgrListenerHelper; 74 75 ::cppu::OInterfaceContainerHelper aEvtListeners; 76 77 com::sun::star::uno::Reference< 78 ::com::sun::star::linguistic2::XSpellChecker > xSpellDsp; 79 com::sun::star::uno::Reference< 80 ::com::sun::star::linguistic2::XProofreadingIterator > xGrammarDsp; 81 com::sun::star::uno::Reference< 82 ::com::sun::star::linguistic2::XHyphenator > xHyphDsp; 83 com::sun::star::uno::Reference< 84 ::com::sun::star::linguistic2::XThesaurus > xThesDsp; 85 86 com::sun::star::uno::Reference< 87 ::com::sun::star::lang::XEventListener > xListenerHelper; 88 89 com::sun::star::uno::Sequence< 90 com::sun::star::lang::Locale > aAvailSpellLocales; 91 com::sun::star::uno::Sequence< 92 com::sun::star::lang::Locale > aAvailGrammarLocales; 93 com::sun::star::uno::Sequence< 94 com::sun::star::lang::Locale > aAvailHyphLocales; 95 com::sun::star::uno::Sequence< 96 com::sun::star::lang::Locale > aAvailThesLocales; 97 98 SpellCheckerDispatcher * pSpellDsp; 99 GrammarCheckingIterator * pGrammarDsp; 100 HyphenatorDispatcher * pHyphDsp; 101 ThesaurusDispatcher * pThesDsp; 102 103 LngSvcMgrListenerHelper * pListenerHelper; 104 105 typedef std::vector< SvcInfo * > SvcInfoArray; 106 SvcInfoArray * pAvailSpellSvcs; 107 SvcInfoArray * pAvailGrammarSvcs; 108 SvcInfoArray * pAvailHyphSvcs; 109 SvcInfoArray * pAvailThesSvcs; 110 111 sal_Bool bDisposing; 112 sal_Bool bHasAvailSpellLocales; 113 sal_Bool bHasAvailGrammarLocales; 114 sal_Bool bHasAvailHyphLocales; 115 sal_Bool bHasAvailThesLocales; 116 117 // disallow copy-constructor and assignment-operator for now 118 LngSvcMgr(const LngSvcMgr &); 119 LngSvcMgr & operator = (const LngSvcMgr &); 120 121 void GetAvailableSpellSvcs_Impl(); 122 void GetAvailableGrammarSvcs_Impl(); 123 void GetAvailableHyphSvcs_Impl(); 124 void GetAvailableThesSvcs_Impl(); 125 void GetListenerHelper_Impl(); 126 127 void GetSpellCheckerDsp_Impl( sal_Bool bSetSvcList = sal_True ); 128 void GetGrammarCheckerDsp_Impl( sal_Bool bSetSvcList = sal_True ); 129 void GetHyphenatorDsp_Impl( sal_Bool bSetSvcList = sal_True ); 130 void GetThesaurusDsp_Impl( sal_Bool bSetSvcList = sal_True ); 131 132 void SetCfgServiceLists( SpellCheckerDispatcher &rSpellDsp ); 133 void SetCfgServiceLists( GrammarCheckingIterator &rGrammarDsp ); 134 void SetCfgServiceLists( HyphenatorDispatcher &rHyphDsp ); 135 void SetCfgServiceLists( ThesaurusDispatcher &rThesDsp ); 136 137 sal_Bool SaveCfgSvcs( const String &rServiceName ); 138 139 void SetAvailableCfgServiceLists( LinguDispatcher &rDispatcher, 140 const SvcInfoArray &rAvailSvcs ); 141 142 static void clearSvcInfoArray(SvcInfoArray *pInfo); 143 144 // utl::ConfigItem (to allow for listening of changes of relevant properties) 145 virtual void Notify( const com::sun::star::uno::Sequence< rtl::OUString > &rPropertyNames ); 146 virtual void Commit(); 147 148 public: 149 LngSvcMgr(); 150 virtual ~LngSvcMgr(); 151 152 // XLinguServiceManager 153 virtual ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XSpellChecker > SAL_CALL getSpellChecker( ) throw (::com::sun::star::uno::RuntimeException); 154 virtual ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XHyphenator > SAL_CALL getHyphenator( ) throw (::com::sun::star::uno::RuntimeException); 155 virtual ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XThesaurus > SAL_CALL getThesaurus( ) throw (::com::sun::star::uno::RuntimeException); 156 virtual ::sal_Bool SAL_CALL addLinguServiceManagerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener ) throw (::com::sun::star::uno::RuntimeException); 157 virtual ::sal_Bool SAL_CALL removeLinguServiceManagerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener ) throw (::com::sun::star::uno::RuntimeException); 158 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getAvailableServices( const ::rtl::OUString& aServiceName, const ::com::sun::star::lang::Locale& aLocale ) throw (::com::sun::star::uno::RuntimeException); 159 virtual void SAL_CALL setConfiguredServices( const ::rtl::OUString& aServiceName, const ::com::sun::star::lang::Locale& aLocale, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aServiceImplNames ) throw (::com::sun::star::uno::RuntimeException); 160 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getConfiguredServices( const ::rtl::OUString& aServiceName, const ::com::sun::star::lang::Locale& aLocale ) throw (::com::sun::star::uno::RuntimeException); 161 162 // XAvailableLocales 163 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::lang::Locale > SAL_CALL getAvailableLocales( const ::rtl::OUString& aServiceName ) throw (::com::sun::star::uno::RuntimeException); 164 165 // XComponent 166 virtual void SAL_CALL dispose( ) throw (::com::sun::star::uno::RuntimeException); 167 virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener ) throw (::com::sun::star::uno::RuntimeException); 168 virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& aListener ) throw (::com::sun::star::uno::RuntimeException); 169 170 // XServiceInfo 171 virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException); 172 virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException); 173 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException); 174 175 176 static inline ::rtl::OUString getImplementationName_Static(); 177 static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static() throw(); 178 179 sal_Bool AddLngSvcEvtBroadcaster( 180 const ::com::sun::star::uno::Reference< 181 ::com::sun::star::linguistic2::XLinguServiceEventBroadcaster > &rxBroadcaster ); 182 sal_Bool RemoveLngSvcEvtBroadcaster( 183 const ::com::sun::star::uno::Reference< 184 ::com::sun::star::linguistic2::XLinguServiceEventBroadcaster > &rxBroadcaster ); 185 }; 186 187 188 inline ::rtl::OUString LngSvcMgr::getImplementationName_Static() 189 { 190 return A2OU( "com.sun.star.lingu2.LngSvcMgr" ); 191 } 192 193 194 /////////////////////////////////////////////////////////////////////////// 195 196 #endif 197 198