diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2012-05-26 00:40:49 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2012-05-26 02:08:19 +0200 |
commit | de687872926d0c54beba38fc2c33368b3ca6d634 (patch) | |
tree | b60a7199fa3722afc472bc6064fc4c7385e8443a /sc | |
parent | b8452a89ceaa9008558b83f3a8b6937d14b7c803 (diff) |
support remaining data bar attributes in odf import/export
Change-Id: I6fdf7a6158002003938ee039152d582776aba5db
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/filter/xml/xmlcondformat.cxx | 38 | ||||
-rw-r--r-- | sc/source/filter/xml/xmlexprt.cxx | 31 | ||||
-rw-r--r-- | sc/source/filter/xml/xmlimprt.cxx | 5 | ||||
-rw-r--r-- | sc/source/filter/xml/xmlimprt.hxx | 3 |
4 files changed, 69 insertions, 8 deletions
diff --git a/sc/source/filter/xml/xmlcondformat.cxx b/sc/source/filter/xml/xmlcondformat.cxx index 3e3d3c46ad2e..d705394bc611 100644 --- a/sc/source/filter/xml/xmlcondformat.cxx +++ b/sc/source/filter/xml/xmlcondformat.cxx @@ -180,6 +180,8 @@ ScXMLDataBarFormatContext::ScXMLDataBarFormatContext( ScXMLImport& rImport, sal_ rtl::OUString sPositiveColor; rtl::OUString sNegativeColor; rtl::OUString sGradient; + rtl::OUString sAxisPosition; + rtl::OUString sShowValue; sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0); const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDataBarAttrMap(); @@ -199,6 +201,15 @@ ScXMLDataBarFormatContext::ScXMLDataBarFormatContext( ScXMLImport& rImport, sal_ case XML_TOK_DATABAR_GRADIENT: sGradient = sValue; break; + case XML_TOK_DATABAR_NEGATIVE_COLOR: + sNegativeColor = sValue; + break; + case XML_TOK_DATABAR_AXISPOSITION: + sAxisPosition = sValue; + break; + case XML_TOK_DATABAR_SHOWVALUE: + sShowValue = sValue; + break; default: break; } @@ -213,18 +224,30 @@ ScXMLDataBarFormatContext::ScXMLDataBarFormatContext( ScXMLImport& rImport, sal_ sax::Converter::convertBool( bGradient, sGradient); mpFormatData->mbGradient = bGradient; } + if(!sPositiveColor.isEmpty()) { sal_Int32 nColor = 0; sax::Converter::convertColor( nColor, sPositiveColor ); mpFormatData->maPositiveColor = Color(nColor); } + if(!sNegativeColor.isEmpty()) { + // we might check here for 0xff0000 and don't write it sal_Int32 nColor = 0; - sax::Converter::convertColor( nColor, sPositiveColor ); + sax::Converter::convertColor( nColor, sNegativeColor ); mpFormatData->mpNegativeColor.reset(new Color(nColor)); } + else + mpFormatData->mbNeg = false; + + if(!sShowValue.isEmpty()) + { + bool bShowValue = true; + sax::Converter::convertBool( bShowValue, sShowValue ); + mpFormatData->mbOnlyBar = !bShowValue; + } mpDataBarFormat->SetRange(rRange); } @@ -264,7 +287,8 @@ void ScXMLDataBarFormatContext::EndElement() namespace { -void setColorEntryType(const rtl::OUString& rType, ScColorScaleEntry* pEntry) +void setColorEntryType(const rtl::OUString& rType, ScColorScaleEntry* pEntry, const rtl::OUString rFormula, + ScXMLImport& rImport) { if(rType == "minimum") pEntry->SetMin(true); @@ -274,6 +298,11 @@ void setColorEntryType(const rtl::OUString& rType, ScColorScaleEntry* pEntry) pEntry->SetPercentile(true); else if(rType == "percent") pEntry->SetPercent(true); + else if(rType == "formula") + { + //position does not matter, only table is important + pEntry->SetFormula(rFormula, rImport.GetDocument(), ScAddress(0,0,rImport.GetTables().GetCurrentSheet()), formula::FormulaGrammar::GRAM_ODFF); + } //TODO: add formulas } @@ -324,12 +353,11 @@ ScXMLColorScaleFormatEntryContext::ScXMLColorScaleFormatEntryContext( ScXMLImpor sax::Converter::convertColor(nColor, sColor); aColor = Color(nColor); - //TODO: formulas if(!sVal.isEmpty()) sax::Converter::convertDouble(nVal, sVal); mpFormatEntry = new ScColorScaleEntry(nVal, aColor); - setColorEntryType(sType, mpFormatEntry); + setColorEntryType(sType, mpFormatEntry, sVal, GetScImport()); pFormat->AddEntry(mpFormatEntry); } @@ -373,7 +401,7 @@ ScXMLDataBarFormatEntryContext::ScXMLDataBarFormatEntryContext( ScXMLImport& rIm sax::Converter::convertDouble(nVal, sVal); ScColorScaleEntry* pEntry = new ScColorScaleEntry(nVal, Color()); - setColorEntryType(sType, pEntry); + setColorEntryType(sType, pEntry, sVal, GetScImport()); if(pData->mpLowerLimit) { pData->mpUpperLimit.reset(pEntry); diff --git a/sc/source/filter/xml/xmlexprt.cxx b/sc/source/filter/xml/xmlexprt.cxx index 3aea14a07f8e..2f7c3fbe9f1a 100644 --- a/sc/source/filter/xml/xmlexprt.cxx +++ b/sc/source/filter/xml/xmlexprt.cxx @@ -3885,6 +3885,37 @@ void ScXMLExport::ExportConditionalFormat(SCTAB nTab) const ScDataBarFormatData* pFormatData = static_cast<const ScDataBarFormat&>(*itr).GetDataBarData(); if(!pFormatData->mbGradient) AddAttribute(XML_NAMESPACE_CALC_EXT, XML_GRADIENT, XML_FALSE); + if(pFormatData->mbOnlyBar) + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_SHOW_VALUE, XML_FALSE); + + if(pFormatData->mbNeg) + { + if(pFormatData->mpNegativeColor) + { + rtl::OUStringBuffer aBuffer; + ::sax::Converter::convertColor(aBuffer, pFormatData->mpNegativeColor->GetColor()); + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_NEGATIVE_COLOR, aBuffer.makeStringAndClear()); + } + else + { + rtl::OUStringBuffer aBuffer; + ::sax::Converter::convertColor(aBuffer, Color(COL_LIGHTRED).GetColor()); + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_NEGATIVE_COLOR, aBuffer.makeStringAndClear()); + } + } + + if(pFormatData->meAxisPosition != databar::AUTOMATIC) + { + if(pFormatData->meAxisPosition == databar::NONE) + { + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_AXIS_POSITION, rtl::OUString("none")); + } + else + { + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_AXIS_POSITION, rtl::OUString("middle")); + } + } + rtl::OUStringBuffer aBuffer; ::sax::Converter::convertColor(aBuffer, pFormatData->maPositiveColor.GetColor()); AddAttribute(XML_NAMESPACE_CALC_EXT, XML_POSITIVE_COLOR, aBuffer.makeStringAndClear()); diff --git a/sc/source/filter/xml/xmlimprt.cxx b/sc/source/filter/xml/xmlimprt.cxx index f689fcbf6730..c2fb1fdf498e 100644 --- a/sc/source/filter/xml/xmlimprt.cxx +++ b/sc/source/filter/xml/xmlimprt.cxx @@ -703,9 +703,10 @@ const SvXMLTokenMap& ScXMLImport::GetDataBarAttrMap() static SvXMLTokenMapEntry aDataBarAttrTokenMap[] = { { XML_NAMESPACE_CALC_EXT, XML_POSITIVE_COLOR, XML_TOK_DATABAR_POSITIVE_COLOR }, - //{ XML_NAMESPACE_CALC_EXT, XML_NEGATIVE_COLOR, XML_TOK_DATABAR_NEGATIVE_COLOR }, + { XML_NAMESPACE_CALC_EXT, XML_NEGATIVE_COLOR, XML_TOK_DATABAR_NEGATIVE_COLOR }, { XML_NAMESPACE_CALC_EXT, XML_GRADIENT, XML_TOK_DATABAR_GRADIENT }, - //{ XML_NAMESPACE_CALC_EXT, XML_AXIS_POSITION, XML_TOK_DATABAR_AXISPOSITION }, + { XML_NAMESPACE_CALC_EXT, XML_AXIS_POSITION, XML_TOK_DATABAR_AXISPOSITION }, + { XML_NAMESPACE_CALC_EXT, XML_SHOW_VALUE, XML_TOK_DATABAR_SHOWVALUE }, XML_TOKEN_MAP_END }; diff --git a/sc/source/filter/xml/xmlimprt.hxx b/sc/source/filter/xml/xmlimprt.hxx index 9743c69956a5..b94752f21e84 100644 --- a/sc/source/filter/xml/xmlimprt.hxx +++ b/sc/source/filter/xml/xmlimprt.hxx @@ -189,7 +189,8 @@ enum ScXMLDataBarAttrTokens XML_TOK_DATABAR_POSITIVE_COLOR, XML_TOK_DATABAR_NEGATIVE_COLOR, XML_TOK_DATABAR_GRADIENT, - XML_TOK_DATABAR_AXISPOSITION + XML_TOK_DATABAR_AXISPOSITION, + XML_TOK_DATABAR_SHOWVALUE }; enum ScXMLDataBarEntryAttrTokens |