Kaydet (Commit) a2a1a59a authored tarafından Kohei Yoshida's avatar Kohei Yoshida

fdo#77506: More reliable way to determine label strings.

Not beautiful, but doable.

Change-Id: I6f3b00d620e7d7d19cc05ec4239deeb14d0d5201
üst 10f8d245
......@@ -654,6 +654,8 @@
#define SC_UNONAME_INCLUDEHIDDENCELLS "IncludeHiddenCells"
#define SC_UNONAME_HIDDENVALUES "HiddenValues"
#define SC_UNONAME_USE_INTERNAL_DATA_PROVIDER "UseInternalDataProvider"
#define SC_UNONAME_HAS_STRING_LABEL "HasStringLabel"
#define SC_UNONAME_TIME_BASED "TimeBased"
// Solver
#define SC_UNONAME_TIMEOUT "Timeout"
......
......@@ -3526,10 +3526,22 @@ uno::Any SAL_CALL ScChart2DataSequence::getPropertyValue(const OUString& rProper
BuildDataCache();
aRet <<= m_aHiddenValues;
}
else if (rPropertyName == "TimeBased")
else if (rPropertyName == SC_UNONAME_TIME_BASED)
{
aRet <<= mbTimeBased;
}
else if (rPropertyName == SC_UNONAME_HAS_STRING_LABEL)
{
// Read-only property. It returns whether or not the label value is a
// direct user input, rather than an indirect reference.
bool bHasStringLabel = false;
if (m_pTokens->size() == 1)
{
const ScToken& rToken = *(*m_pTokens)[0];
bHasStringLabel = rToken.GetType() == formula::svString;
}
aRet <<= bHasStringLabel;
}
else
throw beans::UnknownPropertyException();
// TODO: support optional properties
......
......@@ -2565,7 +2565,6 @@ void SchXMLExportHelper_Impl::exportSeries(
OUString aFirstXDomainRange;
OUString aFirstYDomainRange;
bool modifyLabelRange = false;
std::vector< XMLPropertyState > aPropertyStates;
......@@ -2711,28 +2710,36 @@ void SchXMLExportHelper_Impl::exportSeries(
// #i75297# allow empty series, export empty range to have all ranges on import
mrExport.AddAttribute( XML_NAMESPACE_CHART, XML_VALUES_CELL_RANGE_ADDRESS, OUString());
if( xLabelSeq.is()) {
OUString aRange = xLabelSeq->getSourceRangeRepresentation();
if ( nSeriesIdx == 0 && aRange.equalsAscii("label 1"))
modifyLabelRange = true;
if (modifyLabelRange)
aRange = "label " + OUString::number(aRange.copy( OUString("label").getLength()).toInt32() - 1);
OUString aXMLRange = lcl_ConvertRange( aRange, xNewDoc );
if(aXMLRange.isEmpty() && !aRange.isEmpty())
if (xLabelSeq.is())
{
// might just be a string
bool bIsString = isString(aRange);
if(bIsString)
// Check if the label is direct string value rather than a reference.
bool bHasString = false;
uno::Reference<beans::XPropertySet> xLSProp(xLabelSeq, uno::UNO_QUERY);
if (xLSProp.is())
{
try
{
mrExport.AddAttribute( XML_NAMESPACE_LO_EXT,
XML_LABEL_STRING, aRange );
xLSProp->getPropertyValue("HasStringLabel") >>= bHasString;
}
catch (const beans::UnknownPropertyException&) {}
}
OUString aRange = xLabelSeq->getSourceRangeRepresentation();
if (bHasString)
{
mrExport.AddAttribute(
XML_NAMESPACE_LO_EXT, XML_LABEL_STRING, aRange);
}
else
mrExport.AddAttribute( XML_NAMESPACE_CHART,
XML_LABEL_CELL_ADDRESS, aXMLRange );
{
mrExport.AddAttribute(
XML_NAMESPACE_CHART, XML_LABEL_CELL_ADDRESS,
lcl_ConvertRange(
xLabelSeq->getSourceRangeRepresentation(), xNewDoc));
}
}
if( xLabelSeq.is() || xValuesSeq.is() )
aSeriesLabelValuesPair = tLabelValuesDataPair( xLabelSeq, xValuesSeq );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment