1*40df464eSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*40df464eSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*40df464eSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*40df464eSAndrew Rist * distributed with this work for additional information 6*40df464eSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*40df464eSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*40df464eSAndrew Rist * "License"); you may not use this file except in compliance 9*40df464eSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*40df464eSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*40df464eSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*40df464eSAndrew Rist * software distributed under the License is distributed on an 15*40df464eSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*40df464eSAndrew Rist * KIND, either express or implied. See the License for the 17*40df464eSAndrew Rist * specific language governing permissions and limitations 18*40df464eSAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*40df464eSAndrew Rist *************************************************************/ 21*40df464eSAndrew Rist 22*40df464eSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_svl.hxx" 26cdf0e10cSrcweir #ifndef GCC 27cdf0e10cSrcweir #endif 28cdf0e10cSrcweir 29cdf0e10cSrcweir #include <tools/color.hxx> 30cdf0e10cSrcweir #include <tools/debug.hxx> 31cdf0e10cSrcweir #include <i18npool/mslangid.hxx> 32cdf0e10cSrcweir #include <vos/mutex.hxx> 33cdf0e10cSrcweir #include <rtl/ustring.hxx> 34cdf0e10cSrcweir 35cdf0e10cSrcweir #include <com/sun/star/util/Date.hpp> 36cdf0e10cSrcweir #include <com/sun/star/beans/PropertyAttribute.hpp> 37cdf0e10cSrcweir 38cdf0e10cSrcweir #include "numfmuno.hxx" 39cdf0e10cSrcweir #include <svl/numuno.hxx> 40cdf0e10cSrcweir #include <svl/zforlist.hxx> 41cdf0e10cSrcweir #include <svl/zformat.hxx> 42cdf0e10cSrcweir #include <svl/itemprop.hxx> 43cdf0e10cSrcweir 44cdf0e10cSrcweir using namespace com::sun::star; 45cdf0e10cSrcweir 46cdf0e10cSrcweir //------------------------------------------------------------------------ 47cdf0e10cSrcweir 48cdf0e10cSrcweir #define SERVICENAME_NUMBERFORMATTER "com.sun.star.util.NumberFormatter" 49cdf0e10cSrcweir #define SERVICENAME_NUMBERSETTINGS "com.sun.star.util.NumberFormatSettings" 50cdf0e10cSrcweir #define SERVICENAME_NUMBERFORMATS "com.sun.star.util.NumberFormats" 51cdf0e10cSrcweir #define SERVICENAME_NUMBERFORMAT "com.sun.star.util.NumberFormatProperties" 52cdf0e10cSrcweir 53cdf0e10cSrcweir //------------------------------------------------------------------------ 54cdf0e10cSrcweir 55cdf0e10cSrcweir #define PROPERTYNAME_FMTSTR "FormatString" 56cdf0e10cSrcweir #define PROPERTYNAME_LOCALE "Locale" 57cdf0e10cSrcweir #define PROPERTYNAME_TYPE "Type" 58cdf0e10cSrcweir #define PROPERTYNAME_COMMENT "Comment" 59cdf0e10cSrcweir #define PROPERTYNAME_CURREXT "CurrencyExtension" 60cdf0e10cSrcweir #define PROPERTYNAME_CURRSYM "CurrencySymbol" 61cdf0e10cSrcweir #define PROPERTYNAME_CURRABB "CurrencyAbbreviation" 62cdf0e10cSrcweir #define PROPERTYNAME_DECIMALS "Decimals" 63cdf0e10cSrcweir #define PROPERTYNAME_LEADING "LeadingZeros" 64cdf0e10cSrcweir #define PROPERTYNAME_NEGRED "NegativeRed" 65cdf0e10cSrcweir #define PROPERTYNAME_STDFORM "StandardFormat" 66cdf0e10cSrcweir #define PROPERTYNAME_THOUS "ThousandsSeparator" 67cdf0e10cSrcweir #define PROPERTYNAME_USERDEF "UserDefined" 68cdf0e10cSrcweir 69cdf0e10cSrcweir #define PROPERTYNAME_NOZERO "NoZero" 70cdf0e10cSrcweir #define PROPERTYNAME_NULLDATE "NullDate" 71cdf0e10cSrcweir #define PROPERTYNAME_STDDEC "StandardDecimals" 72cdf0e10cSrcweir #define PROPERTYNAME_TWODIGIT "TwoDigitDateStart" 73cdf0e10cSrcweir 74cdf0e10cSrcweir //------------------------------------------------------------------------ 75cdf0e10cSrcweir 76cdf0e10cSrcweir // alles ohne Which-ID, Map nur fuer PropertySetInfo 77cdf0e10cSrcweir 78cdf0e10cSrcweir const SfxItemPropertyMapEntry* lcl_GetNumberFormatPropertyMap() 79cdf0e10cSrcweir { 80cdf0e10cSrcweir static SfxItemPropertyMapEntry aNumberFormatPropertyMap_Impl[] = 81cdf0e10cSrcweir { 82cdf0e10cSrcweir {MAP_CHAR_LEN(PROPERTYNAME_FMTSTR), 0, &getCppuType((rtl::OUString*)0),beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY, 0}, 83cdf0e10cSrcweir {MAP_CHAR_LEN(PROPERTYNAME_LOCALE), 0, &getCppuType((lang::Locale*)0),beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY, 0}, 84cdf0e10cSrcweir {MAP_CHAR_LEN(PROPERTYNAME_TYPE), 0, &getCppuType((sal_Int16*)0), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY, 0}, 85cdf0e10cSrcweir {MAP_CHAR_LEN(PROPERTYNAME_COMMENT), 0, &getCppuType((rtl::OUString*)0),beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY, 0}, 86cdf0e10cSrcweir {MAP_CHAR_LEN(PROPERTYNAME_CURREXT), 0, &getCppuType((rtl::OUString*)0),beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY, 0}, 87cdf0e10cSrcweir {MAP_CHAR_LEN(PROPERTYNAME_CURRSYM), 0, &getCppuType((rtl::OUString*)0),beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY, 0}, 88cdf0e10cSrcweir {MAP_CHAR_LEN(PROPERTYNAME_DECIMALS), 0, &getCppuType((sal_Int16*)0), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY, 0}, 89cdf0e10cSrcweir {MAP_CHAR_LEN(PROPERTYNAME_LEADING), 0, &getCppuType((sal_Int16*)0), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY, 0}, 90cdf0e10cSrcweir {MAP_CHAR_LEN(PROPERTYNAME_NEGRED), 0, &getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY, 0}, 91cdf0e10cSrcweir {MAP_CHAR_LEN(PROPERTYNAME_STDFORM), 0, &getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY, 0}, 92cdf0e10cSrcweir {MAP_CHAR_LEN(PROPERTYNAME_THOUS), 0, &getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY, 0}, 93cdf0e10cSrcweir {MAP_CHAR_LEN(PROPERTYNAME_USERDEF), 0, &getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY, 0}, 94cdf0e10cSrcweir {MAP_CHAR_LEN(PROPERTYNAME_CURRABB), 0, &getCppuType((rtl::OUString*)0),beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY, 0}, 95cdf0e10cSrcweir {0,0,0,0,0,0} 96cdf0e10cSrcweir }; 97cdf0e10cSrcweir return aNumberFormatPropertyMap_Impl; 98cdf0e10cSrcweir } 99cdf0e10cSrcweir 100cdf0e10cSrcweir const SfxItemPropertyMapEntry* lcl_GetNumberSettingsPropertyMap() 101cdf0e10cSrcweir { 102cdf0e10cSrcweir static SfxItemPropertyMapEntry aNumberSettingsPropertyMap_Impl[] = 103cdf0e10cSrcweir { 104cdf0e10cSrcweir {MAP_CHAR_LEN(PROPERTYNAME_NOZERO), 0, &getBooleanCppuType(), beans::PropertyAttribute::BOUND, 0}, 105cdf0e10cSrcweir {MAP_CHAR_LEN(PROPERTYNAME_NULLDATE), 0, &getCppuType((util::Date*)0), beans::PropertyAttribute::BOUND, 0}, 106cdf0e10cSrcweir {MAP_CHAR_LEN(PROPERTYNAME_STDDEC), 0, &getCppuType((sal_Int16*)0), beans::PropertyAttribute::BOUND, 0}, 107cdf0e10cSrcweir {MAP_CHAR_LEN(PROPERTYNAME_TWODIGIT), 0, &getCppuType((sal_Int16*)0), beans::PropertyAttribute::BOUND, 0}, 108cdf0e10cSrcweir {0,0,0,0,0,0} 109cdf0e10cSrcweir }; 110cdf0e10cSrcweir return aNumberSettingsPropertyMap_Impl; 111cdf0e10cSrcweir } 112cdf0e10cSrcweir 113cdf0e10cSrcweir //---------------------------------------------------------------------------------------- 114cdf0e10cSrcweir 115cdf0e10cSrcweir LanguageType lcl_GetLanguage( const lang::Locale& rLocale ) 116cdf0e10cSrcweir { 117cdf0e10cSrcweir // empty language -> LANGUAGE_SYSTEM 118cdf0e10cSrcweir if ( rLocale.Language.getLength() == 0 ) 119cdf0e10cSrcweir return LANGUAGE_SYSTEM; 120cdf0e10cSrcweir 121cdf0e10cSrcweir LanguageType eRet = MsLangId::convertLocaleToLanguage( rLocale ); 122cdf0e10cSrcweir if ( eRet == LANGUAGE_NONE ) 123cdf0e10cSrcweir eRet = LANGUAGE_SYSTEM; //! or throw an exception? 124cdf0e10cSrcweir 125cdf0e10cSrcweir return eRet; 126cdf0e10cSrcweir } 127cdf0e10cSrcweir 128cdf0e10cSrcweir //---------------------------------------------------------------------------------------- 129cdf0e10cSrcweir 130cdf0e10cSrcweir SvNumberFormatterServiceObj::SvNumberFormatterServiceObj() 131cdf0e10cSrcweir :m_aMutex() 132cdf0e10cSrcweir { 133cdf0e10cSrcweir } 134cdf0e10cSrcweir 135cdf0e10cSrcweir SvNumberFormatterServiceObj::~SvNumberFormatterServiceObj() 136cdf0e10cSrcweir { 137cdf0e10cSrcweir } 138cdf0e10cSrcweir 139cdf0e10cSrcweir com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL SvNumberFormatterServiceObj_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& ) 140cdf0e10cSrcweir { 141cdf0e10cSrcweir return ::com::sun::star::uno::Reference < ::com::sun::star::uno::XInterface >( ( ::cppu::OWeakObject* ) new SvNumberFormatterServiceObj ); 142cdf0e10cSrcweir } 143cdf0e10cSrcweir 144cdf0e10cSrcweir // XNumberFormatter 145cdf0e10cSrcweir 146cdf0e10cSrcweir void SAL_CALL SvNumberFormatterServiceObj::attachNumberFormatsSupplier( 147cdf0e10cSrcweir const uno::Reference<util::XNumberFormatsSupplier>& _xSupplier ) 148cdf0e10cSrcweir throw(uno::RuntimeException) 149cdf0e10cSrcweir { 150cdf0e10cSrcweir ::rtl::Reference< SvNumberFormatsSupplierObj > xAutoReleaseOld; 151cdf0e10cSrcweir 152cdf0e10cSrcweir // SYNCHRONIZED -> 153cdf0e10cSrcweir { 154cdf0e10cSrcweir ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); 155cdf0e10cSrcweir 156cdf0e10cSrcweir SvNumberFormatsSupplierObj* pNew = SvNumberFormatsSupplierObj::getImplementation( _xSupplier ); 157cdf0e10cSrcweir if (!pNew) 158cdf0e10cSrcweir throw uno::RuntimeException(); // wrong object 159cdf0e10cSrcweir 160cdf0e10cSrcweir xAutoReleaseOld = xSupplier; 161cdf0e10cSrcweir 162cdf0e10cSrcweir xSupplier = pNew; 163cdf0e10cSrcweir m_aMutex = xSupplier->getSharedMutex(); 164cdf0e10cSrcweir } 165cdf0e10cSrcweir // <- SYNCHRONIZED 166cdf0e10cSrcweir } 167cdf0e10cSrcweir 168cdf0e10cSrcweir uno::Reference<util::XNumberFormatsSupplier> SAL_CALL 169cdf0e10cSrcweir SvNumberFormatterServiceObj::getNumberFormatsSupplier() 170cdf0e10cSrcweir throw(uno::RuntimeException) 171cdf0e10cSrcweir { 172cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 173cdf0e10cSrcweir return xSupplier.get(); 174cdf0e10cSrcweir } 175cdf0e10cSrcweir 176cdf0e10cSrcweir sal_Int32 SAL_CALL SvNumberFormatterServiceObj::detectNumberFormat( 177cdf0e10cSrcweir sal_Int32 nKey, const rtl::OUString& aString ) 178cdf0e10cSrcweir throw(util::NotNumericException, uno::RuntimeException) 179cdf0e10cSrcweir { 180cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 181cdf0e10cSrcweir 182cdf0e10cSrcweir sal_Int32 nRet = 0; 183cdf0e10cSrcweir SvNumberFormatter* pFormatter = xSupplier.is() ? xSupplier->GetNumberFormatter() : NULL; 184cdf0e10cSrcweir if (pFormatter) 185cdf0e10cSrcweir { 186cdf0e10cSrcweir String aTemp = aString; 187cdf0e10cSrcweir sal_uInt32 nUKey = nKey; 188cdf0e10cSrcweir double fValue = 0.0; 189cdf0e10cSrcweir if ( pFormatter->IsNumberFormat(aTemp, nUKey, fValue) ) 190cdf0e10cSrcweir nRet = nUKey; 191cdf0e10cSrcweir else 192cdf0e10cSrcweir throw util::NotNumericException(); 193cdf0e10cSrcweir } 194cdf0e10cSrcweir else 195cdf0e10cSrcweir throw uno::RuntimeException(); 196cdf0e10cSrcweir 197cdf0e10cSrcweir return nRet; 198cdf0e10cSrcweir } 199cdf0e10cSrcweir 200cdf0e10cSrcweir double SAL_CALL SvNumberFormatterServiceObj::convertStringToNumber( 201cdf0e10cSrcweir sal_Int32 nKey, const rtl::OUString& aString ) 202cdf0e10cSrcweir throw(util::NotNumericException, uno::RuntimeException) 203cdf0e10cSrcweir { 204cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 205cdf0e10cSrcweir 206cdf0e10cSrcweir double fRet = 0.0; 207cdf0e10cSrcweir SvNumberFormatter* pFormatter = xSupplier.is() ? xSupplier->GetNumberFormatter() : NULL; 208cdf0e10cSrcweir if (pFormatter) 209cdf0e10cSrcweir { 210cdf0e10cSrcweir String aTemp = aString; 211cdf0e10cSrcweir sal_uInt32 nUKey = nKey; 212cdf0e10cSrcweir double fValue = 0.0; 213cdf0e10cSrcweir if ( pFormatter->IsNumberFormat(aTemp, nUKey, fValue) ) 214cdf0e10cSrcweir fRet = fValue; 215cdf0e10cSrcweir else 216cdf0e10cSrcweir throw util::NotNumericException(); 217cdf0e10cSrcweir } 218cdf0e10cSrcweir else 219cdf0e10cSrcweir throw uno::RuntimeException(); 220cdf0e10cSrcweir 221cdf0e10cSrcweir return fRet; 222cdf0e10cSrcweir } 223cdf0e10cSrcweir 224cdf0e10cSrcweir rtl::OUString SAL_CALL SvNumberFormatterServiceObj::convertNumberToString( 225cdf0e10cSrcweir sal_Int32 nKey, double fValue ) throw(uno::RuntimeException) 226cdf0e10cSrcweir { 227cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 228cdf0e10cSrcweir 229cdf0e10cSrcweir String aRet; 230cdf0e10cSrcweir SvNumberFormatter* pFormatter = xSupplier.is() ? xSupplier->GetNumberFormatter() : NULL; 231cdf0e10cSrcweir if (pFormatter) 232cdf0e10cSrcweir { 233cdf0e10cSrcweir Color* pColor = NULL; 234cdf0e10cSrcweir pFormatter->GetOutputString(fValue, nKey, aRet, &pColor); 235cdf0e10cSrcweir } 236cdf0e10cSrcweir else 237cdf0e10cSrcweir throw uno::RuntimeException(); 238cdf0e10cSrcweir 239cdf0e10cSrcweir return aRet; 240cdf0e10cSrcweir } 241cdf0e10cSrcweir 242cdf0e10cSrcweir util::Color SAL_CALL SvNumberFormatterServiceObj::queryColorForNumber( sal_Int32 nKey, 243cdf0e10cSrcweir double fValue, util::Color aDefaultColor ) 244cdf0e10cSrcweir throw(uno::RuntimeException) 245cdf0e10cSrcweir { 246cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 247cdf0e10cSrcweir 248cdf0e10cSrcweir util::Color nRet = aDefaultColor; // color = sal_Int32 249cdf0e10cSrcweir SvNumberFormatter* pFormatter = xSupplier.is() ? xSupplier->GetNumberFormatter() : NULL; 250cdf0e10cSrcweir if (pFormatter) 251cdf0e10cSrcweir { 252cdf0e10cSrcweir String aStr; 253cdf0e10cSrcweir Color* pColor = NULL; 254cdf0e10cSrcweir pFormatter->GetOutputString(fValue, nKey, aStr, &pColor); 255cdf0e10cSrcweir if (pColor) 256cdf0e10cSrcweir nRet = pColor->GetColor(); 257cdf0e10cSrcweir // sonst Default behalten 258cdf0e10cSrcweir } 259cdf0e10cSrcweir else 260cdf0e10cSrcweir throw uno::RuntimeException(); 261cdf0e10cSrcweir 262cdf0e10cSrcweir return nRet; 263cdf0e10cSrcweir } 264cdf0e10cSrcweir 265cdf0e10cSrcweir rtl::OUString SAL_CALL SvNumberFormatterServiceObj::formatString( sal_Int32 nKey, 266cdf0e10cSrcweir const rtl::OUString& aString ) throw(uno::RuntimeException) 267cdf0e10cSrcweir { 268cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 269cdf0e10cSrcweir 270cdf0e10cSrcweir String aRet; 271cdf0e10cSrcweir SvNumberFormatter* pFormatter = xSupplier.is() ? xSupplier->GetNumberFormatter() : NULL; 272cdf0e10cSrcweir if (pFormatter) 273cdf0e10cSrcweir { 274cdf0e10cSrcweir String aTemp = aString; 275cdf0e10cSrcweir Color* pColor = NULL; 276cdf0e10cSrcweir pFormatter->GetOutputString(aTemp, nKey, aRet, &pColor); 277cdf0e10cSrcweir } 278cdf0e10cSrcweir else 279cdf0e10cSrcweir throw uno::RuntimeException(); 280cdf0e10cSrcweir 281cdf0e10cSrcweir return aRet; 282cdf0e10cSrcweir } 283cdf0e10cSrcweir 284cdf0e10cSrcweir util::Color SAL_CALL SvNumberFormatterServiceObj::queryColorForString( sal_Int32 nKey, 285cdf0e10cSrcweir const rtl::OUString& aString,util::Color aDefaultColor ) 286cdf0e10cSrcweir throw(uno::RuntimeException) 287cdf0e10cSrcweir { 288cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 289cdf0e10cSrcweir 290cdf0e10cSrcweir util::Color nRet = aDefaultColor; // color = sal_Int32 291cdf0e10cSrcweir SvNumberFormatter* pFormatter = xSupplier.is() ? xSupplier->GetNumberFormatter() : NULL; 292cdf0e10cSrcweir if (pFormatter) 293cdf0e10cSrcweir { 294cdf0e10cSrcweir String aTemp = aString; 295cdf0e10cSrcweir String aStr; 296cdf0e10cSrcweir Color* pColor = NULL; 297cdf0e10cSrcweir pFormatter->GetOutputString(aTemp, nKey, aStr, &pColor); 298cdf0e10cSrcweir if (pColor) 299cdf0e10cSrcweir nRet = pColor->GetColor(); 300cdf0e10cSrcweir // sonst Default behalten 301cdf0e10cSrcweir } 302cdf0e10cSrcweir else 303cdf0e10cSrcweir throw uno::RuntimeException(); 304cdf0e10cSrcweir 305cdf0e10cSrcweir return nRet; 306cdf0e10cSrcweir } 307cdf0e10cSrcweir 308cdf0e10cSrcweir rtl::OUString SAL_CALL SvNumberFormatterServiceObj::getInputString( sal_Int32 nKey, double fValue ) 309cdf0e10cSrcweir throw(uno::RuntimeException) 310cdf0e10cSrcweir { 311cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 312cdf0e10cSrcweir 313cdf0e10cSrcweir String aRet; 314cdf0e10cSrcweir SvNumberFormatter* pFormatter = xSupplier.is() ? xSupplier->GetNumberFormatter() : NULL; 315cdf0e10cSrcweir if (pFormatter) 316cdf0e10cSrcweir pFormatter->GetInputLineString(fValue, nKey, aRet); 317cdf0e10cSrcweir else 318cdf0e10cSrcweir throw uno::RuntimeException(); 319cdf0e10cSrcweir 320cdf0e10cSrcweir return aRet; 321cdf0e10cSrcweir } 322cdf0e10cSrcweir 323cdf0e10cSrcweir // XNumberFormatPreviewer 324cdf0e10cSrcweir 325cdf0e10cSrcweir rtl::OUString SAL_CALL SvNumberFormatterServiceObj::convertNumberToPreviewString( 326cdf0e10cSrcweir const rtl::OUString& aFormat, double fValue, 327cdf0e10cSrcweir const lang::Locale& nLocale, sal_Bool bAllowEnglish ) 328cdf0e10cSrcweir throw(util::MalformedNumberFormatException, uno::RuntimeException) 329cdf0e10cSrcweir { 330cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 331cdf0e10cSrcweir 332cdf0e10cSrcweir String aRet; 333cdf0e10cSrcweir SvNumberFormatter* pFormatter = xSupplier.is() ? xSupplier->GetNumberFormatter() : NULL; 334cdf0e10cSrcweir if (pFormatter) 335cdf0e10cSrcweir { 336cdf0e10cSrcweir String aOutString; 337cdf0e10cSrcweir String aFormString = aFormat; 338cdf0e10cSrcweir LanguageType eLang = lcl_GetLanguage( nLocale ); 339cdf0e10cSrcweir Color* pColor = NULL; 340cdf0e10cSrcweir 341cdf0e10cSrcweir sal_Bool bOk; 342cdf0e10cSrcweir if ( bAllowEnglish ) 343cdf0e10cSrcweir bOk = pFormatter->GetPreviewStringGuess( 344cdf0e10cSrcweir aFormString, fValue, aOutString, &pColor, eLang ); 345cdf0e10cSrcweir else 346cdf0e10cSrcweir bOk = pFormatter->GetPreviewString( 347cdf0e10cSrcweir aFormString, fValue, aOutString, &pColor, eLang ); 348cdf0e10cSrcweir 349cdf0e10cSrcweir if (bOk) 350cdf0e10cSrcweir aRet = aOutString; 351cdf0e10cSrcweir else 352cdf0e10cSrcweir throw util::MalformedNumberFormatException(); 353cdf0e10cSrcweir } 354cdf0e10cSrcweir else 355cdf0e10cSrcweir throw uno::RuntimeException(); 356cdf0e10cSrcweir 357cdf0e10cSrcweir return aRet; 358cdf0e10cSrcweir } 359cdf0e10cSrcweir 360cdf0e10cSrcweir util::Color SAL_CALL SvNumberFormatterServiceObj::queryPreviewColorForNumber( 361cdf0e10cSrcweir const rtl::OUString& aFormat, double fValue, 362cdf0e10cSrcweir const lang::Locale& nLocale, sal_Bool bAllowEnglish, 363cdf0e10cSrcweir util::Color aDefaultColor ) 364cdf0e10cSrcweir throw(util::MalformedNumberFormatException, uno::RuntimeException) 365cdf0e10cSrcweir { 366cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 367cdf0e10cSrcweir 368cdf0e10cSrcweir util::Color nRet = aDefaultColor; // color = sal_Int32 369cdf0e10cSrcweir SvNumberFormatter* pFormatter = xSupplier.is() ? xSupplier->GetNumberFormatter() : NULL; 370cdf0e10cSrcweir if (pFormatter) 371cdf0e10cSrcweir { 372cdf0e10cSrcweir String aOutString; 373cdf0e10cSrcweir String aFormString = aFormat; 374cdf0e10cSrcweir LanguageType eLang = lcl_GetLanguage( nLocale ); 375cdf0e10cSrcweir Color* pColor = NULL; 376cdf0e10cSrcweir 377cdf0e10cSrcweir sal_Bool bOk; 378cdf0e10cSrcweir if ( bAllowEnglish ) 379cdf0e10cSrcweir bOk = pFormatter->GetPreviewStringGuess( 380cdf0e10cSrcweir aFormString, fValue, aOutString, &pColor, eLang ); 381cdf0e10cSrcweir else 382cdf0e10cSrcweir bOk = pFormatter->GetPreviewString( 383cdf0e10cSrcweir aFormString, fValue, aOutString, &pColor, eLang ); 384cdf0e10cSrcweir 385cdf0e10cSrcweir if (bOk) 386cdf0e10cSrcweir { 387cdf0e10cSrcweir if (pColor) 388cdf0e10cSrcweir nRet = pColor->GetColor(); 389cdf0e10cSrcweir // sonst Default behalten 390cdf0e10cSrcweir } 391cdf0e10cSrcweir else 392cdf0e10cSrcweir throw util::MalformedNumberFormatException(); 393cdf0e10cSrcweir } 394cdf0e10cSrcweir else 395cdf0e10cSrcweir throw uno::RuntimeException(); 396cdf0e10cSrcweir 397cdf0e10cSrcweir return nRet; 398cdf0e10cSrcweir } 399cdf0e10cSrcweir 400cdf0e10cSrcweir // XServiceInfo 401cdf0e10cSrcweir 402cdf0e10cSrcweir rtl::OUString SAL_CALL SvNumberFormatterServiceObj::getImplementationName() 403cdf0e10cSrcweir throw(uno::RuntimeException) 404cdf0e10cSrcweir { 405cdf0e10cSrcweir return rtl::OUString::createFromAscii("com.sun.star.uno.util.numbers.SvNumberFormatterServiceObject"); 406cdf0e10cSrcweir } 407cdf0e10cSrcweir 408cdf0e10cSrcweir sal_Bool SAL_CALL SvNumberFormatterServiceObj::supportsService( const rtl::OUString& ServiceName ) 409cdf0e10cSrcweir throw(uno::RuntimeException) 410cdf0e10cSrcweir { 411cdf0e10cSrcweir return ( ServiceName.compareToAscii(SERVICENAME_NUMBERFORMATTER) == 0 ); 412cdf0e10cSrcweir } 413cdf0e10cSrcweir 414cdf0e10cSrcweir uno::Sequence<rtl::OUString> SAL_CALL SvNumberFormatterServiceObj::getSupportedServiceNames() 415cdf0e10cSrcweir throw(uno::RuntimeException) 416cdf0e10cSrcweir { 417cdf0e10cSrcweir uno::Sequence<rtl::OUString> aRet(1); 418cdf0e10cSrcweir rtl::OUString* pArray = aRet.getArray(); 419cdf0e10cSrcweir pArray[0] = rtl::OUString::createFromAscii(SERVICENAME_NUMBERFORMATTER); 420cdf0e10cSrcweir return aRet; 421cdf0e10cSrcweir } 422cdf0e10cSrcweir 423cdf0e10cSrcweir //------------------------------------------------------------------------ 424cdf0e10cSrcweir 425cdf0e10cSrcweir SvNumberFormatsObj::SvNumberFormatsObj( SvNumberFormatsSupplierObj& _rParent, ::comphelper::SharedMutex& _rMutex ) 426cdf0e10cSrcweir :rSupplier( _rParent ) 427cdf0e10cSrcweir ,m_aMutex( _rMutex ) 428cdf0e10cSrcweir { 429cdf0e10cSrcweir rSupplier.acquire(); 430cdf0e10cSrcweir } 431cdf0e10cSrcweir 432cdf0e10cSrcweir SvNumberFormatsObj::~SvNumberFormatsObj() 433cdf0e10cSrcweir { 434cdf0e10cSrcweir rSupplier.release(); 435cdf0e10cSrcweir } 436cdf0e10cSrcweir 437cdf0e10cSrcweir // XNumberFormats 438cdf0e10cSrcweir 439cdf0e10cSrcweir uno::Reference<beans::XPropertySet> SAL_CALL SvNumberFormatsObj::getByKey( sal_Int32 nKey ) 440cdf0e10cSrcweir throw(uno::RuntimeException) 441cdf0e10cSrcweir { 442cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 443cdf0e10cSrcweir 444cdf0e10cSrcweir SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter(); 445cdf0e10cSrcweir const SvNumberformat* pFormat = pFormatter ? pFormatter->GetEntry(nKey) : NULL; 446cdf0e10cSrcweir if (pFormat) 447cdf0e10cSrcweir return new SvNumberFormatObj( rSupplier, nKey, m_aMutex ); 448cdf0e10cSrcweir else 449cdf0e10cSrcweir throw uno::RuntimeException(); 450cdf0e10cSrcweir } 451cdf0e10cSrcweir 452cdf0e10cSrcweir uno::Sequence<sal_Int32> SAL_CALL SvNumberFormatsObj::queryKeys( sal_Int16 nType, 453cdf0e10cSrcweir const lang::Locale& nLocale, sal_Bool bCreate ) 454cdf0e10cSrcweir throw(uno::RuntimeException) 455cdf0e10cSrcweir { 456cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 457cdf0e10cSrcweir 458cdf0e10cSrcweir SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter(); 459cdf0e10cSrcweir if ( pFormatter ) 460cdf0e10cSrcweir { 461cdf0e10cSrcweir sal_uInt32 nIndex = 0; 462cdf0e10cSrcweir LanguageType eLang = lcl_GetLanguage( nLocale ); 463cdf0e10cSrcweir SvNumberFormatTable& rTable = bCreate ? 464cdf0e10cSrcweir pFormatter->ChangeCL( nType, nIndex, eLang ) : 465cdf0e10cSrcweir pFormatter->GetEntryTable( nType, nIndex, eLang ); 466cdf0e10cSrcweir sal_uInt32 nCount = rTable.Count(); 467cdf0e10cSrcweir uno::Sequence<sal_Int32> aSeq(nCount); 468cdf0e10cSrcweir sal_Int32* pAry = aSeq.getArray(); 469cdf0e10cSrcweir for (sal_uInt32 i=0; i<nCount; i++) 470cdf0e10cSrcweir pAry[i] = rTable.GetObjectKey( i ); 471cdf0e10cSrcweir 472cdf0e10cSrcweir return aSeq; 473cdf0e10cSrcweir } 474cdf0e10cSrcweir else 475cdf0e10cSrcweir throw uno::RuntimeException(); 476cdf0e10cSrcweir } 477cdf0e10cSrcweir 478cdf0e10cSrcweir sal_Int32 SAL_CALL SvNumberFormatsObj::queryKey( const rtl::OUString& aFormat, 479cdf0e10cSrcweir const lang::Locale& nLocale, sal_Bool bScan ) 480cdf0e10cSrcweir throw(uno::RuntimeException) 481cdf0e10cSrcweir { 482cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 483cdf0e10cSrcweir 484cdf0e10cSrcweir sal_Int32 nRet = 0; 485cdf0e10cSrcweir SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter(); 486cdf0e10cSrcweir if (pFormatter) 487cdf0e10cSrcweir { 488cdf0e10cSrcweir String aFormStr = aFormat; 489cdf0e10cSrcweir LanguageType eLang = lcl_GetLanguage( nLocale ); 490cdf0e10cSrcweir if (bScan) 491cdf0e10cSrcweir { 492cdf0e10cSrcweir //! irgendwas muss hier noch passieren... 493cdf0e10cSrcweir } 494cdf0e10cSrcweir nRet = pFormatter->GetEntryKey( aFormat, eLang ); 495cdf0e10cSrcweir } 496cdf0e10cSrcweir else 497cdf0e10cSrcweir throw uno::RuntimeException(); 498cdf0e10cSrcweir 499cdf0e10cSrcweir return nRet; 500cdf0e10cSrcweir } 501cdf0e10cSrcweir 502cdf0e10cSrcweir sal_Int32 SAL_CALL SvNumberFormatsObj::addNew( const rtl::OUString& aFormat, 503cdf0e10cSrcweir const lang::Locale& nLocale ) 504cdf0e10cSrcweir throw(util::MalformedNumberFormatException, uno::RuntimeException) 505cdf0e10cSrcweir { 506cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 507cdf0e10cSrcweir 508cdf0e10cSrcweir sal_Int32 nRet = 0; 509cdf0e10cSrcweir SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter(); 510cdf0e10cSrcweir if (pFormatter) 511cdf0e10cSrcweir { 512cdf0e10cSrcweir String aFormStr = aFormat; 513cdf0e10cSrcweir LanguageType eLang = lcl_GetLanguage( nLocale ); 514cdf0e10cSrcweir sal_uInt32 nKey = 0; 515cdf0e10cSrcweir xub_StrLen nCheckPos = 0; 516cdf0e10cSrcweir short nType = 0; 517cdf0e10cSrcweir sal_Bool bOk = pFormatter->PutEntry( aFormStr, nCheckPos, nType, nKey, eLang ); 518cdf0e10cSrcweir if (bOk) 519cdf0e10cSrcweir nRet = nKey; 520cdf0e10cSrcweir else if (nCheckPos) 521cdf0e10cSrcweir { 522cdf0e10cSrcweir throw util::MalformedNumberFormatException(); // ungueltiges Format 523cdf0e10cSrcweir } 524cdf0e10cSrcweir else 525cdf0e10cSrcweir throw uno::RuntimeException(); // anderer Fehler (z.B. schon vorhanden) 526cdf0e10cSrcweir } 527cdf0e10cSrcweir else 528cdf0e10cSrcweir throw uno::RuntimeException(); 529cdf0e10cSrcweir 530cdf0e10cSrcweir return nRet; 531cdf0e10cSrcweir } 532cdf0e10cSrcweir 533cdf0e10cSrcweir sal_Int32 SAL_CALL SvNumberFormatsObj::addNewConverted( const rtl::OUString& aFormat, 534cdf0e10cSrcweir const lang::Locale& nLocale, const lang::Locale& nNewLocale ) 535cdf0e10cSrcweir throw(util::MalformedNumberFormatException, uno::RuntimeException) 536cdf0e10cSrcweir { 537cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 538cdf0e10cSrcweir 539cdf0e10cSrcweir sal_Int32 nRet = 0; 540cdf0e10cSrcweir SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter(); 541cdf0e10cSrcweir if (pFormatter) 542cdf0e10cSrcweir { 543cdf0e10cSrcweir String aFormStr = aFormat; 544cdf0e10cSrcweir LanguageType eLang = lcl_GetLanguage( nLocale ); 545cdf0e10cSrcweir LanguageType eNewLang = lcl_GetLanguage( nNewLocale ); 546cdf0e10cSrcweir sal_uInt32 nKey = 0; 547cdf0e10cSrcweir xub_StrLen nCheckPos = 0; 548cdf0e10cSrcweir short nType = 0; 549cdf0e10cSrcweir sal_Bool bOk = pFormatter->PutandConvertEntry( aFormStr, nCheckPos, nType, nKey, eLang, eNewLang ); 550cdf0e10cSrcweir if (bOk || nKey > 0) 551cdf0e10cSrcweir nRet = nKey; 552cdf0e10cSrcweir else if (nCheckPos) 553cdf0e10cSrcweir { 554cdf0e10cSrcweir throw util::MalformedNumberFormatException(); // ungueltiges Format 555cdf0e10cSrcweir } 556cdf0e10cSrcweir else 557cdf0e10cSrcweir throw uno::RuntimeException(); // anderer Fehler (z.B. schon vorhanden) 558cdf0e10cSrcweir } 559cdf0e10cSrcweir else 560cdf0e10cSrcweir throw uno::RuntimeException(); 561cdf0e10cSrcweir 562cdf0e10cSrcweir return nRet; 563cdf0e10cSrcweir } 564cdf0e10cSrcweir 565cdf0e10cSrcweir void SAL_CALL SvNumberFormatsObj::removeByKey( sal_Int32 nKey ) throw(uno::RuntimeException) 566cdf0e10cSrcweir { 567cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 568cdf0e10cSrcweir SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter(); 569cdf0e10cSrcweir 570cdf0e10cSrcweir if (pFormatter) 571cdf0e10cSrcweir { 572cdf0e10cSrcweir pFormatter->DeleteEntry(nKey); 573cdf0e10cSrcweir rSupplier.NumberFormatDeleted(nKey); // Benachrichtigung fuers Dokument 574cdf0e10cSrcweir } 575cdf0e10cSrcweir } 576cdf0e10cSrcweir 577cdf0e10cSrcweir rtl::OUString SAL_CALL SvNumberFormatsObj::generateFormat( sal_Int32 nBaseKey, 578cdf0e10cSrcweir const lang::Locale& nLocale, sal_Bool bThousands, 579cdf0e10cSrcweir sal_Bool bRed, sal_Int16 nDecimals, sal_Int16 nLeading ) 580cdf0e10cSrcweir throw(uno::RuntimeException) 581cdf0e10cSrcweir { 582cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 583cdf0e10cSrcweir 584cdf0e10cSrcweir String aRet; 585cdf0e10cSrcweir SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter(); 586cdf0e10cSrcweir if (pFormatter) 587cdf0e10cSrcweir { 588cdf0e10cSrcweir LanguageType eLang = lcl_GetLanguage( nLocale ); 589cdf0e10cSrcweir pFormatter->GenerateFormat( aRet, nBaseKey, eLang, bThousands, bRed, nDecimals, nLeading ); 590cdf0e10cSrcweir } 591cdf0e10cSrcweir else 592cdf0e10cSrcweir throw uno::RuntimeException(); 593cdf0e10cSrcweir 594cdf0e10cSrcweir return aRet; 595cdf0e10cSrcweir } 596cdf0e10cSrcweir 597cdf0e10cSrcweir // XNumberFormatTypes 598cdf0e10cSrcweir 599cdf0e10cSrcweir sal_Int32 SAL_CALL SvNumberFormatsObj::getStandardIndex( const lang::Locale& nLocale ) 600cdf0e10cSrcweir throw(uno::RuntimeException) 601cdf0e10cSrcweir { 602cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 603cdf0e10cSrcweir 604cdf0e10cSrcweir sal_Int32 nRet = 0; 605cdf0e10cSrcweir SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter(); 606cdf0e10cSrcweir if (pFormatter) 607cdf0e10cSrcweir { 608cdf0e10cSrcweir LanguageType eLang = lcl_GetLanguage( nLocale ); 609cdf0e10cSrcweir nRet = pFormatter->GetStandardIndex(eLang); 610cdf0e10cSrcweir } 611cdf0e10cSrcweir else 612cdf0e10cSrcweir throw uno::RuntimeException(); 613cdf0e10cSrcweir 614cdf0e10cSrcweir return nRet; 615cdf0e10cSrcweir } 616cdf0e10cSrcweir 617cdf0e10cSrcweir sal_Int32 SAL_CALL SvNumberFormatsObj::getStandardFormat( sal_Int16 nType, const lang::Locale& nLocale ) 618cdf0e10cSrcweir throw(uno::RuntimeException) 619cdf0e10cSrcweir { 620cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 621cdf0e10cSrcweir 622cdf0e10cSrcweir sal_Int32 nRet = 0; 623cdf0e10cSrcweir SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter(); 624cdf0e10cSrcweir if (pFormatter) 625cdf0e10cSrcweir { 626cdf0e10cSrcweir LanguageType eLang = lcl_GetLanguage( nLocale ); 627cdf0e10cSrcweir // mask out "defined" bit, so type from an existing number format 628cdf0e10cSrcweir // can directly be used for getStandardFormat 629cdf0e10cSrcweir nType &= ~NUMBERFORMAT_DEFINED; 630cdf0e10cSrcweir nRet = pFormatter->GetStandardFormat(nType, eLang); 631cdf0e10cSrcweir } 632cdf0e10cSrcweir else 633cdf0e10cSrcweir throw uno::RuntimeException(); 634cdf0e10cSrcweir 635cdf0e10cSrcweir return nRet; 636cdf0e10cSrcweir } 637cdf0e10cSrcweir 638cdf0e10cSrcweir sal_Int32 SAL_CALL SvNumberFormatsObj::getFormatIndex( sal_Int16 nIndex, const lang::Locale& nLocale ) 639cdf0e10cSrcweir throw(uno::RuntimeException) 640cdf0e10cSrcweir { 641cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 642cdf0e10cSrcweir 643cdf0e10cSrcweir sal_Int32 nRet = 0; 644cdf0e10cSrcweir SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter(); 645cdf0e10cSrcweir if (pFormatter) 646cdf0e10cSrcweir { 647cdf0e10cSrcweir LanguageType eLang = lcl_GetLanguage( nLocale ); 648cdf0e10cSrcweir nRet = pFormatter->GetFormatIndex( (NfIndexTableOffset)nIndex, eLang ); 649cdf0e10cSrcweir } 650cdf0e10cSrcweir else 651cdf0e10cSrcweir throw uno::RuntimeException(); 652cdf0e10cSrcweir 653cdf0e10cSrcweir return nRet; 654cdf0e10cSrcweir } 655cdf0e10cSrcweir 656cdf0e10cSrcweir sal_Bool SAL_CALL SvNumberFormatsObj::isTypeCompatible( sal_Int16 nOldType, sal_Int16 nNewType ) 657cdf0e10cSrcweir throw(uno::RuntimeException) 658cdf0e10cSrcweir { 659cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 660cdf0e10cSrcweir 661cdf0e10cSrcweir sal_Bool bRet = sal_False; 662cdf0e10cSrcweir SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter(); 663cdf0e10cSrcweir if (pFormatter) 664cdf0e10cSrcweir bRet = pFormatter->IsCompatible( nOldType, nNewType ); 665cdf0e10cSrcweir else 666cdf0e10cSrcweir throw uno::RuntimeException(); 667cdf0e10cSrcweir 668cdf0e10cSrcweir return bRet; 669cdf0e10cSrcweir } 670cdf0e10cSrcweir 671cdf0e10cSrcweir sal_Int32 SAL_CALL SvNumberFormatsObj::getFormatForLocale( sal_Int32 nKey, const lang::Locale& nLocale ) 672cdf0e10cSrcweir throw(uno::RuntimeException) 673cdf0e10cSrcweir { 674cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 675cdf0e10cSrcweir 676cdf0e10cSrcweir sal_Int32 nRet = 0; 677cdf0e10cSrcweir SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter(); 678cdf0e10cSrcweir if (pFormatter) 679cdf0e10cSrcweir { 680cdf0e10cSrcweir LanguageType eLang = lcl_GetLanguage( nLocale ); 681cdf0e10cSrcweir nRet = pFormatter->GetFormatForLanguageIfBuiltIn(nKey, eLang); 682cdf0e10cSrcweir } 683cdf0e10cSrcweir else 684cdf0e10cSrcweir throw uno::RuntimeException(); 685cdf0e10cSrcweir 686cdf0e10cSrcweir return nRet; 687cdf0e10cSrcweir } 688cdf0e10cSrcweir 689cdf0e10cSrcweir // XServiceInfo 690cdf0e10cSrcweir 691cdf0e10cSrcweir rtl::OUString SAL_CALL SvNumberFormatsObj::getImplementationName() 692cdf0e10cSrcweir throw(uno::RuntimeException) 693cdf0e10cSrcweir { 694cdf0e10cSrcweir return rtl::OUString::createFromAscii("SvNumberFormatsObj"); 695cdf0e10cSrcweir } 696cdf0e10cSrcweir 697cdf0e10cSrcweir sal_Bool SAL_CALL SvNumberFormatsObj::supportsService( const rtl::OUString& ServiceName ) 698cdf0e10cSrcweir throw(uno::RuntimeException) 699cdf0e10cSrcweir { 700cdf0e10cSrcweir return ( ServiceName.compareToAscii(SERVICENAME_NUMBERFORMATS) == 0 ); 701cdf0e10cSrcweir } 702cdf0e10cSrcweir 703cdf0e10cSrcweir uno::Sequence<rtl::OUString> SAL_CALL SvNumberFormatsObj::getSupportedServiceNames() 704cdf0e10cSrcweir throw(uno::RuntimeException) 705cdf0e10cSrcweir { 706cdf0e10cSrcweir uno::Sequence<rtl::OUString> aRet(1); 707cdf0e10cSrcweir rtl::OUString* pArray = aRet.getArray(); 708cdf0e10cSrcweir pArray[0] = rtl::OUString::createFromAscii(SERVICENAME_NUMBERFORMATS); 709cdf0e10cSrcweir return aRet; 710cdf0e10cSrcweir } 711cdf0e10cSrcweir 712cdf0e10cSrcweir //------------------------------------------------------------------------ 713cdf0e10cSrcweir 714cdf0e10cSrcweir SvNumberFormatObj::SvNumberFormatObj( SvNumberFormatsSupplierObj& rParent, sal_uLong nK, const ::comphelper::SharedMutex& _rMutex ) 715cdf0e10cSrcweir :rSupplier( rParent ) 716cdf0e10cSrcweir ,nKey( nK ) 717cdf0e10cSrcweir ,m_aMutex( _rMutex ) 718cdf0e10cSrcweir { 719cdf0e10cSrcweir rSupplier.acquire(); 720cdf0e10cSrcweir } 721cdf0e10cSrcweir 722cdf0e10cSrcweir SvNumberFormatObj::~SvNumberFormatObj() 723cdf0e10cSrcweir { 724cdf0e10cSrcweir rSupplier.release(); 725cdf0e10cSrcweir } 726cdf0e10cSrcweir 727cdf0e10cSrcweir // XPropertySet 728cdf0e10cSrcweir 729cdf0e10cSrcweir uno::Reference<beans::XPropertySetInfo> SAL_CALL SvNumberFormatObj::getPropertySetInfo() 730cdf0e10cSrcweir throw(uno::RuntimeException) 731cdf0e10cSrcweir { 732cdf0e10cSrcweir ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); 733cdf0e10cSrcweir static uno::Reference<beans::XPropertySetInfo> aRef = 734cdf0e10cSrcweir new SfxItemPropertySetInfo( lcl_GetNumberFormatPropertyMap() ); 735cdf0e10cSrcweir return aRef; 736cdf0e10cSrcweir } 737cdf0e10cSrcweir 738cdf0e10cSrcweir void SAL_CALL SvNumberFormatObj::setPropertyValue( const rtl::OUString&, 739cdf0e10cSrcweir const uno::Any& ) 740cdf0e10cSrcweir throw(beans::UnknownPropertyException, beans::PropertyVetoException, 741cdf0e10cSrcweir lang::IllegalArgumentException, lang::WrappedTargetException, 742cdf0e10cSrcweir uno::RuntimeException) 743cdf0e10cSrcweir { 744cdf0e10cSrcweir throw beans::UnknownPropertyException(); // everything is read-only 745cdf0e10cSrcweir } 746cdf0e10cSrcweir 747cdf0e10cSrcweir uno::Any SAL_CALL SvNumberFormatObj::getPropertyValue( const rtl::OUString& aPropertyName ) 748cdf0e10cSrcweir throw(beans::UnknownPropertyException, lang::WrappedTargetException, 749cdf0e10cSrcweir uno::RuntimeException) 750cdf0e10cSrcweir { 751cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 752cdf0e10cSrcweir 753cdf0e10cSrcweir uno::Any aRet; 754cdf0e10cSrcweir SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter(); 755cdf0e10cSrcweir const SvNumberformat* pFormat = pFormatter ? pFormatter->GetEntry(nKey) : NULL; 756cdf0e10cSrcweir if (pFormat) 757cdf0e10cSrcweir { 758cdf0e10cSrcweir sal_Bool bThousand, bRed; 759cdf0e10cSrcweir sal_uInt16 nDecimals, nLeading; 760cdf0e10cSrcweir 761cdf0e10cSrcweir String aString = aPropertyName; 762cdf0e10cSrcweir if (aString.EqualsAscii( PROPERTYNAME_FMTSTR )) 763cdf0e10cSrcweir { 764cdf0e10cSrcweir aRet <<= rtl::OUString( pFormat->GetFormatstring() ); 765cdf0e10cSrcweir } 766cdf0e10cSrcweir else if (aString.EqualsAscii( PROPERTYNAME_LOCALE )) 767cdf0e10cSrcweir { 768cdf0e10cSrcweir lang::Locale aLocale( MsLangId::convertLanguageToLocale( 769cdf0e10cSrcweir pFormat->GetLanguage())); 770cdf0e10cSrcweir aRet <<= aLocale; 771cdf0e10cSrcweir } 772cdf0e10cSrcweir else if (aString.EqualsAscii( PROPERTYNAME_TYPE )) 773cdf0e10cSrcweir { 774cdf0e10cSrcweir aRet <<= (sal_Int16)( pFormat->GetType() ); 775cdf0e10cSrcweir } 776cdf0e10cSrcweir else if (aString.EqualsAscii( PROPERTYNAME_COMMENT )) 777cdf0e10cSrcweir { 778cdf0e10cSrcweir aRet <<= rtl::OUString( pFormat->GetComment() ); 779cdf0e10cSrcweir } 780cdf0e10cSrcweir else if (aString.EqualsAscii( PROPERTYNAME_STDFORM )) 781cdf0e10cSrcweir { 782cdf0e10cSrcweir //! SvNumberformat Member bStandard rausreichen? 783cdf0e10cSrcweir sal_Bool bStandard = ( ( nKey % SV_COUNTRY_LANGUAGE_OFFSET ) == 0 ); 784cdf0e10cSrcweir aRet.setValue( &bStandard, getBooleanCppuType() ); 785cdf0e10cSrcweir } 786cdf0e10cSrcweir else if (aString.EqualsAscii( PROPERTYNAME_USERDEF )) 787cdf0e10cSrcweir { 788cdf0e10cSrcweir sal_Bool bUserDef = ( ( pFormat->GetType() & NUMBERFORMAT_DEFINED ) != 0 ); 789cdf0e10cSrcweir aRet.setValue( &bUserDef, getBooleanCppuType() ); 790cdf0e10cSrcweir } 791cdf0e10cSrcweir else if (aString.EqualsAscii( PROPERTYNAME_DECIMALS )) 792cdf0e10cSrcweir { 793cdf0e10cSrcweir pFormat->GetFormatSpecialInfo( bThousand, bRed, nDecimals, nLeading ); 794cdf0e10cSrcweir aRet <<= (sal_Int16)( nDecimals ); 795cdf0e10cSrcweir } 796cdf0e10cSrcweir else if (aString.EqualsAscii( PROPERTYNAME_LEADING )) 797cdf0e10cSrcweir { 798cdf0e10cSrcweir pFormat->GetFormatSpecialInfo( bThousand, bRed, nDecimals, nLeading ); 799cdf0e10cSrcweir aRet <<= (sal_Int16)( nLeading ); 800cdf0e10cSrcweir } 801cdf0e10cSrcweir else if (aString.EqualsAscii( PROPERTYNAME_NEGRED )) 802cdf0e10cSrcweir { 803cdf0e10cSrcweir pFormat->GetFormatSpecialInfo( bThousand, bRed, nDecimals, nLeading ); 804cdf0e10cSrcweir aRet.setValue( &bRed, getBooleanCppuType() ); 805cdf0e10cSrcweir } 806cdf0e10cSrcweir else if (aString.EqualsAscii( PROPERTYNAME_THOUS )) 807cdf0e10cSrcweir { 808cdf0e10cSrcweir pFormat->GetFormatSpecialInfo( bThousand, bRed, nDecimals, nLeading ); 809cdf0e10cSrcweir aRet.setValue( &bThousand, getBooleanCppuType() ); 810cdf0e10cSrcweir } 811cdf0e10cSrcweir else if (aString.EqualsAscii( PROPERTYNAME_CURRSYM )) 812cdf0e10cSrcweir { 813cdf0e10cSrcweir String aSymbol, aExt; 814cdf0e10cSrcweir pFormat->GetNewCurrencySymbol( aSymbol, aExt ); 815cdf0e10cSrcweir aRet <<= rtl::OUString( aSymbol ); 816cdf0e10cSrcweir } 817cdf0e10cSrcweir else if (aString.EqualsAscii( PROPERTYNAME_CURREXT )) 818cdf0e10cSrcweir { 819cdf0e10cSrcweir String aSymbol, aExt; 820cdf0e10cSrcweir pFormat->GetNewCurrencySymbol( aSymbol, aExt ); 821cdf0e10cSrcweir aRet <<= rtl::OUString( aExt ); 822cdf0e10cSrcweir } 823cdf0e10cSrcweir else if (aString.EqualsAscii( PROPERTYNAME_CURRABB )) 824cdf0e10cSrcweir { 825cdf0e10cSrcweir String aSymbol, aExt; 826cdf0e10cSrcweir sal_Bool bBank = sal_False; 827cdf0e10cSrcweir pFormat->GetNewCurrencySymbol( aSymbol, aExt ); 828cdf0e10cSrcweir const NfCurrencyEntry* pCurr = pFormatter->GetCurrencyEntry( bBank, 829cdf0e10cSrcweir aSymbol, aExt, pFormat->GetLanguage() ); 830cdf0e10cSrcweir if ( pCurr ) 831cdf0e10cSrcweir aRet <<= rtl::OUString( pCurr->GetBankSymbol() ); 832cdf0e10cSrcweir else 833cdf0e10cSrcweir aRet <<= rtl::OUString(); 834cdf0e10cSrcweir } 835cdf0e10cSrcweir else 836cdf0e10cSrcweir throw beans::UnknownPropertyException(); 837cdf0e10cSrcweir } 838cdf0e10cSrcweir else 839cdf0e10cSrcweir throw uno::RuntimeException(); 840cdf0e10cSrcweir 841cdf0e10cSrcweir return aRet; 842cdf0e10cSrcweir } 843cdf0e10cSrcweir 844cdf0e10cSrcweir void SAL_CALL SvNumberFormatObj::addPropertyChangeListener( const rtl::OUString&, 845cdf0e10cSrcweir const uno::Reference<beans::XPropertyChangeListener>&) 846cdf0e10cSrcweir throw(beans::UnknownPropertyException, 847cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 848cdf0e10cSrcweir { 849cdf0e10cSrcweir DBG_ERROR("not implemented"); 850cdf0e10cSrcweir } 851cdf0e10cSrcweir 852cdf0e10cSrcweir void SAL_CALL SvNumberFormatObj::removePropertyChangeListener( const rtl::OUString&, 853cdf0e10cSrcweir const uno::Reference<beans::XPropertyChangeListener>&) 854cdf0e10cSrcweir throw(beans::UnknownPropertyException, 855cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 856cdf0e10cSrcweir { 857cdf0e10cSrcweir DBG_ERROR("not implemented"); 858cdf0e10cSrcweir } 859cdf0e10cSrcweir 860cdf0e10cSrcweir void SAL_CALL SvNumberFormatObj::addVetoableChangeListener( const rtl::OUString&, 861cdf0e10cSrcweir const uno::Reference<beans::XVetoableChangeListener>&) 862cdf0e10cSrcweir throw(beans::UnknownPropertyException, 863cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 864cdf0e10cSrcweir { 865cdf0e10cSrcweir DBG_ERROR("not implemented"); 866cdf0e10cSrcweir } 867cdf0e10cSrcweir 868cdf0e10cSrcweir void SAL_CALL SvNumberFormatObj::removeVetoableChangeListener( const rtl::OUString&, 869cdf0e10cSrcweir const uno::Reference<beans::XVetoableChangeListener>&) 870cdf0e10cSrcweir throw(beans::UnknownPropertyException, 871cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 872cdf0e10cSrcweir { 873cdf0e10cSrcweir DBG_ERROR("not implemented"); 874cdf0e10cSrcweir } 875cdf0e10cSrcweir 876cdf0e10cSrcweir // XPropertyAccess 877cdf0e10cSrcweir 878cdf0e10cSrcweir uno::Sequence<beans::PropertyValue> SAL_CALL SvNumberFormatObj::getPropertyValues() 879cdf0e10cSrcweir throw(uno::RuntimeException) 880cdf0e10cSrcweir { 881cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 882cdf0e10cSrcweir 883cdf0e10cSrcweir SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter(); 884cdf0e10cSrcweir const SvNumberformat* pFormat = pFormatter ? pFormatter->GetEntry(nKey) : NULL; 885cdf0e10cSrcweir if (pFormat) 886cdf0e10cSrcweir { 887cdf0e10cSrcweir String aSymbol, aExt, aAbb; 888cdf0e10cSrcweir sal_Bool bBank = sal_False; 889cdf0e10cSrcweir pFormat->GetNewCurrencySymbol( aSymbol, aExt ); 890cdf0e10cSrcweir const NfCurrencyEntry* pCurr = pFormatter->GetCurrencyEntry( bBank, 891cdf0e10cSrcweir aSymbol, aExt, pFormat->GetLanguage() ); 892cdf0e10cSrcweir if ( pCurr ) 893cdf0e10cSrcweir aAbb = pCurr->GetBankSymbol(); 894cdf0e10cSrcweir 895cdf0e10cSrcweir String aFmtStr = pFormat->GetFormatstring(); 896cdf0e10cSrcweir String aComment = pFormat->GetComment(); 897cdf0e10cSrcweir sal_Bool bStandard = ( ( nKey % SV_COUNTRY_LANGUAGE_OFFSET ) == 0 ); 898cdf0e10cSrcweir //! SvNumberformat Member bStandard rausreichen? 899cdf0e10cSrcweir sal_Bool bUserDef = ( ( pFormat->GetType() & NUMBERFORMAT_DEFINED ) != 0 ); 900cdf0e10cSrcweir sal_Bool bThousand, bRed; 901cdf0e10cSrcweir sal_uInt16 nDecimals, nLeading; 902cdf0e10cSrcweir pFormat->GetFormatSpecialInfo( bThousand, bRed, nDecimals, nLeading ); 903cdf0e10cSrcweir lang::Locale aLocale( MsLangId::convertLanguageToLocale( 904cdf0e10cSrcweir pFormat->GetLanguage())); 905cdf0e10cSrcweir 906cdf0e10cSrcweir uno::Sequence<beans::PropertyValue> aSeq(13); 907cdf0e10cSrcweir beans::PropertyValue* pArray = aSeq.getArray(); 908cdf0e10cSrcweir 909cdf0e10cSrcweir pArray[0].Name = rtl::OUString::createFromAscii( PROPERTYNAME_FMTSTR ); 910cdf0e10cSrcweir pArray[0].Value <<= rtl::OUString( aFmtStr ); 911cdf0e10cSrcweir pArray[1].Name = rtl::OUString::createFromAscii( PROPERTYNAME_LOCALE ); 912cdf0e10cSrcweir pArray[1].Value <<= aLocale; 913cdf0e10cSrcweir pArray[2].Name = rtl::OUString::createFromAscii( PROPERTYNAME_TYPE ); 914cdf0e10cSrcweir pArray[2].Value <<= (sal_Int16)( pFormat->GetType() ); 915cdf0e10cSrcweir pArray[3].Name = rtl::OUString::createFromAscii( PROPERTYNAME_COMMENT ); 916cdf0e10cSrcweir pArray[3].Value <<= rtl::OUString( aComment ); 917cdf0e10cSrcweir pArray[4].Name = rtl::OUString::createFromAscii( PROPERTYNAME_STDFORM ); 918cdf0e10cSrcweir pArray[4].Value.setValue( &bStandard, getBooleanCppuType() ); 919cdf0e10cSrcweir pArray[5].Name = rtl::OUString::createFromAscii( PROPERTYNAME_USERDEF ); 920cdf0e10cSrcweir pArray[5].Value.setValue( &bUserDef, getBooleanCppuType() ); 921cdf0e10cSrcweir pArray[6].Name = rtl::OUString::createFromAscii( PROPERTYNAME_DECIMALS ); 922cdf0e10cSrcweir pArray[6].Value <<= (sal_Int16)( nDecimals ); 923cdf0e10cSrcweir pArray[7].Name = rtl::OUString::createFromAscii( PROPERTYNAME_LEADING ); 924cdf0e10cSrcweir pArray[7].Value <<= (sal_Int16)( nLeading ); 925cdf0e10cSrcweir pArray[8].Name = rtl::OUString::createFromAscii( PROPERTYNAME_NEGRED ); 926cdf0e10cSrcweir pArray[8].Value.setValue( &bRed, getBooleanCppuType() ); 927cdf0e10cSrcweir pArray[9].Name = rtl::OUString::createFromAscii( PROPERTYNAME_THOUS ); 928cdf0e10cSrcweir pArray[9].Value.setValue( &bThousand, getBooleanCppuType() ); 929cdf0e10cSrcweir pArray[10].Name = rtl::OUString::createFromAscii( PROPERTYNAME_CURRSYM ); 930cdf0e10cSrcweir pArray[10].Value <<= rtl::OUString( aSymbol ); 931cdf0e10cSrcweir pArray[11].Name = rtl::OUString::createFromAscii( PROPERTYNAME_CURREXT ); 932cdf0e10cSrcweir pArray[11].Value <<= rtl::OUString( aExt ); 933cdf0e10cSrcweir pArray[12].Name = rtl::OUString::createFromAscii( PROPERTYNAME_CURRABB ); 934cdf0e10cSrcweir pArray[12].Value <<= rtl::OUString( aAbb ); 935cdf0e10cSrcweir 936cdf0e10cSrcweir return aSeq; 937cdf0e10cSrcweir } 938cdf0e10cSrcweir else 939cdf0e10cSrcweir throw uno::RuntimeException(); 940cdf0e10cSrcweir } 941cdf0e10cSrcweir 942cdf0e10cSrcweir void SAL_CALL SvNumberFormatObj::setPropertyValues( const uno::Sequence<beans::PropertyValue>& ) 943cdf0e10cSrcweir throw(beans::UnknownPropertyException, beans::PropertyVetoException, 944cdf0e10cSrcweir lang::IllegalArgumentException, lang::WrappedTargetException, 945cdf0e10cSrcweir uno::RuntimeException) 946cdf0e10cSrcweir { 947cdf0e10cSrcweir throw beans::UnknownPropertyException(); // everything is read-only 948cdf0e10cSrcweir } 949cdf0e10cSrcweir 950cdf0e10cSrcweir // XServiceInfo 951cdf0e10cSrcweir 952cdf0e10cSrcweir rtl::OUString SAL_CALL SvNumberFormatObj::getImplementationName() 953cdf0e10cSrcweir throw(uno::RuntimeException) 954cdf0e10cSrcweir { 955cdf0e10cSrcweir return rtl::OUString::createFromAscii("SvNumberFormatObj"); 956cdf0e10cSrcweir } 957cdf0e10cSrcweir 958cdf0e10cSrcweir sal_Bool SAL_CALL SvNumberFormatObj::supportsService( const rtl::OUString& ServiceName ) 959cdf0e10cSrcweir throw(uno::RuntimeException) 960cdf0e10cSrcweir { 961cdf0e10cSrcweir return ( ServiceName.compareToAscii(SERVICENAME_NUMBERFORMAT) == 0 ); 962cdf0e10cSrcweir } 963cdf0e10cSrcweir 964cdf0e10cSrcweir uno::Sequence<rtl::OUString> SAL_CALL SvNumberFormatObj::getSupportedServiceNames() 965cdf0e10cSrcweir throw(uno::RuntimeException) 966cdf0e10cSrcweir { 967cdf0e10cSrcweir uno::Sequence<rtl::OUString> aRet(1); 968cdf0e10cSrcweir rtl::OUString* pArray = aRet.getArray(); 969cdf0e10cSrcweir pArray[0] = rtl::OUString::createFromAscii(SERVICENAME_NUMBERFORMAT); 970cdf0e10cSrcweir return aRet; 971cdf0e10cSrcweir } 972cdf0e10cSrcweir 973cdf0e10cSrcweir //------------------------------------------------------------------------ 974cdf0e10cSrcweir 975cdf0e10cSrcweir SvNumberFormatSettingsObj::SvNumberFormatSettingsObj( SvNumberFormatsSupplierObj& rParent, const ::comphelper::SharedMutex& _rMutex ) 976cdf0e10cSrcweir :rSupplier( rParent ) 977cdf0e10cSrcweir ,m_aMutex( _rMutex ) 978cdf0e10cSrcweir { 979cdf0e10cSrcweir rSupplier.acquire(); 980cdf0e10cSrcweir } 981cdf0e10cSrcweir 982cdf0e10cSrcweir SvNumberFormatSettingsObj::~SvNumberFormatSettingsObj() 983cdf0e10cSrcweir { 984cdf0e10cSrcweir rSupplier.release(); 985cdf0e10cSrcweir } 986cdf0e10cSrcweir 987cdf0e10cSrcweir // XPropertySet 988cdf0e10cSrcweir 989cdf0e10cSrcweir uno::Reference<beans::XPropertySetInfo> SAL_CALL SvNumberFormatSettingsObj::getPropertySetInfo() 990cdf0e10cSrcweir throw(uno::RuntimeException) 991cdf0e10cSrcweir { 992cdf0e10cSrcweir ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); 993cdf0e10cSrcweir static uno::Reference<beans::XPropertySetInfo> aRef = 994cdf0e10cSrcweir new SfxItemPropertySetInfo( lcl_GetNumberSettingsPropertyMap() ); 995cdf0e10cSrcweir return aRef; 996cdf0e10cSrcweir } 997cdf0e10cSrcweir 998cdf0e10cSrcweir void SAL_CALL SvNumberFormatSettingsObj::setPropertyValue( const rtl::OUString& aPropertyName, 999cdf0e10cSrcweir const uno::Any& aValue ) 1000cdf0e10cSrcweir throw(beans::UnknownPropertyException, beans::PropertyVetoException, 1001cdf0e10cSrcweir lang::IllegalArgumentException, lang::WrappedTargetException, 1002cdf0e10cSrcweir uno::RuntimeException) 1003cdf0e10cSrcweir { 1004cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 1005cdf0e10cSrcweir 1006cdf0e10cSrcweir SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter(); 1007cdf0e10cSrcweir if (pFormatter) 1008cdf0e10cSrcweir { 1009cdf0e10cSrcweir String aString = aPropertyName; 1010cdf0e10cSrcweir if (aString.EqualsAscii( PROPERTYNAME_NOZERO )) 1011cdf0e10cSrcweir { 1012cdf0e10cSrcweir // operator >>= shouldn't be used for bool (?) 1013cdf0e10cSrcweir if ( aValue.getValueTypeClass() == uno::TypeClass_BOOLEAN ) 1014cdf0e10cSrcweir pFormatter->SetNoZero( *(sal_Bool*)aValue.getValue() ); 1015cdf0e10cSrcweir } 1016cdf0e10cSrcweir else if (aString.EqualsAscii( PROPERTYNAME_NULLDATE )) 1017cdf0e10cSrcweir { 1018cdf0e10cSrcweir util::Date aDate; 1019cdf0e10cSrcweir if ( aValue >>= aDate ) 1020cdf0e10cSrcweir pFormatter->ChangeNullDate( aDate.Day, aDate.Month, aDate.Year ); 1021cdf0e10cSrcweir } 1022cdf0e10cSrcweir else if (aString.EqualsAscii( PROPERTYNAME_STDDEC )) 1023cdf0e10cSrcweir { 1024cdf0e10cSrcweir sal_Int16 nInt16 = sal_Int16(); 1025cdf0e10cSrcweir if ( aValue >>= nInt16 ) 1026cdf0e10cSrcweir pFormatter->ChangeStandardPrec( nInt16 ); 1027cdf0e10cSrcweir } 1028cdf0e10cSrcweir else if (aString.EqualsAscii( PROPERTYNAME_TWODIGIT )) 1029cdf0e10cSrcweir { 1030cdf0e10cSrcweir sal_Int16 nInt16 = sal_Int16(); 1031cdf0e10cSrcweir if ( aValue >>= nInt16 ) 1032cdf0e10cSrcweir pFormatter->SetYear2000( nInt16 ); 1033cdf0e10cSrcweir } 1034cdf0e10cSrcweir else 1035cdf0e10cSrcweir throw beans::UnknownPropertyException(); 1036cdf0e10cSrcweir 1037cdf0e10cSrcweir rSupplier.SettingsChanged(); 1038cdf0e10cSrcweir } 1039cdf0e10cSrcweir else 1040cdf0e10cSrcweir throw uno::RuntimeException(); 1041cdf0e10cSrcweir } 1042cdf0e10cSrcweir 1043cdf0e10cSrcweir uno::Any SAL_CALL SvNumberFormatSettingsObj::getPropertyValue( const rtl::OUString& aPropertyName ) 1044cdf0e10cSrcweir throw(beans::UnknownPropertyException, lang::WrappedTargetException, 1045cdf0e10cSrcweir uno::RuntimeException) 1046cdf0e10cSrcweir { 1047cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 1048cdf0e10cSrcweir 1049cdf0e10cSrcweir uno::Any aRet; 1050cdf0e10cSrcweir SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter(); 1051cdf0e10cSrcweir if (pFormatter) 1052cdf0e10cSrcweir { 1053cdf0e10cSrcweir String aString = aPropertyName; 1054cdf0e10cSrcweir if (aString.EqualsAscii( PROPERTYNAME_NOZERO )) 1055cdf0e10cSrcweir { 1056cdf0e10cSrcweir sal_Bool bNoZero = pFormatter->GetNoZero(); 1057cdf0e10cSrcweir aRet.setValue( &bNoZero, getBooleanCppuType() ); 1058cdf0e10cSrcweir } 1059cdf0e10cSrcweir else if (aString.EqualsAscii( PROPERTYNAME_NULLDATE )) 1060cdf0e10cSrcweir { 1061cdf0e10cSrcweir Date* pDate = pFormatter->GetNullDate(); 1062cdf0e10cSrcweir if (pDate) 1063cdf0e10cSrcweir { 1064cdf0e10cSrcweir util::Date aUnoDate( pDate->GetDay(), pDate->GetMonth(), pDate->GetYear() ); 1065cdf0e10cSrcweir aRet <<= aUnoDate; 1066cdf0e10cSrcweir } 1067cdf0e10cSrcweir } 1068cdf0e10cSrcweir else if (aString.EqualsAscii( PROPERTYNAME_STDDEC )) 1069cdf0e10cSrcweir aRet <<= (sal_Int16)( pFormatter->GetStandardPrec() ); 1070cdf0e10cSrcweir else if (aString.EqualsAscii( PROPERTYNAME_TWODIGIT )) 1071cdf0e10cSrcweir aRet <<= (sal_Int16)( pFormatter->GetYear2000() ); 1072cdf0e10cSrcweir else 1073cdf0e10cSrcweir throw beans::UnknownPropertyException(); 1074cdf0e10cSrcweir } 1075cdf0e10cSrcweir else 1076cdf0e10cSrcweir throw uno::RuntimeException(); 1077cdf0e10cSrcweir 1078cdf0e10cSrcweir return aRet; 1079cdf0e10cSrcweir } 1080cdf0e10cSrcweir 1081cdf0e10cSrcweir void SAL_CALL SvNumberFormatSettingsObj::addPropertyChangeListener( const rtl::OUString&, 1082cdf0e10cSrcweir const uno::Reference<beans::XPropertyChangeListener>&) 1083cdf0e10cSrcweir throw(beans::UnknownPropertyException, 1084cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 1085cdf0e10cSrcweir { 1086cdf0e10cSrcweir DBG_ERROR("not implemented"); 1087cdf0e10cSrcweir } 1088cdf0e10cSrcweir 1089cdf0e10cSrcweir void SAL_CALL SvNumberFormatSettingsObj::removePropertyChangeListener( const rtl::OUString&, 1090cdf0e10cSrcweir const uno::Reference<beans::XPropertyChangeListener>&) 1091cdf0e10cSrcweir throw(beans::UnknownPropertyException, 1092cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 1093cdf0e10cSrcweir { 1094cdf0e10cSrcweir DBG_ERROR("not implemented"); 1095cdf0e10cSrcweir } 1096cdf0e10cSrcweir 1097cdf0e10cSrcweir void SAL_CALL SvNumberFormatSettingsObj::addVetoableChangeListener( const rtl::OUString&, 1098cdf0e10cSrcweir const uno::Reference<beans::XVetoableChangeListener>&) 1099cdf0e10cSrcweir throw(beans::UnknownPropertyException, 1100cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 1101cdf0e10cSrcweir { 1102cdf0e10cSrcweir DBG_ERROR("not implemented"); 1103cdf0e10cSrcweir } 1104cdf0e10cSrcweir 1105cdf0e10cSrcweir void SAL_CALL SvNumberFormatSettingsObj::removeVetoableChangeListener( const rtl::OUString&, 1106cdf0e10cSrcweir const uno::Reference<beans::XVetoableChangeListener>&) 1107cdf0e10cSrcweir throw(beans::UnknownPropertyException, 1108cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 1109cdf0e10cSrcweir { 1110cdf0e10cSrcweir DBG_ERROR("not implemented"); 1111cdf0e10cSrcweir } 1112cdf0e10cSrcweir 1113cdf0e10cSrcweir // XServiceInfo 1114cdf0e10cSrcweir 1115cdf0e10cSrcweir rtl::OUString SAL_CALL SvNumberFormatSettingsObj::getImplementationName() 1116cdf0e10cSrcweir throw(uno::RuntimeException) 1117cdf0e10cSrcweir { 1118cdf0e10cSrcweir return rtl::OUString::createFromAscii("SvNumberFormatSettingsObj"); 1119cdf0e10cSrcweir } 1120cdf0e10cSrcweir 1121cdf0e10cSrcweir sal_Bool SAL_CALL SvNumberFormatSettingsObj::supportsService( const rtl::OUString& ServiceName ) 1122cdf0e10cSrcweir throw(uno::RuntimeException) 1123cdf0e10cSrcweir { 1124cdf0e10cSrcweir return ( ServiceName.compareToAscii(SERVICENAME_NUMBERSETTINGS) == 0 ); 1125cdf0e10cSrcweir } 1126cdf0e10cSrcweir 1127cdf0e10cSrcweir uno::Sequence<rtl::OUString> SAL_CALL SvNumberFormatSettingsObj::getSupportedServiceNames() 1128cdf0e10cSrcweir throw(uno::RuntimeException) 1129cdf0e10cSrcweir { 1130cdf0e10cSrcweir uno::Sequence<rtl::OUString> aRet(1); 1131cdf0e10cSrcweir rtl::OUString* pArray = aRet.getArray(); 1132cdf0e10cSrcweir pArray[0] = rtl::OUString::createFromAscii(SERVICENAME_NUMBERSETTINGS); 1133cdf0e10cSrcweir return aRet; 1134cdf0e10cSrcweir } 1135cdf0e10cSrcweir 1136cdf0e10cSrcweir 1137