diff options
author | Katarina Machalkova <kmachalkova@suse.cz> | 2011-03-08 16:06:52 +0100 |
---|---|---|
committer | Katarina Machalkova <kmachalkova@suse.cz> | 2011-03-08 17:37:08 +0100 |
commit | 6437196eea729b8e74379820c4d6af4d7db74e08 (patch) | |
tree | 050f43a95ee0688802665a7392e9353454783661 /svl | |
parent | 96dc8d285d5215ad9fac6951741b81c7203ee38d (diff) |
Handle tinkering with '-N => (N)' number format -- bnc#659993
Diffstat (limited to 'svl')
-rw-r--r-- | svl/inc/svl/zformat.hxx | 4 | ||||
-rw-r--r-- | svl/source/numbers/zforlist.cxx | 36 | ||||
-rw-r--r-- | svl/source/numbers/zformat.cxx | 17 |
3 files changed, 51 insertions, 6 deletions
diff --git a/svl/inc/svl/zformat.hxx b/svl/inc/svl/zformat.hxx index e9790d60f3aa..a4222a4757c9 100644 --- a/svl/inc/svl/zformat.hxx +++ b/svl/inc/svl/zformat.hxx @@ -334,6 +334,10 @@ public: // Whether the negative format is without a sign or not BOOL IsNegativeWithoutSign() const; + BOOL IsNegativeInBracket() const; + + BOOL HasPositiveBracketPlaceholder() const; + // Whether a new SYMBOLTYPE_CURRENCY is contained in the format BOOL HasNewCurrency() const; diff --git a/svl/source/numbers/zforlist.cxx b/svl/source/numbers/zforlist.cxx index 1cdc860f971a..1198b11697be 100644 --- a/svl/source/numbers/zforlist.cxx +++ b/svl/source/numbers/zforlist.cxx @@ -2744,6 +2744,10 @@ void SvNumberFormatter::GenerateFormat(String& sString, utl::DigitGroupingIterator aGrouping( xLocaleData->getDigitGrouping()); const xub_StrLen nDigitsInFirstGroup = static_cast<xub_StrLen>(aGrouping.get()); const String& rThSep = GetNumThousandSep(); + + SvNumberformat* pFormat = (SvNumberformat*) aFTable.Get(nIndex); + BOOL insertBrackets = pFormat->IsNegativeInBracket(); + if (nAnzLeading == 0) { if (!bThousand) @@ -2836,15 +2840,35 @@ void SvNumberFormatter::GenerateFormat(String& sString, sString += ';'; sString += sNegStr; } - if (IsRed && eType != NUMBERFORMAT_CURRENCY) + if ( (IsRed || insertBrackets ) && eType != NUMBERFORMAT_CURRENCY) { String sTmpStr = sString; + + if ( pFormat->HasPositiveBracketPlaceholder() ) + { + sTmpStr += '_'; + sTmpStr += ')'; + } sTmpStr += ';'; - sTmpStr += '['; - sTmpStr += pFormatScanner->GetRedString(); - sTmpStr += ']'; - sTmpStr += '-'; - sTmpStr +=sString; + + if (IsRed) + { + sTmpStr += '['; + sTmpStr += pFormatScanner->GetRedString(); + sTmpStr += ']'; + } + + if (insertBrackets) + { + sTmpStr += '('; + sTmpStr += sString; + sTmpStr += ')'; + } + else + { + sTmpStr += '-'; + sTmpStr +=sString; + } sString = sTmpStr; } } diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx index 48a6dcfd0e24..be6077fe3a70 100644 --- a/svl/source/numbers/zformat.cxx +++ b/svl/source/numbers/zformat.cxx @@ -4114,6 +4114,23 @@ BOOL SvNumberformat::IsNegativeWithoutSign() const return FALSE; } +BOOL SvNumberformat::IsNegativeInBracket() const +{ + USHORT nAnz = NumFor[1].GetCount(); + if (!nAnz) + return FALSE; + + String *tmpStr = NumFor[1].Info().sStrArray; + return (tmpStr[0] == '(' && tmpStr[nAnz-1] == ')' ); +} + +BOOL SvNumberformat::HasPositiveBracketPlaceholder() const +{ + USHORT nAnz = NumFor[0].GetCount(); + String *tmpStr = NumFor[0].Info().sStrArray; + return (tmpStr[nAnz-1].EqualsAscii( "_)" )); +} + DateFormat SvNumberformat::GetDateOrder() const { if ( (eType & NUMBERFORMAT_DATE) == NUMBERFORMAT_DATE ) |