summaryrefslogtreecommitdiff
path: root/svl/source
diff options
context:
space:
mode:
authorKatarina Machalkova <kmachalkova@suse.cz>2011-03-02 17:14:16 +0100
committerKatarina Machalkova <kmachalkova@suse.cz>2011-03-03 16:06:40 +0100
commitf0a3dfbffa35737c27ed42769f06c31d656be762 (patch)
tree63f88ae430ba50ba63163a5f1ee99edd8802e7d3 /svl/source
parent3b5fffc4edb37bb159442909305b22ec84154e24 (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.cxx45
-rw-r--r--svl/source/numbers/zformat.cxx17
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 )