diff options
author | Katarina Machalkova <kmachalkova@suse.cz> | 2011-03-02 17:14:16 +0100 |
---|---|---|
committer | Katarina Machalkova <kmachalkova@suse.cz> | 2011-03-03 16:06:40 +0100 |
commit | f0a3dfbffa35737c27ed42769f06c31d656be762 (patch) | |
tree | 63f88ae430ba50ba63163a5f1ee99edd8802e7d3 /svl/source | |
parent | 3b5fffc4edb37bb159442909305b22ec84154e24 (diff) |
Introducing new number format ( -N => (N) ) -- bnc#659993
+ teaching Calc num. formatting dialog to work with it
+ adding it to ~most locale (certainly I've forgotten some)
Diffstat (limited to 'svl/source')
-rw-r--r-- | svl/source/numbers/zforlist.cxx | 45 | ||||
-rw-r--r-- | svl/source/numbers/zformat.cxx | 17 |
2 files changed, 56 insertions, 6 deletions
diff --git a/svl/source/numbers/zforlist.cxx b/svl/source/numbers/zforlist.cxx index 1cdc860f971a..64b3c55e2b62 100644 --- a/svl/source/numbers/zforlist.cxx +++ b/svl/source/numbers/zforlist.cxx @@ -2304,6 +2304,15 @@ void SvNumberFormatter::ImpGenerateFormats( sal_uInt32 CLOffset, BOOL bLoadingSO CLOffset + SetIndexTable( NF_NUMBER_SYSTEM, ZF_STANDARD+5 ), SV_NUMBERFORMATTER_VERSION_NEWSTANDARD ); + // #,##0_);(#,##0) -42 => (42) + nIdx = ImpGetFormatCodeIndex( aFormatSeq, NF_NUMBER_NEG_BRACKET ); + ImpInsertFormat( aFormatSeq[nIdx], + CLOffset + SetIndexTable( NF_NUMBER_NEG_BRACKET, ZF_STANDARD+6 )); + + // #,##0.00_);(#,##0.00) -42.00 => (42.00) + nIdx = ImpGetFormatCodeIndex( aFormatSeq, NF_NUMBER_NEG_BRACKET_DEC2 ); + ImpInsertFormat( aFormatSeq[nIdx], + CLOffset + SetIndexTable( NF_NUMBER_NEG_BRACKET_DEC2, ZF_STANDARD+7 )); // Percent number aFormatSeq = aNumberFormatCode.getAllFormatCode( i18n::KNumberFormatUsage::PERCENT_NUMBER ); @@ -2744,6 +2753,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 +2849,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..0248f9ba307e 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].GetnAnz(); + if (!nAnz) + return FALSE; + + String *tmpStr = NumFor[1].Info().sStrArray; + return (tmpStr[0] == '(' && tmpStr[nAnz-1] == ')' ); +} + +BOOL SvNumberformat::HasPositiveBracketPlaceholder() const +{ + USHORT nAnz = NumFor[0].GetnAnz(); + String *tmpStr = NumFor[0].Info().sStrArray; + return (tmpStr[nAnz-1].EqualsAscii( "_)" )); +} + DateFormat SvNumberformat::GetDateOrder() const { if ( (eType & NUMBERFORMAT_DATE) == NUMBERFORMAT_DATE ) |