diff options
-rw-r--r-- | sc/inc/colorscale.hxx | 14 | ||||
-rw-r--r-- | sc/source/core/data/colorscale.cxx | 8 | ||||
-rw-r--r-- | sc/source/filter/excel/xecontent.cxx | 2 | ||||
-rw-r--r-- | sc/source/filter/oox/condformatbuffer.cxx | 2 |
4 files changed, 23 insertions, 3 deletions
diff --git a/sc/inc/colorscale.hxx b/sc/inc/colorscale.hxx index 06c3c80c7faa..5b6f6e59b00f 100644 --- a/sc/inc/colorscale.hxx +++ b/sc/inc/colorscale.hxx @@ -101,6 +101,8 @@ struct SC_DLLPUBLIC ScDataBarFormatData mbGradient(true), mbNeg(true), meAxisPosition(databar::AUTOMATIC), + mnMinLength(0), + mnMaxLength(100), mbOnlyBar(false){} ScDataBarFormatData(const ScDataBarFormatData& r): @@ -109,6 +111,8 @@ struct SC_DLLPUBLIC ScDataBarFormatData mbGradient(r.mbGradient), mbNeg(r.mbNeg), meAxisPosition(r.meAxisPosition), + mnMinLength(r.mnMinLength), + mnMaxLength(r.mnMaxLength), mbOnlyBar(r.mbOnlyBar) { if(r.mpNegativeColor) @@ -157,6 +161,16 @@ struct SC_DLLPUBLIC ScDataBarFormatData * Default is false */ databar::ScAxisPosition meAxisPosition; + /** + * Minimal length of a databar in percent of cell length + * Value has to be in the range [0, 100) + */ + double mnMinLength; + /** + * Maximal length of a databar in percent of cell length + * Value has to be in the range (0, 100] + */ + double mnMaxLength; /** * If TRUE we only show the bar and not the value diff --git a/sc/source/core/data/colorscale.cxx b/sc/source/core/data/colorscale.cxx index 9de8919294b2..f56756335ba9 100644 --- a/sc/source/core/data/colorscale.cxx +++ b/sc/source/core/data/colorscale.cxx @@ -838,6 +838,8 @@ ScDataBarInfo* ScDataBarFormat::GetDataBarInfo(const ScAddress& rAddr) const double nValMax = getMaxValue(); double nMin = getMin(nValMin, nValMax); double nMax = getMax(nValMin, nValMax); + double nMinLength = mpFormatData->mnMinLength; + double nMaxLength = mpFormatData->mnMaxLength; double nValue = mpDoc->GetValue(rAddr); @@ -846,16 +848,16 @@ ScDataBarInfo* ScDataBarFormat::GetDataBarInfo(const ScAddress& rAddr) const { if(nValue <= nMin) { - pInfo->mnLength = 0; + pInfo->mnLength = nMinLength; } else if(nValue >= nMax) { - pInfo->mnLength = 100; + pInfo->mnLength = nMaxLength; } else { double nDiff = nMax - nMin; - pInfo->mnLength = (nValue - nMin)/nDiff*100.0; + pInfo->mnLength = nMinLength + (nValue - nMin)/nDiff * (nMaxLength-nMinLength); } pInfo->mnZero = 0; } diff --git a/sc/source/filter/excel/xecontent.cxx b/sc/source/filter/excel/xecontent.cxx index 17140e04b762..ca71cf96a1b1 100644 --- a/sc/source/filter/excel/xecontent.cxx +++ b/sc/source/filter/excel/xecontent.cxx @@ -1300,6 +1300,8 @@ void XclExpDataBar::SaveXml( XclExpXmlStream& rStrm ) rWorksheet->startElement( XML_dataBar, XML_showValue, OString::number(!mrFormat.GetDataBarData()->mbOnlyBar), + XML_minLength, OString::number(sal_uInt32(mrFormat.GetDataBarData()->mnMinLength)), + XML_maxLength, OString::number(sal_uInt32(mrFormat.GetDataBarData()->mnMaxLength)), FSEND ); mpCfvoLowerLimit->SaveXml(rStrm); diff --git a/sc/source/filter/oox/condformatbuffer.cxx b/sc/source/filter/oox/condformatbuffer.cxx index 511e02e0e90f..9fa0b1432118 100644 --- a/sc/source/filter/oox/condformatbuffer.cxx +++ b/sc/source/filter/oox/condformatbuffer.cxx @@ -273,6 +273,8 @@ void DataBarRule::importCfvo( const AttributeList& rAttribs ) void DataBarRule::importAttribs( const AttributeList& rAttribs ) { mxFormat->mbOnlyBar = !rAttribs.getBool( XML_showValue, true ); + mxFormat->mnMinLength = rAttribs.getUnsigned( XML_minLength, 10); + mxFormat->mnMaxLength = rAttribs.getUnsigned( XML_maxLength, 90); } void DataBarRule::SetData( ScDataBarFormat* pFormat, ScDocument* pDoc, const ScAddress& rAddr ) |