summaryrefslogtreecommitdiff
path: root/svl
diff options
context:
space:
mode:
authorKatarina Machalkova <kmachalkova@suse.cz>2011-03-08 16:06:52 +0100
committerKatarina Machalkova <kmachalkova@suse.cz>2011-03-08 17:37:08 +0100
commit6437196eea729b8e74379820c4d6af4d7db74e08 (patch)
tree050f43a95ee0688802665a7392e9353454783661 /svl
parent96dc8d285d5215ad9fac6951741b81c7203ee38d (diff)
Handle tinkering with '-N => (N)' number format -- bnc#659993
Diffstat (limited to 'svl')
-rw-r--r--svl/inc/svl/zformat.hxx4
-rw-r--r--svl/source/numbers/zforlist.cxx36
-rw-r--r--svl/source/numbers/zformat.cxx17
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 )