139a19a47SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 339a19a47SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 439a19a47SAndrew Rist * or more contributor license agreements. See the NOTICE file 539a19a47SAndrew Rist * distributed with this work for additional information 639a19a47SAndrew Rist * regarding copyright ownership. The ASF licenses this file 739a19a47SAndrew Rist * to you under the Apache License, Version 2.0 (the 839a19a47SAndrew Rist * "License"); you may not use this file except in compliance 939a19a47SAndrew Rist * with the License. You may obtain a copy of the License at 1039a19a47SAndrew Rist * 1139a19a47SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 1239a19a47SAndrew Rist * 1339a19a47SAndrew Rist * Unless required by applicable law or agreed to in writing, 1439a19a47SAndrew Rist * software distributed under the License is distributed on an 1539a19a47SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 1639a19a47SAndrew Rist * KIND, either express or implied. See the License for the 1739a19a47SAndrew Rist * specific language governing permissions and limitations 1839a19a47SAndrew Rist * under the License. 1939a19a47SAndrew Rist * 2039a19a47SAndrew Rist *************************************************************/ 2139a19a47SAndrew Rist 2239a19a47SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir #ifndef INCLUDED_SVTOOLS_ONDEMAND_HXX 25cdf0e10cSrcweir #define INCLUDED_SVTOOLS_ONDEMAND_HXX 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include <unotools/syslocale.hxx> 28cdf0e10cSrcweir #include <i18npool/lang.h> 29cdf0e10cSrcweir #include <unotools/localedatawrapper.hxx> 30cdf0e10cSrcweir #include <unotools/calendarwrapper.hxx> 31cdf0e10cSrcweir #include <unotools/collatorwrapper.hxx> 32cdf0e10cSrcweir #include <com/sun/star/i18n/CollatorOptions.hpp> 33cdf0e10cSrcweir #include <unotools/transliterationwrapper.hxx> 34cdf0e10cSrcweir #include <com/sun/star/i18n/TransliterationModules.hpp> 35cdf0e10cSrcweir #include <unotools/nativenumberwrapper.hxx> 36cdf0e10cSrcweir #include <com/sun/star/uno/Reference.hxx> 37cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp> 38cdf0e10cSrcweir 39cdf0e10cSrcweir /* 40*86e1cf34SPedro Giffuni On demand instantiation and initialization of several i18n wrappers, 41cdf0e10cSrcweir helping the number formatter to not perform worse than it already does. 42cdf0e10cSrcweir */ 43cdf0e10cSrcweir 44cdf0e10cSrcweir /** @short 45cdf0e10cSrcweir Switch between LANGUAGE_SYSTEM and LANGUAGE_ENGLISH_US and any other 46cdf0e10cSrcweir LocaleDataWrapper. 47cdf0e10cSrcweir SvNumberformatter uses it upon switching locales. 48cdf0e10cSrcweir 49cdf0e10cSrcweir @descr 50cdf0e10cSrcweir Avoids reloading and analysing of locale data again and again. 51cdf0e10cSrcweir 52cdf0e10cSrcweir @ATTENTION 53cdf0e10cSrcweir If the default ctor is used the init() method MUST be called before 54cdf0e10cSrcweir accessing any locale data. The passed parameters Locale and LanguageType 55cdf0e10cSrcweir must match each other. 56cdf0e10cSrcweir */ 57cdf0e10cSrcweir 58cdf0e10cSrcweir class OnDemandLocaleDataWrapper 59cdf0e10cSrcweir { 60cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xSMgr; 61cdf0e10cSrcweir SvtSysLocale aSysLocale; 62cdf0e10cSrcweir LanguageType eCurrentLanguage; 63cdf0e10cSrcweir LanguageType eLastAnyLanguage; 64cdf0e10cSrcweir const LocaleDataWrapper* pSystem; 65cdf0e10cSrcweir const LocaleDataWrapper* pEnglish; 66cdf0e10cSrcweir LocaleDataWrapper* pAny; 67cdf0e10cSrcweir const LocaleDataWrapper* pCurrent; 68cdf0e10cSrcweir bool bInitialized; 69cdf0e10cSrcweir 70cdf0e10cSrcweir public: OnDemandLocaleDataWrapper()71cdf0e10cSrcweir OnDemandLocaleDataWrapper() 72cdf0e10cSrcweir : eLastAnyLanguage( LANGUAGE_DONTKNOW ) 73cdf0e10cSrcweir , pEnglish(0) 74cdf0e10cSrcweir , pAny(0) 75cdf0e10cSrcweir , bInitialized(false) 76cdf0e10cSrcweir { 77cdf0e10cSrcweir pCurrent = pSystem = aSysLocale.GetLocaleDataPtr(); 78cdf0e10cSrcweir eCurrentLanguage = LANGUAGE_SYSTEM; 79cdf0e10cSrcweir } OnDemandLocaleDataWrapper(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & rxSMgr,::com::sun::star::lang::Locale & rLocale,LanguageType eLang)80cdf0e10cSrcweir OnDemandLocaleDataWrapper( 81cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxSMgr, 82cdf0e10cSrcweir ::com::sun::star::lang::Locale& rLocale, 83cdf0e10cSrcweir LanguageType eLang 84cdf0e10cSrcweir ) 85cdf0e10cSrcweir : pEnglish(0) 86cdf0e10cSrcweir , pAny(0) 87cdf0e10cSrcweir , pCurrent(0) 88cdf0e10cSrcweir , bInitialized(false) 89cdf0e10cSrcweir { 90cdf0e10cSrcweir pSystem = aSysLocale.GetLocaleDataPtr(); 91cdf0e10cSrcweir init( rxSMgr, rLocale, eLang ); 92cdf0e10cSrcweir } ~OnDemandLocaleDataWrapper()93cdf0e10cSrcweir ~OnDemandLocaleDataWrapper() 94cdf0e10cSrcweir { 95cdf0e10cSrcweir delete pEnglish; 96cdf0e10cSrcweir delete pAny; 97cdf0e10cSrcweir } 98cdf0e10cSrcweir isInitialized() const99cdf0e10cSrcweir bool isInitialized() const { return bInitialized; } 100cdf0e10cSrcweir is() const101cdf0e10cSrcweir bool is() const { return pCurrent != NULL; } 102cdf0e10cSrcweir init(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & rxSMgr,::com::sun::star::lang::Locale & rLocale,LanguageType eLang)103cdf0e10cSrcweir void init( 104cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxSMgr, 105cdf0e10cSrcweir ::com::sun::star::lang::Locale& rLocale, 106cdf0e10cSrcweir LanguageType eLang 107cdf0e10cSrcweir ) 108cdf0e10cSrcweir { 109cdf0e10cSrcweir xSMgr = rxSMgr; 110cdf0e10cSrcweir changeLocale( rLocale, eLang ); 111cdf0e10cSrcweir bInitialized = true; 112cdf0e10cSrcweir } 113cdf0e10cSrcweir changeLocale(::com::sun::star::lang::Locale & rLocale,LanguageType eLang)114cdf0e10cSrcweir void changeLocale( ::com::sun::star::lang::Locale& rLocale, LanguageType eLang ) 115cdf0e10cSrcweir { 116cdf0e10cSrcweir switch ( eLang ) 117cdf0e10cSrcweir { 118cdf0e10cSrcweir case LANGUAGE_SYSTEM : 119cdf0e10cSrcweir pCurrent = pSystem; 120cdf0e10cSrcweir break; 121cdf0e10cSrcweir case LANGUAGE_ENGLISH_US : 122cdf0e10cSrcweir if ( !pEnglish ) 123cdf0e10cSrcweir pEnglish = new LocaleDataWrapper( xSMgr, rLocale ); 124cdf0e10cSrcweir pCurrent = pEnglish; 125cdf0e10cSrcweir break; 126cdf0e10cSrcweir default: 127cdf0e10cSrcweir if ( !pAny ) 128cdf0e10cSrcweir { 129cdf0e10cSrcweir pAny = new LocaleDataWrapper( xSMgr, rLocale ); 130cdf0e10cSrcweir eLastAnyLanguage = eLang; 131cdf0e10cSrcweir } 132cdf0e10cSrcweir else if ( eLastAnyLanguage != eLang ) 133cdf0e10cSrcweir { 134cdf0e10cSrcweir pAny->setLocale( rLocale ); 135cdf0e10cSrcweir eLastAnyLanguage = eLang; 136cdf0e10cSrcweir } 137cdf0e10cSrcweir pCurrent = pAny; 138cdf0e10cSrcweir } 139cdf0e10cSrcweir eCurrentLanguage = eLang; 140cdf0e10cSrcweir } 141cdf0e10cSrcweir getCurrentLanguage() const142cdf0e10cSrcweir LanguageType getCurrentLanguage() const 143cdf0e10cSrcweir { return eCurrentLanguage; } 144cdf0e10cSrcweir getAnyLocale()145cdf0e10cSrcweir LocaleDataWrapper* getAnyLocale() 146cdf0e10cSrcweir { 147cdf0e10cSrcweir if ( !pAny ) 148cdf0e10cSrcweir { 149cdf0e10cSrcweir pAny = new LocaleDataWrapper( xSMgr, pCurrent->getLocale() ); 150cdf0e10cSrcweir eLastAnyLanguage = eCurrentLanguage; 151cdf0e10cSrcweir } 152cdf0e10cSrcweir else if ( pCurrent != pAny ) 153cdf0e10cSrcweir { 154cdf0e10cSrcweir pAny->setLocale( pCurrent->getLocale() ); 155cdf0e10cSrcweir eLastAnyLanguage = eCurrentLanguage; 156cdf0e10cSrcweir } 157cdf0e10cSrcweir return pAny; 158cdf0e10cSrcweir } 159cdf0e10cSrcweir get() const160cdf0e10cSrcweir const LocaleDataWrapper* get() const { return pCurrent; } operator ->() const161cdf0e10cSrcweir const LocaleDataWrapper* operator->() const { return get(); } operator *() const162cdf0e10cSrcweir const LocaleDataWrapper& operator*() const { return *get(); } 163cdf0e10cSrcweir }; 164cdf0e10cSrcweir 165cdf0e10cSrcweir /** Load a calendar only if it's needed. 166cdf0e10cSrcweir SvNumberformatter uses it upon switching locales. 167cdf0e10cSrcweir @ATTENTION If the default ctor is used the init() method MUST be called 168cdf0e10cSrcweir before accessing the calendar. 169cdf0e10cSrcweir */ 170cdf0e10cSrcweir class OnDemandCalendarWrapper 171cdf0e10cSrcweir { 172cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xSMgr; 173cdf0e10cSrcweir ::com::sun::star::lang::Locale aLocale; 174cdf0e10cSrcweir mutable CalendarWrapper* pPtr; 175cdf0e10cSrcweir mutable bool bValid; 176cdf0e10cSrcweir bool bInitialized; 177cdf0e10cSrcweir 178cdf0e10cSrcweir public: OnDemandCalendarWrapper()179cdf0e10cSrcweir OnDemandCalendarWrapper() 180cdf0e10cSrcweir : pPtr(0) 181cdf0e10cSrcweir , bValid(false) 182cdf0e10cSrcweir , bInitialized(false) 183cdf0e10cSrcweir {} OnDemandCalendarWrapper(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & rxSMgr,::com::sun::star::lang::Locale & rLocale)184cdf0e10cSrcweir OnDemandCalendarWrapper( 185cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxSMgr, 186cdf0e10cSrcweir ::com::sun::star::lang::Locale& rLocale 187cdf0e10cSrcweir ) 188cdf0e10cSrcweir : bValid(false) 189cdf0e10cSrcweir , bInitialized(false) 190cdf0e10cSrcweir { 191cdf0e10cSrcweir init( rxSMgr, rLocale ); 192cdf0e10cSrcweir } ~OnDemandCalendarWrapper()193cdf0e10cSrcweir ~OnDemandCalendarWrapper() 194cdf0e10cSrcweir { 195cdf0e10cSrcweir delete pPtr; 196cdf0e10cSrcweir } 197cdf0e10cSrcweir isInitialized() const198cdf0e10cSrcweir bool isInitialized() const { return bInitialized; } 199cdf0e10cSrcweir is() const200cdf0e10cSrcweir bool is() const { return pPtr != NULL; } 201cdf0e10cSrcweir init(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & rxSMgr,::com::sun::star::lang::Locale & rLocale)202cdf0e10cSrcweir void init( 203cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxSMgr, 204cdf0e10cSrcweir ::com::sun::star::lang::Locale& rLocale 205cdf0e10cSrcweir ) 206cdf0e10cSrcweir { 207cdf0e10cSrcweir xSMgr = rxSMgr; 208cdf0e10cSrcweir changeLocale( rLocale ); 209cdf0e10cSrcweir if ( pPtr ) 210cdf0e10cSrcweir { 211cdf0e10cSrcweir delete pPtr; 212cdf0e10cSrcweir pPtr = NULL; 213cdf0e10cSrcweir } 214cdf0e10cSrcweir bInitialized = true; 215cdf0e10cSrcweir } 216cdf0e10cSrcweir changeLocale(::com::sun::star::lang::Locale & rLocale)217cdf0e10cSrcweir void changeLocale( ::com::sun::star::lang::Locale& rLocale ) 218cdf0e10cSrcweir { 219cdf0e10cSrcweir bValid = false; 220cdf0e10cSrcweir aLocale = rLocale; 221cdf0e10cSrcweir } 222cdf0e10cSrcweir get() const223cdf0e10cSrcweir CalendarWrapper* get() const 224cdf0e10cSrcweir { 225cdf0e10cSrcweir if ( !bValid ) 226cdf0e10cSrcweir { 227cdf0e10cSrcweir if ( !pPtr ) 228cdf0e10cSrcweir pPtr = new CalendarWrapper( xSMgr ); 229cdf0e10cSrcweir pPtr->loadDefaultCalendar( aLocale ); 230cdf0e10cSrcweir bValid = true; 231cdf0e10cSrcweir } 232cdf0e10cSrcweir return pPtr; 233cdf0e10cSrcweir } 234cdf0e10cSrcweir operator ->()235cdf0e10cSrcweir CalendarWrapper* operator->() { return get(); } operator *()236cdf0e10cSrcweir CalendarWrapper& operator*() { return *get(); } 237cdf0e10cSrcweir }; 238cdf0e10cSrcweir 239cdf0e10cSrcweir /** Load a collator only if it's needed. 240cdf0e10cSrcweir SvNumberformatter uses it upon switching locales. 241cdf0e10cSrcweir @ATTENTION If the default ctor is used the init() method MUST be called 242cdf0e10cSrcweir before accessing the collator. 243cdf0e10cSrcweir */ 244cdf0e10cSrcweir class OnDemandCollatorWrapper 245cdf0e10cSrcweir { 246cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xSMgr; 247cdf0e10cSrcweir ::com::sun::star::lang::Locale aLocale; 248cdf0e10cSrcweir mutable CollatorWrapper* pPtr; 249cdf0e10cSrcweir mutable bool bValid; 250cdf0e10cSrcweir bool bInitialized; 251cdf0e10cSrcweir 252cdf0e10cSrcweir public: OnDemandCollatorWrapper()253cdf0e10cSrcweir OnDemandCollatorWrapper() 254cdf0e10cSrcweir : pPtr(0) 255cdf0e10cSrcweir , bValid(false) 256cdf0e10cSrcweir , bInitialized(false) 257cdf0e10cSrcweir {} OnDemandCollatorWrapper(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & rxSMgr,::com::sun::star::lang::Locale & rLocale)258cdf0e10cSrcweir OnDemandCollatorWrapper( 259cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxSMgr, 260cdf0e10cSrcweir ::com::sun::star::lang::Locale& rLocale 261cdf0e10cSrcweir ) 262cdf0e10cSrcweir : bValid(false) 263cdf0e10cSrcweir , bInitialized(false) 264cdf0e10cSrcweir { 265cdf0e10cSrcweir init( rxSMgr, rLocale ); 266cdf0e10cSrcweir } ~OnDemandCollatorWrapper()267cdf0e10cSrcweir ~OnDemandCollatorWrapper() 268cdf0e10cSrcweir { 269cdf0e10cSrcweir delete pPtr; 270cdf0e10cSrcweir } 271cdf0e10cSrcweir isInitialized() const272cdf0e10cSrcweir bool isInitialized() const { return bInitialized; } 273cdf0e10cSrcweir is() const274cdf0e10cSrcweir bool is() const { return pPtr != NULL; } 275cdf0e10cSrcweir init(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & rxSMgr,::com::sun::star::lang::Locale & rLocale)276cdf0e10cSrcweir void init( 277cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxSMgr, 278cdf0e10cSrcweir ::com::sun::star::lang::Locale& rLocale 279cdf0e10cSrcweir ) 280cdf0e10cSrcweir { 281cdf0e10cSrcweir xSMgr = rxSMgr; 282cdf0e10cSrcweir changeLocale( rLocale ); 283cdf0e10cSrcweir if ( pPtr ) 284cdf0e10cSrcweir { 285cdf0e10cSrcweir delete pPtr; 286cdf0e10cSrcweir pPtr = NULL; 287cdf0e10cSrcweir } 288cdf0e10cSrcweir bInitialized = true; 289cdf0e10cSrcweir } 290cdf0e10cSrcweir changeLocale(::com::sun::star::lang::Locale & rLocale)291cdf0e10cSrcweir void changeLocale( ::com::sun::star::lang::Locale& rLocale ) 292cdf0e10cSrcweir { 293cdf0e10cSrcweir bValid = false; 294cdf0e10cSrcweir aLocale = rLocale; 295cdf0e10cSrcweir } 296cdf0e10cSrcweir get() const297cdf0e10cSrcweir const CollatorWrapper* get() const 298cdf0e10cSrcweir { 299cdf0e10cSrcweir if ( !bValid ) 300cdf0e10cSrcweir { 301cdf0e10cSrcweir if ( !pPtr ) 302cdf0e10cSrcweir pPtr = new CollatorWrapper( xSMgr ); 303cdf0e10cSrcweir pPtr->loadDefaultCollator( aLocale, ::com::sun::star::i18n::CollatorOptions::CollatorOptions_IGNORE_CASE ); 304cdf0e10cSrcweir bValid = true; 305cdf0e10cSrcweir } 306cdf0e10cSrcweir return pPtr; 307cdf0e10cSrcweir } 308cdf0e10cSrcweir operator ->() const309cdf0e10cSrcweir const CollatorWrapper* operator->() const { return get(); } operator *() const310cdf0e10cSrcweir const CollatorWrapper& operator*() const { return *get(); } 311cdf0e10cSrcweir }; 312cdf0e10cSrcweir 313cdf0e10cSrcweir /** Load a transliteration only if it's needed. 314cdf0e10cSrcweir SvNumberformatter uses it upon switching locales. 315cdf0e10cSrcweir @ATTENTION If the default ctor is used the init() method MUST be called 316cdf0e10cSrcweir before accessing the transliteration. 317cdf0e10cSrcweir */ 318cdf0e10cSrcweir class OnDemandTransliterationWrapper 319cdf0e10cSrcweir { 320cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xSMgr; 321cdf0e10cSrcweir LanguageType eLanguage; 322cdf0e10cSrcweir ::com::sun::star::i18n::TransliterationModules nType; 323cdf0e10cSrcweir mutable ::utl::TransliterationWrapper* pPtr; 324cdf0e10cSrcweir mutable bool bValid; 325cdf0e10cSrcweir bool bInitialized; 326cdf0e10cSrcweir 327cdf0e10cSrcweir public: OnDemandTransliterationWrapper()328cdf0e10cSrcweir OnDemandTransliterationWrapper() 329cdf0e10cSrcweir : eLanguage( LANGUAGE_SYSTEM ) 330cdf0e10cSrcweir , pPtr(0) 331cdf0e10cSrcweir , bValid(false) 332cdf0e10cSrcweir , bInitialized(false) 333cdf0e10cSrcweir {} OnDemandTransliterationWrapper(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & rxSMgr,LanguageType eLang,::com::sun::star::i18n::TransliterationModules nTypeP)334cdf0e10cSrcweir OnDemandTransliterationWrapper( 335cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxSMgr, 336cdf0e10cSrcweir LanguageType eLang, 337cdf0e10cSrcweir ::com::sun::star::i18n::TransliterationModules nTypeP 338cdf0e10cSrcweir ) 339cdf0e10cSrcweir : bValid(false) 340cdf0e10cSrcweir , bInitialized(false) 341cdf0e10cSrcweir { 342cdf0e10cSrcweir init( rxSMgr, eLang, nTypeP ); 343cdf0e10cSrcweir } ~OnDemandTransliterationWrapper()344cdf0e10cSrcweir ~OnDemandTransliterationWrapper() 345cdf0e10cSrcweir { 346cdf0e10cSrcweir delete pPtr; 347cdf0e10cSrcweir } 348cdf0e10cSrcweir isInitialized() const349cdf0e10cSrcweir bool isInitialized() const { return bInitialized; } 350cdf0e10cSrcweir is() const351cdf0e10cSrcweir bool is() const { return pPtr != NULL; } 352cdf0e10cSrcweir init(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & rxSMgr,LanguageType eLang,::com::sun::star::i18n::TransliterationModules nTypeP)353cdf0e10cSrcweir void init( 354cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxSMgr, 355cdf0e10cSrcweir LanguageType eLang, 356cdf0e10cSrcweir ::com::sun::star::i18n::TransliterationModules nTypeP 357cdf0e10cSrcweir ) 358cdf0e10cSrcweir { 359cdf0e10cSrcweir xSMgr = rxSMgr; 360cdf0e10cSrcweir nType = nTypeP; 361cdf0e10cSrcweir changeLocale( eLang ); 362cdf0e10cSrcweir if ( pPtr ) 363cdf0e10cSrcweir { 364cdf0e10cSrcweir delete pPtr; 365cdf0e10cSrcweir pPtr = NULL; 366cdf0e10cSrcweir } 367cdf0e10cSrcweir bInitialized = true; 368cdf0e10cSrcweir } 369cdf0e10cSrcweir changeLocale(LanguageType eLang)370cdf0e10cSrcweir void changeLocale( LanguageType eLang ) 371cdf0e10cSrcweir { 372cdf0e10cSrcweir bValid = false; 373cdf0e10cSrcweir eLanguage = eLang; 374cdf0e10cSrcweir } 375cdf0e10cSrcweir get() const376cdf0e10cSrcweir const ::utl::TransliterationWrapper* get() const 377cdf0e10cSrcweir { 378cdf0e10cSrcweir if ( !bValid ) 379cdf0e10cSrcweir { 380cdf0e10cSrcweir if ( !pPtr ) 381cdf0e10cSrcweir pPtr = new ::utl::TransliterationWrapper( xSMgr, nType ); 382cdf0e10cSrcweir pPtr->loadModuleIfNeeded( eLanguage ); 383cdf0e10cSrcweir bValid = true; 384cdf0e10cSrcweir } 385cdf0e10cSrcweir return pPtr; 386cdf0e10cSrcweir } 387cdf0e10cSrcweir getForModule(const String & rModule,LanguageType eLang) const388cdf0e10cSrcweir const ::utl::TransliterationWrapper* getForModule( const String& rModule, LanguageType eLang ) const 389cdf0e10cSrcweir { 390cdf0e10cSrcweir if ( !pPtr ) 391cdf0e10cSrcweir pPtr = new ::utl::TransliterationWrapper( xSMgr, nType ); 392cdf0e10cSrcweir pPtr->loadModuleByImplName( rModule, eLang ); 393cdf0e10cSrcweir bValid = false; // reforce settings change in get() 394cdf0e10cSrcweir return pPtr; 395cdf0e10cSrcweir } 396cdf0e10cSrcweir operator ->() const397cdf0e10cSrcweir const ::utl::TransliterationWrapper* operator->() const { return get(); } operator *() const398cdf0e10cSrcweir const ::utl::TransliterationWrapper& operator*() const { return *get(); } 399cdf0e10cSrcweir }; 400cdf0e10cSrcweir 401cdf0e10cSrcweir /** Load a native number service wrapper only if it's needed. 402cdf0e10cSrcweir SvNumberformatter uses it. 403cdf0e10cSrcweir 404cdf0e10cSrcweir @ATTENTION 405cdf0e10cSrcweir If the default ctor is used the init() method MUST be called 406cdf0e10cSrcweir before accessing the native number supplier. 407cdf0e10cSrcweir */ 408cdf0e10cSrcweir class OnDemandNativeNumberWrapper 409cdf0e10cSrcweir { 410cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xSMgr; 411cdf0e10cSrcweir mutable NativeNumberWrapper* pPtr; 412cdf0e10cSrcweir bool bInitialized; 413cdf0e10cSrcweir 414cdf0e10cSrcweir public: OnDemandNativeNumberWrapper()415cdf0e10cSrcweir OnDemandNativeNumberWrapper() 416cdf0e10cSrcweir : pPtr(0) 417cdf0e10cSrcweir , bInitialized(false) 418cdf0e10cSrcweir {} OnDemandNativeNumberWrapper(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & rxSMgr)419cdf0e10cSrcweir OnDemandNativeNumberWrapper( 420cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxSMgr 421cdf0e10cSrcweir ) 422cdf0e10cSrcweir : pPtr(0) 423cdf0e10cSrcweir , bInitialized(false) 424cdf0e10cSrcweir { 425cdf0e10cSrcweir init( rxSMgr ); 426cdf0e10cSrcweir } ~OnDemandNativeNumberWrapper()427cdf0e10cSrcweir ~OnDemandNativeNumberWrapper() 428cdf0e10cSrcweir { 429cdf0e10cSrcweir delete pPtr; 430cdf0e10cSrcweir } 431cdf0e10cSrcweir isInitialized() const432cdf0e10cSrcweir bool isInitialized() const { return bInitialized; } 433cdf0e10cSrcweir init(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & rxSMgr)434cdf0e10cSrcweir void init( 435cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxSMgr 436cdf0e10cSrcweir ) 437cdf0e10cSrcweir { 438cdf0e10cSrcweir xSMgr = rxSMgr; 439cdf0e10cSrcweir if ( pPtr ) 440cdf0e10cSrcweir { 441cdf0e10cSrcweir delete pPtr; 442cdf0e10cSrcweir pPtr = NULL; 443cdf0e10cSrcweir } 444cdf0e10cSrcweir bInitialized = true; 445cdf0e10cSrcweir } 446cdf0e10cSrcweir is() const447cdf0e10cSrcweir bool is() const { return pPtr != NULL; } 448cdf0e10cSrcweir get() const449cdf0e10cSrcweir NativeNumberWrapper* get() const 450cdf0e10cSrcweir { 451cdf0e10cSrcweir if ( !pPtr ) 452cdf0e10cSrcweir pPtr = new NativeNumberWrapper( xSMgr ); 453cdf0e10cSrcweir return pPtr; 454cdf0e10cSrcweir } 455cdf0e10cSrcweir operator ->()456cdf0e10cSrcweir NativeNumberWrapper* operator->() { return get(); } operator *()457cdf0e10cSrcweir NativeNumberWrapper& operator*() { return *get(); } 458cdf0e10cSrcweir }; 459cdf0e10cSrcweir 460cdf0e10cSrcweir #endif // INCLUDED_SVTOOLS_ONDEMAND_HXX 461cdf0e10cSrcweir 462